1*9a84a509SNicolai Haehnle// RUN: llvm-tblgen %s | FileCheck %s
22f87b54fSJeffrey Yasskin// XFAIL: vg_leak
3*9a84a509SNicolai Haehnle
4*9a84a509SNicolai Haehnle// CHECK: --- Defs ---
5*9a84a509SNicolai Haehnle
6*9a84a509SNicolai Haehnle// Test that P and Q are not replaced by ?. TableGen's codegen emitter backend
7*9a84a509SNicolai Haehnle// relies on keeping variable references like this around to describe the
8*9a84a509SNicolai Haehnle// structure of instruction encodings.
9*9a84a509SNicolai Haehnle//
10*9a84a509SNicolai Haehnle// CHECK: def A {
11*9a84a509SNicolai Haehnle// CHECK:   bits<8> Inst = { 1, 1, 1, 1, 1, 1, P, Q };
12*9a84a509SNicolai Haehnle// CHECK:   bits<2> src = { ?, ? };
13*9a84a509SNicolai Haehnle// CHECK:   bit P = ?;
14*9a84a509SNicolai Haehnle// CHECK:   bit Q = ?;
15*9a84a509SNicolai Haehnle// CHECK: }
16*9a84a509SNicolai Haehnle
17*9a84a509SNicolai Haehnledef A {
18*9a84a509SNicolai Haehnle  bits<8> Inst;
19*9a84a509SNicolai Haehnle  bits<2> src;
20*9a84a509SNicolai Haehnle
21*9a84a509SNicolai Haehnle  bit P;
22*9a84a509SNicolai Haehnle  bit Q;
23*9a84a509SNicolai Haehnle
24*9a84a509SNicolai Haehnle  let Inst{7-2} = 0x3f;
25*9a84a509SNicolai Haehnle  let Inst{1} = P;
26*9a84a509SNicolai Haehnle  let Inst{0} = Q;
27*9a84a509SNicolai Haehnle
28*9a84a509SNicolai Haehnle  let P = src{1};
29*9a84a509SNicolai Haehnle  let Q = src{0};
30*9a84a509SNicolai Haehnle}
31*9a84a509SNicolai Haehnle
3267e6cab4SBob Wilsonclass x {
3367e6cab4SBob Wilson  field bits<32> A;
3467e6cab4SBob Wilson}
3567e6cab4SBob Wilson
3667e6cab4SBob Wilsonclass y<bits<2> B> : x {
3767e6cab4SBob Wilson  let A{21-20} = B;
3867e6cab4SBob Wilson}
3967e6cab4SBob Wilson
4067e6cab4SBob Wilsondef z : y<{0,?}>;
41