mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Move more logic into getTypeForExtArgOrReturn.
llvm-svn: 127809
This commit is contained in:
parent
0f031dccab
commit
cea63dc052
@ -1293,9 +1293,10 @@ public:
|
||||
/// but this is not true all the time, e.g. i1 on x86-64. It is also not
|
||||
/// necessary for non-C calling conventions. The frontend should handle this
|
||||
/// and include all of the necessary information.
|
||||
virtual MVT
|
||||
getTypeForExtArgOrReturn(EVT VT, ISD::NodeType ExtendKind) const {
|
||||
return MVT::i32;
|
||||
virtual EVT getTypeForExtArgOrReturn(LLVMContext &Context, EVT VT,
|
||||
ISD::NodeType ExtendKind) const {
|
||||
EVT MinVT = getRegisterType(Context, MVT::i32);
|
||||
return VT.bitsLT(MinVT) ? MinVT : VT;
|
||||
}
|
||||
|
||||
/// LowerOperationWrapper - This callback is invoked by the type legalizer
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user