@@ -234,6 +234,7 @@ class InductiveRangeCheck {
234234class InductiveRangeCheckElimination {
235235 ScalarEvolution &SE;
236236 BranchProbabilityInfo *BPI;
237+ TargetTransformInfo &TTI;
237238 DominatorTree &DT;
238239 LoopInfo &LI;
239240
@@ -248,9 +249,9 @@ class InductiveRangeCheckElimination {
248249
249250public:
250251 InductiveRangeCheckElimination (ScalarEvolution &SE,
251- BranchProbabilityInfo *BPI, DominatorTree &DT,
252+ BranchProbabilityInfo *BPI, TargetTransformInfo &TTI, DominatorTree &DT,
252253 LoopInfo &LI, GetBFIFunc GetBFI = std::nullopt )
253- : SE(SE), BPI(BPI), DT(DT), LI(LI), GetBFI(GetBFI) {}
254+ : SE(SE), BPI(BPI), TTI(TTI), DT(DT), LI(LI), GetBFI(GetBFI) {}
254255
255256 bool run (Loop *L, function_ref<void (Loop *, bool )> LPMAddNewLoop);
256257};
@@ -900,6 +901,7 @@ IntersectUnsignedRange(ScalarEvolution &SE,
900901
901902PreservedAnalyses IRCEPass::run (Function &F, FunctionAnalysisManager &AM) {
902903 auto &DT = AM.getResult <DominatorTreeAnalysis>(F);
904+ auto &TTI = AM.getResult <TargetIRAnalysis>(F);
903905 LoopInfo &LI = AM.getResult <LoopAnalysis>(F);
904906 // There are no loops in the function. Return before computing other expensive
905907 // analyses.
@@ -913,14 +915,14 @@ PreservedAnalyses IRCEPass::run(Function &F, FunctionAnalysisManager &AM) {
913915 auto getBFI = [&F, &AM ]()->BlockFrequencyInfo & {
914916 return AM.getResult <BlockFrequencyAnalysis>(F);
915917 };
916- InductiveRangeCheckElimination IRCE (SE, &BPI, DT, LI, { getBFI });
918+ InductiveRangeCheckElimination IRCE (SE, &BPI, TTI, DT, LI, { getBFI });
917919
918920 bool Changed = false ;
919921 {
920922 bool CFGChanged = false ;
921923 for (const auto &L : LI) {
922924 CFGChanged |= simplifyLoop (L, &DT, &LI, &SE, nullptr , nullptr ,
923- /* PreserveLCSSA=*/ false );
925+ &TTI, /* PreserveLCSSA=*/ false );
924926 Changed |= formLCSSARecursively (*L, DT, &LI, &SE);
925927 }
926928 Changed |= CFGChanged;
@@ -1080,7 +1082,7 @@ bool InductiveRangeCheckElimination::run(
10801082 return false ;
10811083 }
10821084
1083- LoopConstrainer LC (*L, LI, LPMAddNewLoop, LS, SE, DT,
1085+ LoopConstrainer LC (*L, LI, LPMAddNewLoop, LS, SE, TTI, DT,
10841086 SafeIterRange->getBegin ()->getType (), *MaybeSR);
10851087
10861088 if (LC.run ()) {
0 commit comments