Closed
Description
For this code:
pub struct A([i32; 4]);
impl A {
pub fn foo(self) -> Self { self }
pub fn bar(self) -> Self { self }
}
rustc beta (1.28.0) with opt-level=3
generates:
example::A::bar:
movups xmm0, xmmword ptr [rsi]
movups xmmword ptr [rdi], xmm0
mov rax, rdi
ret
example::A::foo:
push rbx
mov rbx, rdi
call example::A::bar@PLT
mov rax, rbx
pop rbx
ret
rustc 1.27.1 and rustc beta with opt-level=s
generates:
example::A::foo:
movups xmm0, xmmword ptr [rsi]
movups xmmword ptr [rdi], xmm0
mov rax, rdi
ret
example::A::bar:
movups xmm0, xmmword ptr [rsi]
movups xmmword ptr [rdi], xmm0
mov rax, rdi
ret
The beta with opt-level=3
seems to be anti-inlining the identical functions.