[ELF] Add BPSectionOrderer options (#125559)
[llvm-project.git] / llvm / test / TableGen / SDNodeInfoEmitter / basic.td
blobb8bff520bbcaa4859322a09b407447ba8b5f7ef3
1 // RUN: split-file %s %t
3 //--- no-nodes.td
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"
9 def MyTarget : Target;
11 // CHECK:       #ifdef GET_SDNODE_ENUM
12 // CHECK-NEXT:  #undef GET_SDNODE_ENUM
13 // CHECK-EMPTY:
14 // CHECK-NEXT:  namespace llvm::MyTargetISD {
15 // CHECK-EMPTY:
16 // CHECK-NEXT:  static constexpr unsigned GENERATED_OPCODE_END = ISD::BUILTIN_OP_END;
17 // CHECK-EMPTY:
18 // CHECK-NEXT:  } // namespace llvm::MyTargetISD
19 // CHECK-EMPTY:
20 // CHECK-NEXT:  #endif // GET_SDNODE_ENUM
21 // CHECK-EMPTY:
22 // CHECK-NEXT:  #ifdef GET_SDNODE_DESC
23 // CHECK-NEXT:  #undef GET_SDNODE_DESC
24 // CHECK-EMPTY:
25 // CHECK-NEXT:  namespace llvm {
26 // CHECK-EMPTY:
27 // CHECK-NEXT:  #ifdef __GNUC__
28 // CHECK-NEXT:  #pragma GCC diagnostic push
29 // CHECK-NEXT:  #pragma GCC diagnostic ignored "-Woverlength-strings"
30 // CHECK-NEXT:  #endif
31 // CHECK-NEXT:  static constexpr char MyTargetSDNodeNamesStorage[] =
32 // CHECK-NEXT:    "\0"
33 // CHECK-NEXT:    ;
34 // CHECK-NEXT:  #ifdef __GNUC__
35 // CHECK-NEXT:  #pragma GCC diagnostic pop
36 // CHECK-NEXT:  #endif
37 // CHECK-EMPTY:
38 // CHECK-NEXT:  static constexpr llvm::StringTable MyTargetSDNodeNames =
39 // CHECK-NEXT:      MyTargetSDNodeNamesStorage;
40 // CHECK-EMPTY:
41 // CHECK-NEXT:  static const SDTypeConstraint MyTargetSDTypeConstraints[] = {
42 // CHECK-NEXT:    /* dummy */ {SDTCisVT, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}
43 // CHECK-NEXT:  };
44 // CHECK-EMPTY:
45 // CHECK-NEXT:  static const SDNodeDesc MyTargetSDNodeDescs[] = {
46 // CHECK-NEXT:  };
47 // CHECK-EMPTY:
48 // CHECK-NEXT:  static const SDNodeInfo MyTargetGenSDNodeInfo(
49 // CHECK-NEXT:      /*NumOpcodes=*/0, MyTargetSDNodeDescs,
50 // CHECK-NEXT:      MyTargetSDNodeNames, MyTargetSDTypeConstraints);
51 // CHECK-EMPTY:
52 // CHECK-NEXT:  } // namespace llvm
53 // CHECK-EMPTY:
54 // CHECK-NEXT:  #endif // GET_SDNODE_DESC
57 //--- trivial-node.td
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 {
68 // CHECK-EMPTY:
69 // CHECK-NEXT:  enum GenNodeType : unsigned {
70 // CHECK-NEXT:    NOOP = ISD::BUILTIN_OP_END,
71 // CHECK-NEXT:  };
72 // CHECK-EMPTY:
73 // CHECK-NEXT:  static constexpr unsigned GENERATED_OPCODE_END = NOOP + 1;
74 // CHECK-EMPTY:
75 // CHECK-NEXT:  } // namespace llvm::MyTargetISD
77 // CHECK:       static constexpr char MyTargetSDNodeNamesStorage[] =
78 // CHECK-NEXT:    "\0"
79 // CHECK-NEXT:    "MyTargetISD::NOOP\0"
80 // CHECK-NEXT:    ;
82 // CHECK:       static const SDTypeConstraint MyTargetSDTypeConstraints[] = {
83 // CHECK-NEXT:    /* dummy */ {SDTCisVT, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}
84 // CHECK-NEXT:  };
85 // CHECK-EMPTY:
86 // CHECK-NEXT:  static const SDNodeDesc MyTargetSDNodeDescs[] = {
87 // CHECK-NEXT:      {0, 0, 0, 0, 0, 1, 0, 0}, // NOOP
88 // CHECK-NEXT:  };
89 // CHECK-EMPTY:
90 // CHECK-NEXT:  static const SDNodeInfo MyTargetGenSDNodeInfo(
91 // CHECK-NEXT:      /*NumOpcodes=*/1, MyTargetSDNodeDescs,
92 // CHECK-NEXT:      MyTargetSDNodeNames, MyTargetSDTypeConstraints);
94 //--- advanced.td
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>]>,
105     [SDNPHasChain]
108 let TSFlags = 42 in
109 def my_node_2 : SDNode<
110     "MyTargetISD::NODE_2",
111     SDTypeProfile<3, 1, [
112         // Prefix of my_node_3 constraints.
113         SDTCisVT<0, i1>,
114         SDTCisPtrTy<1>,
115         SDTCisInt<2>,
116         SDTCisFP<3>,
117     ]>,
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, [
126         SDTCisVT<0, i1>,
127         SDTCisPtrTy<1>,
128         SDTCisInt<2>,
129         SDTCisFP<3>,
130         SDTCisVec<4>,
131         SDTCisSameAs<6, 5>,
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>,
139     ]>,
140     [SDNPCommutative, SDNPAssociative, SDNPHasChain,
141      SDNPOutGlue, SDNPInGlue, SDNPOptInGlue]
144 // CHECK:       namespace llvm::MyTargetISD {
145 // CHECK-EMPTY:
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,
150 // CHECK-NEXT:  };
151 // CHECK-EMPTY:
152 // CHECK-NEXT:  static constexpr unsigned GENERATED_OPCODE_END = NODE_3 + 1;
153 // CHECK-EMPTY:
154 // CHECK-NEXT:  } // namespace llvm::MyTargetISD
156 // CHECK:       static constexpr char MyTargetSDNodeNamesStorage[] =
157 // CHECK-NEXT:    "\0"
158 // CHECK-NEXT:    "MyTargetISD::NODE_1\0"
159 // CHECK-NEXT:    "MyTargetISD::NODE_2\0"
160 // CHECK-NEXT:    "MyTargetISD::NODE_3\0"
161 // CHECK-NEXT:    ;
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},
179 // CHECK-NEXT:  };
180 // CHECK-EMPTY:
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
185 // CHECK-NEXT:  };
186 // CHECK-EMPTY:
187 // CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo(
188 // CHECK-NEXT:     /*NumOpcodes=*/3, MyTargetSDNodeDescs,
189 // CHECK-NEXT:     MyTargetSDNodeNames, MyTargetSDTypeConstraints);