Lines Matching refs:Uses
30 // it's useful to think about these as the same register, with some uses using
32 // example, the icmp is a post-increment user, since it uses %i.next, which is
351 /// formula. This does not include register uses implied by non-constant
379 /// hasRegsUsedByUsesOtherThan - Test whether this formula uses registers
380 /// which are used by uses other than the use with the given index.
1038 /// isUseFullyOutsideLoop - Test whether this fixup always uses its
1118 /// IVUsers, as well as uses invented by LSR itself. It includes information
1149 /// this LSRUse. FindUseWithSimilarFormula can't consider uses with different
1436 /// Relate an IV user to an expression that computes the IV it uses from the IV
1491 /// ChainUsers - Helper for CollectChains to track multiple IV increment uses.
1525 /// Uses - The list of interesting uses.
1526 SmallVector<LSRUse, 16> Uses;
1528 /// RegUses - Track which uses use which register candidates.
1533 // back to normal LSR behavior for those uses.
1770 // NOTE: we could handle setcc instructions with multiple uses here, but
1771 // InstCombine does it as well for simple uses, it's not clear that it
1779 /// OptimizeMax - Rewrite the loop's terminating condition if it uses
1980 // the post-inc value if it won't be shared with other uses.
2091 // the uses will have all its uses outside the loop, for example.
2130 // Basic uses can't accept any offset, for example.
2142 LSRUse &LU = Uses[LUIdx];
2149 size_t LUIdx = Uses.size();
2151 Uses.push_back(LSRUse(Kind, AccessTy));
2152 LSRUse &LU = Uses[LUIdx];
2164 /// DeleteUse - Delete the given use from the Uses list.
2166 if (&LU != &Uses.back())
2167 std::swap(LU, Uses.back());
2168 Uses.pop_back();
2171 RegUses.SwapAndDropUse(LUIdx, Uses.size());
2179 // Search all uses for the formula. This could be more clever.
2180 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
2181 LSRUse &LU = Uses[LUIdx];
2184 // Ignore ICmpZero uses because they may contain formulae generated by
2273 // If all uses use the same type, don't bother looking for truncation-based
2449 // uses. However, a chain with multiple increments requires keeping the IV's
2475 // to a wider type with some uses remaining narrow under a (free) trunc.
2550 // All other uses of IVOperand become near uses of the chain.
2560 // Uses in the chain will no longer be uses if the chain is formed.
2827 // Record the uses.
2883 LSRUse &LU = Uses[LF.LUIdx];
2943 /// CollectLoopInvariantFixupsAndFormulae - Check for other uses of
2944 /// loop-invariant values which we're tracking. These other uses will pin these
2989 // Ignore uses which are part of other SCEV expressions, to avoid
2993 // If the user is a no-op, look through to its uses.
3016 LSRUse &LU = Uses[LF.LUIdx];
3023 CountRegisters(LU.Formulae.back(), Uses.size() - 1);
3420 // TODO: This assumes we've done basic processing on all uses and
3546 LSRUse &LU = Uses[LUIdx];
3629 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3630 LSRUse &LU = Uses[LUIdx];
3636 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3637 LSRUse &LU = Uses[LUIdx];
3647 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3648 LSRUse &LU = Uses[LUIdx];
3661 /// by other uses, pick the best one and delete the others.
3676 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3677 LSRUse &LU = Uses[LUIdx];
3698 // by uses within other loops that have some non-trivial address mode or
3700 // as the basis of rediscovering the desired formula that uses an AddRec
3771 for (SmallVectorImpl<LSRUse>::const_iterator I = Uses.begin(),
3772 E = Uses.end(); I != E; ++I) {
3785 /// NarrowSearchSpaceByDetectingSupersets - When one formula uses a superset
3797 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3798 LSRUse &LU = Uses[LUIdx];
3804 // delete the one that uses a register.
3857 "Narrowing the search space by assuming that uses separated "
3862 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3863 LSRUse &LU = Uses[LUIdx];
3887 Fixup.LUIdx = LUThatHas - &Uses.front();
3919 LUThatHas->RecomputeRegs(LUThatHas - &Uses.front(), RegUses);
3988 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3989 LSRUse &LU = Uses[LUIdx];
4037 // - sort the uses too
4043 const LSRUse &LU = Uses[Workspace.size()];
4086 if (Workspace.size() != Uses.size()) {
4116 Workspace.reserve(Uses.size());
4130 for (size_t i = 0, e = Uses.size(); i != e; ++i) {
4132 Uses[i].print(dbgs());
4139 assert(Solution.size() == Uses.size() && "Malformed solution!");
4269 const LSRUse &LU = Uses[LF.LUIdx];
4326 "The only scale supported by ICmpZero uses is -1!");
4357 // unfolded offsets. LSR assumes they both live next to their uses.
4518 // find the nearest block which dominates all the relevant uses.
4538 if (Uses[LF.LUIdx].Kind == LSRUse::ICmpZero)
4656 assert(!Uses.empty() && "IVUsers reported at least one use");
4657 DEBUG(dbgs() << "LSR found " << Uses.size() << " uses:\n";
4661 // to formulate the values needed for the uses.
4680 for (SmallVectorImpl<LSRUse>::const_iterator I = Uses.begin(), E = Uses.end();
4728 OS << "LSR is examining the following uses:\n";
4729 for (SmallVectorImpl<LSRUse>::const_iterator I = Uses.begin(),
4730 E = Uses.end(); I != E; ++I) {