360 lines · plain
1// RUN: cir-opt %s --verify-roundtrip | FileCheck %s2!s32i = !cir.int<s, 32>3!u32i = !cir.int<u, 32>4 5module {6 cir.func @c0(%arg0: !s32i, %arg1: !s32i) {7 %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}8 %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init] {alignment = 4 : i64}9 %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}10 cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>11 cir.store %arg1, %1 : !s32i, !cir.ptr<!s32i>12 %3 = cir.load %0 : !cir.ptr<!s32i>, !s32i13 %4 = cir.load %1 : !cir.ptr<!s32i>, !s32i14 %5 = cir.cmp(gt, %3, %4) : !s32i, !cir.bool15 cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>16 %6 = cir.load %0 : !cir.ptr<!s32i>, !s32i17 %7 = cir.load %1 : !cir.ptr<!s32i>, !s32i18 %8 = cir.cmp(lt, %6, %7) : !s32i, !cir.bool19 cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>20 %9 = cir.load %0 : !cir.ptr<!s32i>, !s32i21 %10 = cir.load %1 : !cir.ptr<!s32i>, !s32i22 %11 = cir.cmp(le, %9, %10) : !s32i, !cir.bool23 cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>24 %12 = cir.load %0 : !cir.ptr<!s32i>, !s32i25 %13 = cir.load %1 : !cir.ptr<!s32i>, !s32i26 %14 = cir.cmp(ge, %12, %13) : !s32i, !cir.bool27 cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>28 %15 = cir.load %0 : !cir.ptr<!s32i>, !s32i29 %16 = cir.load %1 : !cir.ptr<!s32i>, !s32i30 %17 = cir.cmp(ne, %15, %16) : !s32i, !cir.bool31 cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>32 %18 = cir.load %0 : !cir.ptr<!s32i>, !s32i33 %19 = cir.load %1 : !cir.ptr<!s32i>, !s32i34 %20 = cir.cmp(eq, %18, %19) : !s32i, !cir.bool35 cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>36 cir.return37 }38 39 // CHECK: cir.func{{.*}} @c0(%arg0: !s32i, %arg1: !s32i) {40 // CHECK-NEXT: %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}41 // CHECK-NEXT: %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init] {alignment = 4 : i64}42 // CHECK-NEXT: %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}43 // CHECK-NEXT: cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>44 // CHECK-NEXT: cir.store %arg1, %1 : !s32i, !cir.ptr<!s32i>45 // CHECK-NEXT: %3 = cir.load %0 : !cir.ptr<!s32i>, !s32i46 // CHECK-NEXT: %4 = cir.load %1 : !cir.ptr<!s32i>, !s32i47 // CHECK-NEXT: %5 = cir.cmp(gt, %3, %4) : !s32i, !cir.bool48 // CHECK-NEXT: cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>49 // CHECK-NEXT: %6 = cir.load %0 : !cir.ptr<!s32i>, !s32i50 // CHECK-NEXT: %7 = cir.load %1 : !cir.ptr<!s32i>, !s32i51 // CHECK-NEXT: %8 = cir.cmp(lt, %6, %7) : !s32i, !cir.bool52 // CHECK-NEXT: cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>53 // CHECK-NEXT: %9 = cir.load %0 : !cir.ptr<!s32i>, !s32i54 // CHECK-NEXT: %10 = cir.load %1 : !cir.ptr<!s32i>, !s32i55 // CHECK-NEXT: %11 = cir.cmp(le, %9, %10) : !s32i, !cir.bool56 // CHECK-NEXT: cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>57 // CHECK-NEXT: %12 = cir.load %0 : !cir.ptr<!s32i>, !s32i58 // CHECK-NEXT: %13 = cir.load %1 : !cir.ptr<!s32i>, !s32i59 // CHECK-NEXT: %14 = cir.cmp(ge, %12, %13) : !s32i, !cir.bool60 // CHECK-NEXT: cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>61 // CHECK-NEXT: %15 = cir.load %0 : !cir.ptr<!s32i>, !s32i62 // CHECK-NEXT: %16 = cir.load %1 : !cir.ptr<!s32i>, !s32i63 // CHECK-NEXT: %17 = cir.cmp(ne, %15, %16) : !s32i, !cir.bool64 // CHECK-NEXT: cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>65 // CHECK-NEXT: %18 = cir.load %0 : !cir.ptr<!s32i>, !s32i66 // CHECK-NEXT: %19 = cir.load %1 : !cir.ptr<!s32i>, !s32i67 // CHECK-NEXT: %20 = cir.cmp(eq, %18, %19) : !s32i, !cir.bool68 // CHECK-NEXT: cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>69 // CHECK-NEXT: cir.return70 // CHECK-NEXT: }71 72 cir.func @c0_unsigned(%arg0: !u32i, %arg1: !u32i) {73 %0 = cir.alloca !u32i, !cir.ptr<!u32i>, ["a", init] {alignment = 4 : i64}74 %1 = cir.alloca !u32i, !cir.ptr<!u32i>, ["b", init] {alignment = 4 : i64}75 %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}76 cir.store %arg0, %0 : !u32i, !cir.ptr<!u32i>77 cir.store %arg1, %1 : !u32i, !cir.ptr<!u32i>78 %3 = cir.load %0 : !cir.ptr<!u32i>, !u32i79 %4 = cir.load %1 : !cir.ptr<!u32i>, !u32i80 %5 = cir.cmp(gt, %3, %4) : !u32i, !cir.bool81 cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>82 %6 = cir.load %0 : !cir.ptr<!u32i>, !u32i83 %7 = cir.load %1 : !cir.ptr<!u32i>, !u32i84 %8 = cir.cmp(lt, %6, %7) : !u32i, !cir.bool85 cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>86 %9 = cir.load %0 : !cir.ptr<!u32i>, !u32i87 %10 = cir.load %1 : !cir.ptr<!u32i>, !u32i88 %11 = cir.cmp(le, %9, %10) : !u32i, !cir.bool89 cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>90 %12 = cir.load %0 : !cir.ptr<!u32i>, !u32i91 %13 = cir.load %1 : !cir.ptr<!u32i>, !u32i92 %14 = cir.cmp(ge, %12, %13) : !u32i, !cir.bool93 cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>94 %15 = cir.load %0 : !cir.ptr<!u32i>, !u32i95 %16 = cir.load %1 : !cir.ptr<!u32i>, !u32i96 %17 = cir.cmp(ne, %15, %16) : !u32i, !cir.bool97 cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>98 %18 = cir.load %0 : !cir.ptr<!u32i>, !u32i99 %19 = cir.load %1 : !cir.ptr<!u32i>, !u32i100 %20 = cir.cmp(eq, %18, %19) : !u32i, !cir.bool101 cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>102 cir.return103 }104 105 // CHECK: cir.func{{.*}} @c0_unsigned(%arg0: !u32i, %arg1: !u32i) {106 // CHECK-NEXT: %0 = cir.alloca !u32i, !cir.ptr<!u32i>, ["a", init] {alignment = 4 : i64}107 // CHECK-NEXT: %1 = cir.alloca !u32i, !cir.ptr<!u32i>, ["b", init] {alignment = 4 : i64}108 // CHECK-NEXT: %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}109 // CHECK-NEXT: cir.store %arg0, %0 : !u32i, !cir.ptr<!u32i>110 // CHECK-NEXT: cir.store %arg1, %1 : !u32i, !cir.ptr<!u32i>111 // CHECK-NEXT: %3 = cir.load %0 : !cir.ptr<!u32i>, !u32i112 // CHECK-NEXT: %4 = cir.load %1 : !cir.ptr<!u32i>, !u32i113 // CHECK-NEXT: %5 = cir.cmp(gt, %3, %4) : !u32i, !cir.bool114 // CHECK-NEXT: cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>115 // CHECK-NEXT: %6 = cir.load %0 : !cir.ptr<!u32i>, !u32i116 // CHECK-NEXT: %7 = cir.load %1 : !cir.ptr<!u32i>, !u32i117 // CHECK-NEXT: %8 = cir.cmp(lt, %6, %7) : !u32i, !cir.bool118 // CHECK-NEXT: cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>119 // CHECK-NEXT: %9 = cir.load %0 : !cir.ptr<!u32i>, !u32i120 // CHECK-NEXT: %10 = cir.load %1 : !cir.ptr<!u32i>, !u32i121 // CHECK-NEXT: %11 = cir.cmp(le, %9, %10) : !u32i, !cir.bool122 // CHECK-NEXT: cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>123 // CHECK-NEXT: %12 = cir.load %0 : !cir.ptr<!u32i>, !u32i124 // CHECK-NEXT: %13 = cir.load %1 : !cir.ptr<!u32i>, !u32i125 // CHECK-NEXT: %14 = cir.cmp(ge, %12, %13) : !u32i, !cir.bool126 // CHECK-NEXT: cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>127 // CHECK-NEXT: %15 = cir.load %0 : !cir.ptr<!u32i>, !u32i128 // CHECK-NEXT: %16 = cir.load %1 : !cir.ptr<!u32i>, !u32i129 // CHECK-NEXT: %17 = cir.cmp(ne, %15, %16) : !u32i, !cir.bool130 // CHECK-NEXT: cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>131 // CHECK-NEXT: %18 = cir.load %0 : !cir.ptr<!u32i>, !u32i132 // CHECK-NEXT: %19 = cir.load %1 : !cir.ptr<!u32i>, !u32i133 // CHECK-NEXT: %20 = cir.cmp(eq, %18, %19) : !u32i, !cir.bool134 // CHECK-NEXT: cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>135 // CHECK-NEXT: cir.return136 // CHECK-NEXT: }137 138 cir.func @c0_float(%arg0: !cir.float, %arg1: !cir.float) {139 %0 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["a", init] {alignment = 4 : i64}140 %1 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["b", init] {alignment = 4 : i64}141 %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}142 cir.store %arg0, %0 : !cir.float, !cir.ptr<!cir.float>143 cir.store %arg1, %1 : !cir.float, !cir.ptr<!cir.float>144 %3 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float145 %4 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float146 %5 = cir.cmp(gt, %3, %4) : !cir.float, !cir.bool147 cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>148 %6 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float149 %7 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float150 %8 = cir.cmp(lt, %6, %7) : !cir.float, !cir.bool151 cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>152 %9 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float153 %10 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float154 %11 = cir.cmp(le, %9, %10) : !cir.float, !cir.bool155 cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>156 %12 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float157 %13 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float158 %14 = cir.cmp(ge, %12, %13) : !cir.float, !cir.bool159 cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>160 %15 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float161 %16 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float162 %17 = cir.cmp(ne, %15, %16) : !cir.float, !cir.bool163 cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>164 %18 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float165 %19 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float166 %20 = cir.cmp(eq, %18, %19) : !cir.float, !cir.bool167 cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>168 cir.return169 }170 171 // CHECK: cir.func{{.*}} @c0_float(%arg0: !cir.float, %arg1: !cir.float) {172 // CHECK-NEXT: %0 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["a", init] {alignment = 4 : i64}173 // CHECK-NEXT: %1 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["b", init] {alignment = 4 : i64}174 // CHECK-NEXT: %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}175 // CHECK-NEXT: cir.store %arg0, %0 : !cir.float, !cir.ptr<!cir.float>176 // CHECK-NEXT: cir.store %arg1, %1 : !cir.float, !cir.ptr<!cir.float>177 // CHECK-NEXT: %3 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float178 // CHECK-NEXT: %4 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float179 // CHECK-NEXT: %5 = cir.cmp(gt, %3, %4) : !cir.float, !cir.bool180 // CHECK-NEXT: cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>181 // CHECK-NEXT: %6 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float182 // CHECK-NEXT: %7 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float183 // CHECK-NEXT: %8 = cir.cmp(lt, %6, %7) : !cir.float, !cir.bool184 // CHECK-NEXT: cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>185 // CHECK-NEXT: %9 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float186 // CHECK-NEXT: %10 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float187 // CHECK-NEXT: %11 = cir.cmp(le, %9, %10) : !cir.float, !cir.bool188 // CHECK-NEXT: cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>189 // CHECK-NEXT: %12 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float190 // CHECK-NEXT: %13 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float191 // CHECK-NEXT: %14 = cir.cmp(ge, %12, %13) : !cir.float, !cir.bool192 // CHECK-NEXT: cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>193 // CHECK-NEXT: %15 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float194 // CHECK-NEXT: %16 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float195 // CHECK-NEXT: %17 = cir.cmp(ne, %15, %16) : !cir.float, !cir.bool196 // CHECK-NEXT: cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>197 // CHECK-NEXT: %18 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float198 // CHECK-NEXT: %19 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float199 // CHECK-NEXT: %20 = cir.cmp(eq, %18, %19) : !cir.float, !cir.bool200 // CHECK-NEXT: cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>201 // CHECK-NEXT: cir.return202 // CHECK-NEXT: }203 204 cir.func @pointer_cmp(%arg0: !cir.ptr<!s32i>, %arg1: !cir.ptr<!s32i>) {205 %0 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["a", init] {alignment = 8 : i64}206 %1 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["b", init] {alignment = 8 : i64}207 %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}208 cir.store %arg0, %0 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>209 cir.store %arg1, %1 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>210 %3 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>211 %4 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>212 %5 = cir.cmp(gt, %3, %4) : !cir.ptr<!s32i>, !cir.bool213 cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>214 %6 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>215 %7 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>216 %8 = cir.cmp(lt, %6, %7) : !cir.ptr<!s32i>, !cir.bool217 cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>218 %9 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>219 %10 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>220 %11 = cir.cmp(ge, %9, %10) : !cir.ptr<!s32i>, !cir.bool221 cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>222 %12 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>223 %13 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>224 %14 = cir.cmp(le, %12, %13) : !cir.ptr<!s32i>, !cir.bool225 cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>226 %15 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>227 %16 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>228 %17 = cir.cmp(eq, %15, %16) : !cir.ptr<!s32i>, !cir.bool229 cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>230 %18 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>231 %19 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>232 %20 = cir.cmp(ne, %18, %19) : !cir.ptr<!s32i>, !cir.bool233 cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>234 cir.return235 }236 237 // CHECK: cir.func{{.*}} @pointer_cmp(%arg0: !cir.ptr<!s32i>, %arg1: !cir.ptr<!s32i>) {238 // CHECK-NEXT: %0 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["a", init] {alignment = 8 : i64}239 // CHECK-NEXT: %1 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["b", init] {alignment = 8 : i64}240 // CHECK-NEXT: %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}241 // CHECK-NEXT: cir.store %arg0, %0 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>242 // CHECK-NEXT: cir.store %arg1, %1 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>243 // CHECK-NEXT: %3 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>244 // CHECK-NEXT: %4 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>245 // CHECK-NEXT: %5 = cir.cmp(gt, %3, %4) : !cir.ptr<!s32i>, !cir.bool246 // CHECK-NEXT: cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>247 // CHECK-NEXT: %6 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>248 // CHECK-NEXT: %7 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>249 // CHECK-NEXT: %8 = cir.cmp(lt, %6, %7) : !cir.ptr<!s32i>, !cir.bool250 // CHECK-NEXT: cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>251 // CHECK-NEXT: %9 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>252 // CHECK-NEXT: %10 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>253 // CHECK-NEXT: %11 = cir.cmp(ge, %9, %10) : !cir.ptr<!s32i>, !cir.bool254 // CHECK-NEXT: cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>255 // CHECK-NEXT: %12 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>256 // CHECK-NEXT: %13 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>257 // CHECK-NEXT: %14 = cir.cmp(le, %12, %13) : !cir.ptr<!s32i>, !cir.bool258 // CHECK-NEXT: cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>259 // CHECK-NEXT: %15 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>260 // CHECK-NEXT: %16 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>261 // CHECK-NEXT: %17 = cir.cmp(eq, %15, %16) : !cir.ptr<!s32i>, !cir.bool262 // CHECK-NEXT: cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>263 // CHECK-NEXT: %18 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>264 // CHECK-NEXT: %19 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>265 // CHECK-NEXT: %20 = cir.cmp(ne, %18, %19) : !cir.ptr<!s32i>, !cir.bool266 // CHECK-NEXT: cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>267 // CHECK-NEXT: cir.return268 // CHECK-NEXT: }269 270 cir.func @bool_cmp(%arg0: !cir.bool, %arg1: !cir.bool) {271 %0 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["a", init] {alignment = 1 : i64}272 %1 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["b", init] {alignment = 1 : i64}273 %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}274 cir.store %arg0, %0 : !cir.bool, !cir.ptr<!cir.bool>275 cir.store %arg1, %1 : !cir.bool, !cir.ptr<!cir.bool>276 %3 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool277 %4 = cir.cast bool_to_int %3 : !cir.bool -> !s32i278 %5 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool279 %6 = cir.cast bool_to_int %5 : !cir.bool -> !s32i280 %7 = cir.cmp(gt, %4, %6) : !s32i, !cir.bool281 cir.store %7, %2 : !cir.bool, !cir.ptr<!cir.bool>282 %8 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool283 %9 = cir.cast bool_to_int %8 : !cir.bool -> !s32i284 %10 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool285 %11 = cir.cast bool_to_int %10 : !cir.bool -> !s32i286 %12 = cir.cmp(lt, %9, %11) : !s32i, !cir.bool287 cir.store %12, %2 : !cir.bool, !cir.ptr<!cir.bool>288 %13 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool289 %14 = cir.cast bool_to_int %13 : !cir.bool -> !s32i290 %15 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool291 %16 = cir.cast bool_to_int %15 : !cir.bool -> !s32i292 %17 = cir.cmp(ge, %14, %16) : !s32i, !cir.bool293 cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>294 %18 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool295 %19 = cir.cast bool_to_int %18 : !cir.bool -> !s32i296 %20 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool297 %21 = cir.cast bool_to_int %20 : !cir.bool -> !s32i298 %22 = cir.cmp(le, %19, %21) : !s32i, !cir.bool299 cir.store %22, %2 : !cir.bool, !cir.ptr<!cir.bool>300 %23 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool301 %24 = cir.cast bool_to_int %23 : !cir.bool -> !s32i302 %25 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool303 %26 = cir.cast bool_to_int %25 : !cir.bool -> !s32i304 %27 = cir.cmp(eq, %24, %26) : !s32i, !cir.bool305 cir.store %27, %2 : !cir.bool, !cir.ptr<!cir.bool>306 %28 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool307 %29 = cir.cast bool_to_int %28 : !cir.bool -> !s32i308 %30 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool309 %31 = cir.cast bool_to_int %30 : !cir.bool -> !s32i310 %32 = cir.cmp(ne, %29, %31) : !s32i, !cir.bool311 cir.store %32, %2 : !cir.bool, !cir.ptr<!cir.bool>312 cir.return313 }314 315 // CHECK: cir.func{{.*}} @bool_cmp(%arg0: !cir.bool, %arg1: !cir.bool) {316 // CHECK-NEXT: %0 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["a", init] {alignment = 1 : i64}317 // CHECK-NEXT: %1 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["b", init] {alignment = 1 : i64}318 // CHECK-NEXT: %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}319 // CHECK-NEXT: cir.store %arg0, %0 : !cir.bool, !cir.ptr<!cir.bool>320 // CHECK-NEXT: cir.store %arg1, %1 : !cir.bool, !cir.ptr<!cir.bool>321 // CHECK-NEXT: %3 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool322 // CHECK-NEXT: %4 = cir.cast bool_to_int %3 : !cir.bool -> !s32i323 // CHECK-NEXT: %5 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool324 // CHECK-NEXT: %6 = cir.cast bool_to_int %5 : !cir.bool -> !s32i325 // CHECK-NEXT: %7 = cir.cmp(gt, %4, %6) : !s32i, !cir.bool326 // CHECK-NEXT: cir.store %7, %2 : !cir.bool, !cir.ptr<!cir.bool>327 // CHECK-NEXT: %8 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool328 // CHECK-NEXT: %9 = cir.cast bool_to_int %8 : !cir.bool -> !s32i329 // CHECK-NEXT: %10 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool330 // CHECK-NEXT: %11 = cir.cast bool_to_int %10 : !cir.bool -> !s32i331 // CHECK-NEXT: %12 = cir.cmp(lt, %9, %11) : !s32i, !cir.bool332 // CHECK-NEXT: cir.store %12, %2 : !cir.bool, !cir.ptr<!cir.bool>333 // CHECK-NEXT: %13 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool334 // CHECK-NEXT: %14 = cir.cast bool_to_int %13 : !cir.bool -> !s32i335 // CHECK-NEXT: %15 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool336 // CHECK-NEXT: %16 = cir.cast bool_to_int %15 : !cir.bool -> !s32i337 // CHECK-NEXT: %17 = cir.cmp(ge, %14, %16) : !s32i, !cir.bool338 // CHECK-NEXT: cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>339 // CHECK-NEXT: %18 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool340 // CHECK-NEXT: %19 = cir.cast bool_to_int %18 : !cir.bool -> !s32i341 // CHECK-NEXT: %20 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool342 // CHECK-NEXT: %21 = cir.cast bool_to_int %20 : !cir.bool -> !s32i343 // CHECK-NEXT: %22 = cir.cmp(le, %19, %21) : !s32i, !cir.bool344 // CHECK-NEXT: cir.store %22, %2 : !cir.bool, !cir.ptr<!cir.bool>345 // CHECK-NEXT: %23 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool346 // CHECK-NEXT: %24 = cir.cast bool_to_int %23 : !cir.bool -> !s32i347 // CHECK-NEXT: %25 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool348 // CHECK-NEXT: %26 = cir.cast bool_to_int %25 : !cir.bool -> !s32i349 // CHECK-NEXT: %27 = cir.cmp(eq, %24, %26) : !s32i, !cir.bool350 // CHECK-NEXT: cir.store %27, %2 : !cir.bool, !cir.ptr<!cir.bool>351 // CHECK-NEXT: %28 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool352 // CHECK-NEXT: %29 = cir.cast bool_to_int %28 : !cir.bool -> !s32i353 // CHECK-NEXT: %30 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool354 // CHECK-NEXT: %31 = cir.cast bool_to_int %30 : !cir.bool -> !s32i355 // CHECK-NEXT: %32 = cir.cmp(ne, %29, %31) : !s32i, !cir.bool356 // CHECK-NEXT: cir.store %32, %2 : !cir.bool, !cir.ptr<!cir.bool>357 // CHECK-NEXT: cir.return358 // CHECK-NEXT: }359}360