summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorCameron Zwarich <zwarich@apple.com>2011-03-17 14:53:37 +0000
committerCameron Zwarich <zwarich@apple.com>2011-03-17 14:53:37 +0000
commit2ef0c69df1eb57b22d9555e999ab586d5944c777 (patch)
treee471d12f8a156de370819cff9211413170145c05 /llvm/lib
parent341c36dc8b9a43df1bc329dbe2fcb85e3e346b9e (diff)
downloadbcm5719-llvm-2ef0c69df1eb57b22d9555e999ab586d5944c777.tar.gz
bcm5719-llvm-2ef0c69df1eb57b22d9555e999ab586d5944c777.zip
Move more logic into getTypeForExtArgOrReturn.
llvm-svn: 127809
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp8
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp13
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.h5
3 files changed, 14 insertions, 12 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 9671a45062f..16a6107fe24 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -1128,12 +1128,8 @@ void SelectionDAGBuilder::visitRet(const ReturnInst &I) {
else if (F->paramHasAttr(0, Attribute::ZExt))
ExtendKind = ISD::ZERO_EXTEND;
- if (ExtendKind != ISD::ANY_EXTEND && VT.isInteger()) {
- MVT ReturnMVT = TLI.getTypeForExtArgOrReturn(VT, ExtendKind);
- EVT MinVT = TLI.getRegisterType(*DAG.getContext(), ReturnMVT);
- if (VT.bitsLT(MinVT))
- VT = MinVT;
- }
+ if (ExtendKind != ISD::ANY_EXTEND && VT.isInteger())
+ VT = TLI.getTypeForExtArgOrReturn(*DAG.getContext(), VT, ExtendKind);
unsigned NumParts = TLI.getNumRegisters(*DAG.getContext(), VT);
EVT PartVT = TLI.getRegisterType(*DAG.getContext(), VT);
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index dfb7b87d4ea..a4d01a10a72 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -1448,13 +1448,18 @@ bool X86TargetLowering::isUsedByReturnOnly(SDNode *N) const {
return HasRet;
}
-MVT
-X86TargetLowering::getTypeForExtArgOrReturn(EVT VT,
+EVT
+X86TargetLowering::getTypeForExtArgOrReturn(LLVMContext &Context, EVT VT,
ISD::NodeType ExtendKind) const {
+ MVT ReturnMVT;
// TODO: Is this also valid on 32-bit?
if (Subtarget->is64Bit() && VT == MVT::i1 && ExtendKind == ISD::ZERO_EXTEND)
- return MVT::i8;
- return MVT::i32;
+ ReturnMVT = MVT::i8;
+ else
+ ReturnMVT = MVT::i32;
+
+ EVT MinVT = getRegisterType(Context, ReturnMVT);
+ return VT.bitsLT(MinVT) ? MinVT : VT;
}
/// LowerCallResult - Lower the result values of a call into the
diff --git a/llvm/lib/Target/X86/X86ISelLowering.h b/llvm/lib/Target/X86/X86ISelLowering.h
index bd9247b0a65..7c1b13a1ad5 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.h
+++ b/llvm/lib/Target/X86/X86ISelLowering.h
@@ -843,8 +843,9 @@ namespace llvm {
virtual bool isUsedByReturnOnly(SDNode *N) const;
- virtual MVT
- getTypeForExtArgOrReturn(EVT VT, ISD::NodeType ExtendKind) const;
+ virtual EVT
+ getTypeForExtArgOrReturn(LLVMContext &Context, EVT VT,
+ ISD::NodeType ExtendKind) const;
virtual bool
CanLowerReturn(CallingConv::ID CallConv, bool isVarArg,
OpenPOWER on IntegriCloud