Files
clang-p2996/llvm/test/CodeGen/X86/pr63430.ll
Nikita Popov 81ec494c36 [SDAGBuilder] Handle multi-part arguments in argument copy elision (PR63430)
When eliding an argument copy, we need to update the chain to ensure
the argument reads are performed before later writes. However, the
code doing this only handled this for the first part of the argument.
If the argument had multiple parts, the chains of the later parts were
dropped. Make sure we preserve all chains.

Fixes https://github.com/llvm/llvm-project/issues/63430.
2023-06-22 17:04:56 +02:00

21 lines
732 B
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp --version 2
; RUN: llc -mtriple=x86_64-unknown-linux < %s | FileCheck %s
; Make sure the argument is read before the stack slot is over-written.
define i1 @test(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5, i128 %x) {
; CHECK-LABEL: test:
; CHECK: # %bb.0:
; CHECK-NEXT: movq 8(%rsp), %rax
; CHECK-NEXT: xorps %xmm0, %xmm0
; CHECK-NEXT: andq 16(%rsp), %rax
; CHECK-NEXT: movaps %xmm0, 8(%rsp)
; CHECK-NEXT: cmpq $-1, %rax
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%alloca = alloca i128
store i128 %x, ptr %alloca
store i128 0, ptr %alloca
%cmp = icmp eq i128 %x, -1
ret i1 %cmp
}