Skip to content

Commit c382d2f

Browse files
committed
TTI: Check legalization cost of mulfix ISD nodes
1 parent f154bdb commit c382d2f

File tree

1 file changed

+29
-24
lines changed

1 file changed

+29
-24
lines changed

llvm/include/llvm/CodeGen/BasicTTIImpl.h

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)