[LLVMbugs] [Bug 8743] New: Register allocation is invalid with Win64 tailcall jump

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Dec 6 02:59:04 PST 2010


http://llvm.org/bugs/show_bug.cgi?id=8743

           Summary: Register allocation is invalid with Win64 tailcall
                    jump
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: X86
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: geek4civic at gmail.com
                CC: llvmbugs at cs.uiuc.edu


; llc -O1 -mtriple=x86_64-mingw64
%class = type { [8 x i8] }
%vt = type { i32 (...)** }

define %vt* @_ZN4llvm9UnsetInit20convertInitializerToEPNS_5RecTyE(%class*
%this, %vt* %Ty) align 2 {
entry:
  %0 = bitcast %vt* %Ty to %vt* (%vt*, %class*)***
  %vtable = load %vt* (%vt*, %class*)*** %0, align 8
  %vfn = getelementptr inbounds %vt* (%vt*, %class*)** %vtable, i64 4
  %1 = load %vt* (%vt*, %class*)** %vfn, align 8
  %call = tail call %vt* %1(%vt* %Ty, %class* %this)
  ret %vt* %call
}

----

_ZN4llvm9UnsetInit20convertInitializerToEPNS_5RecTyE:
# BB#0:                                 # %entry
        subq    $216, %rsp
Ltmp0:
        movaps  %xmm15, 32(%rsp)        # 16-byte Spill
        movaps  %xmm14, 48(%rsp)        # 16-byte Spill
        movaps  %xmm13, 64(%rsp)        # 16-byte Spill
        movaps  %xmm12, 80(%rsp)        # 16-byte Spill
        movaps  %xmm11, 96(%rsp)        # 16-byte Spill
        movaps  %xmm10, 112(%rsp)       # 16-byte Spill
        movaps  %xmm9, 128(%rsp)        # 16-byte Spill
        movaps  %xmm8, 144(%rsp)        # 16-byte Spill
        movaps  %xmm7, 160(%rsp)        # 16-byte Spill
        movaps  %xmm6, 176(%rsp)        # 16-byte Spill
        movq    %rsi, 200(%rsp)         # 8-byte Spill
        movq    %rdi, 208(%rsp)         # 8-byte Spill
        movq    %rcx, %rax
        movq    (%rdx), %rcx
        movq    32(%rcx), %rsi
        movq    %rdx, %rcx
        movq    %rax, %rdx
        movq    208(%rsp), %rdi         # 8-byte Reload
        movq    200(%rsp), %rsi         # 8-byte Reload
        movaps  176(%rsp), %xmm6        # 16-byte Reload
        movaps  160(%rsp), %xmm7        # 16-byte Reload
        movaps  144(%rsp), %xmm8        # 16-byte Reload
        movaps  128(%rsp), %xmm9        # 16-byte Reload
        movaps  112(%rsp), %xmm10       # 16-byte Reload
        movaps  96(%rsp), %xmm11        # 16-byte Reload
        movaps  80(%rsp), %xmm12        # 16-byte Reload
        movaps  64(%rsp), %xmm13        # 16-byte Reload
        movaps  48(%rsp), %xmm14        # 16-byte Reload
        movaps  32(%rsp), %xmm15        # 16-byte Reload
        addq    $216, %rsp
        jmpq    *%rsi  # TAILCALL

----

%RSI should not be used for tail jump.

FYI, I don't meet this issue with -regalloc=pbqp.

-- 
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