[PATCH] D91979: [Clang][Attr] Introduce the `assume` function attribute

Johannes Doerfert via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 9 17:22:48 PST 2020


jdoerfert added a comment.

I added the warning and typo recognition as discussed in IRC. We list known assumption strings in the documentation and SemaDeclAttr. As we add new ones we should include a short description or link to their meaning. The ones I added so far are OpenMP specific (dubbed `omp_XXX`) and the OpenMP standard is given as reference.

In D91979#2440554 <https://reviews.llvm.org/D91979#2440554>, @aaron.ballman wrote:

> Thank you for your patience with the delays getting to your review! Along with the documentation question, one line of thinking I'm also not clear on is whether this should be a type-based attribute rather than a declaration-based attribute. For instance, if you want to write an assumption about the parameters to a function, those are not in scope for a declaration attribute but are for a type attribute.

I would like to see that, in our last proposal of something similar we suggested to add something like `__attribute__((arg_attr(3, "nofree")))` which would translate to the `nofree` IR attribute for argument 3. I can also envision a type based assumption attribute but I feel a declaration one will be needed nevertheless. We'll also add expression assumptions as they are required by OpenMP and generally useful. The "payload" of the assume attribute will then be a union, similar to the `AlignedAttribute`.

> But also, it seems like this assumption information is something that would be useful to carry around as part of the function's identity. For instance, would users want to be able to make a call through a function pointer and have the same set of assumptions conveyed to the backend?

Like other IR attributes, if you can go from the function pointer to a (set of) declaration(s) you can use the attributes from that declaration. I don't think this is any different than other function attributes, e.g., `readnone` in this aspect.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91979/new/

https://reviews.llvm.org/D91979



More information about the cfe-commits mailing list