Hi Renato,
> I like the changes to IRBuilder and how the operator can't change it.
> Looks a lot safer (mistake-wise) and more convenient.
thanks!
> This function won't to remove a previously set tag, which could be
> used by optimisations or inlining.
This is private to IRBuilder and is only applied to newly created instructions,
thus removing tags is not useful. I guess it could be exposed for general use -
is that what you are suggesting? If so, I think it would be better if MDBuilder
got methods for applying metadata such as:
SetTBAAMetadata(Instruction *I, MDNode *MD);
SetFPMathMetadata(Instruction *I, MDNode *MD);
along with getters. I will add that.
>
> + Instruction *AddFPMathTag(Instruction *I, MDNode *FPMathTag) const {
> + if (!FPMathTag)
> + FPMathTag = DefaultFPMathTag;
> + if (FPMathTag)
> + I->setMetadata(LLVMContext::MD_fpmath, FPMathTag);
> + return I;
> + }
>
> If you want to keep it as only Add, then make FPMathTag = 0 so that
> you can easily add the default by just calling AddFPMathTag(instr);
>
> But I'd add a ClearFPMathTag function for optimisations/inlining. Maybe
later.
See above.
> Also, would be good to make sure the instruction is, in fact, a
> floating point operation. Either via restricting the type or asserting
> on it.
That would be appropriate for MDBuilder - I will do it.
CIao, Duncan.