Closed
Description
With this code
pub fn foo(t: &mut Vec<usize>) {
let mut taken = std::mem::take(t);
taken.pop();
*t = taken;
}
Stable produces
playground::foo:
sub rsp, 24
movups xmm0, xmmword ptr [rdi]
movaps xmmword ptr [rsp], xmm0
mov rax, qword ptr [rdi + 16]
xor ecx, ecx
sub rax, 1
cmovae rcx, rax
mov qword ptr [rdi + 16], rcx
add rsp, 24
ret
Whereas beta/nightly produces
playground::foo:
push r15
push r14
push rbx
mov rbx, rdi
mov r14, qword ptr [rdi + 8]
mov r15, qword ptr [rdi + 16]
xorps xmm0, xmm0
movups xmmword ptr [rdi + 8], xmm0
mov rsi, qword ptr [rdi + 8]
test rsi, rsi
je .LBB0_2
shl rsi, 3
mov edi, 8
mov edx, 8
call qword ptr [rip + __rust_dealloc@GOTPCREL]
.LBB0_2:
xor eax, eax
sub r15, 1
cmovae rax, r15
mov qword ptr [rbx + 8], r14
mov qword ptr [rbx + 16], rax
pop rbx
pop r14
pop r15
ret
searched nightlies: from nightly-2022-07-02 to nightly-2022-07-03
regressed nightly: nightly-2022-07-03
searched commit range: 46b8c23...f2d9393
regressed commit: 0075bb4
bisected with cargo-bisect-rustc v0.6.4
Host triple: x86_64-unknown-linux-gnu
Metadata
Metadata
Assignees
Labels
Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: MIR inliningIssue: Problems and improvements with respect to performance of generated code.Medium priorityRelevant to the compiler team, which will review and decide on the PR/issue.Performance or correctness regression from stable to nightly.