@@ -19,6 +19,36 @@ struct UInt64 {
19
19
var value: Builtin.Int64
20
20
}
21
21
22
+ sil @count_leading_zeros_corner_case : $@convention(thin) () -> Builtin.Int64 {
23
+ bb0:
24
+ %zero64 = integer_literal $Builtin.Int64, 0
25
+ %zero1 = integer_literal $Builtin.Int1, 0
26
+ %ctlz = builtin "int_ctlz_Int64"(%zero64 : $Builtin.Int64, %zero1 : $Builtin.Int1) : $Builtin.Int64
27
+ return %ctlz : $Builtin.Int64
28
+
29
+ // CHECK-LABEL: sil @count_leading_zeros_corner_case
30
+ // CHECK-NOT: integer_literal $Builtin.Int64, 0
31
+ // CHECK-NOT: integer_literal $Builtin.Int1, 0
32
+ // CHECK-NOT: builtin
33
+ // CHECK: [[RES:%.*]] = integer_literal $Builtin.Int64, 64
34
+ // CHECK-NEXT: return [[RES]] : $Builtin.Int64
35
+ }
36
+
37
+ sil @count_leading_zeros : $@convention(thin) () -> Builtin.Int64 {
38
+ bb0:
39
+ %zero64 = integer_literal $Builtin.Int64, 2
40
+ %zero1 = integer_literal $Builtin.Int1, 0
41
+ %ctlz = builtin "int_ctlz_Int64"(%zero64 : $Builtin.Int64, %zero1 : $Builtin.Int1) : $Builtin.Int64
42
+ return %ctlz : $Builtin.Int64
43
+
44
+ // CHECK-LABEL: sil @count_leading_zeros
45
+ // CHECK-NOT: integer_literal $Builtin.Int64, 2
46
+ // CHECK-NOT: integer_literal $Builtin.Int1, 0
47
+ // CHECK-NOT: builtin
48
+ // CHECK: [[RES:%.*]] = integer_literal $Builtin.Int64, 62
49
+ // CHECK-NEXT: return [[RES]] : $Builtin.Int64
50
+ }
51
+
22
52
// Compute an expression using a chain of arithmetic with overflow instructions: 2 * (2 + 3) - 3
23
53
sil @fold_arithmetic_with_overflow : $@convention(thin) () -> Builtin.Int64 {
24
54
bb0:
0 commit comments