[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