@@ -499,18 +499,16 @@ class InnerLoopVectorizer {
499499public:
500500 InnerLoopVectorizer (Loop *OrigLoop, PredicatedScalarEvolution &PSE,
501501 LoopInfo *LI, DominatorTree *DT,
502- const TargetLibraryInfo *TLI,
503502 const TargetTransformInfo *TTI, AssumptionCache *AC,
504- OptimizationRemarkEmitter *ORE, ElementCount VecWidth,
503+ ElementCount VecWidth,
505504 ElementCount MinProfitableTripCount,
506505 unsigned UnrollFactor, LoopVectorizationCostModel *CM,
507506 BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI,
508507 GeneratedRTChecks &RTChecks, VPlan &Plan)
509- : OrigLoop(OrigLoop), PSE(PSE), LI(LI), DT(DT), TLI(TLI), TTI(TTI),
510- AC (AC), ORE(ORE), VF(VecWidth),
511- MinProfitableTripCount(MinProfitableTripCount), UF(UnrollFactor),
512- Builder(PSE.getSE()->getContext()), Cost(CM), BFI(BFI), PSI(PSI),
513- RTChecks(RTChecks), Plan(Plan),
508+ : OrigLoop(OrigLoop), PSE(PSE), LI(LI), DT(DT), TTI(TTI), AC(AC),
509+ VF (VecWidth), MinProfitableTripCount(MinProfitableTripCount),
510+ UF(UnrollFactor), Builder(PSE.getSE()->getContext()), Cost(CM),
511+ BFI(BFI), PSI(PSI), RTChecks(RTChecks), Plan(Plan),
514512 VectorPHVPBB(cast<VPBasicBlock>(
515513 Plan.getVectorLoopRegion()->getSinglePredecessor())) {}
516514
@@ -584,18 +582,12 @@ class InnerLoopVectorizer {
584582 // / Dominator Tree.
585583 DominatorTree *DT;
586584
587- // / Target Library Info.
588- const TargetLibraryInfo *TLI;
589-
590585 // / Target Transform Info.
591586 const TargetTransformInfo *TTI;
592587
593588 // / Assumption Cache.
594589 AssumptionCache *AC;
595590
596- // / Interface to emit optimization remarks.
597- OptimizationRemarkEmitter *ORE;
598-
599591 // / The vectorization SIMD factor to use. Each vector will have this many
600592 // / vector elements.
601593 ElementCount VF;
@@ -617,9 +609,6 @@ class InnerLoopVectorizer {
617609 // / The scalar-loop preheader.
618610 BasicBlock *LoopScalarPreHeader = nullptr ;
619611
620- // / Middle Block between the vector and the scalar.
621- BasicBlock *LoopMiddleBlock = nullptr ;
622-
623612 // / Trip count of the original loop.
624613 Value *TripCount = nullptr ;
625614
@@ -684,14 +673,12 @@ class InnerLoopAndEpilogueVectorizer : public InnerLoopVectorizer {
684673public:
685674 InnerLoopAndEpilogueVectorizer (
686675 Loop *OrigLoop, PredicatedScalarEvolution &PSE, LoopInfo *LI,
687- DominatorTree *DT, const TargetLibraryInfo *TLI,
688- const TargetTransformInfo *TTI, AssumptionCache *AC,
689- OptimizationRemarkEmitter *ORE, EpilogueLoopVectorizationInfo &EPI,
690- LoopVectorizationCostModel *CM, BlockFrequencyInfo *BFI,
691- ProfileSummaryInfo *PSI, GeneratedRTChecks &Checks, VPlan &Plan,
692- ElementCount VecWidth, ElementCount MinProfitableTripCount,
693- unsigned UnrollFactor)
694- : InnerLoopVectorizer(OrigLoop, PSE, LI, DT, TLI, TTI, AC, ORE, VecWidth,
676+ DominatorTree *DT, const TargetTransformInfo *TTI, AssumptionCache *AC,
677+ EpilogueLoopVectorizationInfo &EPI, LoopVectorizationCostModel *CM,
678+ BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI,
679+ GeneratedRTChecks &Checks, VPlan &Plan, ElementCount VecWidth,
680+ ElementCount MinProfitableTripCount, unsigned UnrollFactor)
681+ : InnerLoopVectorizer(OrigLoop, PSE, LI, DT, TTI, AC, VecWidth,
695682 MinProfitableTripCount, UnrollFactor, CM, BFI, PSI,
696683 Checks, Plan),
697684 EPI (EPI) {}
@@ -721,16 +708,17 @@ class InnerLoopAndEpilogueVectorizer : public InnerLoopVectorizer {
721708// / epilogues.
722709class EpilogueVectorizerMainLoop : public InnerLoopAndEpilogueVectorizer {
723710public:
724- EpilogueVectorizerMainLoop (
725- Loop *OrigLoop, PredicatedScalarEvolution &PSE, LoopInfo *LI,
726- DominatorTree *DT, const TargetLibraryInfo *TLI,
727- const TargetTransformInfo *TTI, AssumptionCache *AC,
728- OptimizationRemarkEmitter *ORE, EpilogueLoopVectorizationInfo &EPI,
729- LoopVectorizationCostModel *CM, BlockFrequencyInfo *BFI,
730- ProfileSummaryInfo *PSI, GeneratedRTChecks &Check, VPlan &Plan)
731- : InnerLoopAndEpilogueVectorizer(
732- OrigLoop, PSE, LI, DT, TLI, TTI, AC, ORE, EPI, CM, BFI, PSI, Check,
733- Plan, EPI.MainLoopVF, EPI.MainLoopVF, EPI.MainLoopUF) {}
711+ EpilogueVectorizerMainLoop (Loop *OrigLoop, PredicatedScalarEvolution &PSE,
712+ LoopInfo *LI, DominatorTree *DT,
713+ const TargetTransformInfo *TTI,
714+ AssumptionCache *AC,
715+ EpilogueLoopVectorizationInfo &EPI,
716+ LoopVectorizationCostModel *CM,
717+ BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI,
718+ GeneratedRTChecks &Check, VPlan &Plan)
719+ : InnerLoopAndEpilogueVectorizer(OrigLoop, PSE, LI, DT, TTI, AC, EPI, CM,
720+ BFI, PSI, Check, Plan, EPI.MainLoopVF,
721+ EPI.MainLoopVF, EPI.MainLoopUF) {}
734722 // / Implements the interface for creating a vectorized skeleton using the
735723 // / *main loop* strategy (ie the first pass of vplan execution).
736724 BasicBlock *createEpilogueVectorizedLoopSkeleton () final ;
@@ -751,14 +739,13 @@ class EpilogueVectorizerEpilogueLoop : public InnerLoopAndEpilogueVectorizer {
751739public:
752740 EpilogueVectorizerEpilogueLoop (
753741 Loop *OrigLoop, PredicatedScalarEvolution &PSE, LoopInfo *LI,
754- DominatorTree *DT, const TargetLibraryInfo *TLI,
755- const TargetTransformInfo *TTI, AssumptionCache *AC,
756- OptimizationRemarkEmitter *ORE, EpilogueLoopVectorizationInfo &EPI,
757- LoopVectorizationCostModel *CM, BlockFrequencyInfo *BFI,
758- ProfileSummaryInfo *PSI, GeneratedRTChecks &Checks, VPlan &Plan)
759- : InnerLoopAndEpilogueVectorizer(
760- OrigLoop, PSE, LI, DT, TLI, TTI, AC, ORE, EPI, CM, BFI, PSI, Checks,
761- Plan, EPI.EpilogueVF, EPI.EpilogueVF, EPI.EpilogueUF) {
742+ DominatorTree *DT, const TargetTransformInfo *TTI, AssumptionCache *AC,
743+ EpilogueLoopVectorizationInfo &EPI, LoopVectorizationCostModel *CM,
744+ BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI,
745+ GeneratedRTChecks &Checks, VPlan &Plan)
746+ : InnerLoopAndEpilogueVectorizer(OrigLoop, PSE, LI, DT, TTI, AC, EPI, CM,
747+ BFI, PSI, Checks, Plan, EPI.EpilogueVF,
748+ EPI.EpilogueVF, EPI.EpilogueUF) {
762749 TripCount = EPI.TripCount ;
763750 }
764751 // / Implements the interface for creating a vectorized skeleton using the
@@ -9475,8 +9462,8 @@ static bool processLoopInVPlanNativePath(
94759462
94769463 {
94779464 GeneratedRTChecks Checks (PSE, DT, LI, TTI, F->getDataLayout (), CM.CostKind );
9478- InnerLoopVectorizer LB (L, PSE, LI, DT, TLI, TTI, AC, ORE , VF.Width ,
9479- VF. Width , 1 , &CM, BFI, PSI, Checks, BestPlan);
9465+ InnerLoopVectorizer LB (L, PSE, LI, DT, TTI, AC, VF. Width , VF.Width , 1 , &CM ,
9466+ BFI, PSI, Checks, BestPlan);
94809467 LLVM_DEBUG (dbgs () << " Vectorizing outer loop in \" "
94819468 << L->getHeader ()->getParent ()->getName () << " \"\n " );
94829469 LVP.executePlan (VF.Width , 1 , BestPlan, LB, DT, false );
@@ -10258,7 +10245,7 @@ bool LoopVectorizePass::processLoop(Loop *L) {
1025810245 // interleave it.
1025910246 VPlan &BestPlan = LVP.getPlanFor (VF.Width );
1026010247 InnerLoopVectorizer Unroller (
10261- L, PSE, LI, DT, TLI, TTI, AC, ORE , ElementCount::getFixed (1 ),
10248+ L, PSE, LI, DT, TTI, AC, ElementCount::getFixed (1 ),
1026210249 ElementCount::getFixed (1 ), IC, &CM, BFI, PSI, Checks, BestPlan);
1026310250
1026410251 // TODO: Move to general VPlan pipeline once epilogue loops are also
@@ -10293,18 +10280,16 @@ bool LoopVectorizePass::processLoop(Loop *L) {
1029310280 preparePlanForMainVectorLoop (*BestMainPlan, BestEpiPlan);
1029410281 EpilogueLoopVectorizationInfo EPI (VF.Width , IC, EpilogueVF.Width , 1 ,
1029510282 BestEpiPlan);
10296- EpilogueVectorizerMainLoop MainILV (L, PSE, LI, DT, TLI, TTI, AC, ORE,
10297- EPI, &CM, BFI, PSI, Checks,
10298- *BestMainPlan);
10283+ EpilogueVectorizerMainLoop MainILV (L, PSE, LI, DT, TTI, AC, EPI, &CM,
10284+ BFI, PSI, Checks, *BestMainPlan);
1029910285 auto ExpandedSCEVs = LVP.executePlan (EPI.MainLoopVF , EPI.MainLoopUF ,
1030010286 *BestMainPlan, MainILV, DT, false );
1030110287 ++LoopsVectorized;
1030210288
1030310289 // Second pass vectorizes the epilogue and adjusts the control flow
1030410290 // edges from the first pass.
10305- EpilogueVectorizerEpilogueLoop EpilogILV (L, PSE, LI, DT, TLI, TTI, AC,
10306- ORE, EPI, &CM, BFI, PSI,
10307- Checks, BestEpiPlan);
10291+ EpilogueVectorizerEpilogueLoop EpilogILV (
10292+ L, PSE, LI, DT, TTI, AC, EPI, &CM, BFI, PSI, Checks, BestEpiPlan);
1030810293 EpilogILV.setTripCount (MainILV.getTripCount ());
1030910294 preparePlanForEpilogueVectorLoop (BestEpiPlan, L, ExpandedSCEVs, EPI);
1031010295
@@ -10329,7 +10314,7 @@ bool LoopVectorizePass::processLoop(Loop *L) {
1032910314 if (!Checks.hasChecks ())
1033010315 DisableRuntimeUnroll = true ;
1033110316 } else {
10332- InnerLoopVectorizer LB (L, PSE, LI, DT, TLI, TTI, AC, ORE , VF.Width ,
10317+ InnerLoopVectorizer LB (L, PSE, LI, DT, TTI, AC, VF.Width ,
1033310318 VF.MinProfitableTripCount , IC, &CM, BFI, PSI,
1033410319 Checks, BestPlan);
1033510320 // TODO: Move to general VPlan pipeline once epilogue loops are also
0 commit comments