Lines Matching defs:LU

1568   bool reconcileNewOffset(LSRUse &LU, int64_t NewOffset, bool HasBaseReg,
1575 void DeleteUse(LSRUse &LU, size_t LUIdx);
1579 void InsertInitialFormula(const SCEV *S, LSRUse &LU, size_t LUIdx);
1580 void InsertSupplementalFormula(const SCEV *S, LSRUse &LU, size_t LUIdx);
1582 bool InsertFormula(LSRUse &LU, unsigned LUIdx, const Formula &F);
1586 void GenerateReassociations(LSRUse &LU, unsigned LUIdx, Formula Base,
1588 void GenerateCombinations(LSRUse &LU, unsigned LUIdx, Formula Base);
1589 void GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx, Formula Base);
1590 void GenerateConstantOffsets(LSRUse &LU, unsigned LUIdx, Formula Base);
1591 void GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx, Formula Base);
1592 void GenerateScales(LSRUse &LU, unsigned LUIdx, Formula Base);
1593 void GenerateTruncates(LSRUse &LU, unsigned LUIdx, Formula Base);
1620 const LSRUse &LU,
2081 LSRInstance::reconcileNewOffset(LSRUse &LU, int64_t NewOffset, bool HasBaseReg,
2083 int64_t NewMinOffset = LU.MinOffset;
2084 int64_t NewMaxOffset = LU.MaxOffset;
2090 if (LU.Kind != Kind)
2093 if (NewOffset < LU.MinOffset) {
2095 LU.MaxOffset - NewOffset, HasBaseReg))
2098 } else if (NewOffset > LU.MaxOffset) {
2100 NewOffset - LU.MinOffset, HasBaseReg))
2107 if (Kind == LSRUse::Address && AccessTy != LU.AccessTy)
2111 LU.MinOffset = NewMinOffset;
2112 LU.MaxOffset = NewMaxOffset;
2113 LU.AccessTy = NewAccessTy;
2114 if (NewOffset != LU.Offsets.back())
2115 LU.Offsets.push_back(NewOffset);
2140 LSRUse &LU = Uses[LUIdx];
2141 if (reconcileNewOffset(LU, Offset, /*HasBaseReg=*/true, Kind, AccessTy))
2150 LSRUse &LU = Uses[LUIdx];
2154 if (LU.Offsets.empty() || Offset != LU.Offsets.back())
2155 LU.Offsets.push_back(Offset);
2157 LU.MinOffset = Offset;
2158 LU.MaxOffset = Offset;
2163 void LSRInstance::DeleteUse(LSRUse &LU, size_t LUIdx) {
2164 if (&LU != &Uses.back())
2165 std::swap(LU, Uses.back());
2179 LSRUse &LU = Uses[LUIdx];
2185 if (&LU != &OrigLU &&
2186 LU.Kind != LSRUse::ICmpZero &&
2187 LU.Kind == OrigLU.Kind && OrigLU.AccessTy == LU.AccessTy &&
2188 LU.WidestFixupType == OrigLU.WidestFixupType &&
2189 LU.HasFormulaWithSameRegs(OrigF)) {
2191 for (SmallVectorImpl<Formula>::const_iterator I = LU.Formulae.begin(),
2192 E = LU.Formulae.end(); I != E; ++I) {
2202 return &LU;
2882 LSRUse &LU = Uses[LF.LUIdx];
2883 LU.AllFixupsOutsideLoop &= LF.isUseFullyOutsideLoop(L);
2884 if (!LU.WidestFixupType ||
2885 SE.getTypeSizeInBits(LU.WidestFixupType) <
2887 LU.WidestFixupType = LF.OperandValToReplace->getType();
2890 if (LU.Formulae.empty()) {
2891 InsertInitialFormula(S, LU, LF.LUIdx);
2892 CountRegisters(LU.Formulae.back(), LF.LUIdx);
2903 LSRInstance::InsertInitialFormula(const SCEV *S, LSRUse &LU, size_t LUIdx) {
2906 bool Inserted = InsertFormula(LU, LUIdx, F);
2914 LSRUse &LU, size_t LUIdx) {
2918 bool Inserted = InsertFormula(LU, LUIdx, F);
2934 bool LSRInstance::InsertFormula(LSRUse &LU, unsigned LUIdx, const Formula &F) {
2935 if (!LU.InsertFormula(F))
3015 LSRUse &LU = Uses[LF.LUIdx];
3016 LU.AllFixupsOutsideLoop &= LF.isUseFullyOutsideLoop(L);
3017 if (!LU.WidestFixupType ||
3018 SE.getTypeSizeInBits(LU.WidestFixupType) <
3020 LU.WidestFixupType = LF.OperandValToReplace->getType();
3021 InsertSupplementalFormula(U, LU, LF.LUIdx);
3022 CountRegisters(LU.Formulae.back(), Uses.size() - 1);
3093 void LSRInstance::GenerateReassociations(LSRUse &LU, unsigned LUIdx,
3119 if (isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind,
3120 LU.AccessTy, *J, Base.getNumRegs() > 1))
3132 isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind,
3133 LU.AccessTy, InnerAddOps[0], Base.getNumRegs() > 1))
3163 if (InsertFormula(LU, LUIdx, F))
3166 GenerateReassociations(LU, LUIdx, LU.Formulae.back(), Depth+1);
3173 void LSRInstance::GenerateCombinations(LSRUse &LU, unsigned LUIdx,
3197 (void)InsertFormula(LU, LUIdx, F);
3203 void LSRInstance::GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx,
3215 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, F))
3218 (void)InsertFormula(LU, LUIdx, F);
3223 void LSRInstance::GenerateConstantOffsets(LSRUse &LU, unsigned LUIdx,
3228 Worklist.push_back(LU.MinOffset);
3229 if (LU.MaxOffset != LU.MinOffset)
3230 Worklist.push_back(LU.MaxOffset);
3239 if (isLegalUse(TTI, LU.MinOffset - *I, LU.MaxOffset - *I, LU.Kind,
3240 LU.AccessTy, F)) {
3250 (void)InsertFormula(LU, LUIdx, F);
3259 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, F))
3262 (void)InsertFormula(LU, LUIdx, F);
3268 void LSRInstance::GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx,
3270 if (LU.Kind != LSRUse::ICmpZero) return;
3278 if (LU.MinOffset != LU.MaxOffset) return;
3295 int64_t Offset = LU.MinOffset;
3299 if (Offset / Factor != LU.MinOffset)
3306 if (!isLegalUse(TTI, Offset, Offset, LU.Kind, LU.AccessTy, F))
3310 F.BaseOffset = (uint64_t)F.BaseOffset + Offset - LU.MinOffset;
3338 (void)InsertFormula(LU, LUIdx, F);
3345 void LSRInstance::GenerateScales(LSRUse &LU, unsigned LUIdx, Formula Base) {
3361 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
3365 if (LU.Kind == LSRUse::Basic &&
3366 isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LSRUse::Special,
3367 LU.AccessTy, Base) &&
3368 LU.AllFixupsOutsideLoop)
3369 LU.Kind = LSRUse::Special;
3375 if (LU.Kind == LSRUse::ICmpZero &&
3392 (void)InsertFormula(LU, LUIdx, F);
3399 void LSRInstance::GenerateTruncates(LSRUse &LU, unsigned LUIdx, Formula Base) {
3424 (void)InsertFormula(LU, LUIdx, F);
3545 LSRUse &LU = Uses[LUIdx];
3554 for (size_t L = 0, LE = LU.Formulae.size(); L != LE; ++L) {
3555 const Formula &F = LU.Formulae[L];
3565 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
3581 (void)InsertFormula(LU, LUIdx, NewF);
3590 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset,
3591 LU.Kind, LU.AccessTy, NewF)) {
3614 (void)InsertFormula(LU, LUIdx, NewF);
3629 LSRUse &LU = Uses[LUIdx];
3630 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3631 GenerateReassociations(LU, LUIdx, LU.Formulae[i]);
3632 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3633 GenerateCombinations(LU, LUIdx, LU.Formulae[i]);
3636 LSRUse &LU = Uses[LUIdx];
3637 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3638 GenerateSymbolicOffsets(LU, LUIdx, LU.Formulae[i]);
3639 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3640 GenerateConstantOffsets(LU, LUIdx, LU.Formulae[i]);
3641 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3642 GenerateICmpZeroScales(LU, LUIdx, LU.Formulae[i]);
3643 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3644 GenerateScales(LU, LUIdx, LU.Formulae[i]);
3647 LSRUse &LU = Uses[LUIdx];
3648 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3649 GenerateTruncates(LU, LUIdx, LU.Formulae[i]);
3676 LSRUse &LU = Uses[LUIdx];
3677 DEBUG(dbgs() << "Filtering for use "; LU.print(dbgs()); dbgs() << '\n');
3680 for (size_t FIdx = 0, NumForms = LU.Formulae.size();
3682 Formula &F = LU.Formulae[FIdx];
3693 CostF.RateFormula(F, Regs, VisitedRegs, L, LU.Offsets, SE, DT,
3725 Formula &Best = LU.Formulae[P.first->second];
3729 CostBest.RateFormula(Best, Regs, VisitedRegs, L, LU.Offsets, SE, DT);
3740 LU.DeleteFormula(F);
3748 LU.RecomputeRegs(LUIdx, RegUses);
3797 LSRUse &LU = Uses[LUIdx];
3799 for (size_t i = 0, e = LU.Formulae.size(); i != e; ++i) {
3800 Formula &F = LU.Formulae[i];
3811 if (LU.HasFormulaWithSameRegs(NewF)) {
3813 LU.DeleteFormula(F);
3826 if (LU.HasFormulaWithSameRegs(NewF)) {
3829 LU.DeleteFormula(F);
3840 LU.RecomputeRegs(LUIdx, RegUses);
3862 LSRUse &LU = Uses[LUIdx];
3863 for (SmallVectorImpl<Formula>::const_iterator I = LU.Formulae.begin(),
3864 E = LU.Formulae.end(); I != E; ++I) {
3869 LSRUse *LUThatHas = FindUseWithSimilarFormula(F, LU);
3874 LU.Kind, LU.AccessTy))
3877 DEBUG(dbgs() << " Deleting use "; LU.print(dbgs()); dbgs() << '\n');
3879 LUThatHas->AllFixupsOutsideLoop &= LU.AllFixupsOutsideLoop;
3921 DeleteUse(LU, LUIdx);
3988 LSRUse &LU = Uses[LUIdx];
3989 if (!LU.Regs.count(Best)) continue;
3992 for (size_t i = 0, e = LU.Formulae.size(); i != e; ++i) {
3993 Formula &F = LU.Formulae[i];
3996 LU.DeleteFormula(F);
4006 LU.RecomputeRegs(LUIdx, RegUses);
4042 const LSRUse &LU = Uses[Workspace.size()];
4051 if (LU.Regs.count(*I))
4056 for (SmallVectorImpl<Formula>::const_iterator I = LU.Formulae.begin(),
4057 E = LU.Formulae.end(); I != E; ++I) {
4082 NewCost.RateFormula(F, NewRegs, VisitedRegs, L, LU.Offsets, SE, DT);
4200 const LSRUse &LU,
4208 if (LU.Kind == LSRUse::ICmpZero)
4268 const LSRUse &LU = Uses[LF.LUIdx];
4272 IP = AdjustInsertPositionForExpand(IP, LF, LU, Rewriter);
4320 if (LU.Kind == LSRUse::ICmpZero) {
4332 if (!Ops.empty() && LU.Kind == LSRUse::Address) {
4366 if (LU.Kind == LSRUse::ICmpZero) {
4402 if (LU.Kind == LSRUse::ICmpZero) {
4681 const LSRUse &LU = *I;
4682 for (SmallVectorImpl<Formula>::const_iterator J = LU.Formulae.begin(),
4683 JE = LU.Formulae.end();
4685 assert(isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
4730 const LSRUse &LU = *I;
4732 LU.print(OS);
4734 for (SmallVectorImpl<Formula>::const_iterator J = LU.Formulae.begin(),
4735 JE = LU.Formulae.end(); J != JE; ++J) {