summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-03-31 00:46:36 +0000
committerChris Lattner <sabre@nondot.org>2006-03-31 00:46:36 +0000
commitf144dac7b7ef86d4336131e82871eca4e8f32224 (patch)
tree40bf5aadd86c8b9cd73e522a513acecce94c57b9 /llvm
parentd9d0bbb5ac5674096d5d0bfc89834787e9491750 (diff)
downloadbcm5719-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.h9
-rw-r--r--llvm/lib/Target/TargetLowering.cpp11
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;
OpenPOWER on IntegriCloud