summaryrefslogtreecommitdiff
path: root/llvm/test/TableGen/initialized.td
blob: e1743909feb64fb9e7e3103590da8bc5cefcc4b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// RUN: llvm-tblgen %s | FileCheck %s

// CHECK: class F<Y [[ARG:.+]] = ?> {
// CHECK: string ret = !if(!initialized([[ARG]].str), [[ARG]].str, "N/A");
// CHECK: }

// CHECK-LABEL: def C
// CHECK: bit c0 = 0
// CHECK: bit c1 = 1
// CHECK: bit c2 = 1
def C {
  bit c0 = !initialized(?);
  bit c1 = !initialized(0);
  bit c2 = !initialized(1);
}

class Y {
  string str = ?;
}

class F<Y y> {
  string ret = !if(!initialized(y.str), y.str, "N/A");
}

def Y0 : Y;
def Y1 : Y {
  let str = "foo";
}

// CHECK-LABEL: def FY0
// CHECK: string ret = "N/A";
// CHECK-LABEL: def FY1
// CHECK: string ret = "foo";
def FY0 : F<Y0>;
def FY1 : F<Y1>;

class G<Y y> {
  list<string> v = [y.str];
  bit isInit = !initialized(v);
}

// CHECK-LABEL: def GY0
// CHECK: isInit = 1
// CHECK-LABEL: def GY1
// CHECK: isInit = 1
def GY0 : G<Y0>;
def GY1 : G<Y1>;

class Thing;
def aThing : Thing;
class Propagate<Thing t> {
  Thing ret = !if(!initialized(t), t, ?);
}
// CHECK-LABEL: def PropagateNothing
// CHECK: Thing ret = ?
// CHECK-LABEL: def PropagateThing
// CHECK: Thing ret = aThing
def PropagateNothing : Propagate<?>;
def PropagateThing : Propagate<aThing>;