@@ -11,10 +11,27 @@ type RGB48 = [u16; 3];
11
11
// CHECK-LABEL: @swap_rgb48
12
12
#[ no_mangle]
13
13
pub fn swap_rgb48 ( x : & mut RGB48 , y : & mut RGB48 ) {
14
- // FIXME MIR inlining messes up LLVM optimizations.
15
- // WOULD-CHECK-NOT: alloca
16
- // WOULD-CHECK: load i48
17
- // WOULD-CHECK: store i48
14
+ // CHECK-NOT: alloca
15
+ // Those can be supported only by backend
16
+ // WOULD-CHECK: load i48
17
+ // WOULD-CHECK: store i48
18
+ // CHECK: ret void
19
+ swap ( x, y)
20
+ }
21
+
22
+ // CHECK-LABEL: @swap_vecs
23
+ #[ no_mangle]
24
+ pub fn swap_vecs ( x : & mut Vec < u32 > , y : & mut Vec < u32 > ) {
25
+ // CHECK-NOT: alloca
26
+ // CHECK: ret void
27
+ swap ( x, y)
28
+ }
29
+
30
+ // CHECK-LABEL: @swap_slices
31
+ #[ no_mangle]
32
+ pub fn swap_slices < ' a > ( x : & mut & ' a [ u32 ] , y : & mut & ' a [ u32 ] ) {
33
+ // CHECK-NOT: alloca
34
+ // CHECK: ret void
18
35
swap ( x, y)
19
36
}
20
37
@@ -25,9 +42,9 @@ type RGB24 = [u8; 3];
25
42
// CHECK-LABEL: @swap_rgb24_slices
26
43
#[ no_mangle]
27
44
pub fn swap_rgb24_slices ( x : & mut [ RGB24 ] , y : & mut [ RGB24 ] ) {
28
- // CHECK-NOT: alloca
29
- // CHECK: load <{{[0-9]+}} x i8>
30
- // CHECK: store <{{[0-9]+}} x i8>
45
+ // CHECK-NOT: alloca
46
+ // CHECK: load <{{[0-9]+}} x i8>
47
+ // CHECK: store <{{[0-9]+}} x i8>
31
48
if x. len ( ) == y. len ( ) {
32
49
x. swap_with_slice ( y) ;
33
50
}
@@ -39,9 +56,9 @@ type RGBA32 = [u8; 4];
39
56
// CHECK-LABEL: @swap_rgba32_slices
40
57
#[ no_mangle]
41
58
pub fn swap_rgba32_slices ( x : & mut [ RGBA32 ] , y : & mut [ RGBA32 ] ) {
42
- // CHECK-NOT: alloca
43
- // CHECK: load <{{[0-9]+}} x i32>
44
- // CHECK: store <{{[0-9]+}} x i32>
59
+ // CHECK-NOT: alloca
60
+ // CHECK: load <{{[0-9]+}} x i32>
61
+ // CHECK: store <{{[0-9]+}} x i32>
45
62
if x. len ( ) == y. len ( ) {
46
63
x. swap_with_slice ( y) ;
47
64
}
@@ -54,10 +71,24 @@ const _: () = assert!(!std::mem::size_of::<String>().is_power_of_two());
54
71
// CHECK-LABEL: @swap_string_slices
55
72
#[ no_mangle]
56
73
pub fn swap_string_slices ( x : & mut [ String ] , y : & mut [ String ] ) {
57
- // CHECK-NOT: alloca
58
- // CHECK: load <{{[0-9]+}} x i64>
59
- // CHECK: store <{{[0-9]+}} x i64>
74
+ // CHECK-NOT: alloca
75
+ // CHECK: load <{{[0-9]+}} x i64>
76
+ // CHECK: store <{{[0-9]+}} x i64>
60
77
if x. len ( ) == y. len ( ) {
61
78
x. swap_with_slice ( y) ;
62
79
}
63
80
}
81
+
82
+ #[ repr( C , packed) ]
83
+ pub struct Packed {
84
+ pub first : bool ,
85
+ pub second : usize ,
86
+ }
87
+
88
+ // CHECK-LABEL: @swap_packed_structs
89
+ #[ no_mangle]
90
+ pub fn swap_packed_structs ( x : & mut Packed , y : & mut Packed ) {
91
+ // CHECK-NOT: alloca
92
+ // CHECK: ret void
93
+ swap ( x, y)
94
+ }
0 commit comments