Skip to content

Commit ef6f235

Browse files
committed
Revert "[InstCombine] use loop info when running the pass after loop vectorization"
This reverts commit 43ae4b6. This was intended to be practically NFC in terms of the overall opt pipeline, but there is experimental data showing that code changes occurred here: https://llvm-compile-time-tracker.com/compare.php?from=772aa05452f8ff90a47168e6801cda2acb5a1873&to=43ae4b62b2671cf73e691c0b53324cd39405cd51&stat=size-text
1 parent 8a386b2 commit ef6f235

File tree

8 files changed

+24
-35
lines changed

8 files changed

+24
-35
lines changed

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,7 +1117,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
11171117
FPM.addPass(LoopLoadEliminationPass());
11181118
}
11191119
// Cleanup after the loop optimization passes.
1120-
FPM.addPass(InstCombinePass(InstCombineOptions().setUseLoopInfo(true)));
1120+
FPM.addPass(InstCombinePass());
11211121

11221122
if (Level.getSpeedupLevel() > 1 && ExtraVectorizerPasses) {
11231123
ExtraVectorPassManager ExtraPasses;
@@ -1129,8 +1129,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
11291129
// dead (or speculatable) control flows or more combining opportunities.
11301130
ExtraPasses.addPass(EarlyCSEPass());
11311131
ExtraPasses.addPass(CorrelatedValuePropagationPass());
1132-
ExtraPasses.addPass(
1133-
InstCombinePass(InstCombineOptions().setUseLoopInfo(true)));
1132+
ExtraPasses.addPass(InstCombinePass());
11341133
LoopPassManager LPM;
11351134
LPM.addPass(LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
11361135
/*AllowSpeculation=*/true));
@@ -1204,7 +1203,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
12041203
// or SimplifyCFG passes scheduled after us, that would cleanup
12051204
// the CFG mess this may created if allowed to modify CFG, so forbid that.
12061205
FPM.addPass(SROAPass(SROAOptions::PreserveCFG));
1207-
FPM.addPass(InstCombinePass(InstCombineOptions().setUseLoopInfo(true)));
1206+
FPM.addPass(InstCombinePass());
12081207
FPM.addPass(
12091208
RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function>());
12101209
FPM.addPass(createFunctionToLoopPassAdaptor(
@@ -1218,7 +1217,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
12181217
FPM.addPass(AlignmentFromAssumptionsPass());
12191218

12201219
if (IsFullLTO)
1221-
FPM.addPass(InstCombinePass(InstCombineOptions().setUseLoopInfo(true)));
1220+
FPM.addPass(InstCombinePass());
12221221
}
12231222

12241223
ModulePassManager

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4651,9 +4651,10 @@ PreservedAnalyses InstCombinePass::run(Function &F,
46514651
auto &ORE = AM.getResult<OptimizationRemarkEmitterAnalysis>(F);
46524652
auto &TTI = AM.getResult<TargetIRAnalysis>(F);
46534653

4654-
// Only use LoopInfo when the option is set by callers.
4655-
LoopInfo *LI = nullptr;
4656-
if (Options.UseLoopInfo)
4654+
// TODO: Only use LoopInfo when the option is set. This requires that the
4655+
// callers in the pass pipeline explicitly set the option.
4656+
auto *LI = AM.getCachedResult<LoopAnalysis>(F);
4657+
if (!LI && Options.UseLoopInfo)
46574658
LI = &AM.getResult<LoopAnalysis>(F);
46584659

46594660
auto *AA = &AM.getResult<AAManager>(F);

llvm/test/Transforms/InstCombine/constant-fold-gep.ll

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt < %s -passes='instcombine' -S | FileCheck %s --check-prefixes=CHECK,NOLOOPINFO
3-
; RUN: opt < %s -passes='instcombine<use-loop-info>' -S | FileCheck %s --check-prefixes=CHECK,LOOPINFO
4-
2+
; RUN: opt < %s -passes='require<loops>,instcombine' -S | FileCheck %s
53
target datalayout = "E-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64"
64

75
; Constant folding should fix notionally out-of-bounds indices
@@ -160,22 +158,13 @@ define ptr @gep_plus_addr_sub_self(i64 %addr) {
160158
}
161159

162160
define ptr @gep_plus_addr_sub_self_in_loop() {
163-
; NOLOOPINFO-LABEL: @gep_plus_addr_sub_self_in_loop(
164-
; NOLOOPINFO-NEXT: br label [[LOOP:%.*]]
165-
; NOLOOPINFO: loop:
166-
; NOLOOPINFO-NEXT: [[ADDR:%.*]] = call i64 @get.i64()
167-
; NOLOOPINFO-NEXT: [[P1:%.*]] = getelementptr i8, ptr @g, i64 [[ADDR]]
168-
; NOLOOPINFO-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P1]], i64 sub (i64 0, i64 ptrtoint (ptr @g to i64))
169-
; NOLOOPINFO-NEXT: call void @use.ptr(ptr [[P2]])
170-
; NOLOOPINFO-NEXT: br label [[LOOP]]
171-
;
172-
; LOOPINFO-LABEL: @gep_plus_addr_sub_self_in_loop(
173-
; LOOPINFO-NEXT: br label [[LOOP:%.*]]
174-
; LOOPINFO: loop:
175-
; LOOPINFO-NEXT: [[ADDR:%.*]] = call i64 @get.i64()
176-
; LOOPINFO-NEXT: [[P2:%.*]] = getelementptr i8, ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoint (ptr @g to i64))), i64 [[ADDR]]
177-
; LOOPINFO-NEXT: call void @use.ptr(ptr [[P2]])
178-
; LOOPINFO-NEXT: br label [[LOOP]]
161+
; CHECK-LABEL: @gep_plus_addr_sub_self_in_loop(
162+
; CHECK-NEXT: br label [[LOOP:%.*]]
163+
; CHECK: loop:
164+
; CHECK-NEXT: [[ADDR:%.*]] = call i64 @get.i64()
165+
; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoint (ptr @g to i64))), i64 [[ADDR]]
166+
; CHECK-NEXT: call void @use.ptr(ptr [[P2]])
167+
; CHECK-NEXT: br label [[LOOP]]
179168
;
180169
%p.int = ptrtoint ptr @g to i64
181170
%p.int.neg = sub i64 0, %p.int

llvm/test/Transforms/LoopVectorize/ARM/mve-reductions.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -passes='loop-vectorize,instcombine<use-loop-info>,simplifycfg' -simplifycfg-require-and-preserve-domtree=1 -tail-predication=enabled < %s -S -o - | FileCheck %s
2+
; RUN: opt -passes=loop-vectorize,instcombine,simplifycfg -simplifycfg-require-and-preserve-domtree=1 -tail-predication=enabled < %s -S -o - | FileCheck %s
33

44
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
55
target triple = "thumbv8.1m.main-arm-none-eabi"

llvm/test/Transforms/LoopVectorize/X86/x86-interleaved-accesses-masked-group.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -mcpu=skx -S -passes='loop-vectorize,instcombine<use-loop-info>,simplifycfg' -simplifycfg-require-and-preserve-domtree=1 -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=DISABLED_MASKED_STRIDED
3-
; RUN: opt -mcpu=skx -S -passes='loop-vectorize,instcombine<use-loop-info>,simplifycfg' -simplifycfg-require-and-preserve-domtree=1 -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses -enable-masked-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=ENABLED_MASKED_STRIDED
2+
; RUN: opt -mcpu=skx -S -passes=loop-vectorize,instcombine,simplifycfg -simplifycfg-require-and-preserve-domtree=1 -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=DISABLED_MASKED_STRIDED
3+
; RUN: opt -mcpu=skx -S -passes=loop-vectorize,instcombine,simplifycfg -simplifycfg-require-and-preserve-domtree=1 -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses -enable-masked-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=ENABLED_MASKED_STRIDED
44

55
target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
66
target triple = "i386-unknown-linux-gnu"

llvm/test/Transforms/LoopVectorize/X86/x86-interleaved-store-accesses-with-gaps.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -mcpu=skx -S -passes='loop-vectorize,instcombine<use-loop-info>,simplifycfg,loop-mssa(licm)' -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses -prefer-predicate-over-epilogue=predicate-dont-vectorize < %s | FileCheck %s -check-prefix=DISABLED_MASKED_STRIDED
3-
; RUN: opt -mcpu=skx -S -passes='loop-vectorize,instcombine<use-loop-info>,simplifycfg,loop-mssa(licm)' -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses -enable-masked-interleaved-mem-accesses -prefer-predicate-over-epilogue=predicate-dont-vectorize < %s | FileCheck %s -check-prefix=ENABLED_MASKED_STRIDED
2+
; RUN: opt -mcpu=skx -S -passes='loop-vectorize,instcombine,simplifycfg,loop-mssa(licm)' -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses -prefer-predicate-over-epilogue=predicate-dont-vectorize < %s | FileCheck %s -check-prefix=DISABLED_MASKED_STRIDED
3+
; RUN: opt -mcpu=skx -S -passes='loop-vectorize,instcombine,simplifycfg,loop-mssa(licm)' -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses -enable-masked-interleaved-mem-accesses -prefer-predicate-over-epilogue=predicate-dont-vectorize < %s | FileCheck %s -check-prefix=ENABLED_MASKED_STRIDED
44

55
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
66
target triple = "x86_64-unknown-linux-gnu"

llvm/test/Transforms/LoopVectorize/consecutive-ptr-uniforms.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; REQUIRES: asserts
2-
; RUN: opt -opaque-pointers=0 < %s -passes='loop-vectorize,instcombine<use-loop-info>' -force-vector-width=4 -force-vector-interleave=1 -debug-only=loop-vectorize -disable-output -print-after=instcombine 2>&1 | FileCheck %s
3-
; RUN: opt -opaque-pointers=0 < %s -passes='loop-vectorize,instcombine<use-loop-info>' -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses -debug-only=loop-vectorize -disable-output -print-after=instcombine 2>&1 | FileCheck %s --check-prefix=INTER
2+
; RUN: opt -opaque-pointers=0 < %s -passes=loop-vectorize,instcombine -force-vector-width=4 -force-vector-interleave=1 -debug-only=loop-vectorize -disable-output -print-after=instcombine 2>&1 | FileCheck %s
3+
; RUN: opt -opaque-pointers=0 < %s -passes=loop-vectorize,instcombine -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses -debug-only=loop-vectorize -disable-output -print-after=instcombine 2>&1 | FileCheck %s --check-prefix=INTER
44

55
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
66

llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -opaque-pointers=0 -S -passes='loop-vectorize,instcombine<use-loop-info>' -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses=true -runtime-memory-check-threshold=24 < %s | FileCheck %s
2+
; RUN: opt -opaque-pointers=0 -S -passes=loop-vectorize,instcombine -force-vector-width=4 -force-vector-interleave=1 -enable-interleaved-mem-accesses=true -runtime-memory-check-threshold=24 < %s | FileCheck %s
33

44
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
55

0 commit comments

Comments
 (0)