[LLVMbugs] [Bug 11412] New: missed reassociate due to GEP

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sun Nov 20 21:52:35 PST 2011


             Bug #: 11412
           Summary: missed reassociate due to GEP
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Scalar Optimizations
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: nicholas at mxc.ca
                CC: llvmbugs at cs.uiuc.edu, richard-llvm at metafoo.co.uk
    Classification: Unclassified

This is a copy of part of std::vector's _M_insert_aux, the function that causes
v.push_back(4) to not get inlined.

  define i8* @test(i8* %ptr, i8* %ptr2) {
    %A = getelementptr inbounds i8* %ptr, i64 -1

    %B = ptrtoint i8* %A to i64
    %C = ptrtoint i8* %ptr2 to i64
    %D1 = sub i64 %C, %B
    %F = getelementptr inbounds i8* %ptr, i64 %D1

    ret i8* %F

If we prevent instcombine from forming overflow intrinsics (no PR# but those
block us from getting this far), we get the above sequence. Stop me if I'm
wrong but that's:

  %F = ptr + ( (ptr2) - (ptr - 1) )
     = ptr + ptr2 - ptr + 1
     = ptr2 + 1
     = getelementptr inbounds i8* %ptr2, i64 1

Probably instcombine should go get that, maybe reassociate.

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