@@ -2155,30 +2155,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
2155
2155
ISD = ISD::USUBSAT;
2156
2156
break ;
2157
2157
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 ;
2182
2163
case Intrinsic::sadd_with_overflow:
2183
2164
ISD = ISD::SADDO;
2184
2165
break ;
@@ -2413,6 +2394,30 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
2413
2394
CmpInst::BAD_ICMP_PREDICATE, CostKind);
2414
2395
return Cost;
2415
2396
}
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
+ }
2416
2421
default :
2417
2422
break ;
2418
2423
}
0 commit comments