<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">nevermind, i see side effects and stores are already covered by isSafeToMove, so it sounds like the straightforward fix here is to just replace isa<LoadInst> with <span style="color: rgb(49, 89, 93); font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class="">mayReadFromMemory</span>.<br class=""><div class=""><br class=""></div><div class="">—escha<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jan 11, 2018, at 10:46 AM, via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">This definitely doesn’t look right (looking at this because of a regression on our side).<br class=""><br class="">Surely this should include anything that reads memory, not just loads? Also surely stores, too, because of WAW hazards? What about side effecting instructions?<br class=""><br class="">—escha<br class=""><br class=""><blockquote type="cite" class="">On Jun 9, 2017, at 12:31 PM, Phabricator via Phabricator via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:<br class=""><br class="">This revision was automatically updated to reflect the committed changes.<br class="">Closed by commit rL305102: [Sink] Fix predicate in legality check (authored by kfischer).<br class=""><br class="">Changed prior to commit:<br class=""> <a href="https://reviews.llvm.org/D33179?vs=98943&id=102066#toc" class="">https://reviews.llvm.org/D33179?vs=98943&id=102066#toc</a><br class=""><br class="">Repository:<br class=""> rL LLVM<br class=""><br class=""><a href="https://reviews.llvm.org/D33179" class="">https://reviews.llvm.org/D33179</a><br class=""><br class="">Files:<br class=""> llvm/trunk/lib/Transforms/Scalar/Sink.cpp<br class=""> llvm/trunk/test/Transforms/Sink/badloadsink.ll<br class=""><br class=""><br class="">Index: llvm/trunk/lib/Transforms/Scalar/Sink.cpp<br class="">===================================================================<br class="">--- llvm/trunk/lib/Transforms/Scalar/Sink.cpp<br class="">+++ llvm/trunk/lib/Transforms/Scalar/Sink.cpp<br class="">@@ -114,7 +114,7 @@<br class="">  if (SuccToSinkTo->getUniquePredecessor() != Inst->getParent()) {<br class="">    // We cannot sink a load across a critical edge - there may be stores in<br class="">    // other code paths.<br class="">-    if (!isSafeToSpeculativelyExecute(Inst))<br class="">+    if (isa<LoadInst>(Inst))<br class="">      return false;<br class=""><br class="">    // We don't want to sink across a critical edge if we don't dominate the<br class="">Index: llvm/trunk/test/Transforms/Sink/badloadsink.ll<br class="">===================================================================<br class="">--- llvm/trunk/test/Transforms/Sink/badloadsink.ll<br class="">+++ llvm/trunk/test/Transforms/Sink/badloadsink.ll<br class="">@@ -0,0 +1,18 @@<br class="">+; RUN: opt < %s -basicaa -sink -S | FileCheck %s<br class="">+declare void @foo(i64 *)<br class="">+define i64 @sinkload(i1 %cmp) {<br class="">+; CHECK-LABEL: @sinkload<br class="">+top:<br class="">+    %a = alloca i64<br class="">+; CHECK: call void @foo(i64* %a)<br class="">+; CHECK-NEXT: %x = load i64, i64* %a<br class="">+    call void @foo(i64* %a)<br class="">+    %x = load i64, i64* %a<br class="">+    br i1 %cmp, label %A, label %B<br class="">+A:<br class="">+    store i64 0, i64 *%a<br class="">+    br label %B<br class="">+B:<br class="">+; CHECK-NOT: load i64, i64 *%a<br class="">+    ret i64 %x<br class="">+}<br class=""><br class=""><br class=""><D33179.102066.patch>_______________________________________________<br class="">llvm-commits mailing list<br class="">llvm-commits@lists.llvm.org<br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></blockquote><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></div></blockquote></div><br class=""></div></body></html>