Rename CCIfStruct to CCIfByVal and CCStructAssign to CCPassByVal. Remove unused param...
authorEvan Cheng <evan.cheng@apple.com>
Tue, 15 Jan 2008 03:34:58 +0000 (03:34 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 15 Jan 2008 03:34:58 +0000 (03:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45997 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/TargetCallingConv.td
lib/Target/X86/X86CallingConv.td
utils/TableGen/CallingConvEmitter.cpp

index 3a01ddff2bf8f13e76af375199914cc18bcb844b..a3b84f4b6f0006678af056d1cf2cf2c674d36d16 100644 (file)
@@ -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
index aaa304e45f11454bea04b74e09a09362134dd19c..24a50de829e8586b8302076dd1218acf6fb843d6 100644 (file)
@@ -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.
index f7c2eda5e866d02f77d8176567b645b2e37ab9f6..0ffbd683d3805ab7f597363120b30ff8d90fbb45 100644 (file)
@@ -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();