[LLVMbugs] [Bug 3664] New: Struct return values inhibit tail call elimination

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Tue Feb 24 18:52:20 PST 2009


           Summary: Struct return values inhibit tail call elimination
           Product: libraries
           Version: 2.4
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Core LLVM classes
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: jon at ffconsultancy.com
                CC: llvmbugs at cs.uiuc.edu

A call in tail position is not tail call eliminated if the return type of the
function is a struct:

define fastcc { { i8*, i8* }*, i8*} @init({ { i8*, i8* }*, i8*}, i32) {
      %2 = tail call fastcc { { i8*, i8* }*, i8* } @init({ { i8*, i8*}*, i8*}
%0, i32 %1)
      ret { { i8*, i8* }*, i8*} %2

Both tail calls and multiple return values are desirable so this interaction is
unwanted. However, it is easily worked around by resorting to sret form.

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list