This (work in progress) diff adds three new attributes to clang (attribute((LLVMFN(string))), attribute((LLVMARG(paramidx, string))), attribute((LLVMRET(paramidx, string))) ) for passing attributes down to LLVM.
This is useful for allowing users, tools, or test cases to specify LLVM attributes that may not have a representation in clang.
This is not a GCC attribute, so this needs a different spelling. Also, the all-caps names are a bit obnoxious, so we may want to pick a different name.
Do you envision these being attributes users will write in production code? What kind of guarantees do they have about the stability of the attribute interfaces that LLVM provides? For instance, are we promising that LLVM attributes will remain backwards compatible (e.g., won't be removed or renamed)?