diff options
author | Manman Ren <mren@apple.com> | 2012-06-14 05:57:42 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2012-06-14 05:57:42 +0000 |
commit | 7a0575b9a8ca291c33495623eae171394f33b58f (patch) | |
tree | 3eda454b3469b1d78aab393603cbf8b2b5f35b59 /lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | |
parent | ce5c6fb55f089cb92c99bf172c9c550e69dcb6c7 (diff) | |
download | llvm-7a0575b9a8ca291c33495623eae171394f33b58f.tar.gz llvm-7a0575b9a8ca291c33495623eae171394f33b58f.tar.bz2 llvm-7a0575b9a8ca291c33495623eae171394f33b58f.tar.xz |
InstCombine: fix a bug when combining (fcmp cc0 x, y) && (fcmp cc1 x, y).
uno && ueq was converted to ueq, it should be converted to uno.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158441 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/InstCombine/InstCombineAndOrXor.cpp')
-rw-r--r-- | lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index 3bafc6661b..7d0af0d802 100644 --- a/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -995,9 +995,11 @@ Value *InstCombiner::FoldAndOfFCmps(FCmpInst *LHS, FCmpInst *RHS) { std::swap(Op0Ordered, Op1Ordered); } if (Op0Pred == 0) { - // uno && ueq -> uno && (uno || eq) -> ueq + // uno && ueq -> uno && (uno || eq) -> uno // ord && olt -> ord && (ord && lt) -> olt - if (Op0Ordered == Op1Ordered) + if (!Op0Ordered && (Op0Ordered == Op1Ordered)) + return LHS; + if (Op0Ordered && (Op0Ordered == Op1Ordered)) return RHS; // uno && oeq -> uno && (ord && eq) -> false |