[PATCH] D49049: [LSR] If no Use is interesting, early return.

Tim Shen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 9 15:06:40 PDT 2018


timshen updated this revision to Diff 154710.
timshen added a comment.

Added test case.


https://reviews.llvm.org/D49049

Files:
  llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
  llvm/test/CodeGen/X86/lsr-crash-empty-uses.ll


Index: llvm/test/CodeGen/X86/lsr-crash-empty-uses.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/X86/lsr-crash-empty-uses.ll
@@ -0,0 +1,41 @@
+; RUN: llc --start-before loop-reduce --stop-after loop-reduce %s -o - | FileCheck %s
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK-LABEL: @Foo
+define void @Foo() {
+entry:
+  %idx.ext130 = sext i32 undef to i64
+  %idx.neg = sub nsw i64 0, %idx.ext130
+  br label %for.body119
+
+for.body119:                                      ; preds = %_ZSt10accumulateIPddET0_T_S2_S1_.exit138, %entry
+  %add.ptr129 = getelementptr inbounds double, double* undef, i64 undef
+  %add.ptr131 = getelementptr inbounds double, double* %add.ptr129, i64 %idx.neg
+  br label %for.body.i136.prol
+
+for.body.i136.prol:                               ; preds = %for.body.i136.prol, %for.body119
+  %__first.addr.04.i132.prol = phi double* [ %incdec.ptr.i134.prol, %for.body.i136.prol ], [ %add.ptr131, %for.body119 ]
+  %0 = load double, double* %__first.addr.04.i132.prol
+  %incdec.ptr.i134.prol = getelementptr inbounds double, double* %__first.addr.04.i132.prol, i64 1
+  br i1 true, label %for.body.i136.prol.loopexit, label %for.body.i136.prol
+
+for.body.i136.prol.loopexit:                      ; preds = %for.body.i136.prol
+  br i1 undef, label %_ZSt10accumulateIPddET0_T_S2_S1_.exit138, label %for.body.i136.preheader
+
+for.body.i136.preheader:                          ; preds = %for.body.i136.prol.loopexit
+  br label %for.body.i136
+
+for.body.i136:                                    ; preds = %for.body.i136.preheader, %for.body.i136
+  %__first.addr.04.i132 = phi double* [ %incdec.ptr.i134.7, %for.body.i136 ], [ %incdec.ptr.i134.prol, %for.body.i136.preheader ]
+  %tmp1 = load double, double* %__first.addr.04.i132, align 8
+  %incdec.ptr.i134 = getelementptr inbounds double, double* %__first.addr.04.i132, i64 1
+  %tmp2 = load double, double* %incdec.ptr.i134, align 8
+  %incdec.ptr.i134.7 = getelementptr inbounds double, double* %__first.addr.04.i132, i64 8
+  br i1 true, label %_ZSt10accumulateIPddET0_T_S2_S1_.exit138.loopexit, label %for.body.i136
+
+_ZSt10accumulateIPddET0_T_S2_S1_.exit138.loopexit: ; preds = %for.body.i136
+  br label %_ZSt10accumulateIPddET0_T_S2_S1_.exit138
+
+_ZSt10accumulateIPddET0_T_S2_S1_.exit138:         ; preds = %_ZSt10accumulateIPddET0_T_S2_S1_.exit138.loopexit, %for.body.i136.prol.loopexit
+  br label %for.body119
+}
Index: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
+++ llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
@@ -5400,7 +5400,9 @@
   CollectFixupsAndInitialFormulae();
   CollectLoopInvariantFixupsAndFormulae();
 
-  assert(!Uses.empty() && "IVUsers reported at least one use");
+  if (Uses.empty())
+    return;
+
   LLVM_DEBUG(dbgs() << "LSR found " << Uses.size() << " uses:\n";
              print_uses(dbgs()));
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49049.154710.patch
Type: text/x-patch
Size: 3022 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180709/fe3b607f/attachment.bin>


More information about the llvm-commits mailing list