For being able to change subtargets within a compilation unit, among other things, I need to be able to change the target lowering class that is used by BasicTTI For example we have a mips16 and non mips16 version. On the original call that creates this class, I'd like to pass the address of the address of the TargetLoweringBase class. That way I can insert a function pass before this pass which examines the function attributes and changes the pointer. So we would get: ImmutablePass * llvm::createBasicTargetTransformInfoPass(const TargetLoweringBase **TLI_) { return new BasicTTI(TLI); } we would add the variable TargetLoweringBase **TLI_ and at the beginning of each pass TLI = *TLI_; Maybe there is a more elegant way to do this but this is essentially what I need to do.
Another way to do this would to be to have a reset virtual function which is passed the Function, and the address of TLI so that it could be modified. This seems somewhat cleaner. The reset virtual function would be added to base class TargetLoweringBase. On 03/22/2013 09:22 AM, reed kotler wrote:> For being able to change subtargets within a compilation unit, among > other things, I need to be able to change the target lowering class that > is used by BasicTTI > > For example we have a mips16 and non mips16 version. > > On the original call that creates this class, I'd like to pass the > address of the address of the TargetLoweringBase class. > > That way I can insert a function pass before this pass which examines > the function attributes and changes the pointer. > > So we would get: > > ImmutablePass * > llvm::createBasicTargetTransformInfoPass(const TargetLoweringBase **TLI_) { > return new BasicTTI(TLI); > } > > we would add the variable > > TargetLoweringBase **TLI_ > > and at the beginning of each pass > > TLI = *TLI_; > > Maybe there is a more elegant way to do this but this is essentially > what I need to do.
Just realized that BasicTransformInfoClass is an immutable pass. Not sure how to reconcile this with fact that there will be different answers needed depending on the subtarget. Seems like BasicTansformInfoClass should become a function pass that does not modify anything. On 03/22/2013 09:43 AM, Reed Kotler wrote:> Another way to do this would to be to have a reset virtual function > which is passed the Function, and the address of TLI so that it could be > modified. > > This seems somewhat cleaner. > > The reset virtual function would be added to base class TargetLoweringBase. > > > On 03/22/2013 09:22 AM, reed kotler wrote: >> For being able to change subtargets within a compilation unit, among >> other things, I need to be able to change the target lowering class that >> is used by BasicTTI >> >> For example we have a mips16 and non mips16 version. >> >> On the original call that creates this class, I'd like to pass the >> address of the address of the TargetLoweringBase class. >> >> That way I can insert a function pass before this pass which examines >> the function attributes and changes the pointer. >> >> So we would get: >> >> ImmutablePass * >> llvm::createBasicTargetTransformInfoPass(const TargetLoweringBase >> **TLI_) { >> return new BasicTTI(TLI); >> } >> >> we would add the variable >> >> TargetLoweringBase **TLI_ >> >> and at the beginning of each pass >> >> TLI = *TLI_; >> >> Maybe there is a more elegant way to do this but this is essentially >> what I need to do.