Skip to content

Commit 7f8e279

Browse files
committed
moved sink between sink and hoist
1 parent 5f1fd21 commit 7f8e279

File tree

3 files changed

+9
-10
lines changed

3 files changed

+9
-10
lines changed

llvm/lib/Transforms/Scalar/LICM.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,12 @@ bool LoopInvariantCodeMotion::runOnLoop(Loop *L, AAResults *AA, LoopInfo *LI,
479479
TLI, TTI, L, MSSAU, &SafetyInfo, Flags, ORE)
480480
: sinkRegion(DT->getNode(L->getHeader()), AA, LI, DT, TLI, TTI, L,
481481
MSSAU, &SafetyInfo, Flags, ORE);
482+
483+
// sink pre-header defs that are unused in-loop into the unique exit to reduce
484+
// pressure.
485+
Changed |= sinkUnusedInvariantsFromPreheaderToExit(L, AA, &SafetyInfo, MSSAU,
486+
SE, DT, Flags, ORE);
487+
482488
Flags.setIsSink(false);
483489
if (Preheader)
484490
Changed |= hoistRegion(DT->getNode(L->getHeader()), AA, LI, DT, AC, TLI, L,
@@ -551,18 +557,11 @@ bool LoopInvariantCodeMotion::runOnLoop(Loop *L, AAResults *AA, LoopInfo *LI,
551557
assert((L->isOutermost() || L->getParentLoop()->isLCSSAForm(*DT)) &&
552558
"Parent loop not left in LCSSA form after LICM!");
553559

554-
// sink pre-header defs that are unused in-loop into the unique exit to reduce
555-
// pressure.
556-
Flags.setIsSink(true);
557-
Changed |= sinkUnusedInvariantsFromPreheaderToExit(L, AA, &SafetyInfo, MSSAU,
558-
SE, DT, Flags, ORE);
559-
560560
if (VerifyMemorySSA)
561561
MSSA->verifyMemorySSA();
562562

563563
if (Changed && SE)
564564
SE->forgetLoopDispositions();
565-
566565
return Changed;
567566
}
568567

llvm/test/Transforms/LICM/scalar-promote.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ define void @test2(i32 %i) {
4444
; CHECK-SAME: i32 [[I:%.*]]) {
4545
; CHECK-NEXT: [[ENTRY:.*]]:
4646
; CHECK-NEXT: [[X2:%.*]] = getelementptr i32, ptr @X, i64 1
47+
; CHECK-NEXT: [[X3:%.*]] = getelementptr i32, ptr @X, i64 1
4748
; CHECK-NEXT: [[X1_PROMOTED:%.*]] = load i32, ptr [[X2]], align 4
4849
; CHECK-NEXT: br label %[[LOOP:.*]]
4950
; CHECK: [[LOOP]]:
@@ -52,7 +53,6 @@ define void @test2(i32 %i) {
5253
; CHECK-NEXT: br i1 false, label %[[LOOP]], label %[[EXIT:.*]]
5354
; CHECK: [[EXIT]]:
5455
; CHECK-NEXT: [[V_LCSSA:%.*]] = phi i32 [ [[V]], %[[LOOP]] ]
55-
; CHECK-NEXT: [[X3:%.*]] = getelementptr i32, ptr @X, i64 1
5656
; CHECK-NEXT: store i32 [[V_LCSSA]], ptr [[X2]], align 4
5757
; CHECK-NEXT: ret void
5858
;

llvm/test/Transforms/LICM/sink-from-preheader.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ exit:
6363
define i32 @test_with_unused_load_modified_store(i32 %a, ptr %b, i32 %N) {
6464
; CHECK-LABEL: @test_with_unused_load_modified_store(
6565
; CHECK-NEXT: entry:
66+
; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr [[B:%.*]], align 4
6667
; CHECK-NEXT: br label [[LOOP:%.*]]
6768
; CHECK: loop:
6869
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
@@ -71,9 +72,8 @@ define i32 @test_with_unused_load_modified_store(i32 %a, ptr %b, i32 %N) {
7172
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
7273
; CHECK: exit:
7374
; CHECK-NEXT: [[SMAX:%.*]] = phi i32 [ [[IV_NEXT]], [[LOOP]] ]
74-
; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr [[B:%.*]], align 4
75-
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A]], [[LOAD]]
7675
; CHECK-NEXT: store i32 [[SMAX]], ptr [[B]], align 4
76+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A]], [[LOAD]]
7777
; CHECK-NEXT: ret i32 [[ADD]]
7878
;
7979
entry:

0 commit comments

Comments
 (0)