[LLVMbugs] [Bug 8862] New: instcombine shouldn't canonicalize 'sdiv exact' into ashr

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sun Dec 26 15:50:12 PST 2010


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

           Summary: instcombine shouldn't canonicalize 'sdiv exact' into
                    ashr
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Scalar Optimizations
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: clattner at apple.com
                CC: llvmbugs at cs.uiuc.edu


Instcombine should compile this identity function to return X:


define i32 @test(i32 %X) {
  %A = sdiv exact i32 %X, 4
  %B = mul i32 %A, 4
  ret i32 %B
}

instead we get:


define i32 @test(i32 %X) {
  %A1 = and i32 %X, -4
  ret i32 %A1
}

This is because it simplifies the sdiv into an ashr instruction, which loses
information.  This sort of thing comes up when handling array/pointer
difference stuff.

To fix this, SDISel whould lower sdiv exact into ashr, instcombine should
handle sdiv's as aggressively as ashr's, and then we should stop canonicalizing
ashr to sdiv in instcombine.

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