diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-01-15 03:34:58 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-01-15 03:34:58 +0000 |
commit | 6bfa8a121d69f16ca2cb48360a182f52e5930f0e (patch) | |
tree | 491f1c0f7a92d638b50a332862f099aa7a4bf77e | |
parent | bdfd5ef823602c2447d20c72d28eef5eb9735402 (diff) |
Rename CCIfStruct to CCIfByVal and CCStructAssign to CCPassByVal. Remove unused parameters of CCStructAssign and add size and alignment requirement info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45997 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/TargetCallingConv.td | 15 | ||||
-rw-r--r-- | lib/Target/X86/X86CallingConv.td | 6 | ||||
-rw-r--r-- | utils/TableGen/CallingConvEmitter.cpp | 9 |
3 files changed, 17 insertions, 13 deletions
diff --git a/lib/Target/TargetCallingConv.td b/lib/Target/TargetCallingConv.td index 3a01ddff2b..a3b84f4b6f 100644 --- a/lib/Target/TargetCallingConv.td +++ b/lib/Target/TargetCallingConv.td @@ -32,9 +32,9 @@ class CCIf<string predicate, CCAction A> : CCPredicateAction<A> { string Predicate = predicate; } -/// CCIfStruct - If the current argument is a struct, apply +/// CCIfByVal - If the current argument has ByVal parameter attribute, apply /// Action A. -class CCIfStruct<CCAction A> : CCIf<"ArgFlags & ISD::ParamFlags::ByVal", A> { +class CCIfByVal<CCAction A> : CCIf<"ArgFlags & ISD::ParamFlags::ByVal", A> { } /// CCIfCC - Match of the current calling convention is 'CC'. @@ -68,11 +68,12 @@ class CCAssignToStack<int size, int align> : CCAction { int Align = align; } -/// CCStructAssign - This action always matches: it will use the C ABI and -/// the register availability to decided whether to assign to a set of -/// registers or to a stack slot. -class CCStructAssign<list<Register> regList> : CCAction { - list<Register> RegList = regList; +/// CCPassByVal - This action always matches: it assigns the value to a stack +/// slot to implement ByVal aggregate parameter passing. Size and alignment +/// specify the minimum size and alignment for the stack slot. +class CCPassByVal<int size, int align> : CCAction { + int Size = size; + int Align = align; } /// CCPromoteToType - If applied, this promotes the specified current value to diff --git a/lib/Target/X86/X86CallingConv.td b/lib/Target/X86/X86CallingConv.td index aaa304e45f..24a50de829 100644 --- a/lib/Target/X86/X86CallingConv.td +++ b/lib/Target/X86/X86CallingConv.td @@ -97,7 +97,7 @@ def RetCC_X86 : CallingConv<[ def CC_X86_64_C : CallingConv<[ // Handles byval parameters. - CCIfStruct<CCStructAssign<[]>>, + CCIfByVal<CCPassByVal<8, 8>>, // Promote i8/i16 arguments to i32. CCIfType<[i8, i16], CCPromoteToType<i32>>, @@ -136,7 +136,7 @@ def CC_X86_64_C : CallingConv<[ // namely R9 def CC_X86_64_TailCall : CallingConv<[ // Handles byval parameters. - CCIfStruct<CCStructAssign<[]>>, + CCIfByVal<CCPassByVal<8, 8>>, // Promote i8/i16 arguments to i32. CCIfType<[i8, i16], CCPromoteToType<i32>>, @@ -177,7 +177,7 @@ def CC_X86_64_TailCall : CallingConv<[ /// regs. def CC_X86_32_Common : CallingConv<[ // Handles byval parameters. - CCIfStruct<CCStructAssign<[]>>, + CCIfByVal<CCPassByVal<4, 4>>, // Integer/Float values get stored in stack slots that are 4 bytes in // size and 4-byte aligned. diff --git a/utils/TableGen/CallingConvEmitter.cpp b/utils/TableGen/CallingConvEmitter.cpp index f7c2eda5e8..0ffbd683d3 100644 --- a/utils/TableGen/CallingConvEmitter.cpp +++ b/utils/TableGen/CallingConvEmitter.cpp @@ -140,9 +140,12 @@ void CallingConvEmitter::EmitAction(Record *Action, << IndentStr << IndentStr << "LocInfo = CCValAssign::ZExt;\n" << IndentStr << "else\n" << IndentStr << IndentStr << "LocInfo = CCValAssign::AExt;\n"; - } else if (Action->isSubClassOf("CCStructAssign")) { - O << IndentStr << - "State.HandleStruct(ValNo, ValVT, LocVT, LocInfo, ArgFlags);\n"; + } else if (Action->isSubClassOf("CCPassByVal")) { + int Size = Action->getValueAsInt("Size"); + int Align = Action->getValueAsInt("Align"); + O << IndentStr + << "State.HandleByVal(ValNo, ValVT, LocVT, LocInfo, " + << Size << ", " << Align << ", ArgFlags);\n"; O << IndentStr << "return false;\n"; } else { Action->dump(); |