Lines Matching defs:LUIdx
400 void countRegister(const SCEV *Reg, size_t LUIdx);
401 void dropRegister(const SCEV *Reg, size_t LUIdx);
402 void swapAndDropUse(size_t LUIdx, size_t LastLUIdx);
404 bool isRegUsedByUsesOtherThan(const SCEV *Reg, size_t LUIdx) const;
422 RegUseTracker::countRegister(const SCEV *Reg, size_t LUIdx) {
428 RSD.UsedByIndices.resize(std::max(RSD.UsedByIndices.size(), LUIdx + 1));
429 RSD.UsedByIndices.set(LUIdx);
433 RegUseTracker::dropRegister(const SCEV *Reg, size_t LUIdx) {
437 assert(RSD.UsedByIndices.size() > LUIdx);
438 RSD.UsedByIndices.reset(LUIdx);
442 RegUseTracker::swapAndDropUse(size_t LUIdx, size_t LastLUIdx) {
443 assert(LUIdx <= LastLUIdx);
449 if (LUIdx < UsedByIndices.size())
450 UsedByIndices[LUIdx] =
457 RegUseTracker::isRegUsedByUsesOtherThan(const SCEV *Reg, size_t LUIdx) const {
464 if ((size_t)i != LUIdx) return true;
539 bool hasRegsUsedByUsesOtherThan(size_t LUIdx,
741 bool Formula::hasRegsUsedByUsesOtherThan(size_t LUIdx,
744 if (RegUses.isRegUsedByUsesOtherThan(ScaledReg, LUIdx))
747 if (RegUses.isRegUsedByUsesOtherThan(BaseReg, LUIdx))
1383 void RecomputeRegs(size_t LUIdx, RegUseTracker &Reguses);
1761 void LSRUse::RecomputeRegs(size_t LUIdx, RegUseTracker &RegUses) {
1773 RegUses.dropRegister(S, LUIdx);
2221 void DeleteUse(LSRUse &LU, size_t LUIdx);
2225 void InsertInitialFormula(const SCEV *S, LSRUse &LU, size_t LUIdx);
2226 void InsertSupplementalFormula(const SCEV *S, LSRUse &LU, size_t LUIdx);
2227 void CountRegisters(const Formula &F, size_t LUIdx);
2228 bool InsertFormula(LSRUse &LU, unsigned LUIdx, const Formula &F);
2232 void GenerateReassociations(LSRUse &LU, unsigned LUIdx, Formula Base,
2235 void GenerateReassociationsImpl(LSRUse &LU, unsigned LUIdx,
2238 void GenerateCombinations(LSRUse &LU, unsigned LUIdx, Formula Base);
2239 void GenerateSymbolicOffsetsImpl(LSRUse &LU, unsigned LUIdx,
2242 void GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx, Formula Base);
2243 void GenerateConstantOffsetsImpl(LSRUse &LU, unsigned LUIdx,
2247 void GenerateConstantOffsets(LSRUse &LU, unsigned LUIdx, Formula Base);
2248 void GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx, Formula Base);
2249 void GenerateScales(LSRUse &LU, unsigned LUIdx, Formula Base);
2250 void GenerateTruncates(LSRUse &LU, unsigned LUIdx, Formula Base);
2825 size_t LUIdx = P.first->second;
2826 LSRUse &LU = Uses[LUIdx];
2829 return std::make_pair(LUIdx, Offset);
2833 size_t LUIdx = Uses.size();
2834 P.first->second = LUIdx;
2836 LSRUse &LU = Uses[LUIdx];
2840 return std::make_pair(LUIdx, Offset);
2844 void LSRInstance::DeleteUse(LSRUse &LU, size_t LUIdx) {
2850 RegUses.swapAndDropUse(LUIdx, Uses.size());
3616 size_t LUIdx = P.first;
3618 LSRUse &LU = Uses[LUIdx];
3629 if (!VisitedLSRUse.count(LUIdx) && !LF.isUseFullyOutsideLoop(L)) {
3633 VisitedLSRUse.insert(LUIdx);
3643 InsertInitialFormula(S, LU, LUIdx);
3644 CountRegisters(LU.Formulae.back(), LUIdx);
3654 size_t LUIdx) {
3661 bool Inserted = InsertFormula(LU, LUIdx, F);
3669 LSRUse &LU, size_t LUIdx) {
3673 bool Inserted = InsertFormula(LU, LUIdx, F);
3678 void LSRInstance::CountRegisters(const Formula &F, size_t LUIdx) {
3680 RegUses.countRegister(F.ScaledReg, LUIdx);
3682 RegUses.countRegister(BaseReg, LUIdx);
3687 bool LSRInstance::InsertFormula(LSRUse &LU, unsigned LUIdx, const Formula &F) {
3695 CountRegisters(F, LUIdx);
3809 size_t LUIdx = P.first;
3811 LSRUse &LU = Uses[LUIdx];
3821 InsertSupplementalFormula(US, LU, LUIdx);
3915 void LSRInstance::GenerateReassociationsImpl(LSRUse &LU, unsigned LUIdx,
4000 if (InsertFormula(LU, LUIdx, F))
4007 GenerateReassociations(LU, LUIdx, LU.Formulae.back(),
4013 void LSRInstance::GenerateReassociations(LSRUse &LU, unsigned LUIdx,
4021 GenerateReassociationsImpl(LU, LUIdx, Base, Depth, i);
4024 GenerateReassociationsImpl(LU, LUIdx, Base, Depth,
4030 void LSRInstance::GenerateCombinations(LSRUse &LU, unsigned LUIdx,
4073 (void)InsertFormula(LU, LUIdx, F);
4094 void LSRInstance::GenerateSymbolicOffsetsImpl(LSRUse &LU, unsigned LUIdx,
4109 (void)InsertFormula(LU, LUIdx, F);
4113 void LSRInstance::GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx,
4119 GenerateSymbolicOffsetsImpl(LU, LUIdx, Base, i);
4121 GenerateSymbolicOffsetsImpl(LU, LUIdx, Base, /* Idx */ -1,
4127 LSRUse &LU, unsigned LUIdx, const Formula &Base,
4153 (void)InsertFormula(LU, LUIdx, F);
4203 (void)InsertFormula(LU, LUIdx, F);
4207 void LSRInstance::GenerateConstantOffsets(LSRUse &LU, unsigned LUIdx,
4217 GenerateConstantOffsetsImpl(LU, LUIdx, Base, Worklist, i);
4219 GenerateConstantOffsetsImpl(LU, LUIdx, Base, Worklist, /* Idx */ -1,
4225 void LSRInstance::GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx,
4319 (void)InsertFormula(LU, LUIdx, F);
4326 void LSRInstance::GenerateScales(LSRUse &LU, unsigned LUIdx, Formula Base) {
4385 (void)InsertFormula(LU, LUIdx, F);
4416 void LSRInstance::GenerateTruncates(LSRUse &LU, unsigned LUIdx, Formula Base) {
4468 if (!F.hasRegsUsedByUsesOtherThan(LUIdx, RegUses))
4472 (void)InsertFormula(LU, LUIdx, F);
4483 size_t LUIdx;
4488 : LUIdx(LI), Imm(I), OrigReg(R) {}
4498 OS << "in formulae referencing " << *OrigReg << " in use " << LUIdx
4590 for (unsigned LUIdx : UsedByIndices.set_bits())
4592 if (UniqueItems.insert(std::make_pair(LUIdx, Imm)).second)
4593 WorkItems.push_back(WorkItem(LUIdx, Imm, OrigReg));
4605 size_t LUIdx = WI.LUIdx;
4606 LSRUse &LU = Uses[LUIdx];
4656 (void)InsertFormula(LU, LUIdx, NewF);
4701 (void)InsertFormula(LU, LUIdx, NewF);
4715 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4716 LSRUse &LU = Uses[LUIdx];
4718 GenerateReassociations(LU, LUIdx, LU.Formulae[i]);
4720 GenerateCombinations(LU, LUIdx, LU.Formulae[i]);
4722 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4723 LSRUse &LU = Uses[LUIdx];
4725 GenerateSymbolicOffsets(LU, LUIdx, LU.Formulae[i]);
4727 GenerateConstantOffsets(LU, LUIdx, LU.Formulae[i]);
4729 GenerateICmpZeroScales(LU, LUIdx, LU.Formulae[i]);
4731 GenerateScales(LU, LUIdx, LU.Formulae[i]);
4733 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4734 LSRUse &LU = Uses[LUIdx];
4736 GenerateTruncates(LU, LUIdx, LU.Formulae[i]);
4763 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4764 LSRUse &LU = Uses[LUIdx];
4796 if (RegUses.isRegUsedByUsesOtherThan(Reg, LUIdx))
4800 RegUses.isRegUsedByUsesOtherThan(F.ScaledReg, LUIdx))
4834 LU.RecomputeRegs(LUIdx, RegUses);
4876 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4877 LSRUse &LU = Uses[LUIdx];
4927 LU.RecomputeRegs(LUIdx, RegUses);
4947 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4948 LSRUse &LU = Uses[LUIdx];
4990 DeleteUse(LU, LUIdx);
4991 --LUIdx;
5044 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
5045 LSRUse &LU = Uses[LUIdx];
5105 LU.RecomputeRegs(LUIdx, RegUses);
5130 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
5131 LSRUse &LU = Uses[LUIdx];
5157 LU.RecomputeRegs(LUIdx, RegUses);
5242 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
5243 LSRUse &LU = Uses[LUIdx];
5290 LU.RecomputeRegs(LUIdx, RegUses);
5361 int LUIdx = RegUses.getUsedByIndices(Reg).find_first();
5362 if (LUIdx >= 0 && Uses[LUIdx].Kind == LSRUse::Address &&
5364 Uses[LUIdx].AccessTy)) {
5379 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
5380 LSRUse &LU = Uses[LUIdx];
5398 LU.RecomputeRegs(LUIdx, RegUses);
6079 for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx)
6080 for (const LSRFixup &Fixup : Uses[LUIdx].Fixups) {
6082 canHoistIVInc(TTI, Fixup, Uses[LUIdx], IVIncInsertPos, L)
6086 Rewrite(Uses[LUIdx], Fixup, *Solution[LUIdx], DeadInsts);