19a84a509SNicolai Haehnle// RUN: llvm-tblgen %s | FileCheck %s
22f87b54fSJeffrey Yasskin// XFAIL: vg_leak
39a84a509SNicolai Haehnle
49a84a509SNicolai Haehnle// CHECK: --- Defs ---
59a84a509SNicolai Haehnle
69a84a509SNicolai Haehnle// Test that P and Q are not replaced by ?. TableGen's codegen emitter backend
79a84a509SNicolai Haehnle// relies on keeping variable references like this around to describe the
89a84a509SNicolai Haehnle// structure of instruction encodings.
99a84a509SNicolai Haehnle//
109a84a509SNicolai Haehnle// CHECK: def A {
119a84a509SNicolai Haehnle// CHECK:   bits<8> Inst = { 1, 1, 1, 1, 1, 1, P, Q };
129a84a509SNicolai Haehnle// CHECK:   bits<2> src = { ?, ? };
139a84a509SNicolai Haehnle// CHECK:   bit P = ?;
149a84a509SNicolai Haehnle// CHECK:   bit Q = ?;
159a84a509SNicolai Haehnle// CHECK: }
169a84a509SNicolai Haehnle
179a84a509SNicolai Haehnledef A {
189a84a509SNicolai Haehnle  bits<8> Inst;
199a84a509SNicolai Haehnle  bits<2> src;
209a84a509SNicolai Haehnle
219a84a509SNicolai Haehnle  bit P;
229a84a509SNicolai Haehnle  bit Q;
239a84a509SNicolai Haehnle
24*93b4f853SPaul C. Anagnostopoulos  let Inst{7...2} = 0x3f;
259a84a509SNicolai Haehnle  let Inst{1} = P;
269a84a509SNicolai Haehnle  let Inst{0} = Q;
279a84a509SNicolai Haehnle
289a84a509SNicolai Haehnle  let P = src{1};
299a84a509SNicolai Haehnle  let Q = src{0};
309a84a509SNicolai Haehnle}
319a84a509SNicolai Haehnle
3267e6cab4SBob Wilsonclass x {
3367e6cab4SBob Wilson  field bits<32> A;
3467e6cab4SBob Wilson}
3567e6cab4SBob Wilson
3667e6cab4SBob Wilsonclass y<bits<2> B> : x {
37*93b4f853SPaul C. Anagnostopoulos  let A{21...20} = B;
3867e6cab4SBob Wilson}
3967e6cab4SBob Wilson
4067e6cab4SBob Wilsondef z : y<{0,?}>;
41