@@ -2155,30 +2155,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
21552155 ISD = ISD::USUBSAT;
21562156 break ;
21572157 case Intrinsic::smul_fix:
2158- case Intrinsic::umul_fix: {
2159- unsigned ExtSize = RetTy->getScalarSizeInBits () * 2 ;
2160- Type *ExtTy = RetTy->getWithNewBitWidth (ExtSize);
2161-
2162- unsigned ExtOp =
2163- IID == Intrinsic::smul_fix ? Instruction::SExt : Instruction::ZExt;
2164- TTI::CastContextHint CCH = TTI::CastContextHint::None;
2165-
2166- InstructionCost Cost = 0 ;
2167- Cost += 2 * thisT ()->getCastInstrCost (ExtOp, ExtTy, RetTy, CCH, CostKind);
2168- Cost +=
2169- thisT ()->getArithmeticInstrCost (Instruction::Mul, ExtTy, CostKind);
2170- Cost += 2 * thisT ()->getCastInstrCost (Instruction::Trunc, RetTy, ExtTy,
2171- CCH, CostKind);
2172- Cost += thisT ()->getArithmeticInstrCost (Instruction::LShr, RetTy,
2173- CostKind,
2174- {TTI::OK_AnyValue, TTI::OP_None},
2175- {TTI::OK_UniformConstantValue, TTI::OP_None});
2176- Cost += thisT ()->getArithmeticInstrCost (Instruction::Shl, RetTy, CostKind,
2177- {TTI::OK_AnyValue, TTI::OP_None},
2178- {TTI::OK_UniformConstantValue, TTI::OP_None});
2179- Cost += thisT ()->getArithmeticInstrCost (Instruction::Or, RetTy, CostKind);
2180- return Cost;
2181- }
2158+ ISD = ISD::SMULFIX;
2159+ break ;
2160+ case Intrinsic::umul_fix:
2161+ ISD = ISD::UMULFIX;
2162+ break ;
21822163 case Intrinsic::sadd_with_overflow:
21832164 ISD = ISD::SADDO;
21842165 break ;
@@ -2413,6 +2394,30 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
24132394 CmpInst::BAD_ICMP_PREDICATE, CostKind);
24142395 return Cost;
24152396 }
2397+ case Intrinsic::smul_fix:
2398+ case Intrinsic::umul_fix: {
2399+ unsigned ExtSize = RetTy->getScalarSizeInBits () * 2 ;
2400+ Type *ExtTy = RetTy->getWithNewBitWidth (ExtSize);
2401+
2402+ unsigned ExtOp =
2403+ IID == Intrinsic::smul_fix ? Instruction::SExt : Instruction::ZExt;
2404+ TTI::CastContextHint CCH = TTI::CastContextHint::None;
2405+
2406+ InstructionCost Cost = 0 ;
2407+ Cost += 2 * thisT ()->getCastInstrCost (ExtOp, ExtTy, RetTy, CCH, CostKind);
2408+ Cost +=
2409+ thisT ()->getArithmeticInstrCost (Instruction::Mul, ExtTy, CostKind);
2410+ Cost += 2 * thisT ()->getCastInstrCost (Instruction::Trunc, RetTy, ExtTy,
2411+ CCH, CostKind);
2412+ Cost += thisT ()->getArithmeticInstrCost (
2413+ Instruction::LShr, RetTy, CostKind, {TTI::OK_AnyValue, TTI::OP_None},
2414+ {TTI::OK_UniformConstantValue, TTI::OP_None});
2415+ Cost += thisT ()->getArithmeticInstrCost (
2416+ Instruction::Shl, RetTy, CostKind, {TTI::OK_AnyValue, TTI::OP_None},
2417+ {TTI::OK_UniformConstantValue, TTI::OP_None});
2418+ Cost += thisT ()->getArithmeticInstrCost (Instruction::Or, RetTy, CostKind);
2419+ return Cost;
2420+ }
24162421 default :
24172422 break ;
24182423 }
0 commit comments