@@ -14,6 +14,14 @@ pub fn u64_opt_as_slice(o: &Option<u64>) -> &[u64] {
14
14
// CHECK-NOT: br
15
15
// CHECK-NOT: switch
16
16
// CHECK-NOT: icmp
17
+ // CHECK: %[[LEN:.+]] = load i64,{{.+}} !range ![[META_U64:.+]], !noundef
18
+ // CHECK-NOT: select
19
+ // CHECK-NOT: br
20
+ // CHECK-NOT: switch
21
+ // CHECK-NOT: icmp
22
+ // CHECK: %[[T0:.+]] = insertvalue { ptr, i64 } poison, ptr %{{.+}}, 0
23
+ // CHECK-NEXT: %[[T1:.+]] = insertvalue { ptr, i64 } %[[T0]], i64 %[[LEN]], 1
24
+ // CHECK-NEXT: ret { ptr, i64 } %[[T1]]
17
25
o. as_slice ( )
18
26
}
19
27
@@ -25,10 +33,35 @@ pub fn nonzero_u64_opt_as_slice(o: &Option<NonZero<u64>>) -> &[NonZero<u64>] {
25
33
// CHECK-NOT: switch
26
34
// CHECK-NOT: icmp
27
35
// CHECK: %[[NZ:.+]] = icmp ne i64 %{{.+}}, 0
28
- // CHECK-NEXT: zext i1 %[[NZ]] to i64
36
+ // CHECK-NEXT: %[[LEN:.+]] = zext i1 %[[NZ]] to i64
29
37
// CHECK-NOT: select
30
38
// CHECK-NOT: br
31
39
// CHECK-NOT: switch
32
40
// CHECK-NOT: icmp
41
+ // CHECK: %[[T0:.+]] = insertvalue { ptr, i64 } poison, ptr %o, 0
42
+ // CHECK-NEXT: %[[T1:.+]] = insertvalue { ptr, i64 } %[[T0]], i64 %[[LEN]], 1
43
+ // CHECK-NEXT: ret { ptr, i64 } %[[T1]]
33
44
o. as_slice ( )
34
45
}
46
+
47
+ // CHECK-LABEL: @u8_opt_as_slice
48
+ #[ no_mangle]
49
+ pub fn u8_opt_as_slice ( o : & Option < u8 > ) -> & [ u8 ] {
50
+ // CHECK-NOT: select
51
+ // CHECK-NOT: br
52
+ // CHECK-NOT: switch
53
+ // CHECK-NOT: icmp
54
+ // CHECK: %[[TAG:.+]] = load i8,{{.+}} !range ![[META_U8:.+]], !noundef
55
+ // CHECK: %[[LEN:.+]] = zext{{.*}} i8 %[[TAG]] to i64
56
+ // CHECK-NOT: select
57
+ // CHECK-NOT: br
58
+ // CHECK-NOT: switch
59
+ // CHECK-NOT: icmp
60
+ // CHECK: %[[T0:.+]] = insertvalue { ptr, i64 } poison, ptr %{{.+}}, 0
61
+ // CHECK-NEXT: %[[T1:.+]] = insertvalue { ptr, i64 } %[[T0]], i64 %[[LEN]], 1
62
+ // CHECK-NEXT: ret { ptr, i64 } %[[T1]]
63
+ o. as_slice ( )
64
+ }
65
+
66
+ // CHECK: ![[META_U64]] = !{i64 0, i64 2}
67
+ // CHECK: ![[META_U8]] = !{i8 0, i8 2}
0 commit comments