blob: 5bda9d2d4eb7f52ad3d3f5d446fcaf4a3e438c05 [file] [edit]
// 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]));