diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 4 | 
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index 0f10d7376c3..3bafc6661b0 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -986,6 +986,9 @@ Value *InstCombiner::FoldAndOfFCmps(FCmpInst *LHS, FCmpInst *RHS) {      bool Op1Ordered;      unsigned Op0Pred = getFCmpCode(Op0CC, Op0Ordered);      unsigned Op1Pred = getFCmpCode(Op1CC, Op1Ordered); +    // uno && ord -> false +    if (Op0Pred == 0 && Op1Pred == 0 && Op0Ordered != Op1Ordered) +        return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);      if (Op1Pred == 0) {        std::swap(LHS, RHS);        std::swap(Op0Pred, Op1Pred); @@ -998,7 +1001,6 @@ Value *InstCombiner::FoldAndOfFCmps(FCmpInst *LHS, FCmpInst *RHS) {          return RHS;        // uno && oeq -> uno && (ord && eq) -> false -      // uno && ord -> false        if (!Op0Ordered)          return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);        // ord && ueq -> ord && (uno || eq) -> oeq  | 

