[LLVMbugs] [Bug 9222] New: -tailcallopt misses optimization for default(CallingConv::C) calling conversion

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Feb 14 17:25:38 PST 2011


           Summary: -tailcallopt misses optimization for
                    default(CallingConv::C) calling conversion
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Keywords: code-quality
          Severity: normal
          Priority: P
         Component: Backend: X86
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: geek4civic at gmail.com
                CC: llvmbugs at cs.uiuc.edu

I understand -tailcallopt enables "fastcc" as "guaranteed tailcall", to emit
fastcc functions as callee stack rewind. It is known to work well.

In contrast, it seems -tailcallopt disables tailjmp optimization for default
calling conversions. I guess it would be misoptimization.

In X86ISelLowering.cpp:

static bool IsTailCallConvention(CallingConv::ID CC) {
  return (CC == CallingConv::Fast || CC == CallingConv::GHC);


  if (GuaranteedTailCallOpt) {
    if (IsTailCallConvention(CalleeCC) && CCMatch)
      return true;
    return false;

It seems CallingConv::C would be missed.

; example
define void @caller_c() nounwind {
 tail call void @callee_c()
 ret void
declare void @callee_c() nounwind

define fastcc void @caller_f() nounwind {
 tail call fastcc void @callee_f()
 ret void
declare fastcc void @callee_f() nounwind

; llc -mtriple=x86_64-linux #(w/o -tailcallopt)
        jmp     callee_c                # TAILCALL
        jmp     callee_f                # TAILCALL

; llc -mtriple=x86_64-linux -tailcallopt
        pushq   %rax
        callq   callee_c
        popq    %rax
        pushq   %rax       # bug 8925
        popq    %rax
        jmp     callee_f                # TAILCALL

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