Files
clang-p2996/llvm/test/CodeGen/X86/sincos-stack-args.ll
Benjamin Maxwell 014455a587 [SDAG] Limit sincos/frexp stack slot folding to stores chained to entry (#115906)
When the chain is not the entry node there is a risk the stores are
within a (CALLSEQ_START, CALLSEQ_END), which when the node is expanded
will lead to nested call sequences.

It should be possible to check for this and allow more cases, but for
now, let's limit this to cases where it's definitely safe.

Fixes #115323
2024-11-12 20:48:41 +00:00

36 lines
1.2 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp --version 5
; RUN: llc < %s -mtriple=i386-unknown-linux-gnu | FileCheck %s
; Test for issue https://github.com/llvm/llvm-project/issues/115323
declare double @g(double, double)
define double @f(double %a) {
; CHECK-LABEL: f:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: subl $44, %esp
; CHECK-NEXT: .cfi_def_cfa_offset 48
; CHECK-NEXT: fldl 48(%esp)
; CHECK-NEXT: leal 24(%esp), %eax
; CHECK-NEXT: movl %eax, 12(%esp)
; CHECK-NEXT: leal 32(%esp), %eax
; CHECK-NEXT: movl %eax, 8(%esp)
; CHECK-NEXT: fstpl (%esp)
; CHECK-NEXT: calll sincos
; CHECK-NEXT: fldl 32(%esp)
; CHECK-NEXT: fldl 24(%esp)
; CHECK-NEXT: faddl {{\.?LCPI[0-9]+_[0-9]+}}
; CHECK-NEXT: fxch %st(1)
; CHECK-NEXT: fstpl 8(%esp)
; CHECK-NEXT: fstpl (%esp)
; CHECK-NEXT: calll g@PLT
; CHECK-NEXT: addl $44, %esp
; CHECK-NEXT: .cfi_def_cfa_offset 4
; CHECK-NEXT: retl
entry:
%0 = tail call double @llvm.sin.f64(double %a)
%1 = tail call double @llvm.cos.f64(double %a)
%add = fadd double %1, 3.140000e+00
%call = tail call double @g(double %add, double %0)
ret double %call
}