99 lines · plain
1// RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %s | FileCheck %s2 3include "llvm/Target/Target.td"4 5def MyTarget : Target;6 7def my_node_1 : SDNode<8 "MyTargetISD::NODE_1",9 SDTypeProfile<1, 1, [SDTCisVT<0, i1>, SDTCisVT<1, i2>]>,10 [SDNPHasChain]11>;12 13let TSFlags = 42 in14def my_node_2 : SDNode<15 "MyTargetISD::NODE_2",16 SDTypeProfile<3, 1, [17 // Prefix of my_node_3 constraints.18 SDTCisVT<0, i1>,19 SDTCisPtrTy<1>,20 SDTCisInt<2>,21 SDTCisFP<3>,22 ]>,23 [SDNPMayStore, SDNPMayLoad, SDNPSideEffect,24 SDNPMemOperand, SDNPVariadic]25>;26 27let IsStrictFP = true, TSFlags = 24 in28def my_node_3 : SDNode<29 "MyTargetISD::NODE_3",30 SDTypeProfile<2, -1, [31 SDTCisVT<0, i1>,32 SDTCisPtrTy<1>,33 SDTCisInt<2>,34 SDTCisFP<3>,35 SDTCisVec<4>,36 SDTCisSameAs<6, 5>,37 SDTCisVTSmallerThanOp<8, 7>,38 SDTCisOpSmallerThanOp<10, 9>,39 SDTCisEltOfVec<12, 11>,40 SDTCisSubVecOfVec<14, 13>,41 SDTCVecEltisVT<15, i32>,42 SDTCisSameNumEltsAs<17, 16>,43 SDTCisSameSizeAs<19, 18>,44 ]>,45 [SDNPCommutative, SDNPAssociative, SDNPHasChain,46 SDNPOutGlue, SDNPInGlue, SDNPOptInGlue]47>;48 49// CHECK: namespace llvm::MyTargetISD {50// CHECK-EMPTY:51// CHECK-NEXT: enum GenNodeType : unsigned {52// CHECK-NEXT: NODE_1 = ISD::BUILTIN_OP_END,53// CHECK-NEXT: NODE_2,54// CHECK-NEXT: NODE_3,55// CHECK-NEXT: };56// CHECK-EMPTY:57// CHECK-NEXT: static constexpr unsigned GENERATED_OPCODE_END = NODE_3 + 1;58// CHECK-EMPTY:59// CHECK-NEXT: } // namespace llvm::MyTargetISD60 61// CHECK: static constexpr char MyTargetSDNodeNamesStorage[] =62// CHECK-NEXT: "\0"63// CHECK-NEXT: "MyTargetISD::NODE_1\0"64// CHECK-NEXT: "MyTargetISD::NODE_2\0"65// CHECK-NEXT: "MyTargetISD::NODE_3\0"66// CHECK-NEXT: ;67 68// CHECK: static const VTByHwModePair MyTargetVTByHwModeTable[] = {69// CHECK-NEXT: /* dummy */ {0, MVT::INVALID_SIMPLE_VALUE_TYPE}70// CHECK-NEXT: };71// CHECK-EMPTY:72// CHECK-NEXT: static const SDTypeConstraint MyTargetSDTypeConstraints[] = {73// CHECK-NEXT: /* 0 */ {SDTCisVT, 1, 0, 0, MVT::i2},74// CHECK-SAME: {SDTCisVT, 0, 0, 0, MVT::i1},75// CHECK-NEXT: /* 2 */ {SDTCisSameSizeAs, 19, 18, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},76// CHECK-SAME: {SDTCisSameNumEltsAs, 17, 16, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},77// CHECK-SAME: {SDTCVecEltisVT, 15, 0, 0, MVT::i32},78// CHECK-SAME: {SDTCisSubVecOfVec, 14, 13, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},79// CHECK-SAME: {SDTCisEltOfVec, 12, 11, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},80// CHECK-SAME: {SDTCisOpSmallerThanOp, 10, 9, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},81// CHECK-SAME: {SDTCisVTSmallerThanOp, 8, 7, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},82// CHECK-SAME: {SDTCisSameAs, 6, 5, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},83// CHECK-SAME: {SDTCisVec, 4, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},84// CHECK-SAME: {SDTCisFP, 3, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},85// CHECK-SAME: {SDTCisInt, 2, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},86// CHECK-SAME: {SDTCisPtrTy, 1, 0, 0, MVT::INVALID_SIMPLE_VALUE_TYPE},87// CHECK-SAME: {SDTCisVT, 0, 0, 0, MVT::i1},88// CHECK-NEXT: };89// CHECK-EMPTY:90// CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = {91// CHECK-NEXT: {1, 1, 0|1<<SDNPHasChain, 0, 0, 1, 0, 2}, // NODE_192// CHECK-NEXT: {3, 1, 0|1<<SDNPVariadic|1<<SDNPMemOperand, 0, 42, 21, 11, 4}, // NODE_293// CHECK-NEXT: {2, -1, 0|1<<SDNPHasChain|1<<SDNPOutGlue|1<<SDNPInGlue|1<<SDNPOptInGlue, 0|1<<SDNFIsStrictFP, 24, 41, 2, 13}, // NODE_394// CHECK-NEXT: };95// CHECK-EMPTY:96// CHECK-NEXT: static const SDNodeInfo MyTargetGenSDNodeInfo(97// CHECK-NEXT: /*NumOpcodes=*/3, MyTargetSDNodeDescs, MyTargetSDNodeNames,98// CHECK-NEXT: MyTargetVTByHwModeTable, MyTargetSDTypeConstraints);99