Commit fb3ba380 authored by Sam Parker's avatar Sam Parker
Browse files

[CostModel] Remove getExtCost

This has not been implemented by any backends which appear to cover
the functionality through getCastInstrCost. Sink what there is in the
default implementation into BasicTTI.

Differential Revision: https://reviews.llvm.org/D78922
parent 0e41d647
......@@ -268,9 +268,6 @@ public:
ArrayRef<const Value *> Operands,
TargetCostKind CostKind = TCK_SizeAndLatency) const;
/// Estimate the cost of a EXT operation when lowered.
int getExtCost(const Instruction *I, const Value *Src) const;
/// \returns A value by which our inlining threshold should be multiplied.
/// This is primarily used to bump up the inlining threshold wholesale on
/// targets where calls are unusually expensive.
......@@ -1232,7 +1229,6 @@ public:
virtual int getGEPCost(Type *PointeeType, const Value *Ptr,
ArrayRef<const Value *> Operands,
TTI::TargetCostKind CostKind) = 0;
virtual int getExtCost(const Instruction *I, const Value *Src) = 0;
virtual unsigned getInliningThresholdMultiplier() = 0;
virtual int getInlinerVectorBonusPercent() = 0;
virtual int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
......@@ -1493,9 +1489,6 @@ public:
enum TargetTransformInfo::TargetCostKind CostKind) override {
return Impl.getGEPCost(PointeeType, Ptr, Operands);
}
int getExtCost(const Instruction *I, const Value *Src) override {
return Impl.getExtCost(I, Src);
}
unsigned getInliningThresholdMultiplier() override {
return Impl.getInliningThresholdMultiplier();
}
......
......@@ -65,10 +65,6 @@ public:
return SI.getNumCases();
}
int getExtCost(const Instruction *I, const Value *Src) {
return TTI::TCC_Basic;
}
unsigned getInliningThresholdMultiplier() { return 1; }
int getInlinerVectorBonusPercent() { return 150; }
......@@ -866,7 +862,7 @@ public:
case Instruction::FPExt:
case Instruction::SExt:
case Instruction::ZExt:
if (I && TargetTTI->getExtCost(I, Operands.back()) == TTI::TCC_Free)
if (TargetTTI->getCastInstrCost(Opcode, Ty, OpTy, CostKind, I) == TTI::TCC_Free)
return TTI::TCC_Free;
break;
}
......
......@@ -296,18 +296,6 @@ public:
return BaseT::getGEPCost(PointeeType, Ptr, Operands);
}
int getExtCost(const Instruction *I, const Value *Src) {
if (getTLI()->isExtFree(I))
return TargetTransformInfo::TCC_Free;
if (isa<ZExtInst>(I) || isa<SExtInst>(I))
if (const LoadInst *LI = dyn_cast<LoadInst>(Src))
if (getTLI()->isExtLoad(LI, I, DL))
return TargetTransformInfo::TCC_Free;
return TargetTransformInfo::TCC_Basic;
}
unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
ArrayRef<const Value *> Arguments, const User *U,
TTI::TargetCostKind CostKind) {
......@@ -725,11 +713,21 @@ public:
SrcSize == DstSize)
return 0;
break;
case Instruction::FPExt:
if (I && getTLI()->isExtFree(I))
return 0;
break;
case Instruction::ZExt:
if (TLI->isZExtFree(SrcLT.second, DstLT.second))
return 0;
LLVM_FALLTHROUGH;
case Instruction::SExt: {
case Instruction::SExt:
if (!I)
break;
if (getTLI()->isExtFree(I))
return 0;
// If this is a zext/sext of a load, return 0 if the corresponding
// extending load exists on target.
if (I && isa<LoadInst>(I->getOperand(0))) {
......@@ -741,7 +739,6 @@ public:
return 0;
}
break;
}
case Instruction::AddrSpaceCast:
if (TLI->isFreeAddrSpaceCast(Src->getPointerAddressSpace(),
Dst->getPointerAddressSpace()))
......
......@@ -236,11 +236,6 @@ int TargetTransformInfo::getGEPCost(Type *PointeeType, const Value *Ptr,
return TTIImpl->getGEPCost(PointeeType, Ptr, Operands, CostKind);
}
int TargetTransformInfo::getExtCost(const Instruction *I,
const Value *Src) const {
return TTIImpl->getExtCost(I, Src);
}
int TargetTransformInfo::getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
ArrayRef<const Value *> Arguments,
const User *U,
......
......@@ -759,7 +759,7 @@ int PPCTTIImpl::getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
const Instruction *I) {
assert(TLI->InstructionOpcodeToISD(Opcode) && "Invalid opcode");
int Cost = BaseT::getCastInstrCost(Opcode, Dst, Src, CostKind);
int Cost = BaseT::getCastInstrCost(Opcode, Dst, Src, CostKind, I);
return vectorCostAdjustment(Cost, Opcode, Dst, Src);
}
......
......@@ -3,31 +3,31 @@
define i32 @casts_no_users() {
; CHECK-LABEL: 'casts_no_users'
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r0 = sext i1 undef to i8
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r1 = zext i1 undef to i8
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r2 = sext i1 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r3 = zext i1 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r4 = sext i1 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r5 = zext i1 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r6 = sext i1 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r0 = sext i1 undef to i8
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r1 = zext i1 undef to i8
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r2 = sext i1 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r3 = zext i1 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r4 = sext i1 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r5 = zext i1 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r6 = sext i1 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r7 = zext i1 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r8 = trunc i8 undef to i1
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r9 = sext i8 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r10 = zext i8 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r11 = sext i8 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r12 = zext i8 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r13 = sext i8 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r9 = sext i8 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r10 = zext i8 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r11 = sext i8 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r12 = zext i8 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r13 = sext i8 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r14 = zext i8 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r15 = trunc i16 undef to i1
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r16 = trunc i16 undef to i8
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r17 = sext i16 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r18 = zext i16 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r19 = sext i16 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r17 = sext i16 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r18 = zext i16 undef to i32
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r19 = sext i16 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r20 = zext i16 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r21 = trunc i32 undef to i1
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r22 = trunc i32 undef to i8
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r23 = trunc i32 undef to i16
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %r24 = sext i32 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r24 = sext i32 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r25 = zext i32 undef to i64
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r26 = trunc i64 undef to i1
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %r27 = trunc i64 undef to i8
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment