Lines Matching refs:ICI

228                              CmpInst &ICI, ConstantInt *AndCst) {  in FoldCmpLoadFromIndexedGlobal()  argument
305 Constant *CompareRHS = cast<Constant>(ICI.getOperand(1)); in FoldCmpLoadFromIndexedGlobal()
318 Constant *C = ConstantFoldCompareInstOperands(ICI.getPredicate(), Elt, in FoldCmpLoadFromIndexedGlobal()
409 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldCmpLoadFromIndexedGlobal()
429 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldCmpLoadFromIndexedGlobal()
745 Instruction *InstCombiner::FoldICmpAddOpCst(Instruction &ICI, in FoldICmpAddOpCst() argument
752 return ReplaceInstUsesWith(ICI, ConstantInt::get(ICI.getType(), isTrue)); in FoldICmpAddOpCst()
757 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldICmpAddOpCst()
761 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldICmpAddOpCst()
809 Instruction *InstCombiner::FoldICmpDivCst(ICmpInst &ICI, BinaryOperator *DivI, in FoldICmpDivCst() argument
811 ConstantInt *CmpRHS = cast<ConstantInt>(ICI.getOperand(1)); in FoldICmpDivCst()
823 if (!ICI.isEquality() && DivIsSigned != ICI.isSigned()) in FoldICmpDivCst()
831 ICI.setOperand(0, DivI->getOperand(0)); // X/1 == X. in FoldICmpDivCst()
832 return &ICI; in FoldICmpDivCst()
848 ICmpInst::Predicate Pred = ICI.getPredicate(); in FoldICmpDivCst()
926 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldICmpDivCst()
933 return ReplaceInstUsesWith(ICI, InsertRangeTest(X, LoBound, HiBound, in FoldICmpDivCst()
937 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldICmpDivCst()
944 return ReplaceInstUsesWith(ICI, InsertRangeTest(X, LoBound, HiBound, in FoldICmpDivCst()
949 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldICmpDivCst()
951 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldICmpDivCst()
956 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in FoldICmpDivCst()
958 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in FoldICmpDivCst()
966 Instruction *InstCombiner::FoldICmpShrCst(ICmpInst &ICI, BinaryOperator *Shr, in FoldICmpShrCst() argument
968 const APInt &CmpRHSV = cast<ConstantInt>(ICI.getOperand(1))->getValue(); in FoldICmpShrCst()
978 if (!ICI.isEquality()) { in FoldICmpShrCst()
981 if (ICI.isSigned() != (Shr->getOpcode() == Instruction::AShr)) in FoldICmpShrCst()
1002 ICI.setOperand(0, Tmp); in FoldICmpShrCst()
1007 return &ICI; in FoldICmpShrCst()
1013 Instruction *Res = FoldICmpDivCst(ICI, TheDiv, cast<ConstantInt>(DivCst)); in FoldICmpShrCst()
1029 bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; in FoldICmpShrCst()
1031 return ReplaceInstUsesWith(ICI, Cst); in FoldICmpShrCst()
1038 return new ICmpInst(ICI.getPredicate(), Shr->getOperand(0), ShiftedCmpRHS); in FoldICmpShrCst()
1047 return new ICmpInst(ICI.getPredicate(), And, ShiftedCmpRHS); in FoldICmpShrCst()
1055 Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI, in visitICmpInstWithInstAndIntCst() argument
1062 if (ICI.isEquality() && LHSI->hasOneUse()) { in visitICmpInstWithInstAndIntCst()
1075 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), in visitICmpInstWithInstAndIntCst()
1085 if ((ICI.getPredicate() == ICmpInst::ICMP_SLT && RHSV == 0) || in visitICmpInstWithInstAndIntCst()
1086 (ICI.getPredicate() == ICmpInst::ICMP_SGT && RHSV.isAllOnesValue())) { in visitICmpInstWithInstAndIntCst()
1092 ICI.setOperand(0, CompareVal); in visitICmpInstWithInstAndIntCst()
1094 return &ICI; in visitICmpInstWithInstAndIntCst()
1098 bool isTrueIfPositive = ICI.getPredicate() == ICmpInst::ICMP_SGT; in visitICmpInstWithInstAndIntCst()
1113 if (!ICI.isEquality() && XorCST->getValue().isSignBit()) { in visitICmpInstWithInstAndIntCst()
1115 ICmpInst::Predicate Pred = ICI.isSigned() in visitICmpInstWithInstAndIntCst()
1116 ? ICI.getUnsignedPredicate() in visitICmpInstWithInstAndIntCst()
1117 : ICI.getSignedPredicate(); in visitICmpInstWithInstAndIntCst()
1123 if (!ICI.isEquality() && XorCST->isMaxValue(true)) { in visitICmpInstWithInstAndIntCst()
1125 ICmpInst::Predicate Pred = ICI.isSigned() in visitICmpInstWithInstAndIntCst()
1126 ? ICI.getUnsignedPredicate() in visitICmpInstWithInstAndIntCst()
1127 : ICI.getSignedPredicate(); in visitICmpInstWithInstAndIntCst()
1128 Pred = ICI.getSwappedPredicate(Pred); in visitICmpInstWithInstAndIntCst()
1136 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && in visitICmpInstWithInstAndIntCst()
1142 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && in visitICmpInstWithInstAndIntCst()
1160 if (ICI.isEquality() || in visitICmpInstWithInstAndIntCst()
1166 return new ICmpInst(ICI.getPredicate(), NewAnd, in visitICmpInstWithInstAndIntCst()
1177 if (ICI.isEquality() && RHSV.getActiveBits() <= Ty->getBitWidth()) { in visitICmpInstWithInstAndIntCst()
1182 return new ICmpInst(ICI.getPredicate(), NewAnd, in visitICmpInstWithInstAndIntCst()
1222 CanFold = !ICI.isSigned(); in visitICmpInstWithInstAndIntCst()
1239 if (ICI.getPredicate() == ICmpInst::ICMP_EQ) in visitICmpInstWithInstAndIntCst()
1240 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in visitICmpInstWithInstAndIntCst()
1241 if (ICI.getPredicate() == ICmpInst::ICMP_NE) in visitICmpInstWithInstAndIntCst()
1242 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in visitICmpInstWithInstAndIntCst()
1244 ICI.setOperand(1, NewCst); in visitICmpInstWithInstAndIntCst()
1253 return &ICI; in visitICmpInstWithInstAndIntCst()
1262 ICI.isEquality() && !Shift->isArithmeticShift() && in visitICmpInstWithInstAndIntCst()
1277 ICI.setOperand(0, NewAnd); in visitICmpInstWithInstAndIntCst()
1278 return &ICI; in visitICmpInstWithInstAndIntCst()
1283 if (ICI.getPredicate() == ICmpInst::ICMP_UGT) { in visitICmpInstWithInstAndIntCst()
1300 if (Instruction *Res = FoldCmpLoadFromIndexedGlobal(GEP, GV,ICI, C)) in visitICmpInstWithInstAndIntCst()
1308 if (ICI.isEquality() && RHS == LHSI->getOperand(1) && (-RHSV).isPowerOf2()) in visitICmpInstWithInstAndIntCst()
1310 ICI.getPredicate() == ICmpInst::ICMP_EQ ? ICmpInst::ICMP_UGT in visitICmpInstWithInstAndIntCst()
1316 if (!ICI.isEquality() || !RHS->isNullValue() || !LHSI->hasOneUse()) in visitICmpInstWithInstAndIntCst()
1322 Value *ICIP = Builder->CreateICmp(ICI.getPredicate(), P, in visitICmpInstWithInstAndIntCst()
1324 Value *ICIQ = Builder->CreateICmp(ICI.getPredicate(), Q, in visitICmpInstWithInstAndIntCst()
1327 if (ICI.getPredicate() == ICmpInst::ICMP_EQ) in visitICmpInstWithInstAndIntCst()
1342 ICmpInst::Predicate pred = ICI.getPredicate(); in visitICmpInstWithInstAndIntCst()
1361 ICmpInst::Predicate Pred = ICI.getPredicate(); in visitICmpInstWithInstAndIntCst()
1362 if (ICI.isUnsigned()) { in visitICmpInstWithInstAndIntCst()
1383 return ReplaceInstUsesWith(ICI, Builder->getFalse()); in visitICmpInstWithInstAndIntCst()
1385 return ReplaceInstUsesWith(ICI, Builder->getTrue()); in visitICmpInstWithInstAndIntCst()
1392 } else if (ICI.isSigned()) { in visitICmpInstWithInstAndIntCst()
1416 } else if (ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1422 ICI, Pred == ICmpInst::ICMP_EQ ? Builder->getFalse() in visitICmpInstWithInstAndIntCst()
1435 if (ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1442 bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; in visitICmpInstWithInstAndIntCst()
1444 return ReplaceInstUsesWith(ICI, Cst); in visitICmpInstWithInstAndIntCst()
1450 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), in visitICmpInstWithInstAndIntCst()
1456 return new ICmpInst(ICI.getPredicate(), LHSI->getOperand(0), in visitICmpInstWithInstAndIntCst()
1467 return new ICmpInst(ICI.getPredicate(), And, in visitICmpInstWithInstAndIntCst()
1474 ICmpInst::Predicate pred = ICI.getPredicate(); in visitICmpInstWithInstAndIntCst()
1484 isSignBitCheck(ICI.getPredicate(), RHS, TrueIfSigned)) { in visitICmpInstWithInstAndIntCst()
1504 Type *NTy = IntegerType::get(ICI.getContext(), TypeBits - Amt); in visitICmpInstWithInstAndIntCst()
1509 return new ICmpInst(ICI.getPredicate(), in visitICmpInstWithInstAndIntCst()
1522 if (Instruction *Res = FoldICmpShrCst(ICI, BO, ShAmt)) in visitICmpInstWithInstAndIntCst()
1527 if (ICI.isEquality() && BO->isExact() && BO->hasOneUse()) { in visitICmpInstWithInstAndIntCst()
1529 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), RHS); in visitICmpInstWithInstAndIntCst()
1543 if (Instruction *R = FoldICmpDivCst(ICI, cast<BinaryOperator>(LHSI), in visitICmpInstWithInstAndIntCst()
1556 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1565 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1574 if (!ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1579 ConstantRange CR = ICI.makeConstantRange(ICI.getPredicate(), RHSV) in visitICmpInstWithInstAndIntCst()
1582 if (ICI.isSigned()) { in visitICmpInstWithInstAndIntCst()
1603 if (ICI.getPredicate() == ICmpInst::ICMP_ULT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1612 if (ICI.getPredicate() == ICmpInst::ICMP_UGT && LHSI->hasOneUse() && in visitICmpInstWithInstAndIntCst()
1622 if (ICI.isEquality()) { in visitICmpInstWithInstAndIntCst()
1623 bool isICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE; in visitICmpInstWithInstAndIntCst()
1637 return new ICmpInst(ICI.getPredicate(), NewRem, in visitICmpInstWithInstAndIntCst()
1646 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1654 return new ICmpInst(ICI.getPredicate(), BOp0, NegVal); in visitICmpInstWithInstAndIntCst()
1656 return new ICmpInst(ICI.getPredicate(), NegVal, BOp1); in visitICmpInstWithInstAndIntCst()
1660 return new ICmpInst(ICI.getPredicate(), BOp0, Neg); in visitICmpInstWithInstAndIntCst()
1668 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1672 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1680 return new ICmpInst(ICI.getPredicate(), BO->getOperand(1), in visitICmpInstWithInstAndIntCst()
1684 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1694 return ReplaceInstUsesWith(ICI, Builder->getInt1(isICMP_NE)); in visitICmpInstWithInstAndIntCst()
1703 return ReplaceInstUsesWith(ICI, Builder->getInt1(isICMP_NE)); in visitICmpInstWithInstAndIntCst()
1741 return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), in visitICmpInstWithInstAndIntCst()
1753 ICI.setOperand(0, II->getArgOperand(0)); in visitICmpInstWithInstAndIntCst()
1754 ICI.setOperand(1, Builder->getInt(RHSV.byteSwap())); in visitICmpInstWithInstAndIntCst()
1755 return &ICI; in visitICmpInstWithInstAndIntCst()
1761 ICI.setOperand(0, II->getArgOperand(0)); in visitICmpInstWithInstAndIntCst()
1762 ICI.setOperand(1, ConstantInt::get(RHS->getType(), 0)); in visitICmpInstWithInstAndIntCst()
1763 return &ICI; in visitICmpInstWithInstAndIntCst()
1770 ICI.setOperand(0, II->getArgOperand(0)); in visitICmpInstWithInstAndIntCst()
1771 ICI.setOperand(1, RHS); in visitICmpInstWithInstAndIntCst()
1772 return &ICI; in visitICmpInstWithInstAndIntCst()
1786 Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) { in visitICmpInstWithCastAndCast() argument
1787 const CastInst *LHSCI = cast<CastInst>(ICI.getOperand(0)); in visitICmpInstWithCastAndCast()
1798 if (Constant *RHSC = dyn_cast<Constant>(ICI.getOperand(1))) { in visitICmpInstWithCastAndCast()
1800 } else if (PtrToIntInst *RHSC = dyn_cast<PtrToIntInst>(ICI.getOperand(1))) { in visitICmpInstWithCastAndCast()
1808 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSOp); in visitICmpInstWithCastAndCast()
1818 bool isSignedCmp = ICI.isSigned(); in visitICmpInstWithCastAndCast()
1820 if (CastInst *CI = dyn_cast<CastInst>(ICI.getOperand(1))) { in visitICmpInstWithCastAndCast()
1832 if (ICI.isEquality()) in visitICmpInstWithCastAndCast()
1833 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); in visitICmpInstWithCastAndCast()
1838 return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp); in visitICmpInstWithCastAndCast()
1841 return new ICmpInst(ICI.getUnsignedPredicate(), LHSCIOp, RHSCIOp); in visitICmpInstWithCastAndCast()
1845 ConstantInt *CI = dyn_cast<ConstantInt>(ICI.getOperand(1)); in visitICmpInstWithCastAndCast()
1858 if (ICI.isEquality()) in visitICmpInstWithCastAndCast()
1859 return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1); in visitICmpInstWithCastAndCast()
1864 return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1); in visitICmpInstWithCastAndCast()
1867 return new ICmpInst(ICI.getUnsignedPredicate(), LHSCIOp, Res1); in visitICmpInstWithCastAndCast()
1884 Value *Result = Builder->CreateICmpSGT(LHSCIOp, NegOne, ICI.getName()); in visitICmpInstWithCastAndCast()
1887 if (ICI.getPredicate() == ICmpInst::ICMP_ULT) in visitICmpInstWithCastAndCast()
1888 return ReplaceInstUsesWith(ICI, Result); in visitICmpInstWithCastAndCast()
1890 assert(ICI.getPredicate() == ICmpInst::ICMP_UGT && "ICmp should be folded!"); in visitICmpInstWithCastAndCast()