koachan wrote: > The code in question is > > ``` > 0x114e0 <test__divtc3+400>: st %i0, [ %fp + -1484 ] > 0x114e4 <test__divtc3+404>: ld [ %fp + -160 ], %i0 > 0x114e8 <test__divtc3+408>: st %i0, [ %fp + -1488 ] > 0x114ec <test__divtc3+412>: ld [ %fp + -168 ], %i0 > 0x114f0 <test__divtc3+416>: st %i0, [ %fp + -1496 ] > 0x114f4 <test__divtc3+420>: add %fp, -1432, %i0 > 0x114f8 <test__divtc3+424>: call 0x13a8c <__divtc3> > 0x114fc <test__divtc3+428>: st %i0, [ %sp + 0x40 ] > => 0x11500 <test__divtc3+432>: illtrap 0x20 > ``` > > I haven't looked closer yet.
I think this is the `long double _Complex` issue biting us. You said in [D89130](https://reviews.llvm.org/D89130) that those values are always returned in registers (and hence, calls to it should be lowered without the trailing illtrap), but LLVM lowers it into an `{ fp128, fp128 }` aggregate which the backend undersands to be a struct (hence the trailing illtrap). @efriedma-quic is there a way for us to disambiguate it in `RetCC_Sparc32`? If the `{ fp128, fp128 }` comes from a `long double _Complex` then return it in register, otherwise treat it normally as a struct, or something like that. https://github.com/llvm/llvm-project/pull/162226 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
