[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