33//@ [LIN] only-linux
44//@ only-x86_64
55//@ assembly-output: emit-asm
6- //@ compile-flags: --crate-type=lib -O
6+ //@ compile-flags: --crate-type=lib -Copt-level=3
77
88use std:: arch:: x86_64:: __m128;
99use std:: mem:: swap;
@@ -12,42 +12,42 @@ use std::mem::swap;
1212#[ no_mangle]
1313pub fn swap_i32 ( x : & mut i32 , y : & mut i32 ) {
1414 // CHECK: movl (%[[ARG1:.+]]), %[[T1:.+]]
15- // CHECK: movl (%[[ARG2:.+]]), %[[T2:.+]]
16- // CHECK: movl %[[T2]], (%[[ARG1]])
17- // CHECK: movl %[[T1]], (%[[ARG2]])
18- // CHECK: retq
15+ // CHECK-NEXT : movl (%[[ARG2:.+]]), %[[T2:.+]]
16+ // CHECK-DAG : movl %[[T2]], (%[[ARG1]])
17+ // CHECK-DAG : movl %[[T1]], (%[[ARG2]])
18+ // CHECK-NEXT : retq
1919 swap ( x, y)
2020}
2121
2222// CHECK-LABEL: swap_pair:
2323#[ no_mangle]
2424pub fn swap_pair ( x : & mut ( i32 , u32 ) , y : & mut ( i32 , u32 ) ) {
25- // CHECK: movq (%[[ARG1]]), %[[T1:.+]]
26- // CHECK: movq (%[[ARG2]]), %[[T2:.+]]
27- // CHECK: movq %[[T2]], (%[[ARG1]])
28- // CHECK: movq %[[T1]], (%[[ARG2]])
29- // CHECK: retq
25+ // CHECK: movq (%[[ARG1:r..? ]]), %[[T1:.+]]
26+ // CHECK-NEXT : movq (%[[ARG2:r..? ]]), %[[T2:.+]]
27+ // CHECK-DAG : movq %[[T2]], (%[[ARG1]])
28+ // CHECK-DAG : movq %[[T1]], (%[[ARG2]])
29+ // CHECK-NEXT : retq
3030 swap ( x, y)
3131}
3232
3333// CHECK-LABEL: swap_str:
3434#[ no_mangle]
3535pub fn swap_str < ' a > ( x : & mut & ' a str , y : & mut & ' a str ) {
36- // CHECK: movups (%[[ARG1]]), %[[T1:xmm.]]
37- // CHECK: movups (%[[ARG2]]), %[[T2:xmm.]]
38- // CHECK: movups %[[T2]], (%[[ARG1]])
39- // CHECK: movups %[[T1]], (%[[ARG2]])
40- // CHECK: retq
36+ // CHECK: movups (%[[ARG1:r..? ]]), %[[T1:xmm.]]
37+ // CHECK-NEXT : movups (%[[ARG2:r..? ]]), %[[T2:xmm.]]
38+ // CHECK-DAG : movups %[[T2]], (%[[ARG1]])
39+ // CHECK-DAG : movups %[[T1]], (%[[ARG2]])
40+ // CHECK-NEXT : retq
4141 swap ( x, y)
4242}
4343
4444// CHECK-LABEL: swap_simd:
4545#[ no_mangle]
4646pub fn swap_simd ( x : & mut __m128 , y : & mut __m128 ) {
47- // CHECK: movaps (%[[ARG1]]), %[[T1:xmm.]]
48- // CHECK: movaps (%[[ARG2]]), %[[T2:xmm.]]
49- // CHECK: movaps %[[T2]], (%[[ARG1]])
50- // CHECK: movaps %[[T1]], (%[[ARG2]])
51- // CHECK: retq
47+ // CHECK: movaps (%[[ARG1:r..? ]]), %[[T1:xmm.]]
48+ // CHECK-NEXT : movaps (%[[ARG2:r..? ]]), %[[T2:xmm.]]
49+ // CHECK-DAG : movaps %[[T2]], (%[[ARG1]])
50+ // CHECK-DAG : movaps %[[T1]], (%[[ARG2]])
51+ // CHECK-NEXT : retq
5252 swap ( x, y)
5353}
0 commit comments