[llvm] r257112 - Instructions to be redone only if from the same BB

Aditya Nandakumar via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 7 15:22:55 PST 2016


Author: aditya_nandakumar
Date: Thu Jan  7 17:22:55 2016
New Revision: 257112

URL: http://llvm.org/viewvc/llvm-project?rev=257112&view=rev
Log:
Instructions to be redone only if from the same BB

While adding instructions(possible roots) to be redone, make sure they
are from the same basic block.

Added:
    llvm/trunk/test/Transforms/Reassociate/add_across_block_crash.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp?rev=257112&r1=257111&r2=257112&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp Thu Jan  7 17:22:55 2016
@@ -2155,7 +2155,8 @@ void Reassociate::OptimizeInst(Instructi
     // During the initial run we will get to the root of the tree.
     // But if we get here while we are redoing instructions, there is no
     // guarantee that the root will be visited. So Redo later
-    if (BO->user_back() != BO)
+    if (BO->user_back() != BO &&
+        BO->getParent() == BO->user_back()->getParent())
       RedoInsts.insert(BO->user_back());
     return;
   }

Added: llvm/trunk/test/Transforms/Reassociate/add_across_block_crash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Reassociate/add_across_block_crash.ll?rev=257112&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/Reassociate/add_across_block_crash.ll (added)
+++ llvm/trunk/test/Transforms/Reassociate/add_across_block_crash.ll Thu Jan  7 17:22:55 2016
@@ -0,0 +1,20 @@
+; RUN: opt < %s -reassociate -S | FileCheck %s
+; CHECK-LABEL: main
+; This test is to make sure while processing a block, uses of instructions
+; from a different basic block don't get added to be re-optimized
+define  void @main() {
+entry:
+  %0 = fadd fast float undef, undef
+  br i1 undef, label %bb1, label %bb2
+
+bb1:
+  %1 = fmul fast float undef, -2.000000e+00
+  %2 = fmul fast float %1, 2.000000e+00
+  %3 = fadd fast float %2, 2.000000e+00
+  %4 = fadd fast float %3, %0
+  %mul351 = fmul fast float %4, 5.000000e-01
+  ret void
+
+bb2:
+  ret void
+}




More information about the llvm-commits mailing list