diff options
author | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-11-01 19:17:10 +0000 |
---|---|---|
committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-11-01 19:17:10 +0000 |
commit | ea8769cbe874dbbd5887512ea6d44a25e69ec148 (patch) | |
tree | 58e2c6c2b40d52fb35f070cd0a5d8816db273659 /lib/Target/Mips/MipsCallingConv.td | |
parent | 73d60e69f4e84d4f2399c73f5414fe2300e1ce02 (diff) |
[mips] Move all ByVal handling into CCState and tablegen-erated code. NFC.
Summary:
CCState already contains a byval implementation that is very similar to the
Mips custom code. This patch merges the custom code into the existing
common code and tablegen-erated code.
Reviewers: vmedic
Reviewed By: vmedic
Subscribers: rnk, llvm-commits
Differential Revision: http://reviews.llvm.org/D5977
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221059 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/MipsCallingConv.td')
-rw-r--r-- | lib/Target/Mips/MipsCallingConv.td | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/Target/Mips/MipsCallingConv.td b/lib/Target/Mips/MipsCallingConv.td index ae1b01b4019..7e5c2a902f1 100644 --- a/lib/Target/Mips/MipsCallingConv.td +++ b/lib/Target/Mips/MipsCallingConv.td @@ -279,13 +279,6 @@ def CC_Mips_FastCC : CallingConv<[ CCDelegateTo<CC_MipsN_FastCC> ]>; -//== - -def CC_Mips16RetHelper : CallingConv<[ - // Integer arguments are passed in integer registers. - CCIfType<[i32], CCAssignToReg<[V0, V1, A0, A1]>> -]>; - //===----------------------------------------------------------------------===// // Mips Calling Convention Dispatch //===----------------------------------------------------------------------===// @@ -297,7 +290,14 @@ def RetCC_Mips : CallingConv<[ CCDelegateTo<RetCC_MipsO32> ]>; +def CC_Mips_ByVal : CallingConv<[ + CCIfSubtarget<"isABI_O32()", CCIfByVal<CCPassByVal<4, 4>>>, + CCIfByVal<CCPassByVal<8, 8>> +]>; + def CC_Mips_FixedArg : CallingConv<[ + CCIfByVal<CCDelegateTo<CC_Mips_ByVal>>, + // f128 needs to be handled similarly to f32 and f64 on hard-float. However, // f128 is not legal and is lowered to i128 which is further lowered to a pair // of i64's. @@ -322,12 +322,23 @@ def CC_Mips_FixedArg : CallingConv<[ ]>; def CC_Mips_VarArg : CallingConv<[ + CCIfByVal<CCDelegateTo<CC_Mips_ByVal>>, + // FIXME: There wasn't an EABI case in the original code and it seems unlikely // that it's the same as CC_MipsN_VarArg CCIfSubtarget<"isABI_O32()", CCDelegateTo<CC_MipsO32_FP>>, CCDelegateTo<CC_MipsN_VarArg> ]>; +//== + +def CC_Mips16RetHelper : CallingConv<[ + CCIfByVal<CCDelegateTo<CC_Mips_ByVal>>, + + // Integer arguments are passed in integer registers. + CCIfType<[i32], CCAssignToReg<[V0, V1, A0, A1]>> +]>; + //===----------------------------------------------------------------------===// // Callee-saved register lists. //===----------------------------------------------------------------------===// |