| // 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>; |