@@ -48,34 +48,70 @@ def InstD : InstBase {
4848 let UseNamedOperandTable = 0;
4949}
5050
51- // CHECK: #ifdef GET_INSTRINFO_OPERAND_ENUM
52- // CHECK: #undef GET_INSTRINFO_OPERAND_ENUM
53- // CHECK: namespace llvm::MyNamespace {
54- // CHECK: enum class OpName {
55- // CHECK: a = 0,
56- // CHECK: b = 1,
57- // CHECK: c = 2,
58- // CHECK: d = 3,
59- // CHECK: x = 4,
60- // CHECK: NUM_OPERAND_NAMES = 5,
61- // CHECK: }; // enum class OpName
62- // CHECK: } // end namespace llvm::MyNamespace
63- // CHECK: #endif //GET_INSTRINFO_OPERAND_ENUM
51+ // CHECK-LABEL: #ifdef GET_INSTRINFO_OPERAND_ENUM
52+ // CHECK-NEXT: #undef GET_INSTRINFO_OPERAND_ENUM
53+ // CHECK-NEXT: namespace llvm::MyNamespace {
54+ // CHECK-NEXT: enum class OpName : uint8_t {
55+ // CHECK-NEXT: a = 0,
56+ // CHECK-NEXT: b = 1,
57+ // CHECK-NEXT: c = 2,
58+ // CHECK-NEXT: d = 3,
59+ // CHECK-NEXT: x = 4,
60+ // CHECK-NEXT: NUM_OPERAND_NAMES = 5,
61+ // CHECK-NEXT: }; // enum class OpName
62+ // CHECK-EMPTY:
63+ // CHECK-NEXT: LLVM_READONLY int16_t getNamedOperandIdx(uint16_t Opcode, OpName Name);
64+ // CHECK-NEXT: LLVM_READONLY OpName getOperandIdxName(uint16_t Opcode, int16_t Idx);
65+ // CHECK-NEXT: } // end namespace llvm::MyNamespace
66+ // CHECK-NEXT: #endif //GET_INSTRINFO_OPERAND_ENUM
6467
65- // CHECK: #ifdef GET_INSTRINFO_NAMED_OPS
66- // CHECK: #undef GET_INSTRINFO_NAMED_OPS
67- // CHECK: namespace llvm::MyNamespace {
68- // CHECK: LLVM_READONLY
69- // CHECK: int16_t getNamedOperandIdx(uint16_t Opcode, OpName Name) {
70- // CHECK: assert(Name != OpName::NUM_OPERAND_NAMES);
71- // CHECK: static constexpr int8_t OperandMap[][5] = {
72- // CHECK: {0, 1, 2, -1, -1, },
73- // CHECK: {-1, -1, -1, 0, 1, },
74- // CHECK: };
75- // CHECK: static constexpr uint8_t InstructionIndex[] = {
76- // CHECK: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
77- // CHECK: };
78- // CHECK: return OperandMap[InstructionIndex[Opcode]][(unsigned)Name];
79- // CHECK: }
80- // CHECK: } // end namespace llvm::MyNamespace
81- // CHECK: #endif //GET_INSTRINFO_NAMED_OPS
68+ // CHECK-LABEL: #ifdef GET_INSTRINFO_NAMED_OPS
69+ // CHECK-NEXT: #undef GET_INSTRINFO_NAMED_OPS
70+ // CHECK-NEXT: namespace llvm::MyNamespace {
71+ // CHECK-NEXT: LLVM_READONLY static uint8_t getInstructionIndexForOpLookup(uint16_t Opcode) {
72+ // CHECK-NEXT: static constexpr uint8_t InstructionIndex[] = {
73+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
74+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
75+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
76+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
77+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
78+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
79+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
80+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
81+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
83+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
85+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
86+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
89+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
91+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
92+ // CHECK-NEXT: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0,
93+ // CHECK-NEXT: };
94+ // CHECK-NEXT: return InstructionIndex[Opcode];
95+ // CHECK-NEXT: }
96+ // CHECK-NEXT: LLVM_READONLY int16_t getNamedOperandIdx(uint16_t Opcode, OpName Name) {
97+ // CHECK-NEXT: assert(Name != OpName::NUM_OPERAND_NAMES);
98+ // CHECK-NEXT: static constexpr int8_t OperandMap[][5] = {
99+ // CHECK-NEXT: {-1, -1, -1, -1, -1, },
100+ // CHECK-NEXT: {0, 1, 2, -1, -1, },
101+ // CHECK-NEXT: {-1, -1, -1, 0, 1, },
102+ // CHECK-NEXT: };
103+ // CHECK-NEXT: unsigned InstrIdx = getInstructionIndexForOpLookup(Opcode);
104+ // CHECK-NEXT: return OperandMap[InstrIdx][(unsigned)Name];
105+ // CHECK-NEXT: }
106+ // CHECK-NEXT: LLVM_READONLY OpName getOperandIdxName(uint16_t Opcode, int16_t Idx) {
107+ // CHECK-NEXT: assert(Idx >= 0 && Idx < 3);
108+ // CHECK-NEXT: static constexpr OpName OperandMap[][3] = {
109+ // CHECK-NEXT: {OpName::NUM_OPERAND_NAMES, OpName::NUM_OPERAND_NAMES, OpName::NUM_OPERAND_NAMES, },
110+ // CHECK-NEXT: {OpName::a, OpName::b, OpName::c, },
111+ // CHECK-NEXT: {OpName::d, OpName::x, OpName::NUM_OPERAND_NAMES, },
112+ // CHECK-NEXT: };
113+ // CHECK-NEXT: unsigned InstrIdx = getInstructionIndexForOpLookup(Opcode);
114+ // CHECK-NEXT: return OperandMap[InstrIdx][(unsigned)Idx];
115+ // CHECK-NEXT: }
116+ // CHECK-NEXT: } // end namespace llvm::MyNamespace
117+ // CHECK-NEXT: #endif //GET_INSTRINFO_NAMED_OPS
0 commit comments