X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FTargetCallingConv.td;h=908e16ed5e78ee655ed608d59ba59924e7bc7952;hb=52e724ad7e679ee590f4bd763d55280586a8f1bc;hp=94193200eaa40866ea4f754ec57e3cf65aa418ac;hpb=1aa7efbd2c98e761f50992197473304b99257ca9;p=oota-llvm.git diff --git a/lib/Target/TargetCallingConv.td b/lib/Target/TargetCallingConv.td index 94193200eaa..908e16ed5e7 100644 --- a/lib/Target/TargetCallingConv.td +++ b/lib/Target/TargetCallingConv.td @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by Chris Lattner and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -32,9 +32,9 @@ class CCIf : CCPredicateAction { 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 : CCIf<"ArgFlags & ISD::ParamFlags::ByVal", A> { +class CCIfByVal : CCIf<"ArgFlags.isByVal()", A> { } /// CCIfCC - Match of the current calling convention is 'CC'. @@ -43,7 +43,11 @@ class CCIfCC /// CCIfInReg - If this argument is marked with the 'inreg' attribute, apply /// the specified action. -class CCIfInReg : CCIf<"ArgFlags & ISD::ParamFlags::InReg", A> {} +class CCIfInReg : CCIf<"ArgFlags.isInReg()", A> {} + +/// CCIfNest - If this argument is marked with the 'nest' attribute, apply +/// the specified action. +class CCIfNest : CCIf<"ArgFlags.isNest()", A> {} /// CCIfNotVarArg - If the current function is not vararg - apply the action class CCIfNotVarArg : CCIf<"!State.isVarArg()", A> {} @@ -55,18 +59,29 @@ class CCAssignToReg regList> : CCAction { list RegList = regList; } +/// CCAssignToRegWithShadow - Same as CCAssignToReg, but with list of registers +/// which became shadowed, when some register is used. +class CCAssignToRegWithShadow regList, + list shadowList> : CCAction { + list RegList = regList; + list ShadowRegList = shadowList; +} + /// 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 : CCAction { int Size = size; 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 regList> : CCAction { - list 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 : CCAction { + int Size = size; + int Align = align; } /// CCPromoteToType - If applied, this promotes the specified current value to