[PATCH] D89130: [WIP][Sparc] Fix long double on 32-bit Solaris/SPARC
Eli Friedman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 9 12:12:00 PDT 2020
efriedma added a comment.
SparcTargetLowering::LowerCall_32 is Sparc-specific code. Maybe you can take a look at where it's crashing, and ask some more specific question?
The compiler-rt requirement for __uint128_t is a bit inconvenient, I guess; maybe it could be changed, but that's probably an invasive patch.
Please split the compiler-rt changes into a separate patch; whether compiler-rt provides long double routines is separate from whether the compiler can generate calls to them. (For example, you might use clang and link against libgcc.)
================
Comment at: llvm/lib/Target/Sparc/SparcCallingConv.td:30
// Alternatively, they are assigned to the stack in 4-byte aligned units.
CCAssignToStack<4, 4>
]>;
----------------
Maybe worth adding code to use CCPassIndirect for f128? Might allow you to simplify the clang handling.
================
Comment at: llvm/lib/Target/Sparc/SparcCallingConv.td:38
+ CCIfInReg<CCIfType<[f128] , CCAssignToReg<[Q0, Q1]>>>,
+ CCIfType<[f128], CCAssignToStack<16, 8>>,
CCIfType<[v2i32], CCCustom<"CC_Sparc_Assign_Ret_Split_64">>
----------------
CCAssignToStack is used to pass values directly on the stack; I have no idea what it would mean on a return value. Are you sure you don't want to just fall back to the default handling, which returns the value indirectly?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D89130/new/
https://reviews.llvm.org/D89130
More information about the cfe-commits
mailing list