<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 02/16/2018 10:29 AM, Philip Reames
      via llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:4667affd-f0cd-3d48-5fc9-965cabd9fbf5@philipreames.com">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <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>
    </blockquote>
    Other cases I just noticed...<br>
    noreturn -- useful for exception throw wrappers<br>
    allocsize -- useful for allocation wrappers<br>
    writeonly -- useful for AA<br>
    speculatable - useful for speculation, LICM, PRE, etc...<br>
    <br>
    <blockquote type="cite"
      cite="mid:4667affd-f0cd-3d48-5fc9-965cabd9fbf5@philipreames.com">
      <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>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>