blob: f6e1182f09b8f2c1a90035028f4ef8a50833e1cf [file] [log] [blame] [edit]
// 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: };