1 // RUN: split-file %s %t
4 // RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %t/no-nodes.td \
5 // RUN: | FileCheck %t/no-nodes.td
7 include "llvm/Target/Target.td"
11 // CHECK: #ifdef GET_SDNODE_ENUM
12 // CHECK-NEXT: #undef GET_SDNODE_ENUM
14 // CHECK-NEXT: namespace llvm::MyTargetISD {
16 // CHECK-NEXT: static constexpr unsigned GENERATED_OPCODE_END = ISD::BUILTIN_OP_END;
18 // CHECK-NEXT: } // namespace llvm::MyTargetISD
20 // CHECK-NEXT: #endif // GET_SDNODE_ENUM
22 // CHECK-NEXT: #ifdef GET_SDNODE_DESC
23 // CHECK-NEXT: #undef GET_SDNODE_DESC
25 // CHECK-NEXT: namespace llvm {
27 // CHECK-NEXT: #ifdef __GNUC__
28 // CHECK-NEXT: #pragma GCC diagnostic push
29 // CHECK-NEXT: #pragma GCC diagnostic ignored "-Woverlength-strings"
31 // CHECK-NEXT: static constexpr char MyTargetSDNodeNamesStorage[] =
34 // CHECK-NEXT: #ifdef __GNUC__
35 // CHECK-NEXT: #pragma GCC diagnostic pop
38 // CHECK-NEXT: static constexpr llvm::StringTable MyTargetSDNodeNames =
39 // CHECK-NEXT: MyTargetSDNodeNamesStorage;
41 // CHECK-NEXT: static const SDTypeConstraint MyTargetSDTypeConstraints[] = {
42 // CHECK-NEXT: /* dummy */ {SDTCisVT, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}
45 // CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = {
48 // CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo(
49 // CHECK-NEXT: /*NumOpcodes=*/0, MyTargetSDNodeDescs,
50 // CHECK-NEXT: MyTargetSDNodeNames, MyTargetSDTypeConstraints);
52 // CHECK-NEXT: } // namespace llvm
54 // CHECK-NEXT: #endif // GET_SDNODE_DESC
58 // RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %t/trivial-node.td \
59 // RUN: | FileCheck %t/trivial-node.td
61 include "llvm/Target/Target.td"
63 def MyTarget : Target;
65 def my_noop : SDNode<"MyTargetISD::NOOP", SDTypeProfile<0, 0, []>>;
67 // CHECK: namespace llvm::MyTargetISD {
69 // CHECK-NEXT: enum GenNodeType : unsigned {
70 // CHECK-NEXT: NOOP = ISD::BUILTIN_OP_END,
73 // CHECK-NEXT: static constexpr unsigned GENERATED_OPCODE_END = NOOP + 1;
75 // CHECK-NEXT: } // namespace llvm::MyTargetISD
77 // CHECK: static constexpr char MyTargetSDNodeNamesStorage[] =
79 // CHECK-NEXT: "MyTargetISD::NOOP\0"
82 // CHECK: static const SDTypeConstraint MyTargetSDTypeConstraints[] = {
83 // CHECK-NEXT: /* dummy */ {SDTCisVT, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}
86 // CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = {
87 // CHECK-NEXT: {0, 0, 0, 0, 0, 1, 0, 0}, // NOOP
90 // CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo(
91 // CHECK-NEXT: /*NumOpcodes=*/1, MyTargetSDNodeDescs,
92 // CHECK-NEXT: MyTargetSDNodeNames, MyTargetSDTypeConstraints);
95 // RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %t/advanced.td \
96 // RUN: | FileCheck %t/advanced.td
98 include "llvm/Target/Target.td"
100 def MyTarget : Target;
102 def my_node_1 : SDNode<
103 "MyTargetISD::NODE_1",
104 SDTypeProfile<1, 1, [SDTCisVT<0, i1>, SDTCisVT<1, i2>]>,
109 def my_node_2 : SDNode<
110 "MyTargetISD::NODE_2",
111 SDTypeProfile<3, 1, [
112 // Prefix of my_node_3 constraints.
118 [SDNPMayStore, SDNPMayLoad, SDNPSideEffect,
119 SDNPMemOperand, SDNPVariadic]
122 let IsStrictFP = true, TSFlags = 24 in
123 def my_node_3 : SDNode<
124 "MyTargetISD::NODE_3",
125 SDTypeProfile<2, -1, [
132 SDTCisVTSmallerThanOp<8, 7>,
133 SDTCisOpSmallerThanOp<10, 9>,
134 SDTCisEltOfVec<12, 11>,
135 SDTCisSubVecOfVec<14, 13>,
136 SDTCVecEltisVT<15, i32>,
137 SDTCisSameNumEltsAs<17, 16>,
138 SDTCisSameSizeAs<19, 18>,
140 [SDNPCommutative, SDNPAssociative, SDNPHasChain,
141 SDNPOutGlue, SDNPInGlue, SDNPOptInGlue]
144 // CHECK: namespace llvm::MyTargetISD {
146 // CHECK-NEXT: enum GenNodeType : unsigned {
147 // CHECK-NEXT: NODE_1 = ISD::BUILTIN_OP_END,
148 // CHECK-NEXT: NODE_2,
149 // CHECK-NEXT: NODE_3,
152 // CHECK-NEXT: static constexpr unsigned GENERATED_OPCODE_END = NODE_3 + 1;
154 // CHECK-NEXT: } // namespace llvm::MyTargetISD
156 // CHECK: static constexpr char MyTargetSDNodeNamesStorage[] =
158 // CHECK-NEXT: "MyTargetISD::NODE_1\0"
159 // CHECK-NEXT: "MyTargetISD::NODE_2\0"
160 // CHECK-NEXT: "MyTargetISD::NODE_3\0"
163 // CHECK: static const SDTypeConstraint MyTargetSDTypeConstraints[] = {
164 // CHECK-NEXT: /* 0 */ {SDTCisVT, 1, 0, MVT::i2},
165 // CHECK-SAME: {SDTCisVT, 0, 0, MVT::i1},
166 // CHECK-NEXT: /* 2 */ {SDTCisSameSizeAs, 19, 18, MVT::INVALID_SIMPLE_VALUE_TYPE},
167 // CHECK-SAME: {SDTCisSameNumEltsAs, 17, 16, MVT::INVALID_SIMPLE_VALUE_TYPE},
168 // CHECK-SAME: {SDTCVecEltisVT, 15, 0, MVT::i32},
169 // CHECK-SAME: {SDTCisSubVecOfVec, 14, 13, MVT::INVALID_SIMPLE_VALUE_TYPE},
170 // CHECK-SAME: {SDTCisEltOfVec, 12, 11, MVT::INVALID_SIMPLE_VALUE_TYPE},
171 // CHECK-SAME: {SDTCisOpSmallerThanOp, 10, 9, MVT::INVALID_SIMPLE_VALUE_TYPE},
172 // CHECK-SAME: {SDTCisVTSmallerThanOp, 8, 7, MVT::INVALID_SIMPLE_VALUE_TYPE},
173 // CHECK-SAME: {SDTCisSameAs, 6, 5, MVT::INVALID_SIMPLE_VALUE_TYPE},
174 // CHECK-SAME: {SDTCisVec, 4, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},
175 // CHECK-SAME: {SDTCisFP, 3, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},
176 // CHECK-SAME: {SDTCisInt, 2, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},
177 // CHECK-SAME: {SDTCisPtrTy, 1, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},
178 // CHECK-SAME: {SDTCisVT, 0, 0, MVT::i1},
181 // CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = {
182 // CHECK-NEXT: {1, 1, 0|1<<SDNPHasChain, 0, 0, 1, 0, 2}, // NODE_1
183 // CHECK-NEXT: {3, 1, 0|1<<SDNPVariadic|1<<SDNPMemOperand, 0, 42, 21, 11, 4}, // NODE_2
184 // CHECK-NEXT: {2, -1, 0|1<<SDNPHasChain|1<<SDNPOutGlue|1<<SDNPInGlue|1<<SDNPOptInGlue, 0|1<<SDNFIsStrictFP, 24, 41, 2, 13}, // NODE_3
187 // CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo(
188 // CHECK-NEXT: /*NumOpcodes=*/3, MyTargetSDNodeDescs,
189 // CHECK-NEXT: MyTargetSDNodeNames, MyTargetSDTypeConstraints);