mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 13:10:34 +00:00
Modify the TargetLowering::getPackedTypeBreakdown method to also return the
unpromoted element type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27273 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fb47a9b1c8
commit
79227e2906
@ -178,10 +178,13 @@ public:
|
|||||||
/// with Altivec or SSE1, or 8 promoted MVT::f64 values with the X86 FP stack.
|
/// with Altivec or SSE1, or 8 promoted MVT::f64 values with the X86 FP stack.
|
||||||
/// Similarly, <2 x long> turns into 4 MVT::i32 values with both PPC and X86.
|
/// Similarly, <2 x long> turns into 4 MVT::i32 values with both PPC and X86.
|
||||||
///
|
///
|
||||||
/// This method returns the number and type of the resultant breakdown.
|
/// This method returns the number of registers needed, and the VT for each
|
||||||
|
/// register. It also returns the VT of the PackedType elements before they
|
||||||
|
/// are promoted/expanded.
|
||||||
///
|
///
|
||||||
MVT::ValueType getPackedTypeBreakdown(const PackedType *PTy,
|
unsigned getPackedTypeBreakdown(const PackedType *PTy,
|
||||||
unsigned &NE) const;
|
MVT::ValueType &PTyElementVT,
|
||||||
|
MVT::ValueType &PTyLegalElementVT) const;
|
||||||
|
|
||||||
typedef std::vector<double>::const_iterator legal_fpimm_iterator;
|
typedef std::vector<double>::const_iterator legal_fpimm_iterator;
|
||||||
legal_fpimm_iterator legal_fpimm_begin() const {
|
legal_fpimm_iterator legal_fpimm_begin() const {
|
||||||
|
@ -148,11 +148,13 @@ const char *TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
|||||||
///
|
///
|
||||||
/// This method returns the number and type of the resultant breakdown.
|
/// This method returns the number and type of the resultant breakdown.
|
||||||
///
|
///
|
||||||
MVT::ValueType TargetLowering::getPackedTypeBreakdown(const PackedType *PTy,
|
unsigned TargetLowering::getPackedTypeBreakdown(const PackedType *PTy,
|
||||||
unsigned &NumVals) const {
|
MVT::ValueType &PTyElementVT,
|
||||||
|
MVT::ValueType &PTyLegalElementVT) const {
|
||||||
// Figure out the right, legal destination reg to copy into.
|
// Figure out the right, legal destination reg to copy into.
|
||||||
unsigned NumElts = PTy->getNumElements();
|
unsigned NumElts = PTy->getNumElements();
|
||||||
MVT::ValueType EltTy = getValueType(PTy->getElementType());
|
MVT::ValueType EltTy = getValueType(PTy->getElementType());
|
||||||
|
PTyElementVT = EltTy;
|
||||||
|
|
||||||
unsigned NumVectorRegs = 1;
|
unsigned NumVectorRegs = 1;
|
||||||
|
|
||||||
@ -170,13 +172,14 @@ MVT::ValueType TargetLowering::getPackedTypeBreakdown(const PackedType *PTy,
|
|||||||
VT = getVectorType(EltTy, NumElts);
|
VT = getVectorType(EltTy, NumElts);
|
||||||
|
|
||||||
MVT::ValueType DestVT = getTypeToTransformTo(VT);
|
MVT::ValueType DestVT = getTypeToTransformTo(VT);
|
||||||
|
PTyLegalElementVT = DestVT;
|
||||||
if (DestVT < VT) {
|
if (DestVT < VT) {
|
||||||
// Value is expanded, e.g. i64 -> i16.
|
// Value is expanded, e.g. i64 -> i16.
|
||||||
NumVals = NumVectorRegs*(MVT::getSizeInBits(VT)/MVT::getSizeInBits(DestVT));
|
return NumVectorRegs*(MVT::getSizeInBits(VT)/MVT::getSizeInBits(DestVT));
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, promotion or legal types use the same number of registers as
|
// Otherwise, promotion or legal types use the same number of registers as
|
||||||
// the vector decimated to the appropriate level.
|
// the vector decimated to the appropriate level.
|
||||||
NumVals = NumVectorRegs;
|
return NumVectorRegs;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DestVT;
|
return DestVT;
|
||||||
|
Loading…
Reference in New Issue
Block a user