Make use of vector load and store operations to implement memcpy, memmove, and memset...
[oota-llvm.git] / lib / Target / README.txt
index c64d7e0e6e61d9093f667aabd9aa5617f9603c48..2c120896996da2cfd14f48e8514e0138a1dd94c8 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.
+
+//===---------------------------------------------------------------------===//
+