diff options
Diffstat (limited to 'llvm/lib/IR/Instructions.cpp')
-rw-r--r-- | llvm/lib/IR/Instructions.cpp | 37 |
1 files changed, 5 insertions, 32 deletions
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index 13e5821..8ad9c07 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -3562,6 +3562,10 @@ bool CmpInst::isImpliedTrueByMatchingCmp(Predicate Pred1, Predicate Pred2) { switch (Pred1) { default: break; + case ICMP_EQ: + // A == B implies A >=u B, A <=u B, A >=u B, and A <=u B are true. + return Pred2 == ICMP_UGE || Pred2 == ICMP_ULE || Pred2 == ICMP_SGE || + Pred2 == ICMP_SLE; case ICMP_UGT: // A >u B implies A != B and A >=u B are true. return Pred2 == ICMP_NE || Pred2 == ICMP_UGE; case ICMP_ULT: // A <u B implies A != B and A <=u B are true. @@ -3575,38 +3579,7 @@ bool CmpInst::isImpliedTrueByMatchingCmp(Predicate Pred1, Predicate Pred2) { } bool CmpInst::isImpliedFalseByMatchingCmp(Predicate Pred1, Predicate Pred2) { - // If an inverted Pred1 matches Pred2, we can infer the second condition is - // false. - if (getInversePredicate(Pred1) == Pred2) - return true; - - // If a swapped Pred1 matches Pred2, we can infer the second condition is - // false in many cases. - if (getSwappedPredicate(Pred1) == Pred2) { - switch (Pred1) { - default: - break; - case ICMP_UGT: // A >u B implies A <u B is false. - case ICMP_ULT: // A <u B implies A >u B is false. - case ICMP_SGT: // A >s B implies A <s B is false. - case ICMP_SLT: // A <s B implies A >s B is false. - return true; - } - } - // A == B implies A > B and A < B are false. - if (Pred1 == ICMP_EQ && isFalseWhenEqual(Pred2)) - return true; - - switch (Pred1) { - default: - break; - case ICMP_UGT: // A >u B implies A == B is false. - case ICMP_ULT: // A <u B implies A == B is false. - case ICMP_SGT: // A >s B implies A == B is false. - case ICMP_SLT: // A <s B implies A == B is false. - return Pred2 == ICMP_EQ; - } - return false; + return isImpliedTrueByMatchingCmp(Pred1, getInversePredicate(Pred2)); } //===----------------------------------------------------------------------===// |