File: cmp.cir

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.6-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,245,028 kB
  • sloc: cpp: 7,619,726; ansic: 1,434,018; asm: 1,058,748; python: 252,740; f90: 94,671; objc: 70,685; lisp: 42,813; pascal: 18,401; sh: 8,601; ml: 5,111; perl: 4,720; makefile: 3,675; awk: 3,523; javascript: 2,409; xml: 892; fortran: 770
file content (359 lines) | stat: -rw-r--r-- 21,474 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
// RUN: cir-opt %s | cir-opt | FileCheck %s
!s32i = !cir.int<s, 32>
!u32i = !cir.int<u, 32>

module {
  cir.func @c0(%arg0: !s32i, %arg1: !s32i) {
    %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}
    %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init] {alignment = 4 : i64}
    %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
    cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>
    cir.store %arg1, %1 : !s32i, !cir.ptr<!s32i>
    %3 = cir.load %0 : !cir.ptr<!s32i>, !s32i
    %4 = cir.load %1 : !cir.ptr<!s32i>, !s32i
    %5 = cir.cmp(gt, %3, %4) : !s32i, !cir.bool
    cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %6 = cir.load %0 : !cir.ptr<!s32i>, !s32i
    %7 = cir.load %1 : !cir.ptr<!s32i>, !s32i
    %8 = cir.cmp(lt, %6, %7) : !s32i, !cir.bool
    cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %9 = cir.load %0 : !cir.ptr<!s32i>, !s32i
    %10 = cir.load %1 : !cir.ptr<!s32i>, !s32i
    %11 = cir.cmp(le, %9, %10) : !s32i, !cir.bool
    cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %12 = cir.load %0 : !cir.ptr<!s32i>, !s32i
    %13 = cir.load %1 : !cir.ptr<!s32i>, !s32i
    %14 = cir.cmp(ge, %12, %13) : !s32i, !cir.bool
    cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %15 = cir.load %0 : !cir.ptr<!s32i>, !s32i
    %16 = cir.load %1 : !cir.ptr<!s32i>, !s32i
    %17 = cir.cmp(ne, %15, %16) : !s32i, !cir.bool
    cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %18 = cir.load %0 : !cir.ptr<!s32i>, !s32i
    %19 = cir.load %1 : !cir.ptr<!s32i>, !s32i
    %20 = cir.cmp(eq, %18, %19) : !s32i, !cir.bool
    cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
    cir.return
  }

  // CHECK: cir.func{{.*}} @c0(%arg0: !s32i, %arg1: !s32i) {
  // CHECK-NEXT:   %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init] {alignment = 4 : i64}
  // CHECK-NEXT:   %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["b", init] {alignment = 4 : i64}
  // CHECK-NEXT:   %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
  // CHECK-NEXT:   cir.store %arg0, %0 : !s32i, !cir.ptr<!s32i>
  // CHECK-NEXT:   cir.store %arg1, %1 : !s32i, !cir.ptr<!s32i>
  // CHECK-NEXT:   %3 = cir.load %0 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %4 = cir.load %1 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %5 = cir.cmp(gt, %3, %4) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %6 = cir.load %0 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %7 = cir.load %1 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %8 = cir.cmp(lt, %6, %7) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %9 = cir.load %0 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %10 = cir.load %1 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %11 = cir.cmp(le, %9, %10) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %12 = cir.load %0 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %13 = cir.load %1 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %14 = cir.cmp(ge, %12, %13) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %15 = cir.load %0 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %16 = cir.load %1 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %17 = cir.cmp(ne, %15, %16) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %18 = cir.load %0 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %19 = cir.load %1 : !cir.ptr<!s32i>, !s32i
  // CHECK-NEXT:   %20 = cir.cmp(eq, %18, %19) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   cir.return
  // CHECK-NEXT: }

  cir.func @c0_unsigned(%arg0: !u32i, %arg1: !u32i) {
    %0 = cir.alloca !u32i, !cir.ptr<!u32i>, ["a", init] {alignment = 4 : i64}
    %1 = cir.alloca !u32i, !cir.ptr<!u32i>, ["b", init] {alignment = 4 : i64}
    %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
    cir.store %arg0, %0 : !u32i, !cir.ptr<!u32i>
    cir.store %arg1, %1 : !u32i, !cir.ptr<!u32i>
    %3 = cir.load %0 : !cir.ptr<!u32i>, !u32i
    %4 = cir.load %1 : !cir.ptr<!u32i>, !u32i
    %5 = cir.cmp(gt, %3, %4) : !u32i, !cir.bool
    cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %6 = cir.load %0 : !cir.ptr<!u32i>, !u32i
    %7 = cir.load %1 : !cir.ptr<!u32i>, !u32i
    %8 = cir.cmp(lt, %6, %7) : !u32i, !cir.bool
    cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %9 = cir.load %0 : !cir.ptr<!u32i>, !u32i
    %10 = cir.load %1 : !cir.ptr<!u32i>, !u32i
    %11 = cir.cmp(le, %9, %10) : !u32i, !cir.bool
    cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %12 = cir.load %0 : !cir.ptr<!u32i>, !u32i
    %13 = cir.load %1 : !cir.ptr<!u32i>, !u32i
    %14 = cir.cmp(ge, %12, %13) : !u32i, !cir.bool
    cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %15 = cir.load %0 : !cir.ptr<!u32i>, !u32i
    %16 = cir.load %1 : !cir.ptr<!u32i>, !u32i
    %17 = cir.cmp(ne, %15, %16) : !u32i, !cir.bool
    cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %18 = cir.load %0 : !cir.ptr<!u32i>, !u32i
    %19 = cir.load %1 : !cir.ptr<!u32i>, !u32i
    %20 = cir.cmp(eq, %18, %19) : !u32i, !cir.bool
    cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
    cir.return
  }

  // CHECK: cir.func{{.*}} @c0_unsigned(%arg0: !u32i, %arg1: !u32i) {
  // CHECK-NEXT:   %0 = cir.alloca !u32i, !cir.ptr<!u32i>, ["a", init] {alignment = 4 : i64}
  // CHECK-NEXT:   %1 = cir.alloca !u32i, !cir.ptr<!u32i>, ["b", init] {alignment = 4 : i64}
  // CHECK-NEXT:   %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
  // CHECK-NEXT:   cir.store %arg0, %0 : !u32i, !cir.ptr<!u32i>
  // CHECK-NEXT:   cir.store %arg1, %1 : !u32i, !cir.ptr<!u32i>
  // CHECK-NEXT:   %3 = cir.load %0 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %4 = cir.load %1 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %5 = cir.cmp(gt, %3, %4) : !u32i, !cir.bool
  // CHECK-NEXT:   cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %6 = cir.load %0 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %7 = cir.load %1 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %8 = cir.cmp(lt, %6, %7) : !u32i, !cir.bool
  // CHECK-NEXT:   cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %9 = cir.load %0 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %10 = cir.load %1 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %11 = cir.cmp(le, %9, %10) : !u32i, !cir.bool
  // CHECK-NEXT:   cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %12 = cir.load %0 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %13 = cir.load %1 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %14 = cir.cmp(ge, %12, %13) : !u32i, !cir.bool
  // CHECK-NEXT:   cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %15 = cir.load %0 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %16 = cir.load %1 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %17 = cir.cmp(ne, %15, %16) : !u32i, !cir.bool
  // CHECK-NEXT:   cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %18 = cir.load %0 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %19 = cir.load %1 : !cir.ptr<!u32i>, !u32i
  // CHECK-NEXT:   %20 = cir.cmp(eq, %18, %19) : !u32i, !cir.bool
  // CHECK-NEXT:   cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   cir.return
  // CHECK-NEXT: }

  cir.func @c0_float(%arg0: !cir.float, %arg1: !cir.float) {
    %0 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["a", init] {alignment = 4 : i64}
    %1 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["b", init] {alignment = 4 : i64}
    %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
    cir.store %arg0, %0 : !cir.float, !cir.ptr<!cir.float>
    cir.store %arg1, %1 : !cir.float, !cir.ptr<!cir.float>
    %3 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
    %4 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
    %5 = cir.cmp(gt, %3, %4) : !cir.float, !cir.bool
    cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %6 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
    %7 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
    %8 = cir.cmp(lt, %6, %7) : !cir.float, !cir.bool
    cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %9 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
    %10 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
    %11 = cir.cmp(le, %9, %10) : !cir.float, !cir.bool
    cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %12 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
    %13 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
    %14 = cir.cmp(ge, %12, %13) : !cir.float, !cir.bool
    cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %15 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
    %16 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
    %17 = cir.cmp(ne, %15, %16) : !cir.float, !cir.bool
    cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %18 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
    %19 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
    %20 = cir.cmp(eq, %18, %19) : !cir.float, !cir.bool
    cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
    cir.return
  }

  // CHECK: cir.func{{.*}} @c0_float(%arg0: !cir.float, %arg1: !cir.float) {
  // CHECK-NEXT:   %0 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["a", init] {alignment = 4 : i64}
  // CHECK-NEXT:   %1 = cir.alloca !cir.float, !cir.ptr<!cir.float>, ["b", init] {alignment = 4 : i64}
  // CHECK-NEXT:   %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
  // CHECK-NEXT:   cir.store %arg0, %0 : !cir.float, !cir.ptr<!cir.float>
  // CHECK-NEXT:   cir.store %arg1, %1 : !cir.float, !cir.ptr<!cir.float>
  // CHECK-NEXT:   %3 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %4 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %5 = cir.cmp(gt, %3, %4) : !cir.float, !cir.bool
  // CHECK-NEXT:   cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %6 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %7 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %8 = cir.cmp(lt, %6, %7) : !cir.float, !cir.bool
  // CHECK-NEXT:   cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %9 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %10 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %11 = cir.cmp(le, %9, %10) : !cir.float, !cir.bool
  // CHECK-NEXT:   cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %12 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %13 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %14 = cir.cmp(ge, %12, %13) : !cir.float, !cir.bool
  // CHECK-NEXT:   cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %15 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %16 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %17 = cir.cmp(ne, %15, %16) : !cir.float, !cir.bool
  // CHECK-NEXT:   cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %18 = cir.load %0 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %19 = cir.load %1 : !cir.ptr<!cir.float>, !cir.float
  // CHECK-NEXT:   %20 = cir.cmp(eq, %18, %19) : !cir.float, !cir.bool
  // CHECK-NEXT:   cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   cir.return
  // CHECK-NEXT: }

  cir.func @pointer_cmp(%arg0: !cir.ptr<!s32i>, %arg1: !cir.ptr<!s32i>) {
    %0 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["a", init] {alignment = 8 : i64}
    %1 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["b", init] {alignment = 8 : i64}
    %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
    cir.store %arg0, %0 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
    cir.store %arg1, %1 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
    %3 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %4 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %5 = cir.cmp(gt, %3, %4) : !cir.ptr<!s32i>, !cir.bool
    cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %6 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %7 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %8 = cir.cmp(lt, %6, %7) : !cir.ptr<!s32i>, !cir.bool
    cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %9 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %10 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %11 = cir.cmp(ge, %9, %10) : !cir.ptr<!s32i>, !cir.bool
    cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %12 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %13 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %14 = cir.cmp(le, %12, %13) : !cir.ptr<!s32i>, !cir.bool
    cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %15 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %16 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %17 = cir.cmp(eq, %15, %16) : !cir.ptr<!s32i>, !cir.bool
    cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %18 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %19 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
    %20 = cir.cmp(ne, %18, %19) : !cir.ptr<!s32i>, !cir.bool
    cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
    cir.return
  }

  // CHECK: cir.func{{.*}} @pointer_cmp(%arg0: !cir.ptr<!s32i>, %arg1: !cir.ptr<!s32i>) {
  // CHECK-NEXT:   %0 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["a", init] {alignment = 8 : i64}
  // CHECK-NEXT:   %1 = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["b", init] {alignment = 8 : i64}
  // CHECK-NEXT:   %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
  // CHECK-NEXT:   cir.store %arg0, %0 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
  // CHECK-NEXT:   cir.store %arg1, %1 : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
  // CHECK-NEXT:   %3 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %4 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %5 = cir.cmp(gt, %3, %4) : !cir.ptr<!s32i>, !cir.bool
  // CHECK-NEXT:   cir.store %5, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %6 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %7 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %8 = cir.cmp(lt, %6, %7) : !cir.ptr<!s32i>, !cir.bool
  // CHECK-NEXT:   cir.store %8, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %9 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %10 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %11 = cir.cmp(ge, %9, %10) : !cir.ptr<!s32i>, !cir.bool
  // CHECK-NEXT:   cir.store %11, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %12 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %13 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %14 = cir.cmp(le, %12, %13) : !cir.ptr<!s32i>, !cir.bool
  // CHECK-NEXT:   cir.store %14, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %15 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %16 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %17 = cir.cmp(eq, %15, %16) : !cir.ptr<!s32i>, !cir.bool
  // CHECK-NEXT:   cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %18 = cir.load %0 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %19 = cir.load %1 : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
  // CHECK-NEXT:   %20 = cir.cmp(ne, %18, %19) : !cir.ptr<!s32i>, !cir.bool
  // CHECK-NEXT:   cir.store %20, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   cir.return
  // CHECK-NEXT: }

  cir.func @bool_cmp(%arg0: !cir.bool, %arg1: !cir.bool) {
    %0 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["a", init] {alignment = 1 : i64}
    %1 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["b", init] {alignment = 1 : i64}
    %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
    cir.store %arg0, %0 : !cir.bool, !cir.ptr<!cir.bool>
    cir.store %arg1, %1 : !cir.bool, !cir.ptr<!cir.bool>
    %3 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
    %4 = cir.cast(bool_to_int, %3 : !cir.bool), !s32i
    %5 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
    %6 = cir.cast(bool_to_int, %5 : !cir.bool), !s32i
    %7 = cir.cmp(gt, %4, %6) : !s32i, !cir.bool
    cir.store %7, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %8 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
    %9 = cir.cast(bool_to_int, %8 : !cir.bool), !s32i
    %10 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
    %11 = cir.cast(bool_to_int, %10 : !cir.bool), !s32i
    %12 = cir.cmp(lt, %9, %11) : !s32i, !cir.bool
    cir.store %12, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %13 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
    %14 = cir.cast(bool_to_int, %13 : !cir.bool), !s32i
    %15 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
    %16 = cir.cast(bool_to_int, %15 : !cir.bool), !s32i
    %17 = cir.cmp(ge, %14, %16) : !s32i, !cir.bool
    cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %18 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
    %19 = cir.cast(bool_to_int, %18 : !cir.bool), !s32i
    %20 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
    %21 = cir.cast(bool_to_int, %20 : !cir.bool), !s32i
    %22 = cir.cmp(le, %19, %21) : !s32i, !cir.bool
    cir.store %22, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %23 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
    %24 = cir.cast(bool_to_int, %23 : !cir.bool), !s32i
    %25 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
    %26 = cir.cast(bool_to_int, %25 : !cir.bool), !s32i
    %27 = cir.cmp(eq, %24, %26) : !s32i, !cir.bool
    cir.store %27, %2 : !cir.bool, !cir.ptr<!cir.bool>
    %28 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
    %29 = cir.cast(bool_to_int, %28 : !cir.bool), !s32i
    %30 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
    %31 = cir.cast(bool_to_int, %30 : !cir.bool), !s32i
    %32 = cir.cmp(ne, %29, %31) : !s32i, !cir.bool
    cir.store %32, %2 : !cir.bool, !cir.ptr<!cir.bool>
    cir.return
  }

  // CHECK: cir.func{{.*}} @bool_cmp(%arg0: !cir.bool, %arg1: !cir.bool) {
  // CHECK-NEXT:   %0 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["a", init] {alignment = 1 : i64}
  // CHECK-NEXT:   %1 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["b", init] {alignment = 1 : i64}
  // CHECK-NEXT:   %2 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, ["x", init] {alignment = 1 : i64}
  // CHECK-NEXT:   cir.store %arg0, %0 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   cir.store %arg1, %1 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %3 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %4 = cir.cast(bool_to_int, %3 : !cir.bool), !s32i
  // CHECK-NEXT:   %5 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %6 = cir.cast(bool_to_int, %5 : !cir.bool), !s32i
  // CHECK-NEXT:   %7 = cir.cmp(gt, %4, %6) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %7, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %8 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %9 = cir.cast(bool_to_int, %8 : !cir.bool), !s32i
  // CHECK-NEXT:   %10 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %11 = cir.cast(bool_to_int, %10 : !cir.bool), !s32i
  // CHECK-NEXT:   %12 = cir.cmp(lt, %9, %11) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %12, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %13 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %14 = cir.cast(bool_to_int, %13 : !cir.bool), !s32i
  // CHECK-NEXT:   %15 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %16 = cir.cast(bool_to_int, %15 : !cir.bool), !s32i
  // CHECK-NEXT:   %17 = cir.cmp(ge, %14, %16) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %17, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %18 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %19 = cir.cast(bool_to_int, %18 : !cir.bool), !s32i
  // CHECK-NEXT:   %20 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %21 = cir.cast(bool_to_int, %20 : !cir.bool), !s32i
  // CHECK-NEXT:   %22 = cir.cmp(le, %19, %21) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %22, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %23 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %24 = cir.cast(bool_to_int, %23 : !cir.bool), !s32i
  // CHECK-NEXT:   %25 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %26 = cir.cast(bool_to_int, %25 : !cir.bool), !s32i
  // CHECK-NEXT:   %27 = cir.cmp(eq, %24, %26) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %27, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   %28 = cir.load %0 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %29 = cir.cast(bool_to_int, %28 : !cir.bool), !s32i
  // CHECK-NEXT:   %30 = cir.load %1 : !cir.ptr<!cir.bool>, !cir.bool
  // CHECK-NEXT:   %31 = cir.cast(bool_to_int, %30 : !cir.bool), !s32i
  // CHECK-NEXT:   %32 = cir.cmp(ne, %29, %31) : !s32i, !cir.bool
  // CHECK-NEXT:   cir.store %32, %2 : !cir.bool, !cir.ptr<!cir.bool>
  // CHECK-NEXT:   cir.return
  // CHECK-NEXT: }
}