• Home
  • Raw
  • Download

Lines Matching refs:Ops

609 static void GroupByComplexity(SmallVectorImpl<const SCEV *> &Ops,  in GroupByComplexity()  argument
611 if (Ops.size() < 2) return; // Noop in GroupByComplexity()
612 if (Ops.size() == 2) { in GroupByComplexity()
615 const SCEV *&LHS = Ops[0], *&RHS = Ops[1]; in GroupByComplexity()
622 std::stable_sort(Ops.begin(), Ops.end(), SCEVComplexityCompare(LI)); in GroupByComplexity()
628 for (unsigned i = 0, e = Ops.size(); i != e-2; ++i) { in GroupByComplexity()
629 const SCEV *S = Ops[i]; in GroupByComplexity()
634 for (unsigned j = i+1; j != e && Ops[j]->getSCEVType() == Complexity; ++j) { in GroupByComplexity()
635 if (Ops[j] == S) { // Found a duplicate. in GroupByComplexity()
637 std::swap(Ops[i+1], Ops[j]); in GroupByComplexity()
1322 SmallVector<const SCEV *, 4> Ops; in getAnyExtendExpr() local
1325 Ops.push_back(getAnyExtendExpr(*I, Ty)); in getAnyExtendExpr()
1326 return getAddRecExpr(Ops, AR->getLoop(), SCEV::FlagNW); in getAnyExtendExpr()
1373 const SCEV *const *Ops, size_t NumOperands, in CollectAddOperandsWithScales() argument
1380 while (const SCEVConstant *C = dyn_cast<SCEVConstant>(Ops[i])) { in CollectAddOperandsWithScales()
1391 const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(Ops[i]); in CollectAddOperandsWithScales()
1421 M.insert(std::make_pair(Ops[i], Scale)); in CollectAddOperandsWithScales()
1446 const SCEV *ScalarEvolution::getAddExpr(SmallVectorImpl<const SCEV *> &Ops, in getAddExpr() argument
1450 assert(!Ops.empty() && "Cannot get empty add!"); in getAddExpr()
1451 if (Ops.size() == 1) return Ops[0]; in getAddExpr()
1453 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getAddExpr()
1454 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getAddExpr()
1455 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getAddExpr()
1465 for (SmallVectorImpl<const SCEV *>::const_iterator I = Ops.begin(), in getAddExpr()
1466 E = Ops.end(); I != E; ++I) in getAddExpr()
1475 GroupByComplexity(Ops, LI); in getAddExpr()
1479 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getAddExpr()
1481 assert(Idx < Ops.size()); in getAddExpr()
1482 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getAddExpr()
1484 Ops[0] = getConstant(LHSC->getValue()->getValue() + in getAddExpr()
1486 if (Ops.size() == 2) return Ops[0]; in getAddExpr()
1487 Ops.erase(Ops.begin()+1); // Erase the folded element in getAddExpr()
1488 LHSC = cast<SCEVConstant>(Ops[0]); in getAddExpr()
1493 Ops.erase(Ops.begin()); in getAddExpr()
1497 if (Ops.size() == 1) return Ops[0]; in getAddExpr()
1503 Type *Ty = Ops[0]->getType(); in getAddExpr()
1505 for (unsigned i = 0, e = Ops.size(); i != e-1; ++i) in getAddExpr()
1506 if (Ops[i] == Ops[i+1]) { // X + Y + Y --> X + Y*2 in getAddExpr()
1509 while (i+Count != e && Ops[i+Count] == Ops[i]) in getAddExpr()
1513 const SCEV *Mul = getMulExpr(Scale, Ops[i]); in getAddExpr()
1514 if (Ops.size() == Count) in getAddExpr()
1516 Ops[i] = Mul; in getAddExpr()
1517 Ops.erase(Ops.begin()+i+1, Ops.begin()+i+Count); in getAddExpr()
1522 return getAddExpr(Ops, Flags); in getAddExpr()
1528 for (; Idx < Ops.size() && isa<SCEVTruncateExpr>(Ops[Idx]); ++Idx) { in getAddExpr()
1529 const SCEVTruncateExpr *Trunc = cast<SCEVTruncateExpr>(Ops[Idx]); in getAddExpr()
1536 for (unsigned i = 0, e = Ops.size(); i != e; ++i) { in getAddExpr()
1537 if (const SCEVTruncateExpr *T = dyn_cast<SCEVTruncateExpr>(Ops[i])) { in getAddExpr()
1543 } else if (const SCEVConstant *C = dyn_cast<SCEVConstant>(Ops[i])) { in getAddExpr()
1545 } else if (const SCEVMulExpr *M = dyn_cast<SCEVMulExpr>(Ops[i])) { in getAddExpr()
1580 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scAddExpr) in getAddExpr()
1584 if (Idx < Ops.size()) { in getAddExpr()
1586 while (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(Ops[Idx])) { in getAddExpr()
1589 Ops.erase(Ops.begin()+Idx); in getAddExpr()
1590 Ops.append(Add->op_begin(), Add->op_end()); in getAddExpr()
1598 return getAddExpr(Ops); in getAddExpr()
1602 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scMulExpr) in getAddExpr()
1607 if (Idx < Ops.size() && isa<SCEVMulExpr>(Ops[Idx])) { in getAddExpr()
1613 Ops.data(), Ops.size(), in getAddExpr()
1623 Ops.clear(); in getAddExpr()
1625 Ops.push_back(getConstant(AccumulatedConstant)); in getAddExpr()
1629 Ops.push_back(getMulExpr(getConstant(I->first), in getAddExpr()
1631 if (Ops.empty()) in getAddExpr()
1633 if (Ops.size() == 1) in getAddExpr()
1634 return Ops[0]; in getAddExpr()
1635 return getAddExpr(Ops); in getAddExpr()
1642 for (; Idx < Ops.size() && isa<SCEVMulExpr>(Ops[Idx]); ++Idx) { in getAddExpr()
1643 const SCEVMulExpr *Mul = cast<SCEVMulExpr>(Ops[Idx]); in getAddExpr()
1648 for (unsigned AddOp = 0, e = Ops.size(); AddOp != e; ++AddOp) in getAddExpr()
1649 if (MulOpSCEV == Ops[AddOp]) { in getAddExpr()
1663 if (Ops.size() == 2) return OuterMul; in getAddExpr()
1665 Ops.erase(Ops.begin()+AddOp); in getAddExpr()
1666 Ops.erase(Ops.begin()+Idx-1); in getAddExpr()
1668 Ops.erase(Ops.begin()+Idx); in getAddExpr()
1669 Ops.erase(Ops.begin()+AddOp-1); in getAddExpr()
1671 Ops.push_back(OuterMul); in getAddExpr()
1672 return getAddExpr(Ops); in getAddExpr()
1677 OtherMulIdx < Ops.size() && isa<SCEVMulExpr>(Ops[OtherMulIdx]); in getAddExpr()
1679 const SCEVMulExpr *OtherMul = cast<SCEVMulExpr>(Ops[OtherMulIdx]); in getAddExpr()
1702 if (Ops.size() == 2) return OuterMul; in getAddExpr()
1703 Ops.erase(Ops.begin()+Idx); in getAddExpr()
1704 Ops.erase(Ops.begin()+OtherMulIdx-1); in getAddExpr()
1705 Ops.push_back(OuterMul); in getAddExpr()
1706 return getAddExpr(Ops); in getAddExpr()
1715 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scAddRecExpr) in getAddExpr()
1719 for (; Idx < Ops.size() && isa<SCEVAddRecExpr>(Ops[Idx]); ++Idx) { in getAddExpr()
1723 const SCEVAddRecExpr *AddRec = cast<SCEVAddRecExpr>(Ops[Idx]); in getAddExpr()
1725 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getAddExpr()
1726 if (isLoopInvariant(Ops[i], AddRecLoop)) { in getAddExpr()
1727 LIOps.push_back(Ops[i]); in getAddExpr()
1728 Ops.erase(Ops.begin()+i); in getAddExpr()
1748 if (Ops.size() == 1) return NewRec; in getAddExpr()
1752 if (Ops[i] == AddRec) { in getAddExpr()
1753 Ops[i] = NewRec; in getAddExpr()
1756 return getAddExpr(Ops); in getAddExpr()
1763 OtherIdx < Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]); in getAddExpr()
1765 if (AddRecLoop == cast<SCEVAddRecExpr>(Ops[OtherIdx])->getLoop()) { in getAddExpr()
1769 for (; OtherIdx != Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]); in getAddExpr()
1772 dyn_cast<SCEVAddRecExpr>(Ops[OtherIdx])) in getAddExpr()
1784 Ops.erase(Ops.begin() + OtherIdx); --OtherIdx; in getAddExpr()
1787 Ops[Idx] = getAddRecExpr(AddRecOps, AddRecLoop, SCEV::FlagAnyWrap); in getAddExpr()
1788 return getAddExpr(Ops); in getAddExpr()
1799 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getAddExpr()
1800 ID.AddPointer(Ops[i]); in getAddExpr()
1805 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getAddExpr()
1806 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getAddExpr()
1808 O, Ops.size()); in getAddExpr()
1849 const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops, in getMulExpr() argument
1853 assert(!Ops.empty() && "Cannot get empty mul!"); in getMulExpr()
1854 if (Ops.size() == 1) return Ops[0]; in getMulExpr()
1856 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getMulExpr()
1857 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getMulExpr()
1858 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getMulExpr()
1868 for (SmallVectorImpl<const SCEV *>::const_iterator I = Ops.begin(), in getMulExpr()
1869 E = Ops.end(); I != E; ++I) in getMulExpr()
1878 GroupByComplexity(Ops, LI); in getMulExpr()
1882 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getMulExpr()
1885 if (Ops.size() == 2) in getMulExpr()
1886 if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(Ops[1])) in getMulExpr()
1893 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getMulExpr()
1898 Ops[0] = getConstant(Fold); in getMulExpr()
1899 Ops.erase(Ops.begin()+1); // Erase the folded element in getMulExpr()
1900 if (Ops.size() == 1) return Ops[0]; in getMulExpr()
1901 LHSC = cast<SCEVConstant>(Ops[0]); in getMulExpr()
1905 if (cast<SCEVConstant>(Ops[0])->getValue()->equalsInt(1)) { in getMulExpr()
1906 Ops.erase(Ops.begin()); in getMulExpr()
1908 } else if (cast<SCEVConstant>(Ops[0])->getValue()->isZero()) { in getMulExpr()
1910 return Ops[0]; in getMulExpr()
1911 } else if (Ops[0]->isAllOnesValue()) { in getMulExpr()
1914 if (Ops.size() == 2) { in getMulExpr()
1915 if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(Ops[1])) { in getMulExpr()
1920 const SCEV *Mul = getMulExpr(Ops[0], *I); in getMulExpr()
1928 AddRec = dyn_cast<SCEVAddRecExpr>(Ops[1])) { in getMulExpr()
1933 Operands.push_back(getMulExpr(Ops[0], *I)); in getMulExpr()
1941 if (Ops.size() == 1) in getMulExpr()
1942 return Ops[0]; in getMulExpr()
1946 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scMulExpr) in getMulExpr()
1950 if (Idx < Ops.size()) { in getMulExpr()
1952 while (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(Ops[Idx])) { in getMulExpr()
1955 Ops.erase(Ops.begin()+Idx); in getMulExpr()
1956 Ops.append(Mul->op_begin(), Mul->op_end()); in getMulExpr()
1964 return getMulExpr(Ops); in getMulExpr()
1970 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scAddRecExpr) in getMulExpr()
1974 for (; Idx < Ops.size() && isa<SCEVAddRecExpr>(Ops[Idx]); ++Idx) { in getMulExpr()
1978 const SCEVAddRecExpr *AddRec = cast<SCEVAddRecExpr>(Ops[Idx]); in getMulExpr()
1980 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getMulExpr()
1981 if (isLoopInvariant(Ops[i], AddRecLoop)) { in getMulExpr()
1982 LIOps.push_back(Ops[i]); in getMulExpr()
1983 Ops.erase(Ops.begin()+i); in getMulExpr()
2005 if (Ops.size() == 1) return NewRec; in getMulExpr()
2009 if (Ops[i] == AddRec) { in getMulExpr()
2010 Ops[i] = NewRec; in getMulExpr()
2013 return getMulExpr(Ops); in getMulExpr()
2020 OtherIdx < Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]); in getMulExpr()
2022 if (AddRecLoop == cast<SCEVAddRecExpr>(Ops[OtherIdx])->getLoop()) { in getMulExpr()
2034 for (; OtherIdx != Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]); in getMulExpr()
2037 dyn_cast<SCEVAddRecExpr>(Ops[OtherIdx])) in getMulExpr()
2070 if (Ops.size() == 2) return NewAddRec; in getMulExpr()
2071 Ops[Idx] = AddRec = cast<SCEVAddRecExpr>(NewAddRec); in getMulExpr()
2072 Ops.erase(Ops.begin() + OtherIdx); --OtherIdx; in getMulExpr()
2077 return getMulExpr(Ops); in getMulExpr()
2089 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getMulExpr()
2090 ID.AddPointer(Ops[i]); in getMulExpr()
2095 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getMulExpr()
2096 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getMulExpr()
2098 O, Ops.size()); in getMulExpr()
2356 SmallVector<const SCEV *, 2> Ops; in getSMaxExpr() local
2357 Ops.push_back(LHS); in getSMaxExpr()
2358 Ops.push_back(RHS); in getSMaxExpr()
2359 return getSMaxExpr(Ops); in getSMaxExpr()
2363 ScalarEvolution::getSMaxExpr(SmallVectorImpl<const SCEV *> &Ops) { in getSMaxExpr() argument
2364 assert(!Ops.empty() && "Cannot get empty smax!"); in getSMaxExpr()
2365 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
2367 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getSMaxExpr()
2368 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getSMaxExpr()
2369 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getSMaxExpr()
2374 GroupByComplexity(Ops, LI); in getSMaxExpr()
2378 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getSMaxExpr()
2380 assert(Idx < Ops.size()); in getSMaxExpr()
2381 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getSMaxExpr()
2386 Ops[0] = getConstant(Fold); in getSMaxExpr()
2387 Ops.erase(Ops.begin()+1); // Erase the folded element in getSMaxExpr()
2388 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
2389 LHSC = cast<SCEVConstant>(Ops[0]); in getSMaxExpr()
2393 if (cast<SCEVConstant>(Ops[0])->getValue()->isMinValue(true)) { in getSMaxExpr()
2394 Ops.erase(Ops.begin()); in getSMaxExpr()
2396 } else if (cast<SCEVConstant>(Ops[0])->getValue()->isMaxValue(true)) { in getSMaxExpr()
2399 return Ops[0]; in getSMaxExpr()
2402 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
2406 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scSMaxExpr) in getSMaxExpr()
2411 if (Idx < Ops.size()) { in getSMaxExpr()
2413 while (const SCEVSMaxExpr *SMax = dyn_cast<SCEVSMaxExpr>(Ops[Idx])) { in getSMaxExpr()
2414 Ops.erase(Ops.begin()+Idx); in getSMaxExpr()
2415 Ops.append(SMax->op_begin(), SMax->op_end()); in getSMaxExpr()
2420 return getSMaxExpr(Ops); in getSMaxExpr()
2426 for (unsigned i = 0, e = Ops.size()-1; i != e; ++i) in getSMaxExpr()
2429 if (Ops[i] == Ops[i+1] || in getSMaxExpr()
2430 isKnownPredicate(ICmpInst::ICMP_SGE, Ops[i], Ops[i+1])) { in getSMaxExpr()
2431 Ops.erase(Ops.begin()+i+1, Ops.begin()+i+2); in getSMaxExpr()
2433 } else if (isKnownPredicate(ICmpInst::ICMP_SLE, Ops[i], Ops[i+1])) { in getSMaxExpr()
2434 Ops.erase(Ops.begin()+i, Ops.begin()+i+1); in getSMaxExpr()
2438 if (Ops.size() == 1) return Ops[0]; in getSMaxExpr()
2440 assert(!Ops.empty() && "Reduced smax down to nothing!"); in getSMaxExpr()
2446 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getSMaxExpr()
2447 ID.AddPointer(Ops[i]); in getSMaxExpr()
2450 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getSMaxExpr()
2451 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getSMaxExpr()
2453 O, Ops.size()); in getSMaxExpr()
2460 SmallVector<const SCEV *, 2> Ops; in getUMaxExpr() local
2461 Ops.push_back(LHS); in getUMaxExpr()
2462 Ops.push_back(RHS); in getUMaxExpr()
2463 return getUMaxExpr(Ops); in getUMaxExpr()
2467 ScalarEvolution::getUMaxExpr(SmallVectorImpl<const SCEV *> &Ops) { in getUMaxExpr() argument
2468 assert(!Ops.empty() && "Cannot get empty umax!"); in getUMaxExpr()
2469 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
2471 Type *ETy = getEffectiveSCEVType(Ops[0]->getType()); in getUMaxExpr()
2472 for (unsigned i = 1, e = Ops.size(); i != e; ++i) in getUMaxExpr()
2473 assert(getEffectiveSCEVType(Ops[i]->getType()) == ETy && in getUMaxExpr()
2478 GroupByComplexity(Ops, LI); in getUMaxExpr()
2482 if (const SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) { in getUMaxExpr()
2484 assert(Idx < Ops.size()); in getUMaxExpr()
2485 while (const SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) { in getUMaxExpr()
2490 Ops[0] = getConstant(Fold); in getUMaxExpr()
2491 Ops.erase(Ops.begin()+1); // Erase the folded element in getUMaxExpr()
2492 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
2493 LHSC = cast<SCEVConstant>(Ops[0]); in getUMaxExpr()
2497 if (cast<SCEVConstant>(Ops[0])->getValue()->isMinValue(false)) { in getUMaxExpr()
2498 Ops.erase(Ops.begin()); in getUMaxExpr()
2500 } else if (cast<SCEVConstant>(Ops[0])->getValue()->isMaxValue(false)) { in getUMaxExpr()
2503 return Ops[0]; in getUMaxExpr()
2506 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
2510 while (Idx < Ops.size() && Ops[Idx]->getSCEVType() < scUMaxExpr) in getUMaxExpr()
2515 if (Idx < Ops.size()) { in getUMaxExpr()
2517 while (const SCEVUMaxExpr *UMax = dyn_cast<SCEVUMaxExpr>(Ops[Idx])) { in getUMaxExpr()
2518 Ops.erase(Ops.begin()+Idx); in getUMaxExpr()
2519 Ops.append(UMax->op_begin(), UMax->op_end()); in getUMaxExpr()
2524 return getUMaxExpr(Ops); in getUMaxExpr()
2530 for (unsigned i = 0, e = Ops.size()-1; i != e; ++i) in getUMaxExpr()
2533 if (Ops[i] == Ops[i+1] || in getUMaxExpr()
2534 isKnownPredicate(ICmpInst::ICMP_UGE, Ops[i], Ops[i+1])) { in getUMaxExpr()
2535 Ops.erase(Ops.begin()+i+1, Ops.begin()+i+2); in getUMaxExpr()
2537 } else if (isKnownPredicate(ICmpInst::ICMP_ULE, Ops[i], Ops[i+1])) { in getUMaxExpr()
2538 Ops.erase(Ops.begin()+i, Ops.begin()+i+1); in getUMaxExpr()
2542 if (Ops.size() == 1) return Ops[0]; in getUMaxExpr()
2544 assert(!Ops.empty() && "Reduced umax down to nothing!"); in getUMaxExpr()
2550 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in getUMaxExpr()
2551 ID.AddPointer(Ops[i]); in getUMaxExpr()
2554 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getUMaxExpr()
2555 std::uninitialized_copy(Ops.begin(), Ops.end(), O); in getUMaxExpr()
2557 O, Ops.size()); in getUMaxExpr()
3027 SmallVector<const SCEV *, 8> Ops; in createNodeForPHI() local
3030 Ops.push_back(Add->getOperand(i)); in createNodeForPHI()
3031 const SCEV *Accum = getAddExpr(Ops); in createNodeForPHI()