@@ -25,6 +25,26 @@ module {
25
25
// CHECK-NEXT: cir.return %[[R]] : !u32i
26
26
// CHECK-NEXT: }
27
27
28
+ cir.func @fold_clz_zero_poison() -> !u32i {
29
+ %0 = cir.const #cir.int<0> : !u32i
30
+ %1 = cir.clz %0 poison_zero : !u32i
31
+ cir.return %1 : !u32i
32
+ }
33
+ // CHECK-LABEL: @fold_clz_zero_poison
34
+ // CHECK-NEXT: %[[R:.+]] = cir.const #cir.poison : !u32i
35
+ // CHECK-NEXT: cir.return %[[R]] : !u32i
36
+ // CHECK-NEXT: }
37
+
38
+ cir.func @fold_clz_zero_no_poison() -> !u32i {
39
+ %0 = cir.const #cir.int<0> : !u32i
40
+ %1 = cir.clz %0 : !u32i
41
+ cir.return %1 : !u32i
42
+ }
43
+ // CHECK-LABEL: @fold_clz_zero_no_poison
44
+ // CHECK-NEXT: %[[R:.+]] = cir.const #cir.int<32> : !u32i
45
+ // CHECK-NEXT: cir.return %[[R]] : !u32i
46
+ // CHECK-NEXT: }
47
+
28
48
cir.func @fold_ctz() -> !u32i {
29
49
%0 = cir.const #cir.int<2> : !u32i
30
50
%1 = cir.ctz %0 : !u32i
@@ -35,6 +55,26 @@ module {
35
55
// CHECK-NEXT: cir.return %[[R]] : !u32i
36
56
// CHECK-NEXT: }
37
57
58
+ cir.func @fold_ctz_zero_poison() -> !u32i {
59
+ %0 = cir.const #cir.int<0> : !u32i
60
+ %1 = cir.ctz %0 poison_zero : !u32i
61
+ cir.return %1 : !u32i
62
+ }
63
+ // CHECK-LABEL: @fold_ctz_zero_poison
64
+ // CHECK-NEXT: %[[R:.+]] = cir.const #cir.poison : !u32i
65
+ // CHECK-NEXT: cir.return %[[R]] : !u32i
66
+ // CHECK-NEXT: }
67
+
68
+ cir.func @fold_ctz_zero_no_poison() -> !u32i {
69
+ %0 = cir.const #cir.int<0> : !u32i
70
+ %1 = cir.ctz %0 : !u32i
71
+ cir.return %1 : !u32i
72
+ }
73
+ // CHECK-LABEL: @fold_ctz_zero_no_poison
74
+ // CHECK-NEXT: %[[R:.+]] = cir.const #cir.int<32> : !u32i
75
+ // CHECK-NEXT: cir.return %[[R]] : !u32i
76
+ // CHECK-NEXT: }
77
+
38
78
cir.func @fold_parity() -> !u32i {
39
79
// 0xdeadbeef is 0b1101_1110_1010_1101_1011_1110_1110_1111
40
80
// 0xdeadbeef contains 24 ones
@@ -82,6 +122,16 @@ module {
82
122
// CHECK-NEXT: cir.return %[[R]] : !u32i
83
123
// CHECK-NEXT: }
84
124
125
+ cir.func @fold_input_poison() -> !s32i {
126
+ %0 = cir.const #cir.poison : !s32i
127
+ %1 = cir.clrsb %0 : !s32i
128
+ cir.return %1 : !s32i
129
+ }
130
+ // CHECK-LABEL: @fold_input_poison
131
+ // CHECK-NEXT: %[[P:.+]] = cir.const #cir.poison : !s32i
132
+ // CHECK-NEXT: cir.return %[[P]] : !s32i
133
+ // CHECK-NEXT: }
134
+
85
135
cir.func @fold_rotate_input_all_zeros(%arg0 : !u32i) -> !u32i {
86
136
%0 = cir.const #cir.int<0> : !u32i
87
137
%1 = cir.rotate left %0, %arg0 : !u32i
@@ -138,4 +188,24 @@ module {
138
188
// CHECK-NEXT: %[[R:.+]] = cir.const #cir.int<4024348094> : !u32i
139
189
// CHECK-NEXT: cir.return %[[R]] : !u32i
140
190
// CHECK-NEXT: }
191
+
192
+ cir.func @fold_rotate_input_poison(%arg0 : !u32i) -> !u32i {
193
+ %0 = cir.const #cir.poison : !u32i
194
+ %1 = cir.rotate left %0, %arg0 : !u32i
195
+ cir.return %1 : !u32i
196
+ }
197
+ // CHECK-LABEL: @fold_rotate_input_poison
198
+ // CHECK-NEXT: %[[P:.+]] = cir.const #cir.poison : !u32i
199
+ // CHECK-NEXT: cir.return %[[P]] : !u32i
200
+ // CHECK-NEXT: }
201
+
202
+ cir.func @fold_rotate_amount_poison(%arg0 : !u32i) -> !u32i {
203
+ %0 = cir.const #cir.poison : !u32i
204
+ %1 = cir.rotate left %arg0, %0 : !u32i
205
+ cir.return %1 : !u32i
206
+ }
207
+ // CHECK-LABEL: @fold_rotate_amount_poison
208
+ // CHECK-NEXT: %[[P:.+]] = cir.const #cir.poison : !u32i
209
+ // CHECK-NEXT: cir.return %[[P]] : !u32i
210
+ // CHECK-NEXT: }
141
211
}
0 commit comments