Add VectorTargetTransform::getNumberOfParts.

As discussed on IRC, add VectorTargetTransform::getNumberOfParts
to provide a stable interface to the vector legalization splitting factor.

llvm-svn: 166751
This commit is contained in:
Hal Finkel 2012-10-26 04:28:02 +00:00
parent 1a32954279
commit 9dd045f178
3 changed files with 15 additions and 0 deletions

View File

@ -68,6 +68,8 @@ public:
virtual unsigned getMemoryOpCost(unsigned Opcode, Type *Src, virtual unsigned getMemoryOpCost(unsigned Opcode, Type *Src,
unsigned Alignment, unsigned Alignment,
unsigned AddressSpace) const; unsigned AddressSpace) const;
virtual unsigned getNumberOfParts(Type *Tp) const;
}; };
} // end llvm namespace } // end llvm namespace

View File

@ -156,6 +156,11 @@ public:
return 1; return 1;
} }
/// Returns the number of pieces into which the provided type must be
/// split during legalization. Zero is returned when the answer is unknown.
virtual unsigned getNumberOfParts(Type *Tp) const {
return 0;
}
}; };
} // End llvm namespace } // End llvm namespace

View File

@ -196,3 +196,11 @@ VectorTargetTransformImpl::getMemoryOpCost(unsigned Opcode, Type *Src,
// Assume that all loads of legal types cost 1. // Assume that all loads of legal types cost 1.
return LT.first; return LT.first;
} }
unsigned
VectorTargetTransformImpl::getNumberOfParts(Type *Tp) const {
std::pair<unsigned, EVT> LT =
getTypeLegalizationCost(Tp->getContext(), TLI->getValueType(Tp));
return LT.first;
}