c3d5113ebdb4ba736cf33d07bc1591a432d7c908
[oota-llvm.git] / test / TableGen / BitsInit.td
1
2 // RUN: not llvm-tblgen %s 2>&1 > %t
3 // RUN: FileCheck %s < %t
4
5 def a {
6   bits<2> opc = { 0, 1 };
7   bits<2> opc2 = { 1, 0 };
8   bits<1> opc3 = { 1 };
9   bits<2> a = { opc, opc2 }; // error!
10   bits<2> b = { opc{0}, opc2{0} };
11   bits<2> c = { opc{1}, opc2{1} };
12   bits<2> c = { opc3{0}, opc3 };
13 }
14
15 // CHECK: def a {
16 // CHECK:   bits<2> opc = { 0, 1 };
17 // CHECK:   bits<2> opc2 = { 1, 0 };
18 // CHECK:   bits<1> opc3 = { 1 };
19 // CHECK:   bits<2> a = { ?, ? };
20 // CHECK:   bits<2> b = { 1, 0 };
21 // CHECK:   bits<2> c = { 1, 1 };
22 // CHECK: }
23
24 def {
25   bits<2> B1 = 0b011;  // bitfield is too small, reject
26   bits<3> B2 = 0b011;  // ok
27
28   bits<2> C1 = 0b111;  // bitfield is too small, reject
29   bits<3> C2 = 0b111;  // ok
30
31   bits<2> D1 = { 0, 0 }; // ok
32   bits<2> D2 = { 0b00 }; // ok
33   bits<3> D3 = { 0, 0 }; // type mismatch.  RHS doesn't have enough bits
34   bits<3> D4 = { 0b00 }; // type mismatch.  RHS doesn't have enough bits
35   bits<1> D5 = { 0 };    // ok
36   bits<1> D6 = { 1 };    // ok
37   bits<1> D7 = { 3 };    // type mismatch.  LHS doesn't have enough bits
38   bits<2> D8 = { 0 };    // type mismatch.  RHS doesn't have enough bits
39
40   bits<8> E;
41   let E{7-0} = {0,0,1,?,?,?,?,?};
42   let E{3-0} = 0b0010;
43 }
44
45 // CHECK: def {{.*}} {
46 // CHECK: bits<2> B1;
47 // CHECK: bits<3> B2 = { 0, 1, 1 };
48 // CHECK: bits<2> C1;
49 // CHECK: bits<3> C2 = { 1, 1, 1 };
50 // CHECK: bits<2> D1 = { 0, 0 };
51 // CHECK: bits<2> D2 = { 0, 0 };
52 // CHECK: bits<3> D3;
53 // CHECK: bits<3> D4;
54 // CHECK: bits<1> D5 = { 0 };
55 // CHECK: bits<1> D6 = { 1 };
56 // CHECK: bits<1> D7 = { ? };
57 // CHECK: bits<2> D8;
58 // CHECK: bits<8> E = { 0, 0, 1, ?, 0, 0, 1, 0 };
59 // CHECK: }