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

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to