@@ -2159,30 +2159,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
2159
2159
ISD = ISD::USUBSAT;
2160
2160
break ;
2161
2161
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 ;
2186
2167
case Intrinsic::sadd_with_overflow:
2187
2168
ISD = ISD::SADDO;
2188
2169
break ;
@@ -2417,6 +2398,30 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
2417
2398
CmpInst::BAD_ICMP_PREDICATE, CostKind);
2418
2399
return Cost;
2419
2400
}
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
+ }
2420
2425
default :
2421
2426
break ;
2422
2427
}
0 commit comments