X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FTargetCallingConv.td;h=908e16ed5e78ee655ed608d59ba59924e7bc7952;hb=52e724ad7e679ee590f4bd763d55280586a8f1bc;hp=b91627ed2bc351db8559ceff1d01169fc2c8db22;hpb=d0b82b301d700217a716526f9329bb031e0d6578;p=oota-llvm.git diff --git a/lib/Target/TargetCallingConv.td b/lib/Target/TargetCallingConv.td index b91627ed2bc..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,14 +32,25 @@ class CCIf : CCPredicateAction { string Predicate = predicate; } +/// CCIfByVal - If the current argument has ByVal parameter attribute, apply +/// Action A. +class CCIfByVal : CCIf<"ArgFlags.isByVal()", A> { +} + /// CCIfCC - Match of the current calling convention is 'CC'. class CCIfCC : CCIf {} /// 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> {} /// CCAssignToReg - This action matches if there is a register in the specified /// list that is still available. If so, it assigns the value to the first @@ -48,13 +59,30 @@ 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; } +/// 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 /// the specified type. @@ -73,4 +101,3 @@ class CCDelegateTo : CCAction { class CallingConv actions> { list Actions = actions; } -