mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-18 12:29:21 +00:00
fix Transforms/InstCombine/2007-05-10-icmp-or.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36984 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2e3ce7d97a
commit
8885887b9c
@ -3919,13 +3919,18 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) {
|
||||
LHSCC != ICmpInst::ICMP_UGE && LHSCC != ICmpInst::ICMP_ULE &&
|
||||
RHSCC != ICmpInst::ICMP_UGE && RHSCC != ICmpInst::ICMP_ULE &&
|
||||
LHSCC != ICmpInst::ICMP_SGE && LHSCC != ICmpInst::ICMP_SLE &&
|
||||
RHSCC != ICmpInst::ICMP_SGE && RHSCC != ICmpInst::ICMP_SLE) {
|
||||
RHSCC != ICmpInst::ICMP_SGE && RHSCC != ICmpInst::ICMP_SLE &&
|
||||
// We can't fold (ugt x, C) | (sgt x, C2).
|
||||
PredicatesFoldable(LHSCC, RHSCC)) {
|
||||
// Ensure that the larger constant is on the RHS.
|
||||
ICmpInst::Predicate GT = ICmpInst::isSignedPredicate(LHSCC) ?
|
||||
ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
|
||||
Constant *Cmp = ConstantExpr::getICmp(GT, LHSCst, RHSCst);
|
||||
ICmpInst *LHS = cast<ICmpInst>(Op0);
|
||||
if (cast<ConstantInt>(Cmp)->getZExtValue()) {
|
||||
bool NeedsSwap;
|
||||
if (ICmpInst::isSignedPredicate(LHSCC))
|
||||
NeedsSwap = LHSCst->getValue().sgt(LHSCst->getValue());
|
||||
else
|
||||
NeedsSwap = LHSCst->getValue().ugt(LHSCst->getValue());
|
||||
|
||||
if (NeedsSwap) {
|
||||
std::swap(LHS, RHS);
|
||||
std::swap(LHSCst, RHSCst);
|
||||
std::swap(LHSCC, RHSCC);
|
||||
|
Loading…
Reference in New Issue
Block a user