[llvm-dev] Missing attribute inference cases

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Fri Feb 16 10:29:56 PST 2018

This email is just to summarize a bit of digging I did last night into 
our attribute inference.  Unfortunately, I'm not going to have time to 
implement any of the gaps I noticed, but I figured someone else out 
there might be interested.

*Missing Attributes*

argmemonly - influences AA, particularly relevant for libraries which 
wrap build in functions which are annotated, but don't manually annotate 
the wrappers

dereferenceable - influences speculation safety, this primarily drives 
LICM, but can also effect things like PRE -- probably best to implement 
as a deref_or_nuill analysis and then merge nonnull inference to promote

dereferenceable_or_null - see previous

nounwind - currently implemented in PruneEH, missing in new pass manager 
-- this one will get fixed in the near future

*Untrusted Declarations*

In several cases, we check hasExactDefinition before checking properties 
of the function declaration (such as return type).  To my knowledge, 
facts on declarations are valid even in the place of derefinement.  This 
results in the analysis being unnecessarily conservative around external 

*AlwaysInline and hasExactDefinition*

I believe, but have not fully thought through, that it is legal to IPO 
across an inexact definition boundary if a particularly callsite or 
declaration is marked alwaysinline.  It's not clear this matters since 
we'll eventually inline it anyway, but this might be a compile time 
savings by simplifying callers earlier than otherwise possible.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180216/b30ca871/attachment.html>

More information about the llvm-dev mailing list