[clang] [compiler-rt] [llvm] [SPARC] Properly handle CC for long double on sparc32 (PR #162226)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 29 05:13:28 PDT 2025
================
@@ -1057,85 +1051,67 @@ define void @test_sincos_f128(ptr sret({ fp128, fp128 }) %ret, ptr %in) #0 {
define void @test_sincos_v2f128(ptr sret({ <2 x fp128>, <2 x fp128> }) %ret, ptr %in) #0 {
; SPARC32-LABEL: test_sincos_v2f128:
; SPARC32: ! %bb.0:
-; SPARC32-NEXT: save %sp, -248, %sp
+; SPARC32-NEXT: save %sp, -256, %sp
; SPARC32-NEXT: mov %i0, %i1
; SPARC32-NEXT: ld [%fp+64], %i0
-; SPARC32-NEXT: ldd [%i1], %f0
+; SPARC32-NEXT: ldd [%i1+16], %f0
; SPARC32-NEXT: std %f0, [%fp+-80]
; SPARC32-NEXT: std %f2, [%fp+-72] ! 16-byte Folded Spill
-; SPARC32-NEXT: ldd [%i1+8], %f0
+; SPARC32-NEXT: ldd [%i1+24], %f0
; SPARC32-NEXT: std %f0, [%fp+-88] ! 8-byte Folded Spill
-; SPARC32-NEXT: ldd [%i1+16], %f0
-; SPARC32-NEXT: std %f0, [%fp+-120]
-; SPARC32-NEXT: std %f2, [%fp+-112] ! 16-byte Folded Spill
-; SPARC32-NEXT: ldd [%i1+24], %f4
-; SPARC32-NEXT: std %f4, [%fp+-104] ! 8-byte Folded Spill
-; SPARC32-NEXT: add %fp, -64, %i1
-; SPARC32-NEXT: st %i1, [%sp+64]
-; SPARC32-NEXT: std %f4, [%sp+100]
+; SPARC32-NEXT: ldd [%i1], %f0
+; SPARC32-NEXT: std %f0, [%fp+-152]
+; SPARC32-NEXT: std %f2, [%fp+-144] ! 16-byte Folded Spill
+; SPARC32-NEXT: ldd [%i1+8], %f4
+; SPARC32-NEXT: std %f4, [%fp+-136] ! 8-byte Folded Spill
+; SPARC32-NEXT: add %fp, -32, %i1
+; SPARC32-NEXT: st %i1, [%sp+92]
+; SPARC32-NEXT: std %f4, [%fp+-24]
; SPARC32-NEXT: call sinl
----------------
koachan wrote:
So `sinl` here (along with `cosl` and friends) is a C function, so the call should follow C ABI rules (e.g. it needs to have a trailing `unimp`), but here as you can see it violates it.
Curiously, manually written calls in C seems to be lowered just fine by LLVM, the wrong lowering only happens when LLVM inserts its own calls automatically. What should I do with it?
https://github.com/llvm/llvm-project/pull/162226
More information about the cfe-commits
mailing list