Lines Matching refs:ICI
229 CmpInst &ICI, ConstantInt *AndCst) { in FoldCmpLoadFromIndexedGlobal() argument
301 Constant *CompareRHS = cast<Constant>(ICI.getOperand(1)); in FoldCmpLoadFromIndexedGlobal()
314 Constant *C = ConstantFoldCompareInstOperands(ICI.getPredicate(), Elt, in FoldCmpLoadFromIndexedGlobal()
404 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldCmpLoadFromIndexedGlobal()
424 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldCmpLoadFromIndexedGlobal()
733 Instruction *InstCombiner::FoldAllocaCmp(ICmpInst &ICI, AllocaInst *Alloca, in FoldAllocaCmp() argument
735 assert(ICI.isEquality() && "Cannot fold non-equality comparison."); in FoldAllocaCmp()
806 ICI, in FoldAllocaCmp()
807 ConstantInt::get(CmpTy, !CmpInst::isTrueWhenEqual(ICI.getPredicate()))); in FoldAllocaCmp()
811 Instruction *InstCombiner::FoldICmpAddOpCst(Instruction &ICI, in FoldICmpAddOpCst() argument
860 Instruction *InstCombiner::FoldICmpDivCst(ICmpInst &ICI, BinaryOperator *DivI, in FoldICmpDivCst() argument
862 ConstantInt *CmpRHS = cast<ConstantInt>(ICI.getOperand(1)); in FoldICmpDivCst()
874 if (!ICI.isEquality() && DivIsSigned != ICI.isSigned()) in FoldICmpDivCst()
882 ICI.setOperand(0, DivI->getOperand(0)); // X/1 == X. in FoldICmpDivCst()
883 return &ICI; in FoldICmpDivCst()
899 ICmpInst::Predicate Pred = ICI.getPredicate(); in FoldICmpDivCst()
976 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldICmpDivCst()
983 return ReplaceInstUsesWith(ICI, InsertRangeTest(X, LoBound, HiBound, in FoldICmpDivCst()
987 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldICmpDivCst()
994 return ReplaceInstUsesWith(ICI, InsertRangeTest(X, LoBound, HiBound, in FoldICmpDivCst()
999 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldICmpDivCst()
1001 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldICmpDivCst()
1006 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldICmpDivCst()
1008 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldICmpDivCst()
1016 Instruction *InstCombiner::FoldICmpShrCst(ICmpInst &ICI, BinaryOperator *Shr, in FoldICmpShrCst() argument
1018 const APInt &CmpRHSV = cast<ConstantInt>(ICI.getOperand(1))->getValue(); in FoldICmpShrCst()
1028 if (!ICI.isEquality()) { in FoldICmpShrCst()
1031 if (ICI.isSigned() != (Shr->getOpcode() == Instruction::AShr)) in FoldICmpShrCst()
1052 ICI.setOperand(0, Tmp); in FoldICmpShrCst()
1057 return &ICI; in FoldICmpShrCst()
1063 Instruction *Res = FoldICmpDivCst(ICI, TheDiv, cast<ConstantInt>(DivCst)); in FoldICmpShrCst()
1078 bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; in FoldICmpShrCst()
1080 return ReplaceInstUsesWith(ICI, Cst); in FoldICmpShrCst()
1087 return new ICmpInst(ICI.getPredicate(), Shr->getOperand(0), ShiftedCmpRHS); in FoldICmpShrCst()
1096 return new ICmpInst(ICI.getPredicate(), And, ShiftedCmpRHS); in FoldICmpShrCst()
1213 Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI, in visitICmpInstWithInstAndIntCst() argument
1223 if (ICI.getPredicate() == ICmpInst::ICMP_SLT && in visitICmpInstWithInstAndIntCst()
1228 if (ICI.isEquality() && LHSI->hasOneUse()) { in visitICmpInstWithInstAndIntCst()
1234 computeKnownBits(LHSI->getOperand(0), KnownZero, KnownOne, 0, &ICI); in visitICmpInstWithInstAndIntCst()
1241 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), in visitICmpInstWithInstAndIntCst()
1251 if ((ICI.getPredicate() == ICmpInst::ICMP_SLT && RHSV == 0) || in visitICmpInstWithInstAndIntCst()
1252 (ICI.getPredicate() == ICmpInst::ICMP_SGT && RHSV.isAllOnesValue())) { in visitICmpInstWithInstAndIntCst()
1258 ICI.setOperand(0, CompareVal); in visitICmpInstWithInstAndIntCst()
1260 return &ICI; in visitICmpInstWithInstAndIntCst()
1264 bool isTrueIfPositive = ICI.getPredicate() == ICmpInst::ICMP_SGT; in visitICmpInstWithInstAndIntCst()
1279 if (!ICI.isEquality() && XorCst->getValue().isSignBit()) { in visitICmpInstWithInstAndIntCst()
1281 ICmpInst::Predicate Pred = ICI.isSigned() in visitICmpInstWithInstAndIntCst()
1282 ? ICI.getUnsignedPredicate() in visitICmpInstWithInstAndIntCst()
1283 : ICI.getSignedPredicate(); in visitICmpInstWithInstAndIntCst()
1289 if (!ICI.isEquality() && XorCst->isMaxValue(true)) { in visitICmpInstWithInstAndIntCst()
1291 ICmpInst::Predicate Pred = ICI.isSigned() in visitICmpInstWithInstAndIntCst()
1292 ? ICI.getUnsignedPredicate() in visitICmpInstWithInstAndIntCst()
1293 : ICI.getSignedPredicate(); in visitICmpInstWithInstAndIntCst()
1294 Pred = ICI.getSwappedPredicate(Pred); in visitICmpInstWithInstAndIntCst()
1302 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && in visitICmpInstWithInstAndIntCst()
1308 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && in visitICmpInstWithInstAndIntCst()
1326 if (ICI.isEquality() || in visitICmpInstWithInstAndIntCst()
1332 return new ICmpInst(ICI.getPredicate(), NewAnd, in visitICmpInstWithInstAndIntCst()
1343 if (ICI.isEquality() && RHSV.getActiveBits() <= Ty->getBitWidth()) { in visitICmpInstWithInstAndIntCst()
1348 return new ICmpInst(ICI.getPredicate(), NewAnd, in visitICmpInstWithInstAndIntCst()
1380 if (!ICI.isSigned() || (!AndCst->isNegative() && !RHS->isNegative())) in visitICmpInstWithInstAndIntCst()
1388 if (!ICI.isSigned()) in visitICmpInstWithInstAndIntCst()
1414 if (ICI.getPredicate() == ICmpInst::ICMP_EQ) in visitICmpInstWithInstAndIntCst()
1415 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in visitICmpInstWithInstAndIntCst()
1416 if (ICI.getPredicate() == ICmpInst::ICMP_NE) in visitICmpInstWithInstAndIntCst()
1417 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in visitICmpInstWithInstAndIntCst()
1419 ICI.setOperand(1, NewCst); in visitICmpInstWithInstAndIntCst()
1428 return &ICI; in visitICmpInstWithInstAndIntCst()
1437 ICI.isEquality() && !Shift->isArithmeticShift() && in visitICmpInstWithInstAndIntCst()
1452 ICI.setOperand(0, NewAnd); in visitICmpInstWithInstAndIntCst()
1453 return &ICI; in visitICmpInstWithInstAndIntCst()
1462 if (!ICI.isSigned() && RHSV == 0) { in visitICmpInstWithInstAndIntCst()
1490 ICI.setOperand(0, NewAnd); in visitICmpInstWithInstAndIntCst()
1491 return &ICI; in visitICmpInstWithInstAndIntCst()
1500 if (ICI.getPredicate() == ICmpInst::ICMP_UGT) { in visitICmpInstWithInstAndIntCst()
1517 if (Instruction *Res = FoldCmpLoadFromIndexedGlobal(GEP, GV,ICI, C)) in visitICmpInstWithInstAndIntCst()
1525 if (ICI.isEquality() && RHS == LHSI->getOperand(1) && (-RHSV).isPowerOf2()) in visitICmpInstWithInstAndIntCst()
1527 ICI.getPredicate() == ICmpInst::ICMP_EQ ? ICmpInst::ICMP_UGT in visitICmpInstWithInstAndIntCst()
1533 if (ICI.isEquality() && LHSI->hasOneUse() && match(RHS, m_Zero())) { in visitICmpInstWithInstAndIntCst()
1538 Type *NTy = IntegerType::get(ICI.getContext(), ExactLogBase2 + 1); in visitICmpInstWithInstAndIntCst()
1540 return new ICmpInst(ICI.getPredicate() == ICmpInst::ICMP_EQ in visitICmpInstWithInstAndIntCst()
1553 if (ICI.getPredicate() == ICmpInst::ICMP_SLT && in visitICmpInstWithInstAndIntCst()
1559 if (!ICI.isEquality() || !RHS->isNullValue() || !LHSI->hasOneUse()) in visitICmpInstWithInstAndIntCst()
1565 Value *ICIP = Builder->CreateICmp(ICI.getPredicate(), P, in visitICmpInstWithInstAndIntCst()
1567 Value *ICIQ = Builder->CreateICmp(ICI.getPredicate(), Q, in visitICmpInstWithInstAndIntCst()
1570 if (ICI.getPredicate() == ICmpInst::ICMP_EQ) in visitICmpInstWithInstAndIntCst()
1585 ICmpInst::Predicate pred = ICI.getPredicate(); in visitICmpInstWithInstAndIntCst()
1604 ICmpInst::Predicate Pred = ICI.getPredicate(); in visitICmpInstWithInstAndIntCst()
1605 if (ICI.isUnsigned()) { in visitICmpInstWithInstAndIntCst()
1629 } else if (ICI.isSigned()) { in visitICmpInstWithInstAndIntCst()
1653 } else if (ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1668 if (ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1675 bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; in visitICmpInstWithInstAndIntCst()
1677 return ReplaceInstUsesWith(ICI, Cst); in visitICmpInstWithInstAndIntCst()
1683 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), in visitICmpInstWithInstAndIntCst()
1689 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), in visitICmpInstWithInstAndIntCst()
1700 return new ICmpInst(ICI.getPredicate(), And, in visitICmpInstWithInstAndIntCst()
1707 ICmpInst::Predicate pred = ICI.getPredicate(); in visitICmpInstWithInstAndIntCst()
1717 isSignBitCheck(ICI.getPredicate(), RHS, TrueIfSigned)) { in visitICmpInstWithInstAndIntCst()
1737 Type *NTy = IntegerType::get(ICI.getContext(), TypeBits - Amt); in visitICmpInstWithInstAndIntCst()
1742 return new ICmpInst(ICI.getPredicate(), in visitICmpInstWithInstAndIntCst()
1755 if (Instruction *Res = FoldICmpShrCst(ICI, BO, ShAmt)) in visitICmpInstWithInstAndIntCst()
1760 if (ICI.isEquality() && BO->isExact() && BO->hasOneUse()) { in visitICmpInstWithInstAndIntCst()
1762 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), RHS); in visitICmpInstWithInstAndIntCst()
1776 if (Instruction *R = FoldICmpDivCst(ICI, cast<BinaryOperator>(LHSI), in visitICmpInstWithInstAndIntCst()
1789 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1798 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1807 if (!ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1812 ConstantRange CR = ICI.makeConstantRange(ICI.getPredicate(), RHSV) in visitICmpInstWithInstAndIntCst()
1815 if (ICI.isSigned()) { in visitICmpInstWithInstAndIntCst()
1836 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1845 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1855 if (ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1856 bool isICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; in visitICmpInstWithInstAndIntCst()
1870 return new ICmpInst(ICI.getPredicate(), NewRem, in visitICmpInstWithInstAndIntCst()
1879 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1887 return new ICmpInst(ICI.getPredicate(), BOp0, NegVal); in visitICmpInstWithInstAndIntCst()
1889 return new ICmpInst(ICI.getPredicate(), NegVal, BOp1); in visitICmpInstWithInstAndIntCst()
1893 return new ICmpInst(ICI.getPredicate(), BOp0, Neg); in visitICmpInstWithInstAndIntCst()
1901 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1905 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1913 return new ICmpInst(ICI.getPredicate(), BO->getOperand(1), in visitICmpInstWithInstAndIntCst()
1917 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1927 return ReplaceInstUsesWith(ICI, Builder->getInt1(isICMP_NE)); in visitICmpInstWithInstAndIntCst()
1936 return ReplaceInstUsesWith(ICI, Builder->getInt1(isICMP_NE)); in visitICmpInstWithInstAndIntCst()
1974 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1986 ICI.setOperand(0, II->getArgOperand(0)); in visitICmpInstWithInstAndIntCst()
1987 ICI.setOperand(1, Builder->getInt(RHSV.byteSwap())); in visitICmpInstWithInstAndIntCst()
1988 return &ICI; in visitICmpInstWithInstAndIntCst()
1994 ICI.setOperand(0, II->getArgOperand(0)); in visitICmpInstWithInstAndIntCst()
1995 ICI.setOperand(1, ConstantInt::get(RHS->getType(), 0)); in visitICmpInstWithInstAndIntCst()
1996 return &ICI; in visitICmpInstWithInstAndIntCst()
2003 ICI.setOperand(0, II->getArgOperand(0)); in visitICmpInstWithInstAndIntCst()
2004 ICI.setOperand(1, RHS); in visitICmpInstWithInstAndIntCst()
2005 return &ICI; in visitICmpInstWithInstAndIntCst()
2019 Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) { in visitICmpInstWithCastAndCast() argument
2020 const CastInst *LHSCI = cast<CastInst>(ICI.getOperand(0)); in visitICmpInstWithCastAndCast()
2031 if (PtrToIntOperator *RHSC = dyn_cast<PtrToIntOperator>(ICI.getOperand(1))) { in visitICmpInstWithCastAndCast()
2040 } else if (Constant *RHSC = dyn_cast<Constant>(ICI.getOperand(1))) in visitICmpInstWithCastAndCast()
2044 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSOp); in visitICmpInstWithCastAndCast()
2054 bool isSignedCmp = ICI.isSigned(); in visitICmpInstWithCastAndCast()
2056 if (CastInst *CI = dyn_cast<CastInst>(ICI.getOperand(1))) { in visitICmpInstWithCastAndCast()
2068 if (ICI.isEquality()) in visitICmpInstWithCastAndCast()
2069 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); in visitICmpInstWithCastAndCast()
2074 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); in visitICmpInstWithCastAndCast()
2077 return new ICmpInst(ICI.getUnsignedPredicate(), LHSCIOp, RHSCIOp); in visitICmpInstWithCastAndCast()
2081 ConstantInt *CI = dyn_cast<ConstantInt>(ICI.getOperand(1)); in visitICmpInstWithCastAndCast()
2094 if (ICI.isEquality()) in visitICmpInstWithCastAndCast()
2095 return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1); in visitICmpInstWithCastAndCast()
2100 return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1); in visitICmpInstWithCastAndCast()
2103 return new ICmpInst(ICI.getUnsignedPredicate(), LHSCIOp, Res1); in visitICmpInstWithCastAndCast()
2120 Value *Result = Builder->CreateICmpSGT(LHSCIOp, NegOne, ICI.getName()); in visitICmpInstWithCastAndCast()
2123 if (ICI.getPredicate() == ICmpInst::ICMP_ULT) in visitICmpInstWithCastAndCast()
2124 return ReplaceInstUsesWith(ICI, Result); in visitICmpInstWithCastAndCast()
2126 assert(ICI.getPredicate() == ICmpInst::ICMP_UGT && "ICmp should be folded!"); in visitICmpInstWithCastAndCast()