17 #define DEBUG_TYPE "ppctti"
42 unsigned getScalarizationOverhead(
Type *Ty,
bool Insert,
bool Extract)
const;
51 TLI(TM->getTargetLowering()) {
55 virtual void initializePass() {
59 virtual void finalizePass() {
71 virtual void *getAdjustedAnalysisPointer(
const void *
ID) {
79 virtual PopcntSupportKind getPopcntSupport(
unsigned TyWidth)
const;
80 virtual void getUnrollingPreferences(
Loop *L, UnrollingPreferences &UP)
const;
87 virtual unsigned getNumberOfRegisters(
bool Vector)
const;
88 virtual unsigned getRegisterBitWidth(
bool Vector)
const;
89 virtual unsigned getMaximumUnrollFactor()
const;
90 virtual unsigned getArithmeticInstrCost(
unsigned Opcode,
Type *Ty,
92 OperandValueKind)
const;
93 virtual unsigned getShuffleCost(ShuffleKind
Kind,
Type *Tp,
94 int Index,
Type *SubTp)
const;
95 virtual unsigned getCastInstrCost(
unsigned Opcode,
Type *Dst,
97 virtual unsigned getCmpSelInstrCost(
unsigned Opcode,
Type *ValTy,
99 virtual unsigned getVectorInstrCost(
unsigned Opcode,
Type *Val,
100 unsigned Index)
const;
101 virtual unsigned getMemoryOpCost(
unsigned Opcode,
Type *Src,
111 "PPC Target Transform Info",
true,
true,
false)
116 return new PPCTTI(TM);
126 PPCTTI::PopcntSupportKind PPCTTI::getPopcntSupport(
unsigned TyWidth)
const {
127 assert(
isPowerOf2_32(TyWidth) &&
"Ty width must be power of 2");
128 if (
ST->hasPOPCNTD() && TyWidth <= 64)
129 return PSK_FastHardware;
133 void PPCTTI::getUnrollingPreferences(
Loop *L, UnrollingPreferences &UP)
const {
137 UP.Partial = UP.Runtime =
true;
141 unsigned PPCTTI::getNumberOfRegisters(
bool Vector)
const {
142 if (Vector && !
ST->hasAltivec())
147 unsigned PPCTTI::getRegisterBitWidth(
bool Vector)
const {
149 if (
ST->hasAltivec())
return 128;
159 unsigned PPCTTI::getMaximumUnrollFactor()
const {
160 unsigned Directive =
ST->getDarwinDirective();
180 unsigned PPCTTI::getArithmeticInstrCost(
unsigned Opcode,
Type *Ty,
181 OperandValueKind Op1Info,
182 OperandValueKind Op2Info)
const {
183 assert(TLI->InstructionOpcodeToISD(Opcode) &&
"Invalid opcode");
190 unsigned PPCTTI::getShuffleCost(ShuffleKind
Kind,
Type *Tp,
int Index,
195 unsigned PPCTTI::getCastInstrCost(
unsigned Opcode,
Type *Dst,
Type *Src)
const {
196 assert(TLI->InstructionOpcodeToISD(Opcode) &&
"Invalid opcode");
201 unsigned PPCTTI::getCmpSelInstrCost(
unsigned Opcode,
Type *ValTy,
202 Type *CondTy)
const {
206 unsigned PPCTTI::getVectorInstrCost(
unsigned Opcode,
Type *Val,
207 unsigned Index)
const {
208 assert(Val->
isVectorTy() &&
"This must be a vector type");
210 int ISD = TLI->InstructionOpcodeToISD(Opcode);
211 assert(ISD &&
"Invalid opcode");
217 unsigned LHSPenalty = 12;
231 unsigned PPCTTI::getMemoryOpCost(
unsigned Opcode,
Type *Src,
unsigned Alignment,
234 std::pair<unsigned, MVT>
LT = TLI->getTypeLegalizationCost(Src);
239 unsigned Cost = LT.first * 1;
243 unsigned SrcBytes = LT.second.getStoreSize();
244 if (SrcBytes && Alignment && Alignment < SrcBytes)
245 Cost *= (SrcBytes/Alignment);
static PassRegistry * getPassRegistry()
Cost tables and simple lookup functions.
void initializePPCTTIPass(PassRegistry &)
#define llvm_unreachable(msg)
ID
LLVM Calling Convention Representation.
#define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def)
ImmutablePass * createPPCTargetTransformInfoPass(const PPCTargetMachine *TM)
Creates an PPC-specific Target Transformation Info pass.
bool isPowerOf2_32(uint32_t Value)