1// RUN: llvm-tblgen %s | FileCheck %s 2// RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s 3// RUN: not llvm-tblgen -DERROR2 %s 2>&1 | FileCheck --check-prefix=ERROR2 %s 4// RUN: not llvm-tblgen -DERROR3 %s 2>&1 | FileCheck --check-prefix=ERROR3 %s 5// RUN: not llvm-tblgen -DERROR4 %s 2>&1 | FileCheck --check-prefix=ERROR4 %s 6// XFAIL: vg_leak 7 8// CHECK: def shifts 9// CHECK: shifted_b = 8 10// CHECK: shifted_i = 8 11def shifts { 12 bits<2> b = 0b10; 13 int i = 2; 14 int shifted_b = !shl(b, 2); 15 int shifted_i = !shl(i, 2); 16} 17 18class Int<int value> { 19 int Value = value; 20} 21 22def int2 : Int<2>; 23def int1022 : Int<1022>; 24def int1024 : Int<1024>; 25 26// CHECK: def v0a 27// CHECK: Value = 0 28def v0a : Int<!sub(int1024.Value, int1024.Value)>; 29 30// CHECK: def v0b 31// CHECK: Value = 0 32def v0b : Int<!and(int1024.Value, 2048)>; 33 34// CHECK: def v1 35// CHECK: Value = 1 36def v1 : Int<!and(1025, 1)>; 37 38// CHECK: def v1019 39// CHECK: Value = 1019 40def v1019 : Int<!sub(int1022.Value, 3)>; 41 42// CHECK: def v1023 43// CHECK: Value = 1023 44def v1023 : Int<!or(int1022.Value, 1)>; 45 46def v1025 : Int<!add(int1024.Value, 1)>; 47// CHECK: def v1025 48// CHECK: Value = 1025 49 50// CHECK: def v12 51// CHECK: Value = 12 52def v12 : Int<!mul(4, 3)>; 53 54// CHECK: def v13 55// CHECK: Value = 5 56def v13 : Int<!div(10, 2)>; 57 58// CHECK: def v14 59// CHECK: Value = 5 60def v14 : Int<!div(11, 2)>; 61 62// CHECK: def v15 63// CHECK: Value = 1 64def v15 : Int<!div(1, 1)>; 65 66// CHECK: def v16 67// CHECK: Value = 0 68def v16 : Int<!div(0, 10)>; 69 70// CHECK: def v17 71// CHECK: Value = -2 72def v17 : Int<!div(-8, 4)>; 73 74#ifdef ERROR1 75// ERROR1: error: Illegal operation: division by zero 76def v18 : Int<!div(4, 0)>; 77#endif 78 79#ifdef ERROR2 80// ERROR2: error: Illegal operation: INT64_MIN / -1 81def v19 : Int<!div(-9223372036854775808, -1)>; 82#endif 83 84// CHECK: def v1a 85// CHECK: Value = 1 86 87// CHECK: def v2048 88// CHECK: Value = 2048 89def v2048 : Int<!add(int1024.Value, int1024.Value)>; 90 91// CHECK: def v3072 92// CHECK: Value = 3072 93def v3072 : Int<!or(int1024.Value, v2048.Value)>; 94 95// CHECK: def v4 96// CHECK: Value = 4 97 98// CHECK: def v7 99// CHECK: Value = 7 100 101def v4 : Int<!add(int2.Value, 1, v1.Value)>; 102def v7 : Int<!or(v1.Value, int2.Value, v4.Value)>; 103def v1a : Int<!and(v7.Value, 5, v1.Value)>; 104 105// CHECK: def v84 106// CHECK: Value = 84 107def v84 : Int<!mul(v12.Value, v7.Value)>; 108 109// CHECK: def v9 110// CHECK: Value = 9 111def v9 : Int<!xor(v7.Value, 0x0E)>; 112 113// CHECK: def v924 114// CHECK: Value = 924 115def v924 : Int<!mul(v84.Value, 11)>; 116 117// CHECK: def v925 118// CHECK: Value = 925 119def v925 : Int<!sub(v924.Value, -1)>; 120 121// CHECK: def v950 122// CHECK: Value = 4 123def v950: Int<!logtwo(16)>; 124 125// CHECK: def v951 126// CHECK: Value = 10 127def v951 : Int<!logtwo(1024)>; 128 129// CHECK: def v952 130// CHECK: Value = 10 131def v952 : Int<!logtwo(1025)>; 132 133#ifdef ERROR3 134// ERROR3: error: Illegal operation: logtwo is undefined on arguments less than or equal to 0 135def v953 : Int<!logtwo(0)>; 136#endif 137 138#ifdef ERROR4 139// ERROR4: error: Illegal operation: logtwo is undefined on arguments less than or equal to 0 140def v954 : Int<!logtwo(-1)>; 141#endif 142 143// CHECK: def vneg 144// CHECK: Value = -2 145def vneg : Int<!sub(v925.Value, 927)>; 146