OSDN Git Service

Moved from PR1570.
authorNick Lewycky <nicholas@mxc.ca>
Sun, 30 Mar 2008 19:07:11 +0000 (19:07 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sun, 30 Mar 2008 19:07:11 +0000 (19:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48965 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/README.txt

index c64d7e0..2c12089 100644 (file)
@@ -780,3 +780,29 @@ be done safely if "b" isn't modified between the strlen and memcpy of course.
 
 //===---------------------------------------------------------------------===//
 
+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
+}
+
+To fix this, we need to make CanEvaluateInDifferentType smarter.
+
+//===---------------------------------------------------------------------===//
+