<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>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.</p>
<p><b>Missing Attributes</b></p>
<p>argmemonly - influences AA, particularly relevant for libraries
which wrap build in functions which are annotated, but don't
manually annotate the wrappers</p>
<p>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<br>
</p>
<p>dereferenceable_or_null - see previous</p>
<p>nounwind - currently implemented in PruneEH, missing in new pass
manager -- this one will get fixed in the near future</p>
<p><b>Untrusted Declarations</b></p>
<p>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 declarations. <br>
</p>
<p><b>AlwaysInline and hasExactDefinition</b></p>
<p>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.<br>
</p>
<p>Philip<br>
</p>
</body>
</html>