[llvm-dev] SRET consistency between declaration and call site

Joerg Sonnenberger via llvm-dev llvm-dev at lists.llvm.org
Sat Oct 3 02:29:59 PDT 2015

while debugging assertions when building libm for 32bit Sparc, I hit the
following IR:

    call void @__muldc3({ double, double }* sret %tmp, double %conv, double 0.000000e+00, double %a.real, double %a.imag) #2


  declare void @__muldc3({ double, double }*, double, double, double, double)

The same IR is essentially generated for i386 too, so it is not Sparc
specific. Unlike i386, Sparc has an assertion in its codegen that the
function called must have the sret attribute on corresponding argument.

The question is now: is the Sparc assertion correct? If yes, this
inconsistency should be checked in the IR verifier, IMO.


More information about the llvm-dev mailing list