@@ -2159,30 +2159,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
21592159 ISD = ISD::USUBSAT;
21602160 break ;
21612161 case Intrinsic::smul_fix:
2162- case Intrinsic::umul_fix: {
2163- unsigned ExtSize = RetTy->getScalarSizeInBits () * 2 ;
2164- Type *ExtTy = RetTy->getWithNewBitWidth (ExtSize);
2165-
2166- unsigned ExtOp =
2167- IID == Intrinsic::smul_fix ? Instruction::SExt : Instruction::ZExt;
2168- TTI::CastContextHint CCH = TTI::CastContextHint::None;
2169-
2170- InstructionCost Cost = 0 ;
2171- Cost += 2 * thisT ()->getCastInstrCost (ExtOp, ExtTy, RetTy, CCH, CostKind);
2172- Cost +=
2173- thisT ()->getArithmeticInstrCost (Instruction::Mul, ExtTy, CostKind);
2174- Cost += 2 * thisT ()->getCastInstrCost (Instruction::Trunc, RetTy, ExtTy,
2175- CCH, CostKind);
2176- Cost += thisT ()->getArithmeticInstrCost (Instruction::LShr, RetTy,
2177- CostKind,
2178- {TTI::OK_AnyValue, TTI::OP_None},
2179- {TTI::OK_UniformConstantValue, TTI::OP_None});
2180- Cost += thisT ()->getArithmeticInstrCost (Instruction::Shl, RetTy, CostKind,
2181- {TTI::OK_AnyValue, TTI::OP_None},
2182- {TTI::OK_UniformConstantValue, TTI::OP_None});
2183- Cost += thisT ()->getArithmeticInstrCost (Instruction::Or, RetTy, CostKind);
2184- return Cost;
2185- }
2162+ ISD = ISD::SMULFIX;
2163+ break ;
2164+ case Intrinsic::umul_fix:
2165+ ISD = ISD::UMULFIX;
2166+ break ;
21862167 case Intrinsic::sadd_with_overflow:
21872168 ISD = ISD::SADDO;
21882169 break ;
@@ -2417,6 +2398,30 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
24172398 CmpInst::BAD_ICMP_PREDICATE, CostKind);
24182399 return Cost;
24192400 }
2401+ case Intrinsic::smul_fix:
2402+ case Intrinsic::umul_fix: {
2403+ unsigned ExtSize = RetTy->getScalarSizeInBits () * 2 ;
2404+ Type *ExtTy = RetTy->getWithNewBitWidth (ExtSize);
2405+
2406+ unsigned ExtOp =
2407+ IID == Intrinsic::smul_fix ? Instruction::SExt : Instruction::ZExt;
2408+ TTI::CastContextHint CCH = TTI::CastContextHint::None;
2409+
2410+ InstructionCost Cost = 0 ;
2411+ Cost += 2 * thisT ()->getCastInstrCost (ExtOp, ExtTy, RetTy, CCH, CostKind);
2412+ Cost +=
2413+ thisT ()->getArithmeticInstrCost (Instruction::Mul, ExtTy, CostKind);
2414+ Cost += 2 * thisT ()->getCastInstrCost (Instruction::Trunc, RetTy, ExtTy,
2415+ CCH, CostKind);
2416+ Cost += thisT ()->getArithmeticInstrCost (
2417+ Instruction::LShr, RetTy, CostKind, {TTI::OK_AnyValue, TTI::OP_None},
2418+ {TTI::OK_UniformConstantValue, TTI::OP_None});
2419+ Cost += thisT ()->getArithmeticInstrCost (
2420+ Instruction::Shl, RetTy, CostKind, {TTI::OK_AnyValue, TTI::OP_None},
2421+ {TTI::OK_UniformConstantValue, TTI::OP_None});
2422+ Cost += thisT ()->getArithmeticInstrCost (Instruction::Or, RetTy, CostKind);
2423+ return Cost;
2424+ }
24202425 default :
24212426 break ;
24222427 }
0 commit comments