xref: /aosp_15_r20/external/llvm/test/TableGen/BitsInit.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker
2*9880d681SAndroid Build Coastguard Worker// RUN: not llvm-tblgen %s 2>&1 > %t
3*9880d681SAndroid Build Coastguard Worker// RUN: FileCheck %s < %t
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdef a {
6*9880d681SAndroid Build Coastguard Worker  bits<2> opc = { 0, 1 };
7*9880d681SAndroid Build Coastguard Worker  bits<2> opc2 = { 1, 0 };
8*9880d681SAndroid Build Coastguard Worker  bits<1> opc3 = { 1 };
9*9880d681SAndroid Build Coastguard Worker  bits<2> a = { opc, opc2 }; // error!
10*9880d681SAndroid Build Coastguard Worker  bits<2> b = { opc{0}, opc2{0} };
11*9880d681SAndroid Build Coastguard Worker  bits<2> c = { opc{1}, opc2{1} };
12*9880d681SAndroid Build Coastguard Worker  bits<2> c = { opc3{0}, opc3 };
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker// CHECK: def a {
16*9880d681SAndroid Build Coastguard Worker// CHECK:   bits<2> opc = { 0, 1 };
17*9880d681SAndroid Build Coastguard Worker// CHECK:   bits<2> opc2 = { 1, 0 };
18*9880d681SAndroid Build Coastguard Worker// CHECK:   bits<1> opc3 = { 1 };
19*9880d681SAndroid Build Coastguard Worker// CHECK:   bits<2> a;
20*9880d681SAndroid Build Coastguard Worker// CHECK:   bits<2> b = { 1, 0 };
21*9880d681SAndroid Build Coastguard Worker// CHECK:   bits<2> c = { 1, 1 };
22*9880d681SAndroid Build Coastguard Worker// CHECK: }
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdef {
25*9880d681SAndroid Build Coastguard Worker  bits<2> B1 = 0b011;  // bitfield is too small, reject
26*9880d681SAndroid Build Coastguard Worker  bits<3> B2 = 0b011;  // ok
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker  bits<2> C1 = 0b111;  // bitfield is too small, reject
29*9880d681SAndroid Build Coastguard Worker  bits<3> C2 = 0b111;  // ok
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker  bits<2> D1 = { 0, 0 }; // ok
32*9880d681SAndroid Build Coastguard Worker  bits<2> D2 = { 0b00 }; // ok
33*9880d681SAndroid Build Coastguard Worker  bits<3> D3 = { 0, 0 }; // type mismatch.  RHS doesn't have enough bits
34*9880d681SAndroid Build Coastguard Worker  bits<3> D4 = { 0b00 }; // type mismatch.  RHS doesn't have enough bits
35*9880d681SAndroid Build Coastguard Worker  bits<1> D5 = { 0 };    // ok
36*9880d681SAndroid Build Coastguard Worker  bits<1> D6 = { 1 };    // ok
37*9880d681SAndroid Build Coastguard Worker  bits<1> D7 = { 3 };    // type mismatch.  LHS doesn't have enough bits
38*9880d681SAndroid Build Coastguard Worker  bits<2> D8 = { 0 };    // type mismatch.  RHS doesn't have enough bits
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker  bits<8> E;
41*9880d681SAndroid Build Coastguard Worker  let E{7-0} = {0,0,1,?,?,?,?,?};
42*9880d681SAndroid Build Coastguard Worker  let E{3-0} = 0b0010;
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker  bits<8> F1 = { 0, 1, 0b1001, 0, 0b0 }; // ok
45*9880d681SAndroid Build Coastguard Worker  bits<7> F2 = { 0, 1, 0b1001, 0, 0b0 }; // LHS doesn't have enough bits
46*9880d681SAndroid Build Coastguard Worker  bits<9> F3 = { 0, 1, 0b1001, 0, 0b0 }; // RHS doesn't have enough bits
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker  bits<8> G1 = { 0, { 1, 0b1001, 0 }, 0b0 }; // ok
49*9880d681SAndroid Build Coastguard Worker  bits<8> G2 = { 0, { 1, 0b1001 }, 0, 0b0 }; // ok
50*9880d681SAndroid Build Coastguard Worker  bits<8> G3 = { 0, 1, { 0b1001 }, 0, 0b0 }; // ok
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker  bits<16> H;
53*9880d681SAndroid Build Coastguard Worker  let H{15-0} = { { 0b11001100 }, 0b00110011 };
54*9880d681SAndroid Build Coastguard Worker  bits<16> I = { G1, G2 };
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker  // Make sure we can initialise ints with bits<> values.
57*9880d681SAndroid Build Coastguard Worker  int J = H;
58*9880d681SAndroid Build Coastguard Worker  int K = { 0, 1 };
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker// CHECK: def {{.*}} {
62*9880d681SAndroid Build Coastguard Worker// CHECK: bits<2> B1;
63*9880d681SAndroid Build Coastguard Worker// CHECK: bits<3> B2 = { 0, 1, 1 };
64*9880d681SAndroid Build Coastguard Worker// CHECK: bits<2> C1;
65*9880d681SAndroid Build Coastguard Worker// CHECK: bits<3> C2 = { 1, 1, 1 };
66*9880d681SAndroid Build Coastguard Worker// CHECK: bits<2> D1 = { 0, 0 };
67*9880d681SAndroid Build Coastguard Worker// CHECK: bits<2> D2 = { 0, 0 };
68*9880d681SAndroid Build Coastguard Worker// CHECK: bits<3> D3;
69*9880d681SAndroid Build Coastguard Worker// CHECK: bits<3> D4;
70*9880d681SAndroid Build Coastguard Worker// CHECK: bits<1> D5 = { 0 };
71*9880d681SAndroid Build Coastguard Worker// CHECK: bits<1> D6 = { 1 };
72*9880d681SAndroid Build Coastguard Worker// CHECK: bits<1> D7 = { ? };
73*9880d681SAndroid Build Coastguard Worker// CHECK: bits<2> D8;
74*9880d681SAndroid Build Coastguard Worker// CHECK: bits<8> E = { 0, 0, 1, ?, 0, 0, 1, 0 };
75*9880d681SAndroid Build Coastguard Worker// CHECK: bits<8> F1 = { 0, 1, 1, 0, 0, 1, 0, 0 };
76*9880d681SAndroid Build Coastguard Worker// CHECK: bits<7> F2;
77*9880d681SAndroid Build Coastguard Worker// CHECK: bits<9> F3;
78*9880d681SAndroid Build Coastguard Worker// CHECK: bits<8> G1 = { 0, 1, 1, 0, 0, 1, 0, 0 };
79*9880d681SAndroid Build Coastguard Worker// CHECK: bits<8> G2 = { 0, 1, 1, 0, 0, 1, 0, 0 };
80*9880d681SAndroid Build Coastguard Worker// CHECK: bits<8> G3 = { 0, 1, 1, 0, 0, 1, 0, 0 };
81*9880d681SAndroid Build Coastguard Worker// CHECK: bits<16> H = { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1 };
82*9880d681SAndroid Build Coastguard Worker// CHECK: bits<16> I = { 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0 };
83*9880d681SAndroid Build Coastguard Worker// CHECK: int J = 52275;
84*9880d681SAndroid Build Coastguard Worker// CHECK: int K = 1;
85*9880d681SAndroid Build Coastguard Worker// CHECK: }
86