diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2008-03-30 19:07:11 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2008-03-30 19:07:11 +0000 |
commit | da0440a2465911326292407b6661f16d0f856623 (patch) | |
tree | a9164a2cdda7cf45bab658a40fc36f4fecb7d722 /lib/Target | |
parent | 56317b2d9127262036be6a62d6bd0f3f396b0cb3 (diff) | |
download | external_llvm-da0440a2465911326292407b6661f16d0f856623.zip external_llvm-da0440a2465911326292407b6661f16d0f856623.tar.gz external_llvm-da0440a2465911326292407b6661f16d0f856623.tar.bz2 |
Moved from PR1570.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48965 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/README.txt | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/Target/README.txt b/lib/Target/README.txt index c64d7e0..2c12089 100644 --- a/lib/Target/README.txt +++ b/lib/Target/README.txt @@ -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. + +//===---------------------------------------------------------------------===// + |