<div dir="ltr">So, just to make sure i understand our thoughts on this:<div><br></div><div>(and as a preliminary aside, when discussed at the dev meeting, it turns out nobody seems to be using assume anymore for it's original purpose. The only users anyone thought was still using it was for alignment and in the inliner, both of which we probably could just do better without the generality of assume)<br><br><div>Before this patch, assumes effectively acted as barriers.</div><div><br></div><div>That is, they would not be moved, but also, things would not be moved around them, because they were considered to alias.</div><div><br></div><div>Is it okay to effectively move them by moving things around them?<br></div><div><br></div><div>To give a simple example:<br><br></div><div>assume</div><div>A</div><div>B</div><div>C</div><div>D</div><div><br></div><div>we can now move A,B,C,D up</div><div><br></div><div>A</div><div>B</div><div>C</div><div>D</div><div>assume</div><div><br></div><div>Or the inverse.</div><div><br></div><div>Because without more, this patch will enable this to happen.</div><div>(obviously, the right answer to "does it alias" is "no", but i'm asking more whether the world is really ready for that)</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 7, 2016 at 6:21 AM, Chad Rosier <span dir="ltr"><<a href="mailto:mcrosier@codeaurora.org" target="_blank">mcrosier@codeaurora.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This revision was automatically updated to reflect the committed changes.<br>
Closed by commit rL286108: [AliasSetTracker] Make AST smarter about assume intrinsics that don't actually… (authored by mcrosier).<br>
<br>
Changed prior to commit:<br>
  <a href="https://reviews.llvm.org/D26252?vs=76738&id=77028#toc" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D26252?vs=76738&id=77028#toc</a><br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D26252" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D26252</a><br>
<br>
Files:<br>
  llvm/trunk/lib/Analysis/<wbr>AliasSetTracker.cpp<br>
  llvm/trunk/test/Analysis/<wbr>AliasSet/intrinsics.ll<br>
<br>
<br>
Index: llvm/trunk/lib/Analysis/<wbr>AliasSetTracker.cpp<br>
==============================<wbr>==============================<wbr>=======<br>
--- llvm/trunk/lib/Analysis/<wbr>AliasSetTracker.cpp<br>
+++ llvm/trunk/lib/Analysis/<wbr>AliasSetTracker.cpp<br>
<span class="">@@ -413,6 +413,18 @@<br>
 void AliasSetTracker::addUnknown(<wbr>Instruction *Inst) {<br>
   if (isa<DbgInfoIntrinsic>(Inst))<br>
     return; // Ignore DbgInfo Intrinsics.<br>
+<br>
+  if (auto *II = dyn_cast<IntrinsicInst>(Inst)) {<br>
+    // These intrinsics will show up as affecting memory, but they are just<br>
+    // markers.<br>
+    switch (II->getIntrinsicID()) {<br>
+    default:<br>
+      break;<br>
+      // FIXME: Add lifetime/invariant intrinsics (See: PR30807).<br>
+    case Intrinsic::assume:<br>
+      return;<br>
+    }<br>
+  }<br>
   if (!Inst->mayReadOrWriteMemory()<wbr>)<br>
     return; // doesn't alias anything<br>
<br>
</span>Index: llvm/trunk/test/Analysis/<wbr>AliasSet/intrinsics.ll<br>
==============================<wbr>==============================<wbr>=======<br>
--- llvm/trunk/test/Analysis/<wbr>AliasSet/intrinsics.ll<br>
+++ llvm/trunk/test/Analysis/<wbr>AliasSet/intrinsics.ll<br>
<div class="HOEnZb"><div class="h5">@@ -0,0 +1,19 @@<br>
+; RUN: opt -basicaa -print-alias-sets -S -o - < %s 2>&1 | FileCheck %s<br>
+<br>
+; CHECK: Alias sets for function 'test1':<br>
+; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.<br>
+; CHECK:   AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod       Pointers: (i8* %a, 1)<br>
+; CHECK-NOT: 1 Unknown instruction<br>
+; CHECK:   AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod       Pointers: (i8* %b, 1)<br>
+define void @test1(i32 %c) {<br>
+entry:<br>
+  %a = alloca i8, align 1<br>
+  %b = alloca i8, align 1<br>
+  store i8 1, i8* %a, align 1<br>
+  %cond1 = icmp ne i32 %c, 0<br>
+  call void @llvm.assume(i1 %cond1)<br>
+  store i8 1, i8* %b, align 1<br>
+  ret void<br>
+}<br>
+<br>
+declare void @llvm.assume(i1)<br>
<br>
<br>
</div></div></blockquote></div><br></div>