[LLVMbugs] [Bug 11682] New: redundant overflow test not eliminated

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sun Jan 1 00:51:30 PST 2012


             Bug #: 11682
           Summary: redundant overflow test not eliminated
           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
    Classification: Unclassified

This testcase is simplified from std::vector::_M_insert_aux, the function
called by push_back that doesn't get inlined. 

declare {i8, i1} @llvm.uadd.with.overflow.i8(i8, i8)

declare void @use(i8, i1)

define void @test(i8 %a) {
  %A = ashr i8 %a, 3  ; [-32..31]
  %B = lshr i8 -1, 3  ; 31
  %uadd = tail call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %A, i8 %A)
  %sum = extractvalue { i8, i1 } %uadd, 0  ; [-64..62]
  %overflow = extractvalue { i8, i1 } %uadd, 1
; %overflow is true iff %a is negative
  %C = icmp ugt i8 %sum, %B
; %C is true iff %sum is [32..255]
; %C is true iff %A is [16..255]
; %C is true iff %a is [128..255]
; %C is true iff %a is negative
  %D = or i1 %overflow, %C
  call void @use(i8 %sum, i1 %D)
  ret void

In this case, %C is equal to %overflow. opt -O2 does not remove the redundant
computation, which would be helpful.

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