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