| // RUN: llvm-tblgen -gen-emitter -I %p/../../include %s | FileCheck %s | |
| include "llvm/Target/Target.td" | |
| def TestInstrInfo : InstrInfo; | |
| def Test : Target { | |
| let InstructionSet = TestInstrInfo; | |
| } | |
| class TestInst<bits<8> LowEncoding, bit HighEncoding> : Instruction { | |
| bits<128> Inst; | |
| let Inst{7...0} = LowEncoding; | |
| let Inst{64} = HighEncoding; | |
| let OutOperandList = (outs); | |
| let InOperandList = (ins); | |
| } | |
| def A0 : TestInst<1, 0>; | |
| def A1 : TestInst<1, 0>; | |
| def A2 : TestInst<1, 0>; | |
| def A3 : TestInst<1, 0>; | |
| def B0 : TestInst<1, 1>; | |
| def B1 : TestInst<1, 1>; | |
| def B2 : TestInst<1, 1>; | |
| def B3 : TestInst<1, 1>; | |
| // CHECK: static const uint64_t InstBits[][2] = { | |
| // CHECK-NEXT: {UINT64_C(1), UINT64_C(0)}, | |
| // CHECK-NEXT: {UINT64_C(1), UINT64_C(1)}, | |
| // CHECK-NEXT: }; | |
| // CHECK: static const uint8_t InstBitsIndices[] = { | |
| // CHECK-NEXT: 0, | |
| // CHECK-NEXT: 0, | |
| // CHECK-NEXT: 0, | |
| // CHECK-NEXT: 0, | |
| // CHECK-NEXT: 1, | |
| // CHECK-NEXT: 1, | |
| // CHECK-NEXT: 1, | |
| // CHECK-NEXT: 1, | |
| // CHECK-NEXT: }; | |
| // CHECK: static_assert(sizeof(InstBits) / sizeof(InstBits[0]) <= | |
| // CHECK-NEXT: (UINT64_C(1) << (sizeof(InstBitsIndices[0]) * 8))); | |
| // CHECK: unsigned InstBitsIndex = InstBitsIndices[TableIndex]; | |
| // CHECK: Inst = APInt(128, ArrayRef(InstBits[InstBitsIndex])); |