// RUN: llvm-tblgen -gen-sd-node-info -I %p/../../../include %s | FileCheck %s include "llvm/Target/Target.td" def MyTarget : Target; def M1 : HwMode<[]>; def M2 : HwMode<[]>; def M3 : HwMode<[]>; def VT1 : ValueTypeByHwMode<[M1], [i1]>; def VT2 : ValueTypeByHwMode<[M2], [i2]>; def VT3 : ValueTypeByHwMode<[M1, M2, M3, DefaultMode], [i1, i2, i4, i8]>; def my_node_1 : SDNode< "MyTargetISD::NODE_1", SDTypeProfile<0, 5, [ SDTCVecEltisVT<0, VT3>, SDTCisVT<1, i1>, SDTCVecEltisVT<2, i2>, SDTCisVT<3, VT1>, SDTCVecEltisVT<4, VT2>, ]> >; def my_node_2 : SDNode< "MyTargetISD::NODE_2", SDTypeProfile<1, 2, [ SDTCVecEltisVT<0, VT3>, SDTCisVT<1, i1>, SDTCVecEltisVT<2, i2>, ]> >; def my_node_3 : SDNode< "MyTargetISD::NODE_3", SDTypeProfile<1, 0, [ SDTCisVT<0, VT3>, ]> >; // CHECK: static const VTByHwModePair MyTargetVTByHwModeTable[] = { // CHECK-NEXT: /* 0 */ {0, MVT::i8}, {1, MVT::i1}, {2, MVT::i2}, {3, MVT::i4}, // CHECK-NEXT: /* 4 */ {1, MVT::i1}, // CHECK-NEXT: /* 5 */ {2, MVT::i2}, // CHECK-NEXT: }; // CHECK-EMPTY: // CHECK-NEXT: static const SDTypeConstraint MyTargetSDTypeConstraints[] = { // CHECK-NEXT: /* 0 */ {SDTCisVT, 0, 0, 4, 0}, // CHECK-NEXT: /* 1 */ {SDTCVecEltisVT, 4, 0, 1, 5}, // CHECK-SAME: {SDTCisVT, 3, 0, 1, 4}, // CHECK-SAME: {SDTCVecEltisVT, 2, 0, 0, MVT::i2}, // CHECK-SAME: {SDTCisVT, 1, 0, 0, MVT::i1}, // CHECK-SAME: {SDTCVecEltisVT, 0, 0, 4, 0}, // CHECK-NEXT: }; // CHECK-EMPTY: // CHECK-NEXT: static const SDNodeDesc MyTargetSDNodeDescs[] = { // CHECK-NEXT: {0, 5, 0, 0, 0, 1, 1, 5}, // NODE_1 // CHECK-NEXT: {1, 2, 0, 0, 0, 21, 3, 3}, // NODE_2 // CHECK-NEXT: {1, 0, 0, 0, 0, 41, 0, 1}, // NODE_3 // CHECK-NEXT: };