164 lines · plain
1// RUN: llvm-tblgen %s | FileCheck %s2// RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s3// RUN: not llvm-tblgen -DERROR2 %s 2>&1 | FileCheck --check-prefix=ERROR2 %s4// RUN: not llvm-tblgen -DERROR3 %s 2>&1 | FileCheck --check-prefix=ERROR3 %s5// RUN: not llvm-tblgen -DERROR4 %s 2>&1 | FileCheck --check-prefix=ERROR4 %s6// RUN: not llvm-tblgen -DERROR5 %s 2>&1 | FileCheck --check-prefix=ERROR5 %s7// RUN: not llvm-tblgen -DERROR6 %s 2>&1 | FileCheck --check-prefix=ERROR6 %s8// RUN: not llvm-tblgen -DERROR7 %s 2>&1 | FileCheck --check-prefix=ERROR7 %s9// XFAIL: vg_leak10 11// CHECK: def shifts12// CHECK: shifted_b = 813// CHECK: shifted_i = 814def shifts {15 bits<2> b = 0b10;16 int i = 2;17 int shifted_b = !shl(b, 2);18 int shifted_i = !shl(i, 2);19}20 21class Int<int value> {22 int Value = value;23}24 25def int2 : Int<2>;26def int1022 : Int<1022>;27def int1024 : Int<1024>;28 29// CHECK: def v0a30// CHECK: Value = 031def v0a : Int<!sub(int1024.Value, int1024.Value)>;32 33// CHECK: def v0b34// CHECK: Value = 035def v0b : Int<!and(int1024.Value, 2048)>;36 37// CHECK: def v138// CHECK: Value = 139def v1 : Int<!and(1025, 1)>;40 41// CHECK: def v101942// CHECK: Value = 101943def v1019 : Int<!sub(int1022.Value, 3)>;44 45// CHECK: def v102346// CHECK: Value = 102347def v1023 : Int<!or(int1022.Value, 1)>;48 49def v1025 : Int<!add(int1024.Value, 1)>;50// CHECK: def v102551// CHECK: Value = 102552 53// CHECK: def v1254// CHECK: Value = 1255def v12 : Int<!mul(4, 3)>;56 57// CHECK: def v1358// CHECK: Value = 559def v13 : Int<!div(10, 2)>;60 61// CHECK: def v1462// CHECK: Value = 563def v14 : Int<!div(11, 2)>;64 65// CHECK: def v1566// CHECK: Value = 167def v15 : Int<!div(1, 1)>;68 69// CHECK: def v1670// CHECK: Value = 071def v16 : Int<!div(0, 10)>;72 73// CHECK: def v1774// CHECK: Value = -275def v17 : Int<!div(-8, 4)>;76 77#ifdef ERROR178// ERROR1: error: Illegal operation: division by zero79def v18 : Int<!div(4, 0)>;80#endif81 82#ifdef ERROR283// ERROR2: error: Illegal operation: INT64_MIN / -184def v19 : Int<!div(-9223372036854775808, -1)>;85#endif86 87// CHECK: def v1a88// CHECK: Value = 189 90// CHECK: def v204891// CHECK: Value = 204892def v2048 : Int<!add(int1024.Value, int1024.Value)>;93 94// CHECK: def v307295// CHECK: Value = 307296def v3072 : Int<!or(int1024.Value, v2048.Value)>;97 98// CHECK: def v499// CHECK: Value = 4100 101// CHECK: def v7102// CHECK: Value = 7103 104def v4 : Int<!add(int2.Value, 1, v1.Value)>;105def v7 : Int<!or(v1.Value, int2.Value, v4.Value)>;106def v1a : Int<!and(v7.Value, 5, v1.Value)>;107 108// CHECK: def v84109// CHECK: Value = 84110def v84 : Int<!mul(v12.Value, v7.Value)>;111 112// CHECK: def v9113// CHECK: Value = 9114def v9 : Int<!xor(v7.Value, 0x0E)>;115 116// CHECK: def v924117// CHECK: Value = 924118def v924 : Int<!mul(v84.Value, 11)>;119 120// CHECK: def v925121// CHECK: Value = 925122def v925 : Int<!sub(v924.Value, -1)>;123 124// CHECK: def v950125// CHECK: Value = 4126def v950: Int<!logtwo(16)>;127 128// CHECK: def v951129// CHECK: Value = 10130def v951 : Int<!logtwo(1024)>;131 132// CHECK: def v952133// CHECK: Value = 10134def v952 : Int<!logtwo(1025)>;135 136#ifdef ERROR3137// ERROR3: error: Illegal operation: logtwo is undefined on arguments less than or equal to 0138def v953 : Int<!logtwo(0)>;139#endif140 141#ifdef ERROR4142// ERROR4: error: Illegal operation: logtwo is undefined on arguments less than or equal to 0143def v954 : Int<!logtwo(-1)>;144#endif145 146// CHECK: def vneg147// CHECK: Value = -2148def vneg : Int<!sub(v925.Value, 927)>;149 150#ifdef ERROR5151// ERROR5: error: Illegal operation: out of bounds shift152def vshl_neg : Int<!shl(1, -1)>;153#endif154 155#ifdef ERROR6156// ERROR6: error: Illegal operation: out of bounds shift157def vsra_large : Int<!sra(1, 64)>;158#endif159 160#ifdef ERROR7161// ERROR7: error: Illegal operation: out of bounds shift162def vsrl_large : Int<!srl(1, 100)>;163#endif164