Skip to content

Commit edc410b

Browse files
committed
[VPlan] Use InstSimplifyFolder in IRBuilder
1 parent 62cae9c commit edc410b

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -488,8 +488,9 @@ class InnerLoopVectorizer {
488488
: OrigLoop(OrigLoop), PSE(PSE), LI(LI), DT(DT), TLI(TLI), TTI(TTI),
489489
AC(AC), ORE(ORE), VF(VecWidth),
490490
MinProfitableTripCount(MinProfitableTripCount), UF(UnrollFactor),
491-
Builder(PSE.getSE()->getContext()), Cost(CM), BFI(BFI), PSI(PSI),
492-
RTChecks(RTChecks), Plan(Plan),
491+
Folder(PSE.getSE()->getDataLayout()),
492+
Builder(PSE.getSE()->getContext(), Folder), Cost(CM), BFI(BFI),
493+
PSI(PSI), RTChecks(RTChecks), Plan(Plan),
493494
VectorPHVPB(Plan.getEntry()->getSingleSuccessor()) {}
494495

495496
virtual ~InnerLoopVectorizer() = default;
@@ -597,8 +598,11 @@ class InnerLoopVectorizer {
597598
/// many different vector instructions.
598599
unsigned UF;
599600

600-
/// The builder that we use
601-
IRBuilder<> Builder;
601+
/// The folder that we use for the builder.
602+
InstSimplifyFolder Folder;
603+
604+
/// The builder that we use.
605+
IRBuilder<InstSimplifyFolder> Builder;
602606

603607
// --- Vectorization state ---
604608

llvm/lib/Transforms/Vectorize/VPlan.h

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -775,29 +775,37 @@ class VPRecipeWithIRFlags : public VPSingleDefRecipe {
775775
void applyFlags(Instruction &I) const {
776776
switch (OpType) {
777777
case OperationType::OverflowingBinOp:
778-
I.setHasNoUnsignedWrap(WrapFlags.HasNUW);
779-
I.setHasNoSignedWrap(WrapFlags.HasNSW);
778+
if (isa<OverflowingBinaryOperator>(I) || isa<TruncInst>(I)) {
779+
I.setHasNoUnsignedWrap(WrapFlags.HasNUW);
780+
I.setHasNoSignedWrap(WrapFlags.HasNSW);
781+
}
780782
break;
781783
case OperationType::DisjointOp:
782-
cast<PossiblyDisjointInst>(&I)->setIsDisjoint(DisjointFlags.IsDisjoint);
784+
if (auto *Disjoint = dyn_cast<PossiblyDisjointInst>(&I))
785+
Disjoint->setIsDisjoint(DisjointFlags.IsDisjoint);
783786
break;
784787
case OperationType::PossiblyExactOp:
785-
I.setIsExact(ExactFlags.IsExact);
788+
if (isa<PossiblyExactOperator>(I))
789+
I.setIsExact(ExactFlags.IsExact);
786790
break;
787791
case OperationType::GEPOp:
788-
cast<GetElementPtrInst>(&I)->setNoWrapFlags(GEPFlags);
792+
if (auto *GEP = dyn_cast<GetElementPtrInst>(&I))
793+
GEP->setNoWrapFlags(GEPFlags);
789794
break;
790795
case OperationType::FPMathOp:
791-
I.setHasAllowReassoc(FMFs.AllowReassoc);
792-
I.setHasNoNaNs(FMFs.NoNaNs);
793-
I.setHasNoInfs(FMFs.NoInfs);
794-
I.setHasNoSignedZeros(FMFs.NoSignedZeros);
795-
I.setHasAllowReciprocal(FMFs.AllowReciprocal);
796-
I.setHasAllowContract(FMFs.AllowContract);
797-
I.setHasApproxFunc(FMFs.ApproxFunc);
796+
if (isa<FPMathOperator>(I)) {
797+
I.setHasAllowReassoc(FMFs.AllowReassoc);
798+
I.setHasNoNaNs(FMFs.NoNaNs);
799+
I.setHasNoInfs(FMFs.NoInfs);
800+
I.setHasNoSignedZeros(FMFs.NoSignedZeros);
801+
I.setHasAllowReciprocal(FMFs.AllowReciprocal);
802+
I.setHasAllowContract(FMFs.AllowContract);
803+
I.setHasApproxFunc(FMFs.ApproxFunc);
804+
}
798805
break;
799806
case OperationType::NonNegOp:
800-
I.setNonNeg(NonNegFlags.NonNeg);
807+
if (isa<PossiblyNonNegInst>(I))
808+
I.setNonNeg(NonNegFlags.NonNeg);
801809
break;
802810
case OperationType::Cmp:
803811
case OperationType::Other:

0 commit comments

Comments
 (0)