summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/InstCombine
diff options
context:
space:
mode:
authorManman Ren <mren@apple.com>2012-06-14 05:57:42 +0000
committerManman Ren <mren@apple.com>2012-06-14 05:57:42 +0000
commitc2bc2d106b5c8c99c3f0640e5dc459900ff1113f (patch)
tree28852001fc02a94a0e2fc8fbaed50bb56330894c /llvm/lib/Transforms/InstCombine
parent596e475725971e19503f123aa8e3db2f4f933b3e (diff)
downloadbcm5719-llvm-c2bc2d106b5c8c99c3f0640e5dc459900ff1113f.tar.gz
bcm5719-llvm-c2bc2d106b5c8c99c3f0640e5dc459900ff1113f.zip
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. llvm-svn: 158441
Diffstat (limited to 'llvm/lib/Transforms/InstCombine')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
index 3bafc6661b0..7d0af0d8022 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+++ b/llvm/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
OpenPOWER on IntegriCloud