diff options
Diffstat (limited to 'llvm/include/llvm/Target/TargetSelectionDAG.td')
-rw-r--r-- | llvm/include/llvm/Target/TargetSelectionDAG.td | 76 |
1 files changed, 37 insertions, 39 deletions
diff --git a/llvm/include/llvm/Target/TargetSelectionDAG.td b/llvm/include/llvm/Target/TargetSelectionDAG.td index 1700c6c4640d3..de809bb10d499 100644 --- a/llvm/include/llvm/Target/TargetSelectionDAG.td +++ b/llvm/include/llvm/Target/TargetSelectionDAG.td @@ -316,6 +316,7 @@ def vt : SDNode<"ISD::VALUETYPE" , SDTOther , [], "VTSDNode">; def bb : SDNode<"ISD::BasicBlock", SDTOther , [], "BasicBlockSDNode">; def cond : SDNode<"ISD::CONDCODE" , SDTOther , [], "CondCodeSDNode">; def undef : SDNode<"ISD::UNDEF" , SDTUNDEF , []>; +def vscale : SDNode<"ISD::VSCALE" , SDTIntUnaryOp, []>; def globaladdr : SDNode<"ISD::GlobalAddress", SDTPtrLeaf, [], "GlobalAddressSDNode">; def tglobaladdr : SDNode<"ISD::TargetGlobalAddress", SDTPtrLeaf, [], @@ -401,7 +402,9 @@ def smulfixsat : SDNode<"ISD::SMULFIXSAT", SDTIntScaledBinOp, [SDNPCommutative]> def umulfix : SDNode<"ISD::UMULFIX" , SDTIntScaledBinOp, [SDNPCommutative]>; def umulfixsat : SDNode<"ISD::UMULFIXSAT", SDTIntScaledBinOp, [SDNPCommutative]>; def sdivfix : SDNode<"ISD::SDIVFIX" , SDTIntScaledBinOp>; +def sdivfixsat : SDNode<"ISD::SDIVFIXSAT", SDTIntScaledBinOp>; def udivfix : SDNode<"ISD::UDIVFIX" , SDTIntScaledBinOp>; +def udivfixsat : SDNode<"ISD::UDIVFIXSAT", SDTIntScaledBinOp>; def sext_inreg : SDNode<"ISD::SIGN_EXTEND_INREG", SDTExtInreg>; def sext_invec : SDNode<"ISD::SIGN_EXTEND_VECTOR_INREG", SDTExtInvec>; @@ -563,8 +566,6 @@ def br : SDNode<"ISD::BR" , SDTBr, [SDNPHasChain]>; def catchret : SDNode<"ISD::CATCHRET" , SDTCatchret, [SDNPHasChain, SDNPSideEffect]>; def cleanupret : SDNode<"ISD::CLEANUPRET" , SDTNone, [SDNPHasChain]>; -def catchpad : SDNode<"ISD::CATCHPAD" , SDTNone, - [SDNPHasChain, SDNPSideEffect]>; def trap : SDNode<"ISD::TRAP" , SDTNone, [SDNPHasChain, SDNPSideEffect]>; @@ -666,10 +667,11 @@ def intrinsic_w_chain : SDNode<"ISD::INTRINSIC_W_CHAIN", def intrinsic_wo_chain : SDNode<"ISD::INTRINSIC_WO_CHAIN", SDTypeProfile<1, -1, [SDTCisPtrTy<1>]>, []>; -def SDT_assertext : SDTypeProfile<1, 1, +def SDT_assert : SDTypeProfile<1, 1, [SDTCisInt<0>, SDTCisInt<1>, SDTCisSameAs<1, 0>]>; -def assertsext : SDNode<"ISD::AssertSext", SDT_assertext>; -def assertzext : SDNode<"ISD::AssertZext", SDT_assertext>; +def assertsext : SDNode<"ISD::AssertSext", SDT_assert>; +def assertzext : SDNode<"ISD::AssertZext", SDT_assert>; +def assertalign : SDNode<"ISD::AssertAlign", SDT_assert>; //===----------------------------------------------------------------------===// @@ -717,19 +719,6 @@ class SDNodeXForm<SDNode opc, code xformFunction> { def NOOP_SDNodeXForm : SDNodeXForm<imm, [{}]>; //===----------------------------------------------------------------------===// -// PatPred Subclasses. -// -// These allow specifying different sorts of predicates that control whether a -// node is matched. -// -class PatPred; - -class CodePatPred<code predicate> : PatPred { - code PredicateCode = predicate; -} - - -//===----------------------------------------------------------------------===// // Selection DAG Pattern Fragments. // // Pattern fragments are reusable chunks of dags that match specific things. @@ -741,7 +730,7 @@ class CodePatPred<code predicate> : PatPred { /// PatFrags - Represents a set of pattern fragments. Each single fragment /// can match something on the DAG, from a single node to multiple nested other /// fragments. The whole set of fragments matches if any of the single -/// fragemnts match. This allows e.g. matching and "add with overflow" and +/// fragments match. This allows e.g. matching and "add with overflow" and /// a regular "add" with the same fragment set. /// class PatFrags<dag ops, list<dag> frags, code pred = [{}], @@ -959,6 +948,10 @@ def extloadi32 : PatFrag<(ops node:$ptr), (extload node:$ptr)> { let IsLoad = 1; let MemoryVT = i32; } +def extloadf16 : PatFrag<(ops node:$ptr), (extload node:$ptr)> { + let IsLoad = 1; + let MemoryVT = f16; +} def extloadf32 : PatFrag<(ops node:$ptr), (extload node:$ptr)> { let IsLoad = 1; let MemoryVT = f32; @@ -1094,6 +1087,11 @@ def truncstorei32 : PatFrag<(ops node:$val, node:$ptr), let IsStore = 1; let MemoryVT = i32; } +def truncstoref16 : PatFrag<(ops node:$val, node:$ptr), + (truncstore node:$val, node:$ptr)> { + let IsStore = 1; + let MemoryVT = f16; +} def truncstoref32 : PatFrag<(ops node:$val, node:$ptr), (truncstore node:$val, node:$ptr)> { let IsStore = 1; @@ -1424,56 +1422,56 @@ def any_uint_to_fp : PatFrags<(ops node:$src), (uint_to_fp node:$src)]>; multiclass binary_atomic_op_ord<SDNode atomic_op> { - def #NAME#_monotonic : PatFrag<(ops node:$ptr, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$val)> { + def NAME#_monotonic : PatFrag<(ops node:$ptr, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingMonotonic = 1; } - def #NAME#_acquire : PatFrag<(ops node:$ptr, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$val)> { + def NAME#_acquire : PatFrag<(ops node:$ptr, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingAcquire = 1; } - def #NAME#_release : PatFrag<(ops node:$ptr, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$val)> { + def NAME#_release : PatFrag<(ops node:$ptr, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingRelease = 1; } - def #NAME#_acq_rel : PatFrag<(ops node:$ptr, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$val)> { + def NAME#_acq_rel : PatFrag<(ops node:$ptr, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingAcquireRelease = 1; } - def #NAME#_seq_cst : PatFrag<(ops node:$ptr, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$val)> { + def NAME#_seq_cst : PatFrag<(ops node:$ptr, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingSequentiallyConsistent = 1; } } multiclass ternary_atomic_op_ord<SDNode atomic_op> { - def #NAME#_monotonic : PatFrag<(ops node:$ptr, node:$cmp, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$cmp, node:$val)> { + def NAME#_monotonic : PatFrag<(ops node:$ptr, node:$cmp, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$cmp, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingMonotonic = 1; } - def #NAME#_acquire : PatFrag<(ops node:$ptr, node:$cmp, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$cmp, node:$val)> { + def NAME#_acquire : PatFrag<(ops node:$ptr, node:$cmp, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$cmp, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingAcquire = 1; } - def #NAME#_release : PatFrag<(ops node:$ptr, node:$cmp, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$cmp, node:$val)> { + def NAME#_release : PatFrag<(ops node:$ptr, node:$cmp, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$cmp, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingRelease = 1; } - def #NAME#_acq_rel : PatFrag<(ops node:$ptr, node:$cmp, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$cmp, node:$val)> { + def NAME#_acq_rel : PatFrag<(ops node:$ptr, node:$cmp, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$cmp, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingAcquireRelease = 1; } - def #NAME#_seq_cst : PatFrag<(ops node:$ptr, node:$cmp, node:$val), - (!cast<SDPatternOperator>(#NAME) node:$ptr, node:$cmp, node:$val)> { + def NAME#_seq_cst : PatFrag<(ops node:$ptr, node:$cmp, node:$val), + (!cast<SDPatternOperator>(NAME) node:$ptr, node:$cmp, node:$val)> { let IsAtomic = 1; let IsAtomicOrderingSequentiallyConsistent = 1; } |