[llvm-commits] [llvm] r43988 - in /llvm/trunk: lib/Target/TargetCallingConv.td lib/Target/X86/X86CallingConv.td utils/TableGen/CallingConvEmitter.cpp
Dale Johannesen
dalej at apple.com
Tue Nov 13 15:17:12 PST 2007
On Nov 13, 2007, at 3:02 PM, Duncan Sands wrote:
> How about this?
Doesn't an empty array or struct have size 0?
Personally I don't think this is an improvement, but I have no
particular objection to it,
assuming the above is not really a problem. I'm ready to move on.
> Index: llvm/lib/Target/TargetCallingConv.td
> ===================================================================
> --- llvm.orig/lib/Target/TargetCallingConv.td 2007-11-13
> 20:06:06.000000000 +0100
> +++ llvm/lib/Target/TargetCallingConv.td 2007-11-13
> 20:08:24.000000000 +0100
> @@ -60,19 +60,14 @@
> }
>
> /// CCAssignToStack - This action always matches: it assigns the
> value to a
> -/// stack slot of the specified size and alignment on the stack.
> +/// stack slot of the specified size and alignment on the stack.
> If size is
> +/// zero then the ABI size is used; if align is zero then the ABI
> alignment
> +/// is used - these may depend on the target or subtarget.
> class CCAssignToStack<int size, int align> : CCAction {
> int Size = size;
> int Align = align;
> }
>
> -/// CCAssignToStackABISizeAlign - This action always matches: it
> assigns
> -/// the value to a stack slot of the ABISize and ABIAlignment for
> the type,
> -/// which may depend on the target or subtarget.
> -/// "ignored" is here because an empty arg list does not work.
> -class CCAssignToStackABISizeAlign<int ignored> : CCAction {
> -}
> -
> /// 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.
> Index: llvm/lib/Target/X86/X86CallingConv.td
> ===================================================================
> --- llvm.orig/lib/Target/X86/X86CallingConv.td 2007-11-13
> 20:08:33.000000000 +0100
> +++ llvm/lib/Target/X86/X86CallingConv.td 2007-11-13
> 20:30:04.000000000 +0100
> @@ -120,7 +120,7 @@
>
> // Long doubles get stack slots whose size and alignment depends
> on the
> // subtarget.
> - CCIfType<[f80], CCAssignToStackABISizeAlign<0>>,
> + CCIfType<[f80], CCAssignToStack<0, 0>>,
>
> // Vectors get 16-byte stack slots that are 16-byte aligned.
> CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
> CCAssignToStack<16, 16>>,
> @@ -181,7 +181,7 @@
>
> // Long doubles get slots whose size and alignment depends on the
> // subtarget.
> - CCIfType<[f80], CCAssignToStackABISizeAlign<0>>,
> + CCIfType<[f80], CCAssignToStack<0, 0>>,
>
> // The first 4 vector arguments are passed in XMM registers.
> CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
> Index: llvm/utils/TableGen/CallingConvEmitter.cpp
> ===================================================================
> --- llvm.orig/utils/TableGen/CallingConvEmitter.cpp 2007-11-13
> 20:09:26.000000000 +0100
> +++ llvm/utils/TableGen/CallingConvEmitter.cpp 2007-11-13
> 20:26:27.000000000 +0100
> @@ -114,19 +114,21 @@
> } else if (Action->isSubClassOf("CCAssignToStack")) {
> int Size = Action->getValueAsInt("Size");
> int Align = Action->getValueAsInt("Align");
> -
> +
> O << IndentStr << "unsigned Offset" << ++Counter
> - << " = State.AllocateStack(" << Size << ", " << Align <<
> ");\n";
> - O << IndentStr << "State.addLoc(CCValAssign::getMem(ValNo,
> ValVT, Offset"
> - << Counter << ", LocVT, LocInfo));\n";
> - O << IndentStr << "return false;\n";
> - } else if (Action->isSubClassOf("CCAssignToStackABISizeAlign")) {
> - O << IndentStr << "unsigned Offset" << ++Counter
> - << " = State.AllocateStack(State.getTarget().getTargetData()"
> - "->getABITypeSize(MVT::getTypeForValueType(LocVT)),\n";
> - O << IndentStr << " State.getTarget().getTargetData()"
> - "->getABITypeAlignment(MVT::getTypeForValueType
> (LocVT)));\n";
> - O << IndentStr << "State.addLoc(CCValAssign::getMem(ValNo,
> ValVT, Offset"
> + << " = State.AllocateStack(";
> + if (Size)
> + O << Size << ", ";
> + else
> + O << "\n" << IndentStr << " State.getTarget
> ().getTargetData()"
> + "->getABITypeSize(MVT::getTypeForValueType(LocVT)), ";
> + if (Align)
> + O << Align;
> + else
> + O << "\n" << IndentStr << " State.getTarget
> ().getTargetData()"
> + "->getABITypeAlignment(MVT::getTypeForValueType(LocVT))";
> + O << ");\n" << IndentStr
> + << "State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset"
> << Counter << ", LocVT, LocInfo));\n";
> O << IndentStr << "return false;\n";
> } else if (Action->isSubClassOf("CCPromoteToType")) {
More information about the llvm-commits
mailing list