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 | c2bc2d106b5c8c99c3f0640e5dc459900ff1113f (patch) | |
tree | 28852001fc02a94a0e2fc8fbaed50bb56330894c /llvm/lib/Transforms/InstCombine | |
parent | 596e475725971e19503f123aa8e3db2f4f933b3e (diff) | |
download | bcm5719-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.cpp | 6 |
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 |