Skip to content

Commit 6a48297

Browse files
authored
TTI: Check legalization cost of mulfix ISD nodes (#100520)
1 parent 5bbbdab commit 6a48297

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
@@ -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

Comments
 (0)