Lines Matching refs:Ops

782 static void GroupByComplexity(SmallVectorImpl<const SCEV *> &Ops,  in GroupByComplexity()  argument
784 if (Ops.size() < 2) return; // Noop in GroupByComplexity()
788 if (Ops.size() == 2) { in GroupByComplexity()
791 const SCEV *&LHS = Ops[0], *&RHS = Ops[1]; in GroupByComplexity()
798 std::stable_sort(Ops.begin(), Ops.end(), in GroupByComplexity()
808 for (unsigned i = 0, e = Ops.size(); i != e-2; ++i) { in GroupByComplexity()
809 const SCEV *S = Ops[i]; in GroupByComplexity()
814 for (unsigned j = i+1; j != e && Ops[j]->getSCEVType() == Complexity; ++j) { in GroupByComplexity()
815 if (Ops[j] == S) { // Found a duplicate. in GroupByComplexity()
817 std::swap(Ops[i+1], Ops[j]); in GroupByComplexity()
1827 SmallVector<const SCEV *, 4> Ops; in getZeroExtendExpr() local
1829 Ops.push_back(getZeroExtendExpr(Op, Ty, Depth + 1)); in getZeroExtendExpr()
1830 return getAddExpr(Ops, SCEV::FlagNUW, Depth + 1); in getZeroExtendExpr()
1860 SmallVector<const SCEV *, 4> Ops; in getZeroExtendExpr() local
1862 Ops.push_back(getZeroExtendExpr(Op, Ty, Depth + 1)); in getZeroExtendExpr()
1863 return getMulExpr(Ops, SCEV::FlagNUW, Depth + 1); in getZeroExtendExpr()
1959 SmallVector<const SCEV *, 4> Ops; in getSignExtendExpr() local
1961 Ops.push_back(getSignExtendExpr(Op, Ty, Depth + 1)); in getSignExtendExpr()
1962 return getAddExpr(Ops, SCEV::FlagNSW, Depth + 1); in getSignExtendExpr()
2190 SmallVector<const SCEV *, 4> Ops; in getAnyExtendExpr() local
2192 Ops.push_back(getAnyExtendExpr(Op, Ty)); in getAnyExtendExpr()
2193 return getAddRecExpr(Ops, AR->getLoop(), SCEV::FlagNW); in getAnyExtendExpr()
2231 const SCEV *const *Ops, size_t NumOperands, in CollectAddOperandsWithScales() argument
2238 while (const SCEVConstant *C = dyn_cast<SCEVConstant>(Ops[i])) { in CollectAddOperandsWithScales()
2249 const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(Ops[i]); in CollectAddOperandsWithScales()
2278 M.insert({Ops[i], Scale}); in CollectAddOperandsWithScales()
2298 const SmallVectorImpl<const SCEV *> &Ops, in StrengthenNoWrapFlags() argument
2318 if (SignOrUnsignWrap == SCEV::FlagNSW && all_of(Ops, IsKnownNonNegative)) in StrengthenNoWrapFlags()
2325 (Type == scAddExpr || Type == scMulExpr) && Ops.size() == 2 && in StrengthenNoWrapFlags()
2326 isa<SCEVConstant>(Ops[0])) { in StrengthenNoWrapFlags()
2339 const APInt &C = cast<SCEVConstant>(Ops[0])->getAPInt(); in StrengthenNoWrapFlags()
2345 if (NSWRegion.contains(SE->getSignedRange(Ops[1]))) in StrengthenNoWrapFlags()
2353 if (NUWRegion.contains(SE->getUnsignedRange(Ops[1]))) in StrengthenNoWrapFlags()
2366 const SCEV *ScalarEvolution::getAddExpr(SmallVectorImpl<const SCEV *> &Ops, in getAddExpr() argument
2371 assert(!Ops.empty() && "Cannot get empty add!"); in getAddExpr()
2372 if (Ops.size() == 1) return Ops[0]; in getAddExpr()
2374 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getAddExpr()
2375 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getAddExpr()
2376 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getAddExpr()
2381 GroupByComplexity(Ops, &LI, DT); in getAddExpr()
2383 Flags = StrengthenNoWrapFlags(this, scAddExpr, Ops, Flags); in getAddExpr()
2387 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getAddExpr()
2389 assert(Idx < Ops.size()); in getAddExpr()
2390 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getAddExpr()
2392 Ops[0] = getConstant(LHSC->getAPInt() + RHSC->getAPInt()); in getAddExpr()
2393 if (Ops.size() == 2) return Ops[0]; in getAddExpr()
2394 Ops.erase(Ops.begin()+1); // Erase the folded element in getAddExpr()
2395 LHSC = cast<SCEVConstant>(Ops[0]); in getAddExpr()
2400 Ops.erase(Ops.begin()); in getAddExpr()
2404 if (Ops.size() == 1) return Ops[0]; in getAddExpr()
2409 return getOrCreateAddExpr(Ops, Flags); in getAddExpr()
2414 Type *Ty = Ops[0]->getType(); in getAddExpr()
2416 for (unsigned i = 0, e = Ops.size(); i != e-1; ++i) in getAddExpr()
2417 if (Ops[i] == Ops[i+1]) { // X + Y + Y --> X + Y*2 in getAddExpr()
2420 while (i+Count != e && Ops[i+Count] == Ops[i]) in getAddExpr()
2424 const SCEV *Mul = getMulExpr(Scale, Ops[i], SCEV::FlagAnyWrap, Depth + 1); in getAddExpr()
2425 if (Ops.size() == Count) in getAddExpr()
2427 Ops[i] = Mul; in getAddExpr()
2428 Ops.erase(Ops.begin()+i+1, Ops.begin()+i+Count); in getAddExpr()
2433 return getAddExpr(Ops, Flags, Depth + 1); in getAddExpr()
2444 if (auto *T = dyn_cast<SCEVTruncateExpr>(Ops[Idx])) in getAddExpr()
2446 if (const auto *Mul = dyn_cast<SCEVMulExpr>(Ops[Idx])) { in getAddExpr()
2458 for (unsigned i = 0, e = Ops.size(); i != e; ++i) { in getAddExpr()
2459 if (const SCEVTruncateExpr *T = dyn_cast<SCEVTruncateExpr>(Ops[i])) { in getAddExpr()
2465 } else if (const SCEVConstant *C = dyn_cast<SCEVConstant>(Ops[i])) { in getAddExpr()
2467 } else if (const SCEVMulExpr *M = dyn_cast<SCEVMulExpr>(Ops[i])) { in getAddExpr()
2501 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scAddExpr) in getAddExpr()
2505 if (Idx < Ops.size()) { in getAddExpr()
2507 while (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(Ops[Idx])) { in getAddExpr()
2508 if (Ops.size() > AddOpsInlineThreshold || in getAddExpr()
2513 Ops.erase(Ops.begin()+Idx); in getAddExpr()
2514 Ops.append(Add->op_begin(), Add->op_end()); in getAddExpr()
2522 return getAddExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getAddExpr()
2526 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scMulExpr) in getAddExpr()
2531 if (Idx < Ops.size() && isa<SCEVMulExpr>(Ops[Idx])) { in getAddExpr()
2537 Ops.data(), Ops.size(), in getAddExpr()
2552 Ops.clear(); in getAddExpr()
2554 Ops.push_back(getConstant(AccumulatedConstant)); in getAddExpr()
2557 Ops.push_back(getMulExpr( in getAddExpr()
2561 if (Ops.empty()) in getAddExpr()
2563 if (Ops.size() == 1) in getAddExpr()
2564 return Ops[0]; in getAddExpr()
2565 return getAddExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getAddExpr()
2572 for (; Idx < Ops.size() && isa<SCEVMulExpr>(Ops[Idx]); ++Idx) { in getAddExpr()
2573 const SCEVMulExpr *Mul = cast<SCEVMulExpr>(Ops[Idx]); in getAddExpr()
2578 for (unsigned AddOp = 0, e = Ops.size(); AddOp != e; ++AddOp) in getAddExpr()
2579 if (MulOpSCEV == Ops[AddOp]) { in getAddExpr()
2594 if (Ops.size() == 2) return OuterMul; in getAddExpr()
2596 Ops.erase(Ops.begin()+AddOp); in getAddExpr()
2597 Ops.erase(Ops.begin()+Idx-1); in getAddExpr()
2599 Ops.erase(Ops.begin()+Idx); in getAddExpr()
2600 Ops.erase(Ops.begin()+AddOp-1); in getAddExpr()
2602 Ops.push_back(OuterMul); in getAddExpr()
2603 return getAddExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getAddExpr()
2608 OtherMulIdx < Ops.size() && isa<SCEVMulExpr>(Ops[OtherMulIdx]); in getAddExpr()
2610 const SCEVMulExpr *OtherMul = cast<SCEVMulExpr>(Ops[OtherMulIdx]); in getAddExpr()
2636 if (Ops.size() == 2) return OuterMul; in getAddExpr()
2637 Ops.erase(Ops.begin()+Idx); in getAddExpr()
2638 Ops.erase(Ops.begin()+OtherMulIdx-1); in getAddExpr()
2639 Ops.push_back(OuterMul); in getAddExpr()
2640 return getAddExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getAddExpr()
2649 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scAddRecExpr) in getAddExpr()
2653 for (; Idx < Ops.size() && isa<SCEVAddRecExpr>(Ops[Idx]); ++Idx) { in getAddExpr()
2657 const SCEVAddRecExpr *AddRec = cast<SCEVAddRecExpr>(Ops[Idx]); in getAddExpr()
2659 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getAddExpr()
2660 if (isAvailableAtLoopEntry(Ops[i], AddRecLoop)) { in getAddExpr()
2661 LIOps.push_back(Ops[i]); in getAddExpr()
2662 Ops.erase(Ops.begin()+i); in getAddExpr()
2685 if (Ops.size() == 1) return NewRec; in getAddExpr()
2689 if (Ops[i] == AddRec) { in getAddExpr()
2690 Ops[i] = NewRec; in getAddExpr()
2693 return getAddExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getAddExpr()
2700 OtherIdx < Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]); in getAddExpr()
2705 cast<SCEVAddRecExpr>(Ops[OtherIdx])->getLoop()->getHeader(), in getAddExpr()
2708 if (AddRecLoop == cast<SCEVAddRecExpr>(Ops[OtherIdx])->getLoop()) { in getAddExpr()
2712 for (; OtherIdx != Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]); in getAddExpr()
2714 const auto *OtherAddRec = cast<SCEVAddRecExpr>(Ops[OtherIdx]); in getAddExpr()
2727 Ops.erase(Ops.begin() + OtherIdx); --OtherIdx; in getAddExpr()
2731 Ops[Idx] = getAddRecExpr(AddRecOps, AddRecLoop, SCEV::FlagAnyWrap); in getAddExpr()
2732 return getAddExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getAddExpr()
2742 return getOrCreateAddExpr(Ops, Flags); in getAddExpr()
2746 ScalarEvolution::getOrCreateAddExpr(SmallVectorImpl<const SCEV *> &Ops, in getOrCreateAddExpr() argument
2750 for (const SCEV *Op : Ops) in getOrCreateAddExpr()
2756 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getOrCreateAddExpr()
2757 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getOrCreateAddExpr()
2759 SCEVAddExpr(ID.Intern(SCEVAllocator), O, Ops.size()); in getOrCreateAddExpr()
2768 ScalarEvolution::getOrCreateAddRecExpr(SmallVectorImpl<const SCEV *> &Ops, in getOrCreateAddRecExpr() argument
2772 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getOrCreateAddRecExpr()
2773 ID.AddPointer(Ops[i]); in getOrCreateAddRecExpr()
2779 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getOrCreateAddRecExpr()
2780 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getOrCreateAddRecExpr()
2782 SCEVAddRecExpr(ID.Intern(SCEVAllocator), O, Ops.size(), L); in getOrCreateAddRecExpr()
2791 ScalarEvolution::getOrCreateMulExpr(SmallVectorImpl<const SCEV *> &Ops, in getOrCreateMulExpr() argument
2795 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getOrCreateMulExpr()
2796 ID.AddPointer(Ops[i]); in getOrCreateMulExpr()
2801 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getOrCreateMulExpr()
2802 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getOrCreateMulExpr()
2804 O, Ops.size()); in getOrCreateMulExpr()
2867 const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops, in getMulExpr() argument
2872 assert(!Ops.empty() && "Cannot get empty mul!"); in getMulExpr()
2873 if (Ops.size() == 1) return Ops[0]; in getMulExpr()
2875 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getMulExpr()
2876 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getMulExpr()
2877 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getMulExpr()
2882 GroupByComplexity(Ops, &LI, DT); in getMulExpr()
2884 Flags = StrengthenNoWrapFlags(this, scMulExpr, Ops, Flags); in getMulExpr()
2888 return getOrCreateMulExpr(Ops, Flags); in getMulExpr()
2892 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getMulExpr()
2894 if (Ops.size() == 2) in getMulExpr()
2896 if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(Ops[1])) in getMulExpr()
2911 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getMulExpr()
2915 Ops[0] = getConstant(Fold); in getMulExpr()
2916 Ops.erase(Ops.begin()+1); // Erase the folded element in getMulExpr()
2917 if (Ops.size() == 1) return Ops[0]; in getMulExpr()
2918 LHSC = cast<SCEVConstant>(Ops[0]); in getMulExpr()
2922 if (cast<SCEVConstant>(Ops[0])->getValue()->isOne()) { in getMulExpr()
2923 Ops.erase(Ops.begin()); in getMulExpr()
2925 } else if (cast<SCEVConstant>(Ops[0])->getValue()->isZero()) { in getMulExpr()
2927 return Ops[0]; in getMulExpr()
2928 } else if (Ops[0]->isAllOnesValue()) { in getMulExpr()
2931 if (Ops.size() == 2) { in getMulExpr()
2932 if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(Ops[1])) { in getMulExpr()
2936 const SCEV *Mul = getMulExpr(Ops[0], AddOp, SCEV::FlagAnyWrap, in getMulExpr()
2943 } else if (const auto *AddRec = dyn_cast<SCEVAddRecExpr>(Ops[1])) { in getMulExpr()
2947 Operands.push_back(getMulExpr(Ops[0], AddRecOp, SCEV::FlagAnyWrap, in getMulExpr()
2956 if (Ops.size() == 1) in getMulExpr()
2957 return Ops[0]; in getMulExpr()
2961 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scMulExpr) in getMulExpr()
2965 if (Idx < Ops.size()) { in getMulExpr()
2967 while (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(Ops[Idx])) { in getMulExpr()
2968 if (Ops.size() > MulOpsInlineThreshold) in getMulExpr()
2972 Ops.erase(Ops.begin()+Idx); in getMulExpr()
2973 Ops.append(Mul->op_begin(), Mul->op_end()); in getMulExpr()
2981 return getMulExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getMulExpr()
2987 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scAddRecExpr) in getMulExpr()
2991 for (; Idx < Ops.size() && isa<SCEVAddRecExpr>(Ops[Idx]); ++Idx) { in getMulExpr()
2995 const SCEVAddRecExpr *AddRec = cast<SCEVAddRecExpr>(Ops[Idx]); in getMulExpr()
2997 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getMulExpr()
2998 if (isAvailableAtLoopEntry(Ops[i], AddRecLoop)) { in getMulExpr()
2999 LIOps.push_back(Ops[i]); in getMulExpr()
3000 Ops.erase(Ops.begin()+i); in getMulExpr()
3023 if (Ops.size() == 1) return NewRec; in getMulExpr()
3027 if (Ops[i] == AddRec) { in getMulExpr()
3028 Ops[i] = NewRec; in getMulExpr()
3031 return getMulExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getMulExpr()
3050 OtherIdx != Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]); in getMulExpr()
3053 dyn_cast<SCEVAddRecExpr>(Ops[OtherIdx]); in getMulExpr()
3095 if (Ops.size() == 2) return NewAddRec; in getMulExpr()
3096 Ops[Idx] = NewAddRec; in getMulExpr()
3097 Ops.erase(Ops.begin() + OtherIdx); --OtherIdx; in getMulExpr()
3105 return getMulExpr(Ops, SCEV::FlagAnyWrap, Depth + 1); in getMulExpr()
3113 return getOrCreateMulExpr(Ops, Flags); in getMulExpr()
3498 SmallVector<const SCEV *, 2> Ops = {LHS, RHS}; in getSMaxExpr() local
3499 return getSMaxExpr(Ops); in getSMaxExpr()
3503 ScalarEvolution::getSMaxExpr(SmallVectorImpl<const SCEV *> &Ops) { in getSMaxExpr() argument
3504 assert(!Ops.empty() && "Cannot get empty smax!"); in getSMaxExpr()
3505 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
3507 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getSMaxExpr()
3508 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getSMaxExpr()
3509 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getSMaxExpr()
3514 GroupByComplexity(Ops, &LI, DT); in getSMaxExpr()
3518 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getSMaxExpr()
3520 assert(Idx < Ops.size()); in getSMaxExpr()
3521 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getSMaxExpr()
3525 Ops[0] = getConstant(Fold); in getSMaxExpr()
3526 Ops.erase(Ops.begin()+1); // Erase the folded element in getSMaxExpr()
3527 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
3528 LHSC = cast<SCEVConstant>(Ops[0]); in getSMaxExpr()
3532 if (cast<SCEVConstant>(Ops[0])->getValue()->isMinValue(true)) { in getSMaxExpr()
3533 Ops.erase(Ops.begin()); in getSMaxExpr()
3535 } else if (cast<SCEVConstant>(Ops[0])->getValue()->isMaxValue(true)) { in getSMaxExpr()
3538 return Ops[0]; in getSMaxExpr()
3541 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
3545 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scSMaxExpr) in getSMaxExpr()
3550 if (Idx < Ops.size()) { in getSMaxExpr()
3552 while (const SCEVSMaxExpr *SMax = dyn_cast<SCEVSMaxExpr>(Ops[Idx])) { in getSMaxExpr()
3553 Ops.erase(Ops.begin()+Idx); in getSMaxExpr()
3554 Ops.append(SMax->op_begin(), SMax->op_end()); in getSMaxExpr()
3559 return getSMaxExpr(Ops); in getSMaxExpr()
3565 for (unsigned i = 0, e = Ops.size()-1; i != e; ++i) in getSMaxExpr()
3568 if (Ops[i] == Ops[i+1] || in getSMaxExpr()
3569 isKnownPredicate(ICmpInst::ICMP_SGE, Ops[i], Ops[i+1])) { in getSMaxExpr()
3570 Ops.erase(Ops.begin()+i+1, Ops.begin()+i+2); in getSMaxExpr()
3572 } else if (isKnownPredicate(ICmpInst::ICMP_SLE, Ops[i], Ops[i+1])) { in getSMaxExpr()
3573 Ops.erase(Ops.begin()+i, Ops.begin()+i+1); in getSMaxExpr()
3577 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
3579 assert(!Ops.empty() && "Reduced smax down to nothing!"); in getSMaxExpr()
3585 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getSMaxExpr()
3586 ID.AddPointer(Ops[i]); in getSMaxExpr()
3589 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getSMaxExpr()
3590 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getSMaxExpr()
3592 O, Ops.size()); in getSMaxExpr()
3600 SmallVector<const SCEV *, 2> Ops = {LHS, RHS}; in getUMaxExpr() local
3601 return getUMaxExpr(Ops); in getUMaxExpr()
3605 ScalarEvolution::getUMaxExpr(SmallVectorImpl<const SCEV *> &Ops) { in getUMaxExpr() argument
3606 assert(!Ops.empty() && "Cannot get empty umax!"); in getUMaxExpr()
3607 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
3609 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getUMaxExpr()
3610 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getUMaxExpr()
3611 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getUMaxExpr()
3616 GroupByComplexity(Ops, &LI, DT); in getUMaxExpr()
3620 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getUMaxExpr()
3622 assert(Idx < Ops.size()); in getUMaxExpr()
3623 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getUMaxExpr()
3627 Ops[0] = getConstant(Fold); in getUMaxExpr()
3628 Ops.erase(Ops.begin()+1); // Erase the folded element in getUMaxExpr()
3629 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
3630 LHSC = cast<SCEVConstant>(Ops[0]); in getUMaxExpr()
3634 if (cast<SCEVConstant>(Ops[0])->getValue()->isMinValue(false)) { in getUMaxExpr()
3635 Ops.erase(Ops.begin()); in getUMaxExpr()
3637 } else if (cast<SCEVConstant>(Ops[0])->getValue()->isMaxValue(false)) { in getUMaxExpr()
3640 return Ops[0]; in getUMaxExpr()
3643 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
3647 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scUMaxExpr) in getUMaxExpr()
3652 if (Idx < Ops.size()) { in getUMaxExpr()
3654 while (const SCEVUMaxExpr *UMax = dyn_cast<SCEVUMaxExpr>(Ops[Idx])) { in getUMaxExpr()
3655 Ops.erase(Ops.begin()+Idx); in getUMaxExpr()
3656 Ops.append(UMax->op_begin(), UMax->op_end()); in getUMaxExpr()
3661 return getUMaxExpr(Ops); in getUMaxExpr()
3667 for (unsigned i = 0, e = Ops.size()-1; i != e; ++i) in getUMaxExpr()
3670 if (Ops[i] == Ops[i + 1] || isKnownViaNonRecursiveReasoning( in getUMaxExpr()
3671 ICmpInst::ICMP_UGE, Ops[i], Ops[i + 1])) { in getUMaxExpr()
3672 Ops.erase(Ops.begin() + i + 1, Ops.begin() + i + 2); in getUMaxExpr()
3674 } else if (isKnownViaNonRecursiveReasoning(ICmpInst::ICMP_ULE, Ops[i], in getUMaxExpr()
3675 Ops[i + 1])) { in getUMaxExpr()
3676 Ops.erase(Ops.begin() + i, Ops.begin() + i + 1); in getUMaxExpr()
3680 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
3682 assert(!Ops.empty() && "Reduced umax down to nothing!"); in getUMaxExpr()
3688 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getUMaxExpr()
3689 ID.AddPointer(Ops[i]); in getUMaxExpr()
3692 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getUMaxExpr()
3693 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getUMaxExpr()
3695 O, Ops.size()); in getUMaxExpr()
3703 SmallVector<const SCEV *, 2> Ops = { LHS, RHS }; in getSMinExpr() local
3704 return getSMinExpr(Ops); in getSMinExpr()
3707 const SCEV *ScalarEvolution::getSMinExpr(SmallVectorImpl<const SCEV *> &Ops) { in getSMinExpr() argument
3710 for (auto *S : Ops) in getSMinExpr()
3717 SmallVector<const SCEV *, 2> Ops = { LHS, RHS }; in getUMinExpr() local
3718 return getUMinExpr(Ops); in getUMinExpr()
3721 const SCEV *ScalarEvolution::getUMinExpr(SmallVectorImpl<const SCEV *> &Ops) { in getUMinExpr() argument
3722 assert(!Ops.empty() && "At least one operand must be!"); in getUMinExpr()
3724 if (Ops.size() == 1) in getUMinExpr()
3725 return Ops[0]; in getUMinExpr()
3729 for (auto *S : Ops) in getUMinExpr()
4113 SmallVector<const SCEV *, 2> Ops = { LHS, RHS }; in getUMinFromMismatchedTypes() local
4114 return getUMinFromMismatchedTypes(Ops); in getUMinFromMismatchedTypes()
4118 SmallVectorImpl<const SCEV *> &Ops) { in getUMinFromMismatchedTypes() argument
4119 assert(!Ops.empty() && "At least one operand must be!"); in getUMinFromMismatchedTypes()
4121 if (Ops.size() == 1) in getUMinFromMismatchedTypes()
4122 return Ops[0]; in getUMinFromMismatchedTypes()
4126 for (auto *S : Ops) in getUMinFromMismatchedTypes()
4134 for (auto *S : Ops) in getUMinFromMismatchedTypes()
4757 SmallVector<const SCEV *, 8> Ops; in createAddRecFromPHIWithCastsImpl() local
4760 Ops.push_back(Add->getOperand(i)); in createAddRecFromPHIWithCastsImpl()
4761 const SCEV *Accum = getAddExpr(Ops); in createAddRecFromPHIWithCastsImpl()
5079 SmallVector<const SCEV *, 8> Ops; in createAddRecFromPHI() local
5082 Ops.push_back(SCEVBackedgeConditionFolder::rewrite(Add->getOperand(i), in createAddRecFromPHI()
5084 const SCEV *Accum = getAddExpr(Ops); in createAddRecFromPHI()
6866 SmallVector<const SCEV *, 2> Ops; in getExact() local
6874 Ops.push_back(BECount); in getExact()
6883 return SE->getUMinFromMismatchedTypes(Ops); in getExact()
10788 SmallVector<const SCEV *, 3> Ops; in getPostIncExpr() local
10792 Ops.push_back(SE.getAddExpr(getOperand(i), getOperand(i + 1))); in getPostIncExpr()
10799 Ops.push_back(Last); in getPostIncExpr()
10800 return cast<SCEVAddRecExpr>(SE.getAddRecExpr(Ops, getLoop(), in getPostIncExpr()