Home | History | Annotate | Download | only in Scalar

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,
2083 LSRInstance::reconcileNewOffset(LSRUse &LU, int64_t NewOffset, bool HasBaseReg,
2085 int64_t NewMinOffset = LU.MinOffset;
2086 int64_t NewMaxOffset = LU.MaxOffset;
2092 if (LU.Kind != Kind)
2095 if (NewOffset < LU.MinOffset) {
2097 LU.MaxOffset - NewOffset, HasBaseReg))
2100 } else if (NewOffset > LU.MaxOffset) {
2102 NewOffset - LU.MinOffset, HasBaseReg))
2109 if (Kind == LSRUse::Address && AccessTy != LU.AccessTy)
2113 LU.MinOffset = NewMinOffset;
2114 LU.MaxOffset = NewMaxOffset;
2115 LU.AccessTy = NewAccessTy;
2116 if (NewOffset != LU.Offsets.back())
2117 LU.Offsets.push_back(NewOffset);
2142 LSRUse &LU = Uses[LUIdx];
2143 if (reconcileNewOffset(LU, Offset, /*HasBaseReg=*/true, Kind, AccessTy))
2152 LSRUse &LU = Uses[LUIdx];
2156 if (LU.Offsets.empty() || Offset != LU.Offsets.back())
2157 LU.Offsets.push_back(Offset);
2159 LU.MinOffset = Offset;
2160 LU.MaxOffset = Offset;
2165 void LSRInstance::DeleteUse(LSRUse &LU, size_t LUIdx) {
2166 if (&LU != &Uses.back())
2167 std::swap(LU, Uses.back());
2181 LSRUse &LU = Uses[LUIdx];
2187 if (&LU != &OrigLU &&
2188 LU.Kind != LSRUse::ICmpZero &&
2189 LU.Kind == OrigLU.Kind && OrigLU.AccessTy == LU.AccessTy &&
2190 LU.WidestFixupType == OrigLU.WidestFixupType &&
2191 LU.HasFormulaWithSameRegs(OrigF)) {
2193 for (SmallVectorImpl<Formula>::const_iterator I = LU.Formulae.begin(),
2194 E = LU.Formulae.end(); I != E; ++I) {
2204 return &LU;
2883 LSRUse &LU = Uses[LF.LUIdx];
2884 LU.AllFixupsOutsideLoop &= LF.isUseFullyOutsideLoop(L);
2885 if (!LU.WidestFixupType ||
2886 SE.getTypeSizeInBits(LU.WidestFixupType) <
2888 LU.WidestFixupType = LF.OperandValToReplace->getType();
2891 if (LU.Formulae.empty()) {
2892 InsertInitialFormula(S, LU, LF.LUIdx);
2893 CountRegisters(LU.Formulae.back(), LF.LUIdx);
2904 LSRInstance::InsertInitialFormula(const SCEV *S, LSRUse &LU, size_t LUIdx) {
2907 bool Inserted = InsertFormula(LU, LUIdx, F);
2915 LSRUse &LU, size_t LUIdx) {
2919 bool Inserted = InsertFormula(LU, LUIdx, F);
2935 bool LSRInstance::InsertFormula(LSRUse &LU, unsigned LUIdx, const Formula &F) {
2936 if (!LU.InsertFormula(F))
3016 LSRUse &LU = Uses[LF.LUIdx];
3017 LU.AllFixupsOutsideLoop &= LF.isUseFullyOutsideLoop(L);
3018 if (!LU.WidestFixupType ||
3019 SE.getTypeSizeInBits(LU.WidestFixupType) <
3021 LU.WidestFixupType = LF.OperandValToReplace->getType();
3022 InsertSupplementalFormula(U, LU, LF.LUIdx);
3023 CountRegisters(LU.Formulae.back(), Uses.size() - 1);
3094 void LSRInstance::GenerateReassociations(LSRUse &LU, unsigned LUIdx,
3120 if (isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind,
3121 LU.AccessTy, *J, Base.getNumRegs() > 1))
3133 isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind,
3134 LU.AccessTy, InnerAddOps[0], Base.getNumRegs() > 1))
3164 if (InsertFormula(LU, LUIdx, F))
3167 GenerateReassociations(LU, LUIdx, LU.Formulae.back(), Depth+1);
3174 void LSRInstance::GenerateCombinations(LSRUse &LU, unsigned LUIdx,
3198 (void)InsertFormula(LU, LUIdx, F);
3204 void LSRInstance::GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx,
3216 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, F))
3219 (void)InsertFormula(LU, LUIdx, F);
3224 void LSRInstance::GenerateConstantOffsets(LSRUse &LU, unsigned LUIdx,
3229 Worklist.push_back(LU.MinOffset);
3230 if (LU.MaxOffset != LU.MinOffset)
3231 Worklist.push_back(LU.MaxOffset);
3240 if (isLegalUse(TTI, LU.MinOffset - *I, LU.MaxOffset - *I, LU.Kind,
3241 LU.AccessTy, F)) {
3251 (void)InsertFormula(LU, LUIdx, F);
3260 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, F))
3263 (void)InsertFormula(LU, LUIdx, F);
3269 void LSRInstance::GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx,
3271 if (LU.Kind != LSRUse::ICmpZero) return;
3279 if (LU.MinOffset != LU.MaxOffset) return;
3296 int64_t Offset = LU.MinOffset;
3300 if (Offset / Factor != LU.MinOffset)
3307 if (!isLegalUse(TTI, Offset, Offset, LU.Kind, LU.AccessTy, F))
3311 F.BaseOffset = (uint64_t)F.BaseOffset + Offset - LU.MinOffset;
3339 (void)InsertFormula(LU, LUIdx, F);
3346 void LSRInstance::GenerateScales(LSRUse &LU, unsigned LUIdx, Formula Base) {
3362 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
3366 if (LU.Kind == LSRUse::Basic &&
3367 isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LSRUse::Special,
3368 LU.AccessTy, Base) &&
3369 LU.AllFixupsOutsideLoop)
3370 LU.Kind = LSRUse::Special;
3376 if (LU.Kind == LSRUse::ICmpZero &&
3393 (void)InsertFormula(LU, LUIdx, F);
3400 void LSRInstance::GenerateTruncates(LSRUse &LU, unsigned LUIdx, Formula Base) {
3425 (void)InsertFormula(LU, LUIdx, F);
3546 LSRUse &LU = Uses[LUIdx];
3555 for (size_t L = 0, LE = LU.Formulae.size(); L != LE; ++L) {
3556 const Formula &F = LU.Formulae[L];
3566 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
3582 (void)InsertFormula(LU, LUIdx, NewF);
3591 if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset,
3592 LU.Kind, LU.AccessTy, NewF)) {
3615 (void)InsertFormula(LU, LUIdx, NewF);
3630 LSRUse &LU = Uses[LUIdx];
3631 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3632 GenerateReassociations(LU, LUIdx, LU.Formulae[i]);
3633 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3634 GenerateCombinations(LU, LUIdx, LU.Formulae[i]);
3637 LSRUse &LU = Uses[LUIdx];
3638 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3639 GenerateSymbolicOffsets(LU, LUIdx, LU.Formulae[i]);
3640 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3641 GenerateConstantOffsets(LU, LUIdx, LU.Formulae[i]);
3642 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3643 GenerateICmpZeroScales(LU, LUIdx, LU.Formulae[i]);
3644 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3645 GenerateScales(LU, LUIdx, LU.Formulae[i]);
3648 LSRUse &LU = Uses[LUIdx];
3649 for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3650 GenerateTruncates(LU, LUIdx, LU.Formulae[i]);
3677 LSRUse &LU = Uses[LUIdx];
3678 DEBUG(dbgs() << "Filtering for use "; LU.print(dbgs()); dbgs() << '\n');
3681 for (size_t FIdx = 0, NumForms = LU.Formulae.size();
3683 Formula &F = LU.Formulae[FIdx];
3694 CostF.RateFormula(F, Regs, VisitedRegs, L, LU.Offsets, SE, DT,
3726 Formula &Best = LU.Formulae[P.first->second];
3730 CostBest.RateFormula(Best, Regs, VisitedRegs, L, LU.Offsets, SE, DT);
3741 LU.DeleteFormula(F);
3749 LU.RecomputeRegs(LUIdx, RegUses);
3798 LSRUse &LU = Uses[LUIdx];
3800 for (size_t i = 0, e = LU.Formulae.size(); i != e; ++i) {
3801 Formula &F = LU.Formulae[i];
3812 if (LU.HasFormulaWithSameRegs(NewF)) {
3814 LU.DeleteFormula(F);
3827 if (LU.HasFormulaWithSameRegs(NewF)) {
3830 LU.DeleteFormula(F);
3841 LU.RecomputeRegs(LUIdx, RegUses);
3863 LSRUse &LU = Uses[LUIdx];
3864 for (SmallVectorImpl<Formula>::const_iterator I = LU.Formulae.begin(),
3865 E = LU.Formulae.end(); I != E; ++I) {
3870 LSRUse *LUThatHas = FindUseWithSimilarFormula(F, LU);
3875 LU.Kind, LU.AccessTy))
3878 DEBUG(dbgs() << " Deleting use "; LU.print(dbgs()); dbgs() << '\n');
3880 LUThatHas->AllFixupsOutsideLoop &= LU.AllFixupsOutsideLoop;
3922 DeleteUse(LU, LUIdx);
3989 LSRUse &LU = Uses[LUIdx];
3990 if (!LU.Regs.count(Best)) continue;
3993 for (size_t i = 0, e = LU.Formulae.size(); i != e; ++i) {
3994 Formula &F = LU.Formulae[i];
3997 LU.DeleteFormula(F);
4007 LU.RecomputeRegs(LUIdx, RegUses);
4043 const LSRUse &LU = Uses[Workspace.size()];
4052 if (LU.Regs.count(*I))
4057 for (SmallVectorImpl<Formula>::const_iterator I = LU.Formulae.begin(),
4058 E = LU.Formulae.end(); I != E; ++I) {
4083 NewCost.RateFormula(F, NewRegs, VisitedRegs, L, LU.Offsets, SE, DT);
4201 const LSRUse &LU,
4209 if (LU.Kind == LSRUse::ICmpZero)
4269 const LSRUse &LU = Uses[LF.LUIdx];
4273 IP = AdjustInsertPositionForExpand(IP, LF, LU, Rewriter);
4321 if (LU.Kind == LSRUse::ICmpZero) {
4333 if (!Ops.empty() && LU.Kind == LSRUse::Address) {
4367 if (LU.Kind == LSRUse::ICmpZero) {
4403 if (LU.Kind == LSRUse::ICmpZero) {
4682 const LSRUse &LU = *I;
4683 for (SmallVectorImpl<Formula>::const_iterator J = LU.Formulae.begin(),
4684 JE = LU.Formulae.end();
4686 assert(isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
4731 const LSRUse &LU = *I;
4733 LU.print(OS);
4735 for (SmallVectorImpl<Formula>::const_iterator J = LU.Formulae.begin(),
4736 JE = LU.Formulae.end(); J != JE; ++J) {