[LLVMbugs] [Bug 3936] New: Instcombine quadtratic in GEP chain length

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Sat Apr 4 15:48:41 PDT 2009


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

           Summary: Instcombine quadtratic in GEP chain length
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Scalar Optimizations
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: jyasskin at google.com
                CC: nicholas at mxc.ca, llvmbugs at cs.uiuc.edu


Created an attachment (id=2783)
 --> (http://llvm.org/bugs/attachment.cgi?id=2783)
Script to generate quadratic assembly

The attached script, when passed an integer argument N, generates an LLVM
assembly file containing a chain of 2N-1 GEP instructions:

$ ./instcombine_test.py 2
declare void @use(i32)

define void @foo(i32* %stack) {
  %B0 = getelementptr i32* %stack, i32 0

  %A1 = getelementptr i32* %B0, i32 1
  %B1 = getelementptr i32* %A1, i32 -1
  %C1 = load i32* %B1
  call void @use(i32 %C1)

  ret void
}

The instcombine pass is quadratic when trying to optimize the chain:

$ for n in 1000 2000 3000 4000 5000 6000; do ./instcombine_test.py
$n|$LLVM/llvm-as|time $LLVM/opt -instcombine >/dev/null;done
        1.03 real         0.85 user         0.01 sys
        3.22 real         2.89 user         0.03 sys
        6.55 real         5.94 user         0.05 sys
       11.40 real        10.47 user         0.10 sys
       17.82 real        16.52 user         0.16 sys
       24.73 real        23.02 user         0.21 sys


Shark reports that a very high percentage of the time is spent in
Value::getUnderlyingObject, resolving loads like %C1 down to %stack. It doesn't
appear to combine any GEPs before calling getUnderlyingObject on every load in
the function, causing quadratic work.

Thanks to Nick for the form of the testcase. I've seen the behavior in both 2.5
and trunk.


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