Moved from PR1570.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48965 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky 2008-03-30 19:07:11 +00:00
parent 8c2ec51a7f
commit 8dd6505868

View 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.
//===---------------------------------------------------------------------===//