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")) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits