[llvm] e3c759b - [LoopLoadElim] Pass ScalarEvolution in old pass manager. PR49141

Max Kazantsev via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 15 03:08:39 PST 2021


Author: Max Kazantsev
Date: 2021-02-15T18:08:23+07:00
New Revision: e3c759bd583db3ff71ed6607103f75848287af26

URL: https://github.com/llvm/llvm-project/commit/e3c759bd583db3ff71ed6607103f75848287af26
DIFF: https://github.com/llvm/llvm-project/commit/e3c759bd583db3ff71ed6607103f75848287af26.diff

LOG: [LoopLoadElim] Pass ScalarEvolution in old pass manager. PR49141

Loop canonicalization may end up deleting blocks from CFG. And
Scalar Evolution may still keep cached referenced to those blocks
unless updated properly.

Added: 
    llvm/test/Transforms/LoopLoadElim/pr-49141.ll

Modified: 
    llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
index 058612149a94..e7b5a264e8b1 100644
--- a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
@@ -664,10 +664,11 @@ class LoopLoadElimination : public FunctionPass {
     auto *BFI = (PSI && PSI->hasProfileSummary()) ?
                 &getAnalysis<LazyBlockFrequencyInfoPass>().getBFI() :
                 nullptr;
+    auto *SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE();
 
     // Process each loop nest in the function.
     return eliminateLoadsAcrossLoops(
-        F, LI, DT, BFI, PSI, /*SE*/ nullptr, /*AC*/ nullptr,
+        F, LI, DT, BFI, PSI, SE, /*AC*/ nullptr,
         [&LAA](Loop &L) -> const LoopAccessInfo & { return LAA.getInfo(&L); });
   }
 

diff  --git a/llvm/test/Transforms/LoopLoadElim/pr-49141.ll b/llvm/test/Transforms/LoopLoadElim/pr-49141.ll
new file mode 100644
index 000000000000..df7a97581d6a
--- /dev/null
+++ b/llvm/test/Transforms/LoopLoadElim/pr-49141.ll
@@ -0,0 +1,35 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -indvars -loop-load-elim < %s 2>&1 | FileCheck %s
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @test() {
+; CHECK-LABEL: @test(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
+; CHECK:       for.body:
+; CHECK-NEXT:    [[A_01:%.*]] = phi i16 [ undef, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
+; CHECK-NEXT:    [[INC]] = add nsw i16 [[A_01]], 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i16 [[INC]], 2
+; CHECK-NEXT:    [[OR_COND:%.*]] = and i1 false, [[CMP]]
+; CHECK-NEXT:    br i1 [[OR_COND]], label [[FOR_BODY]], label [[FOR_END:%.*]]
+; CHECK:       for.end:
+; CHECK-NEXT:    ret void
+;
+entry:
+  br label %for.body
+
+for.cond:                                         ; preds = %for.body
+  %a.0 = phi i16 [ %inc, %for.body ]
+  %cmp = icmp sle i16 %a.0, 2
+  br i1 %cmp, label %for.body, label %for.end
+
+for.body:                                         ; preds = %for.cond, %entry
+  %a.01 = phi i16 [ undef, %entry ], [ %a.0, %for.cond ]
+  %inc = add nsw i16 %a.01, 1
+  br i1 false, label %for.cond, label %for.end
+
+for.end:                                          ; preds = %for.body, %for.cond
+  ret void
+}


        


More information about the llvm-commits mailing list