@@ -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