diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-03-31 00:46:36 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-03-31 00:46:36 +0000 |
| commit | f144dac7b7ef86d4336131e82871eca4e8f32224 (patch) | |
| tree | 40bf5aadd86c8b9cd73e522a513acecce94c57b9 /llvm | |
| parent | d9d0bbb5ac5674096d5d0bfc89834787e9491750 (diff) | |
| download | bcm5719-llvm-f144dac7b7ef86d4336131e82871eca4e8f32224.tar.gz bcm5719-llvm-f144dac7b7ef86d4336131e82871eca4e8f32224.zip | |
Modify the TargetLowering::getPackedTypeBreakdown method to also return the
unpromoted element type.
llvm-svn: 27273
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/Target/TargetLowering.h | 9 | ||||
| -rw-r--r-- | llvm/lib/Target/TargetLowering.cpp | 11 |
2 files changed, 13 insertions, 7 deletions
diff --git a/llvm/include/llvm/Target/TargetLowering.h b/llvm/include/llvm/Target/TargetLowering.h index e1643e23d3a..303c415d2e5 100644 --- a/llvm/include/llvm/Target/TargetLowering.h +++ b/llvm/include/llvm/Target/TargetLowering.h @@ -178,10 +178,13 @@ public: /// 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. /// - /// 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 &NE) const; + unsigned getPackedTypeBreakdown(const PackedType *PTy, + MVT::ValueType &PTyElementVT, + MVT::ValueType &PTyLegalElementVT) const; typedef std::vector<double>::const_iterator legal_fpimm_iterator; legal_fpimm_iterator legal_fpimm_begin() const { diff --git a/llvm/lib/Target/TargetLowering.cpp b/llvm/lib/Target/TargetLowering.cpp index b9c10ce103e..922245f5535 100644 --- a/llvm/lib/Target/TargetLowering.cpp +++ b/llvm/lib/Target/TargetLowering.cpp @@ -148,11 +148,13 @@ const char *TargetLowering::getTargetNodeName(unsigned Opcode) const { /// /// This method returns the number and type of the resultant breakdown. /// -MVT::ValueType TargetLowering::getPackedTypeBreakdown(const PackedType *PTy, - unsigned &NumVals) const { +unsigned TargetLowering::getPackedTypeBreakdown(const PackedType *PTy, + MVT::ValueType &PTyElementVT, + MVT::ValueType &PTyLegalElementVT) const { // Figure out the right, legal destination reg to copy into. unsigned NumElts = PTy->getNumElements(); MVT::ValueType EltTy = getValueType(PTy->getElementType()); + PTyElementVT = EltTy; unsigned NumVectorRegs = 1; @@ -170,13 +172,14 @@ MVT::ValueType TargetLowering::getPackedTypeBreakdown(const PackedType *PTy, VT = getVectorType(EltTy, NumElts); MVT::ValueType DestVT = getTypeToTransformTo(VT); + PTyLegalElementVT = DestVT; if (DestVT < VT) { // Value is expanded, e.g. i64 -> i16. - NumVals = NumVectorRegs*(MVT::getSizeInBits(VT)/MVT::getSizeInBits(DestVT)); + return NumVectorRegs*(MVT::getSizeInBits(VT)/MVT::getSizeInBits(DestVT)); } else { // Otherwise, promotion or legal types use the same number of registers as // the vector decimated to the appropriate level. - NumVals = NumVectorRegs; + return NumVectorRegs; } return DestVT; |

