16aeffcdbSSergei Barannikov// RUN: split-file %s %t 26aeffcdbSSergei Barannikov 36aeffcdbSSergei Barannikov//--- no-nodes.td 46aeffcdbSSergei Barannikov// RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %t/no-nodes.td \ 56aeffcdbSSergei Barannikov// RUN: | FileCheck %t/no-nodes.td 66aeffcdbSSergei Barannikov 76aeffcdbSSergei Barannikovinclude "llvm/Target/Target.td" 86aeffcdbSSergei Barannikov 96aeffcdbSSergei Barannikovdef MyTarget : Target; 106aeffcdbSSergei Barannikov 116aeffcdbSSergei Barannikov// CHECK: #ifdef GET_SDNODE_ENUM 126aeffcdbSSergei Barannikov// CHECK-NEXT: #undef GET_SDNODE_ENUM 136aeffcdbSSergei Barannikov// CHECK-EMPTY: 146aeffcdbSSergei Barannikov// CHECK-NEXT: namespace llvm::MyTargetISD { 156aeffcdbSSergei Barannikov// CHECK-EMPTY: 166aeffcdbSSergei Barannikov// CHECK-NEXT: static constexpr unsigned GENERATED_OPCODE_END = ISD::BUILTIN_OP_END; 176aeffcdbSSergei Barannikov// CHECK-EMPTY: 186aeffcdbSSergei Barannikov// CHECK-NEXT: } // namespace llvm::MyTargetISD 196aeffcdbSSergei Barannikov// CHECK-EMPTY: 206aeffcdbSSergei Barannikov// CHECK-NEXT: #endif // GET_SDNODE_ENUM 216aeffcdbSSergei Barannikov// CHECK-EMPTY: 226aeffcdbSSergei Barannikov// CHECK-NEXT: #ifdef GET_SDNODE_DESC 236aeffcdbSSergei Barannikov// CHECK-NEXT: #undef GET_SDNODE_DESC 246aeffcdbSSergei Barannikov// CHECK-EMPTY: 256aeffcdbSSergei Barannikov// CHECK-NEXT: namespace llvm { 266aeffcdbSSergei Barannikov// CHECK-EMPTY: 276aeffcdbSSergei Barannikov// CHECK-NEXT: #ifdef __GNUC__ 286aeffcdbSSergei Barannikov// CHECK-NEXT: #pragma GCC diagnostic push 296aeffcdbSSergei Barannikov// CHECK-NEXT: #pragma GCC diagnostic ignored "-Woverlength-strings" 306aeffcdbSSergei Barannikov// CHECK-NEXT: #endif 31*f4de28a6SChandler Carruth// CHECK-NEXT: static constexpr char MyTargetSDNodeNamesStorage[] = 32*f4de28a6SChandler Carruth// CHECK-NEXT: "\0" 33*f4de28a6SChandler Carruth// CHECK-NEXT: ; 346aeffcdbSSergei Barannikov// CHECK-NEXT: #ifdef __GNUC__ 356aeffcdbSSergei Barannikov// CHECK-NEXT: #pragma GCC diagnostic pop 366aeffcdbSSergei Barannikov// CHECK-NEXT: #endif 376aeffcdbSSergei Barannikov// CHECK-EMPTY: 38*f4de28a6SChandler Carruth// CHECK-NEXT: static constexpr llvm::StringTable MyTargetSDNodeNames = 39*f4de28a6SChandler Carruth// CHECK-NEXT: MyTargetSDNodeNamesStorage; 40*f4de28a6SChandler Carruth// CHECK-EMPTY: 416aeffcdbSSergei Barannikov// CHECK-NEXT: static const SDTypeConstraint MyTargetSDTypeConstraints[] = { 426aeffcdbSSergei Barannikov// CHECK-NEXT: /* dummy */ {SDTCisVT, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE} 436aeffcdbSSergei Barannikov// CHECK-NEXT: }; 446aeffcdbSSergei Barannikov// CHECK-EMPTY: 456aeffcdbSSergei Barannikov// CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = { 466aeffcdbSSergei Barannikov// CHECK-NEXT: }; 476aeffcdbSSergei Barannikov// CHECK-EMPTY: 486aeffcdbSSergei Barannikov// CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo( 496aeffcdbSSergei Barannikov// CHECK-NEXT: /*NumOpcodes=*/0, MyTargetSDNodeDescs, 506aeffcdbSSergei Barannikov// CHECK-NEXT: MyTargetSDNodeNames, MyTargetSDTypeConstraints); 516aeffcdbSSergei Barannikov// CHECK-EMPTY: 526aeffcdbSSergei Barannikov// CHECK-NEXT: } // namespace llvm 536aeffcdbSSergei Barannikov// CHECK-EMPTY: 546aeffcdbSSergei Barannikov// CHECK-NEXT: #endif // GET_SDNODE_DESC 556aeffcdbSSergei Barannikov 566aeffcdbSSergei Barannikov 576aeffcdbSSergei Barannikov//--- trivial-node.td 586aeffcdbSSergei Barannikov// RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %t/trivial-node.td \ 596aeffcdbSSergei Barannikov// RUN: | FileCheck %t/trivial-node.td 606aeffcdbSSergei Barannikov 616aeffcdbSSergei Barannikovinclude "llvm/Target/Target.td" 626aeffcdbSSergei Barannikov 636aeffcdbSSergei Barannikovdef MyTarget : Target; 646aeffcdbSSergei Barannikov 656aeffcdbSSergei Barannikovdef my_noop : SDNode<"MyTargetISD::NOOP", SDTypeProfile<0, 0, []>>; 666aeffcdbSSergei Barannikov 676aeffcdbSSergei Barannikov// CHECK: namespace llvm::MyTargetISD { 686aeffcdbSSergei Barannikov// CHECK-EMPTY: 696aeffcdbSSergei Barannikov// CHECK-NEXT: enum GenNodeType : unsigned { 706aeffcdbSSergei Barannikov// CHECK-NEXT: NOOP = ISD::BUILTIN_OP_END, 716aeffcdbSSergei Barannikov// CHECK-NEXT: }; 726aeffcdbSSergei Barannikov// CHECK-EMPTY: 736aeffcdbSSergei Barannikov// CHECK-NEXT: static constexpr unsigned GENERATED_OPCODE_END = NOOP + 1; 746aeffcdbSSergei Barannikov// CHECK-EMPTY: 756aeffcdbSSergei Barannikov// CHECK-NEXT: } // namespace llvm::MyTargetISD 766aeffcdbSSergei Barannikov 77*f4de28a6SChandler Carruth// CHECK: static constexpr char MyTargetSDNodeNamesStorage[] = 78*f4de28a6SChandler Carruth// CHECK-NEXT: "\0" 796aeffcdbSSergei Barannikov// CHECK-NEXT: "MyTargetISD::NOOP\0" 80*f4de28a6SChandler Carruth// CHECK-NEXT: ; 816aeffcdbSSergei Barannikov 826aeffcdbSSergei Barannikov// CHECK: static const SDTypeConstraint MyTargetSDTypeConstraints[] = { 836aeffcdbSSergei Barannikov// CHECK-NEXT: /* dummy */ {SDTCisVT, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE} 846aeffcdbSSergei Barannikov// CHECK-NEXT: }; 856aeffcdbSSergei Barannikov// CHECK-EMPTY: 866aeffcdbSSergei Barannikov// CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = { 87*f4de28a6SChandler Carruth// CHECK-NEXT: {0, 0, 0, 0, 0, 1, 0, 0}, // NOOP 886aeffcdbSSergei Barannikov// CHECK-NEXT: }; 896aeffcdbSSergei Barannikov// CHECK-EMPTY: 906aeffcdbSSergei Barannikov// CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo( 916aeffcdbSSergei Barannikov// CHECK-NEXT: /*NumOpcodes=*/1, MyTargetSDNodeDescs, 926aeffcdbSSergei Barannikov// CHECK-NEXT: MyTargetSDNodeNames, MyTargetSDTypeConstraints); 936aeffcdbSSergei Barannikov 946aeffcdbSSergei Barannikov//--- advanced.td 956aeffcdbSSergei Barannikov// RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %t/advanced.td \ 966aeffcdbSSergei Barannikov// RUN: | FileCheck %t/advanced.td 976aeffcdbSSergei Barannikov 986aeffcdbSSergei Barannikovinclude "llvm/Target/Target.td" 996aeffcdbSSergei Barannikov 1006aeffcdbSSergei Barannikovdef MyTarget : Target; 1016aeffcdbSSergei Barannikov 1026aeffcdbSSergei Barannikovdef my_node_1 : SDNode< 1036aeffcdbSSergei Barannikov "MyTargetISD::NODE_1", 1046aeffcdbSSergei Barannikov SDTypeProfile<1, 1, [SDTCisVT<0, i1>, SDTCisVT<1, i2>]>, 1056aeffcdbSSergei Barannikov [SDNPHasChain] 1066aeffcdbSSergei Barannikov>; 1076aeffcdbSSergei Barannikov 1086aeffcdbSSergei Barannikovlet TSFlags = 42 in 1096aeffcdbSSergei Barannikovdef my_node_2 : SDNode< 1106aeffcdbSSergei Barannikov "MyTargetISD::NODE_2", 1116aeffcdbSSergei Barannikov SDTypeProfile<3, 1, [ 1126aeffcdbSSergei Barannikov // Prefix of my_node_3 constraints. 1136aeffcdbSSergei Barannikov SDTCisVT<0, i1>, 1146aeffcdbSSergei Barannikov SDTCisPtrTy<1>, 1156aeffcdbSSergei Barannikov SDTCisInt<2>, 1166aeffcdbSSergei Barannikov SDTCisFP<3>, 1176aeffcdbSSergei Barannikov ]>, 1186aeffcdbSSergei Barannikov [SDNPMayStore, SDNPMayLoad, SDNPSideEffect, 1196aeffcdbSSergei Barannikov SDNPMemOperand, SDNPVariadic] 1206aeffcdbSSergei Barannikov>; 1216aeffcdbSSergei Barannikov 1226aeffcdbSSergei Barannikovlet IsStrictFP = true, TSFlags = 24 in 1236aeffcdbSSergei Barannikovdef my_node_3 : SDNode< 1246aeffcdbSSergei Barannikov "MyTargetISD::NODE_3", 1256aeffcdbSSergei Barannikov SDTypeProfile<2, -1, [ 1266aeffcdbSSergei Barannikov SDTCisVT<0, i1>, 1276aeffcdbSSergei Barannikov SDTCisPtrTy<1>, 1286aeffcdbSSergei Barannikov SDTCisInt<2>, 1296aeffcdbSSergei Barannikov SDTCisFP<3>, 1306aeffcdbSSergei Barannikov SDTCisVec<4>, 1316aeffcdbSSergei Barannikov SDTCisSameAs<6, 5>, 1326aeffcdbSSergei Barannikov SDTCisVTSmallerThanOp<8, 7>, 1336aeffcdbSSergei Barannikov SDTCisOpSmallerThanOp<10, 9>, 1346aeffcdbSSergei Barannikov SDTCisEltOfVec<12, 11>, 1356aeffcdbSSergei Barannikov SDTCisSubVecOfVec<14, 13>, 1366aeffcdbSSergei Barannikov SDTCVecEltisVT<15, i32>, 1376aeffcdbSSergei Barannikov SDTCisSameNumEltsAs<17, 16>, 1386aeffcdbSSergei Barannikov SDTCisSameSizeAs<19, 18>, 1396aeffcdbSSergei Barannikov ]>, 1406aeffcdbSSergei Barannikov [SDNPCommutative, SDNPAssociative, SDNPHasChain, 1416aeffcdbSSergei Barannikov SDNPOutGlue, SDNPInGlue, SDNPOptInGlue] 1426aeffcdbSSergei Barannikov>; 1436aeffcdbSSergei Barannikov 1446aeffcdbSSergei Barannikov// CHECK: namespace llvm::MyTargetISD { 1456aeffcdbSSergei Barannikov// CHECK-EMPTY: 1466aeffcdbSSergei Barannikov// CHECK-NEXT: enum GenNodeType : unsigned { 1476aeffcdbSSergei Barannikov// CHECK-NEXT: NODE_1 = ISD::BUILTIN_OP_END, 1486aeffcdbSSergei Barannikov// CHECK-NEXT: NODE_2, 1496aeffcdbSSergei Barannikov// CHECK-NEXT: NODE_3, 1506aeffcdbSSergei Barannikov// CHECK-NEXT: }; 1516aeffcdbSSergei Barannikov// CHECK-EMPTY: 1526aeffcdbSSergei Barannikov// CHECK-NEXT: static constexpr unsigned GENERATED_OPCODE_END = NODE_3 + 1; 1536aeffcdbSSergei Barannikov// CHECK-EMPTY: 1546aeffcdbSSergei Barannikov// CHECK-NEXT: } // namespace llvm::MyTargetISD 1556aeffcdbSSergei Barannikov 156*f4de28a6SChandler Carruth// CHECK: static constexpr char MyTargetSDNodeNamesStorage[] = 157*f4de28a6SChandler Carruth// CHECK-NEXT: "\0" 1586aeffcdbSSergei Barannikov// CHECK-NEXT: "MyTargetISD::NODE_1\0" 1596aeffcdbSSergei Barannikov// CHECK-NEXT: "MyTargetISD::NODE_2\0" 1606aeffcdbSSergei Barannikov// CHECK-NEXT: "MyTargetISD::NODE_3\0" 161*f4de28a6SChandler Carruth// CHECK-NEXT: ; 1626aeffcdbSSergei Barannikov 1636aeffcdbSSergei Barannikov// CHECK: static const SDTypeConstraint MyTargetSDTypeConstraints[] = { 1646aeffcdbSSergei Barannikov// CHECK-NEXT: /* 0 */ {SDTCisVT, 1, 0, MVT::i2}, 1656aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisVT, 0, 0, MVT::i1}, 1666aeffcdbSSergei Barannikov// CHECK-NEXT: /* 2 */ {SDTCisSameSizeAs, 19, 18, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1676aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisSameNumEltsAs, 17, 16, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1686aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCVecEltisVT, 15, 0, MVT::i32}, 1696aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisSubVecOfVec, 14, 13, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1706aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisEltOfVec, 12, 11, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1716aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisOpSmallerThanOp, 10, 9, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1726aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisVTSmallerThanOp, 8, 7, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1736aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisSameAs, 6, 5, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1746aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisVec, 4, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1756aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisFP, 3, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1766aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisInt, 2, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1776aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisPtrTy, 1, 0, MVT::INVALID_SIMPLE_VALUE_TYPE}, 1786aeffcdbSSergei Barannikov// CHECK-SAME: {SDTCisVT, 0, 0, MVT::i1}, 1796aeffcdbSSergei Barannikov// CHECK-NEXT: }; 1806aeffcdbSSergei Barannikov// CHECK-EMPTY: 1816aeffcdbSSergei Barannikov// CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = { 182*f4de28a6SChandler Carruth// CHECK-NEXT: {1, 1, 0|1<<SDNPHasChain, 0, 0, 1, 0, 2}, // NODE_1 183*f4de28a6SChandler Carruth// CHECK-NEXT: {3, 1, 0|1<<SDNPVariadic|1<<SDNPMemOperand, 0, 42, 21, 11, 4}, // NODE_2 184*f4de28a6SChandler Carruth// CHECK-NEXT: {2, -1, 0|1<<SDNPHasChain|1<<SDNPOutGlue|1<<SDNPInGlue|1<<SDNPOptInGlue, 0|1<<SDNFIsStrictFP, 24, 41, 2, 13}, // NODE_3 1856aeffcdbSSergei Barannikov// CHECK-NEXT: }; 1866aeffcdbSSergei Barannikov// CHECK-EMPTY: 1876aeffcdbSSergei Barannikov// CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo( 1886aeffcdbSSergei Barannikov// CHECK-NEXT: /*NumOpcodes=*/3, MyTargetSDNodeDescs, 1896aeffcdbSSergei Barannikov// CHECK-NEXT: MyTargetSDNodeNames, MyTargetSDTypeConstraints); 190