<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>