brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.0 KiB · 0d47398 Raw
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