[LLVMbugs] [Bug 1570] NEW: instcombine doesn't collapse zext/xor/zext

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Tue Jul 24 21:16:54 PDT 2007


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

           Summary: instcombine doesn't collapse zext/xor/zext
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Scalar Optimizations
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: nicholas at mxc.ca


This function:

define i32 @test2(float %X, float %Y) {
entry:
        %tmp3 = fcmp uno float %X, %Y           ; <i1> [#uses=1]
        %tmp34 = zext i1 %tmp3 to i8            ; <i8> [#uses=1]
        %tmp = xor i8 %tmp34, 1         ; <i8> [#uses=1]
        %toBoolnot5 = zext i8 %tmp to i32               ; <i32> [#uses=1]
        ret i32 %toBoolnot5
}

could be optimized further. Instcombine should use its bitwise analysis to
collapse the zext/xor/zext structure to an xor/zext and then remove the xor by
reversing the fcmp.

Desired output:

define i32 @test2(float %X, float %Y) {
entry:
        %tmp3 = fcmp ord float %X, %Y           ; <i1> [#uses=1]
        %tmp34 = zext i1 %tmp3 to i32           ; <i32> [#uses=1]
        ret i32 %tmp34
}



------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.



More information about the llvm-bugs mailing list