blob: 34377bd5b618e4dd7a965c13cf30d026d5cb7960 [file] [log] [blame]
Hal Finkeld23a41c2013-01-25 14:49:08 +00001// RUN: llvm-tblgen %s | FileCheck %s
NAKAMURA Takumia22657f2013-11-10 14:26:08 +00002// XFAIL: vg_leak
Hal Finkeld23a41c2013-01-25 14:49:08 +00003
Adam Nemet30cced12014-07-17 17:04:27 +00004def shifts {
5 bits<2> b = 0b10;
6 int i = 2;
7 int shifted_b = !shl(b, 2);
8 int shifted_i = !shl(i, 2);
9}
10// CHECK: def shifts
11// CHECK: shifted_b = 8
12// CHECK: shifted_i = 8
13
Hal Finkeld23a41c2013-01-25 14:49:08 +000014class Int<int value> {
15 int Value = value;
16}
17
Matt Arsenaultee233182016-11-15 06:49:28 +000018def v1022 : Int<1022>;
19
Joerg Sonnenbergerc754b572014-08-05 09:43:25 +000020// CHECK: def v0
21// CHECK: Value = 0
22
23// CHECK: def v1
24// CHECK: Value = 1
25
Matt Arsenaultee233182016-11-15 06:49:28 +000026// CHECK: def v1023
27// CHECK: Value = 1023
28def v1023 : Int<!or(v1022.Value, 1)>;
29
Hal Finkeld23a41c2013-01-25 14:49:08 +000030def v1024 : Int<1024>;
Hal Finkel4f070b02013-01-25 20:29:25 +000031// CHECK: def v1024
Hal Finkeld23a41c2013-01-25 14:49:08 +000032// CHECK: Value = 1024
33
34def v1025 : Int<!add(v1024.Value, 1)>;
Hal Finkel4f070b02013-01-25 20:29:25 +000035// CHECK: def v1025
Hal Finkeld23a41c2013-01-25 14:49:08 +000036// CHECK: Value = 1025
37
Nicolai Haehnle8ed1fd42018-03-14 11:00:43 +000038// CHECK: def v1a
39// CHECK: Value = 1
40
41// CHECK: def v2
42// CHECK: Value = 2
43def v2 : Int<2>;
44
Hal Finkeld23a41c2013-01-25 14:49:08 +000045def v2048 : Int<!add(v1024.Value, v1024.Value)>;
Hal Finkel4f070b02013-01-25 20:29:25 +000046// CHECK: def v2048
Hal Finkeld23a41c2013-01-25 14:49:08 +000047// CHECK: Value = 2048
48
Joerg Sonnenbergerc754b572014-08-05 09:43:25 +000049def v0 : Int<!and(v1024.Value, v2048.Value)>;
50def v1 : Int<!and(v1025.Value, 1)>;
Matt Arsenaultee233182016-11-15 06:49:28 +000051
52// CHECK: def v3072
53// CHECK: Value = 3072
54def v3072 : Int<!or(v1024.Value, v2048.Value)>;
Nicolai Haehnle8ed1fd42018-03-14 11:00:43 +000055
56// CHECK: def v4
57// CHECK: Value = 4
58
59// CHECK: def v7
60// CHECK: Value = 7
61
62def v4 : Int<!add(v2.Value, 1, v1.Value)>;
63def v7 : Int<!or(v1.Value, v2.Value, v4.Value)>;
64def v1a : Int<!and(v7.Value, 5, v1.Value)>;