[llvm] r337072 - [LSR] If no Use is interesting, early return.

Tim Shen via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 13 16:40:00 PDT 2018


Author: timshen
Date: Fri Jul 13 16:40:00 2018
New Revision: 337072

URL: http://llvm.org/viewvc/llvm-project?rev=337072&view=rev
Log:
[LSR] If no Use is interesting, early return.

Summary:
By looking at the callers of getUse(), we can see that even though
IVUsers may offer uses, but they may not be interesting to
LSR. It's possible that none of them is interesting.

Reviewers: sanjoy

Subscribers: jlebar, hiraditya, bixia, llvm-commits

Differential Revision: https://reviews.llvm.org/D49049

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

Modified: llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp?rev=337072&r1=337071&r2=337072&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp Fri Jul 13 16:40:00 2018
@@ -5400,7 +5400,9 @@ LSRInstance::LSRInstance(Loop *L, IVUser
   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()));
 

Added: llvm/trunk/test/CodeGen/X86/lsr-crash-empty-uses.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/lsr-crash-empty-uses.ll?rev=337072&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/lsr-crash-empty-uses.ll (added)
+++ llvm/trunk/test/CodeGen/X86/lsr-crash-empty-uses.ll Fri Jul 13 16:40:00 2018
@@ -0,0 +1,41 @@
+; RUN: llc --start-before loop-reduce --stop-after loop-reduce %s -o - | FileCheck %s
+target datalayout = "e-m:e-p:32:32-i64:64-n32-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @hoge() {
+bb:
+  %tmp = sext i32 undef to i64
+  %tmp3 = sub nsw i64 0, %tmp
+  br label %bb4
+
+bb4:                                              ; preds = %bb20, %bb
+  %tmp5 = getelementptr inbounds double, double* undef, i64 undef
+  %tmp6 = getelementptr inbounds double, double* %tmp5, i64 %tmp3
+  br label %bb7
+
+bb7:                                              ; preds = %bb7, %bb4
+  %tmp8 = phi double* [ %tmp10, %bb7 ], [ %tmp6, %bb4 ]
+  %tmp9 = load double, double* %tmp8
+  %tmp10 = getelementptr inbounds double, double* %tmp8, i64 1
+  br i1 true, label %bb11, label %bb7
+
+bb11:                                             ; preds = %bb7
+  br i1 undef, label %bb20, label %bb12
+
+bb12:                                             ; preds = %bb11
+  br label %bb13
+
+bb13:                                             ; preds = %bb13, %bb12
+  %tmp14 = phi double* [ %tmp18, %bb13 ], [ %tmp10, %bb12 ]
+  %tmp15 = load double, double* %tmp14, align 8
+  %tmp16 = getelementptr inbounds double, double* %tmp14, i64 1
+  %tmp17 = load double, double* %tmp16, align 8
+  %tmp18 = getelementptr inbounds double, double* %tmp14, i64 8
+  br i1 true, label %bb19, label %bb13
+
+bb19:                                             ; preds = %bb13
+  br label %bb20
+
+bb20:                                             ; preds = %bb19, %bb11
+  br label %bb4
+}




More information about the llvm-commits mailing list