Accessing '__attribute__((noinstrument))' during lowering

Is it possible to find whether a function has the ‘noinstrument’ attribute during Target lowering? I would like to check if this is present on a function quite late in the process when I am performing normal Target lowering and Target Frame lowering actions, but I can’t find the appropriate query in the ‘MachineFunction’ or ‘MachineFunctionInfo’ interfaces.



I imagine you can get the llvm::Function from the MachineFunction, and the attribute will be there (on the llvm::Function), but can’t say I know much about it.

Thanks David,

I have tried ‘MF.getFunction()->hasFnAttribute(Attribute::???)’, but it seems that the front-end ‘NoInstrumentFunction’ attribute is not propagated to the collection of LLVM IR attributes (no equivalent is in the ‘Attribute::AttrKind’ enum). It is not obvious that there is another mechanism, and I suspect that there is not due to the separation between FE processing and LLVM IR.

However, I think that I could add a new IR attribute to the TD file, and set it when emitting IR in the FE depending on the corresponding CLang ‘Decl’ attribute.

All the best and thanks for the pointer,


Right - if the LLVM IR doesn’t have the attribute, you’d have to make whatever changes are needed to add it during Clang’s IR generation. (whether or not such changes are upstreamable - I don’t know/have any opinion on)