Lines Matching refs:SE

381   void initialMatch(const SCEV *S, Loop *L, ScalarEvolution &SE);
410 ScalarEvolution &SE) { in DoInitialMatch() argument
412 if (SE.properlyDominates(S, L->getHeader())) { in DoInitialMatch()
420 DoInitialMatch(S, L, Good, Bad, SE); in DoInitialMatch()
427 DoInitialMatch(AR->getStart(), L, Good, Bad, SE); in DoInitialMatch()
428 DoInitialMatch(SE.getAddRecExpr(SE.getConstant(AR->getType(), 0), in DoInitialMatch()
429 AR->getStepRecurrence(SE), in DoInitialMatch()
432 L, Good, Bad, SE); in DoInitialMatch()
440 const SCEV *NewMul = SE.getMulExpr(Ops); in DoInitialMatch()
444 DoInitialMatch(NewMul, L, MyGood, MyBad, SE); in DoInitialMatch()
445 const SCEV *NegOne = SE.getSCEV(ConstantInt::getAllOnesValue( in DoInitialMatch()
446 SE.getEffectiveSCEVType(NewMul->getType()))); in DoInitialMatch()
448 Good.push_back(SE.getMulExpr(NegOne, S)); in DoInitialMatch()
450 Bad.push_back(SE.getMulExpr(NegOne, S)); in DoInitialMatch()
461 void Formula::initialMatch(const SCEV *S, Loop *L, ScalarEvolution &SE) { in initialMatch() argument
464 DoInitialMatch(S, L, Good, Bad, SE); in initialMatch()
466 const SCEV *Sum = SE.getAddExpr(Good); in initialMatch()
472 const SCEV *Sum = SE.getAddExpr(Bad); in initialMatch()
654 static bool isAddRecSExtable(const SCEVAddRecExpr *AR, ScalarEvolution &SE) { in isAddRecSExtable() argument
656 IntegerType::get(SE.getContext(), SE.getTypeSizeInBits(AR->getType()) + 1); in isAddRecSExtable()
657 return isa<SCEVAddRecExpr>(SE.getSignExtendExpr(AR, WideTy)); in isAddRecSExtable()
662 static bool isAddSExtable(const SCEVAddExpr *A, ScalarEvolution &SE) { in isAddSExtable() argument
664 IntegerType::get(SE.getContext(), SE.getTypeSizeInBits(A->getType()) + 1); in isAddSExtable()
665 return isa<SCEVAddExpr>(SE.getSignExtendExpr(A, WideTy)); in isAddSExtable()
670 static bool isMulSExtable(const SCEVMulExpr *M, ScalarEvolution &SE) { in isMulSExtable() argument
672 IntegerType::get(SE.getContext(), in isMulSExtable()
673 SE.getTypeSizeInBits(M->getType()) * M->getNumOperands()); in isMulSExtable()
674 return isa<SCEVMulExpr>(SE.getSignExtendExpr(M, WideTy)); in isMulSExtable()
683 ScalarEvolution &SE, in getExactSDiv() argument
687 return SE.getConstant(LHS->getType(), 1); in getExactSDiv()
698 return SE.getMulExpr(LHS, RC); in getExactSDiv()
713 return SE.getConstant(LA.sdiv(RA)); in getExactSDiv()
718 if ((IgnoreSignificantBits || isAddRecSExtable(AR, SE)) && AR->isAffine()) { in getExactSDiv()
719 const SCEV *Step = getExactSDiv(AR->getStepRecurrence(SE), RHS, SE, in getExactSDiv()
722 const SCEV *Start = getExactSDiv(AR->getStart(), RHS, SE, in getExactSDiv()
728 return SE.getAddRecExpr(Start, Step, AR->getLoop(), SCEV::FlagAnyWrap); in getExactSDiv()
735 if (IgnoreSignificantBits || isAddSExtable(Add, SE)) { in getExactSDiv()
738 const SCEV *Op = getExactSDiv(S, RHS, SE, IgnoreSignificantBits); in getExactSDiv()
742 return SE.getAddExpr(Ops); in getExactSDiv()
749 if (IgnoreSignificantBits || isMulSExtable(Mul, SE)) { in getExactSDiv()
752 if (IgnoreSignificantBits || isMulSExtable(MulRHS, SE)) { in getExactSDiv()
760 return getExactSDiv(LC, RC, SE, IgnoreSignificantBits); in getExactSDiv()
769 if (const SCEV *Q = getExactSDiv(S, RHS, SE, in getExactSDiv()
776 return Found ? SE.getMulExpr(Ops) : nullptr; in getExactSDiv()
787 static int64_t ExtractImmediate(const SCEV *&S, ScalarEvolution &SE) { in ExtractImmediate() argument
790 S = SE.getConstant(C->getType(), 0); in ExtractImmediate()
795 int64_t Result = ExtractImmediate(NewOps.front(), SE); in ExtractImmediate()
797 S = SE.getAddExpr(NewOps); in ExtractImmediate()
801 int64_t Result = ExtractImmediate(NewOps.front(), SE); in ExtractImmediate()
803 S = SE.getAddRecExpr(NewOps, AR->getLoop(), in ExtractImmediate()
813 static GlobalValue *ExtractSymbol(const SCEV *&S, ScalarEvolution &SE) { in ExtractSymbol() argument
816 S = SE.getConstant(GV->getType(), 0); in ExtractSymbol()
821 GlobalValue *Result = ExtractSymbol(NewOps.back(), SE); in ExtractSymbol()
823 S = SE.getAddExpr(NewOps); in ExtractSymbol()
827 GlobalValue *Result = ExtractSymbol(NewOps.front(), SE); in ExtractSymbol()
829 S = SE.getAddRecExpr(NewOps, AR->getLoop(), in ExtractSymbol()
939 static bool isExistingPhi(const SCEVAddRecExpr *AR, ScalarEvolution &SE) { in isExistingPhi() argument
941 if (SE.isSCEVable(PN.getType()) && in isExistingPhi()
942 (SE.getEffectiveSCEVType(PN.getType()) == in isExistingPhi()
943 SE.getEffectiveSCEVType(AR->getType())) && in isExistingPhi()
944 SE.getSCEV(&PN) == AR) in isExistingPhi()
961 ScalarEvolution &SE) { in isHighCostExpansion() argument
969 Processed, SE); in isHighCostExpansion()
972 Processed, SE); in isHighCostExpansion()
975 Processed, SE); in isHighCostExpansion()
985 if (isHighCostExpansion(S, Processed, SE)) in isHighCostExpansion()
995 return isHighCostExpansion(Mul->getOperand(1), Processed, SE); in isHighCostExpansion()
1005 SE.isSCEVable(UI->getType())) { in isHighCostExpansion()
1006 return SE.getSCEV(UI) == Mul; in isHighCostExpansion()
1014 if (isExistingPhi(AR, SE)) in isHighCostExpansion()
1050 ScalarEvolution *SE = nullptr; member in __anon3f0d62640811::Cost
1057 Cost(const Loop *L, ScalarEvolution &SE, const TargetTransformInfo &TTI, in Cost() argument
1059 L(L), SE(&SE), TTI(&TTI), AMK(AMK) { in Cost()
1277 if (isExistingPhi(AR, *SE) && AMK != TTI::AMK_PostIndexed) in RateRegister()
1299 if (auto *Step = dyn_cast<SCEVConstant>(AR->getStepRecurrence(*SE))) in RateRegister()
1303 const SCEV *LoopStep = AR->getStepRecurrence(*SE); in RateRegister()
1307 SE->isLoopInvariant(LoopStart, L)) in RateRegister()
1333 SE->hasComputableLoopEvolution(Reg, L); in RateRegister()
1851 ScalarEvolution &SE, int64_t MinOffset, in isAlwaysFoldable() argument
1860 int64_t BaseOffset = ExtractImmediate(S, SE); in isAlwaysFoldable()
1861 GlobalValue *BaseGV = ExtractSymbol(S, SE); in isAlwaysFoldable()
1944 ScalarEvolution &SE; member in __anon3f0d62640a11::LSRInstance
2089 LSRInstance(Loop *L, IVUsers &IU, ScalarEvolution &SE, DominatorTree &DT,
2110 const SCEV *BackedgeTakenCount = SE.getBackedgeTakenCount(L); in OptimizeShadowIV()
2155 const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(SE.getSCEV(PH)); in OptimizeShadowIV()
2163 if ((int)SE.getTypeSizeInBits(SrcTy) > Mantissa) in OptimizeShadowIV()
2295 const SCEV *BackedgeTakenCount = SE.getBackedgeTakenCount(L); in OptimizeMax()
2298 const SCEV *One = SE.getConstant(BackedgeTakenCount->getType(), 1); in OptimizeMax()
2301 const SCEV *IterationCount = SE.getAddExpr(One, BackedgeTakenCount); in OptimizeMax()
2302 if (IterationCount != SE.getSCEV(Sel)) return Cond; in OptimizeMax()
2339 const SCEV *IV = SE.getSCEV(Cond->getOperand(0)); in OptimizeMax()
2343 AR->getStepRecurrence(SE) != One) in OptimizeMax()
2356 if (BO1->isOne() && SE.getSCEV(BO->getOperand(0)) == MaxRHS) in OptimizeMax()
2360 if (BO1->isOne() && SE.getSCEV(BO->getOperand(0)) == MaxRHS) in OptimizeMax()
2364 } else if (SE.getSCEV(Sel->getOperand(1)) == MaxRHS) in OptimizeMax()
2366 else if (SE.getSCEV(Sel->getOperand(2)) == MaxRHS) in OptimizeMax()
2471 if (SE.getTypeSizeInBits(A->getType()) != in OptimizeLoopTermCond()
2472 SE.getTypeSizeInBits(B->getType())) { in OptimizeLoopTermCond()
2473 if (SE.getTypeSizeInBits(A->getType()) > in OptimizeLoopTermCond()
2474 SE.getTypeSizeInBits(B->getType())) in OptimizeLoopTermCond()
2475 B = SE.getSignExtendExpr(B, A->getType()); in OptimizeLoopTermCond()
2477 A = SE.getSignExtendExpr(A, B->getType()); in OptimizeLoopTermCond()
2480 dyn_cast_or_null<SCEVConstant>(getExactSDiv(B, A, SE))) { in OptimizeLoopTermCond()
2608 int64_t Offset = ExtractImmediate(Expr, SE); in getUse()
2700 Types.insert(SE.getEffectiveSCEVType(Expr->getType())); in CollectInterestingTypesAndFactors()
2708 Strides.insert(AR->getStepRecurrence(SE)); in CollectInterestingTypesAndFactors()
2724 if (SE.getTypeSizeInBits(OldStride->getType()) != in CollectInterestingTypesAndFactors()
2725 SE.getTypeSizeInBits(NewStride->getType())) { in CollectInterestingTypesAndFactors()
2726 if (SE.getTypeSizeInBits(OldStride->getType()) > in CollectInterestingTypesAndFactors()
2727 SE.getTypeSizeInBits(NewStride->getType())) in CollectInterestingTypesAndFactors()
2728 NewStride = SE.getSignExtendExpr(NewStride, OldStride->getType()); in CollectInterestingTypesAndFactors()
2730 OldStride = SE.getSignExtendExpr(OldStride, NewStride->getType()); in CollectInterestingTypesAndFactors()
2734 SE, true))) { in CollectInterestingTypesAndFactors()
2740 SE, true))) { in CollectInterestingTypesAndFactors()
2759 Loop *L, ScalarEvolution &SE) { in findIVOperand() argument
2762 if (!SE.isSCEVable(Oper->getType())) in findIVOperand()
2766 dyn_cast<SCEVAddRecExpr>(SE.getSCEV(Oper))) { in findIVOperand()
2844 ScalarEvolution &SE) { in isProfitableIncrement() argument
2852 const SCEV *HeadExpr = SE.getSCEV(getWideOperand(Incs[0].IVOperand)); in isProfitableIncrement()
2853 if (isa<SCEVConstant>(SE.getMinusSCEV(OperExpr, HeadExpr))) in isProfitableIncrement()
2858 return !isHighCostExpansion(IncExpr, Processed, SE); in isProfitableIncrement()
2873 ScalarEvolution &SE, in isProfitableChain() argument
2896 && SE.getSCEV(Chain.tailUserInst()) == Chain.Incs[0].IncExpr) { in isProfitableChain()
2955 const SCEV *const OperExpr = SE.getSCEV(NextIV); in ChainInstruction()
2981 const SCEV *PrevExpr = SE.getSCEV(PrevIV); in ChainInstruction()
2982 const SCEV *IncExpr = SE.getMinusSCEV(OperExpr, PrevExpr); in ChainInstruction()
2983 if (isa<SCEVCouldNotCompute>(IncExpr) || !SE.isLoopInvariant(IncExpr, L)) in ChainInstruction()
2986 if (Chain.isProfitableIncrement(OperExpr, IncExpr, SE)) { in ChainInstruction()
3048 if (SE.isSCEVable(OtherUse->getType()) in ChainInstruction()
3049 && !isa<SCEVUnknown>(SE.getSCEV(OtherUse)) in ChainInstruction()
3105 if (SE.isSCEVable(I.getType()) && !isa<SCEVUnknown>(SE.getSCEV(&I))) in CollectChains()
3116 User::op_iterator IVOpIter = findIVOperand(I.op_begin(), IVOpEnd, L, SE); in CollectChains()
3121 IVOpIter = findIVOperand(std::next(IVOpIter), IVOpEnd, L, SE); in CollectChains()
3127 if (!SE.isSCEVable(PN.getType())) in CollectChains()
3140 ChainUsersVec[UsersIdx].FarUsers, SE, TTI)) in CollectChains()
3192 IVOpEnd, L, SE); in GenerateIVChain()
3205 if (SE.getSCEV(*IVOpIter) == Head.IncExpr in GenerateIVChain()
3206 || SE.getSCEV(IVSrc) == Head.IncExpr) { in GenerateIVChain()
3209 IVOpIter = findIVOperand(std::next(IVOpIter), IVOpEnd, L, SE); in GenerateIVChain()
3220 Type *IntTy = SE.getEffectiveSCEVType(IVTy); in GenerateIVChain()
3233 const SCEV *IncExpr = SE.getNoopOrSignExtend(Inc.IncExpr, IntTy); in GenerateIVChain()
3235 SE.getAddExpr(LeftOverExpr, IncExpr) : IncExpr; in GenerateIVChain()
3241 const SCEV *IVOperExpr = SE.getAddExpr(SE.getUnknown(IVSrc), in GenerateIVChain()
3242 SE.getUnknown(IncV)); in GenerateIVChain()
3254 assert(SE.getTypeSizeInBits(IVTy) >= SE.getTypeSizeInBits(OperTy) && in GenerateIVChain()
3271 if (!PostIncV || (SE.getSCEV(PostIncV) != SE.getSCEV(IVSrc))) in GenerateIVChain()
3289 bool SaveCmp = TTI.canSaveCmp(L, &ExitBranch, &SE, &LI, &DT, &AC, &TLI); in CollectFixupsAndInitialFormulae()
3335 const SCEV *N = SE.getSCEV(NV); in CollectFixupsAndInitialFormulae()
3336 if (SE.isLoopInvariant(N, L) && Rewriter.isSafeToExpand(N) && in CollectFixupsAndInitialFormulae()
3338 SE.getPointerBase(N) == SE.getPointerBase(S))) { in CollectFixupsAndInitialFormulae()
3341 N = normalizeForPostIncUse(N, TmpPostIncLoops, SE); in CollectFixupsAndInitialFormulae()
3343 S = SE.getMinusSCEV(N, S); in CollectFixupsAndInitialFormulae()
3354 N = SE.getUnknown(NV); in CollectFixupsAndInitialFormulae()
3355 N = normalizeForPostIncUse(N, TmpPostIncLoops, SE); in CollectFixupsAndInitialFormulae()
3357 S = SE.getMinusSCEV(N, S); in CollectFixupsAndInitialFormulae()
3385 SE.getTypeSizeInBits(LU.WidestFixupType) < in CollectFixupsAndInitialFormulae()
3386 SE.getTypeSizeInBits(LF.OperandValToReplace->getType())) in CollectFixupsAndInitialFormulae()
3408 F.initialMatch(S, L, SE); in InsertInitialFormula()
3531 if (SE.isSCEVable(UserInst->getType())) { in CollectLoopInvariantFixupsAndFormulae()
3532 const SCEV *UserS = SE.getSCEV(const_cast<Instruction *>(UserInst)); in CollectLoopInvariantFixupsAndFormulae()
3538 SE.getUnknown(const_cast<Instruction *>(UserInst))); in CollectLoopInvariantFixupsAndFormulae()
3546 if (SE.hasComputableLoopEvolution(SE.getSCEV(OtherOp), L)) in CollectLoopInvariantFixupsAndFormulae()
3561 SE.getTypeSizeInBits(LU.WidestFixupType) < in CollectLoopInvariantFixupsAndFormulae()
3562 SE.getTypeSizeInBits(LF.OperandValToReplace->getType())) in CollectLoopInvariantFixupsAndFormulae()
3580 ScalarEvolution &SE, in CollectSubexprs() argument
3589 const SCEV *Remainder = CollectSubexprs(S, C, Ops, L, SE, Depth+1); in CollectSubexprs()
3591 Ops.push_back(C ? SE.getMulExpr(C, Remainder) : Remainder); in CollectSubexprs()
3600 C, Ops, L, SE, Depth+1); in CollectSubexprs()
3604 Ops.push_back(C ? SE.getMulExpr(C, Remainder) : Remainder); in CollectSubexprs()
3609 Remainder = SE.getConstant(AR->getType(), 0); in CollectSubexprs()
3610 return SE.getAddRecExpr(Remainder, in CollectSubexprs()
3611 AR->getStepRecurrence(SE), in CollectSubexprs()
3622 C = C ? cast<SCEVConstant>(SE.getMulExpr(C, Op0)) : Op0; in CollectSubexprs()
3624 CollectSubexprs(Mul->getOperand(1), C, Ops, L, SE, Depth+1); in CollectSubexprs()
3626 Ops.push_back(SE.getMulExpr(C, Remainder)); in CollectSubexprs()
3637 ScalarEvolution &SE) { in mayUsePostIncMode() argument
3644 const SCEV *LoopStep = AR->getStepRecurrence(SE); in mayUsePostIncMode()
3651 if (!isa<SCEVConstant>(LoopStart) && SE.isLoopInvariant(LoopStart, L)) in mayUsePostIncMode()
3667 if (AMK == TTI::AMK_PostIndexed && mayUsePostIncMode(TTI, LU, BaseReg, L, SE)) in GenerateReassociationsImpl()
3670 const SCEV *Remainder = CollectSubexprs(BaseReg, nullptr, AddOps, L, SE); in GenerateReassociationsImpl()
3682 if (isa<SCEVUnknown>(*J) && !SE.isLoopInvariant(*J, L)) in GenerateReassociationsImpl()
3687 if (isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind, in GenerateReassociationsImpl()
3700 isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind, in GenerateReassociationsImpl()
3704 const SCEV *InnerSum = SE.getAddExpr(InnerAddOps); in GenerateReassociationsImpl()
3711 if (InnerSumSC && SE.getTypeSizeInBits(InnerSumSC->getType()) <= 64 && in GenerateReassociationsImpl()
3727 if (SC && SE.getTypeSizeInBits(SC->getType()) <= 64 && in GenerateReassociationsImpl()
3783 if (SE.properlyDominates(BaseReg, L->getHeader()) && in GenerateCombinations()
3784 !SE.hasComputableLoopEvolution(BaseReg, L)) { in GenerateCombinations()
3786 CombinedIntegerType = SE.getEffectiveSCEVType(BaseReg->getType()); in GenerateCombinations()
3816 GenerateFormula(SE.getAddExpr(OpsCopy)); in GenerateCombinations()
3823 Ops.push_back(SE.getConstant(CombinedIntegerType, NewBase.UnfoldedOffset, in GenerateCombinations()
3826 GenerateFormula(SE.getAddExpr(Ops)); in GenerateCombinations()
3835 GlobalValue *GV = ExtractSymbol(G, SE); in GenerateSymbolicOffsetsImpl()
3873 const SCEV *NewG = SE.getAddExpr(SE.getConstant(G->getType(), Offset), G); in GenerateConstantOffsetsImpl()
3904 dyn_cast<SCEVConstant>(GAR->getStepRecurrence(SE))) { in GenerateConstantOffsetsImpl()
3919 int64_t Imm = ExtractImmediate(G, SE); in GenerateConstantOffsetsImpl()
3963 if (SE.getTypeSizeInBits(IntTy) > 64) return; in GenerateICmpZeroScales()
4015 const SCEV *FactorS = SE.getConstant(IntTy, Factor); in GenerateICmpZeroScales()
4019 F.BaseRegs[i] = SE.getMulExpr(F.BaseRegs[i], FactorS); in GenerateICmpZeroScales()
4020 if (getExactSDiv(F.BaseRegs[i], FactorS, SE) != Base.BaseRegs[i]) in GenerateICmpZeroScales()
4026 F.ScaledReg = SE.getMulExpr(F.ScaledReg, FactorS); in GenerateICmpZeroScales()
4027 if (getExactSDiv(F.ScaledReg, FactorS, SE) != Base.ScaledReg) in GenerateICmpZeroScales()
4091 const SCEV *FactorS = SE.getConstant(IntTy, Factor); in GenerateScales()
4096 if (const SCEV *Quotient = getExactSDiv(AR, FactorS, SE, true)) in GenerateScales()
4147 const SCEV *NewScaledReg = SE.getAnyExtendExpr(F.ScaledReg, SrcTy); in GenerateTruncates()
4154 const SCEV *NewBaseReg = SE.getAnyExtendExpr(BaseReg, SrcTy); in GenerateTruncates()
4216 int64_t Imm = ExtractImmediate(Reg, SE); in GenerateCrossUseConstantOffsets()
4296 Type *IntTy = SE.getEffectiveSCEVType(OrigReg->getType()); in GenerateCrossUseConstantOffsets()
4297 const SCEV *NegImmS = SE.getSCEV(ConstantInt::get(IntTy, -(uint64_t)Imm)); in GenerateCrossUseConstantOffsets()
4298 unsigned BitWidth = SE.getTypeSizeInBits(IntTy); in GenerateCrossUseConstantOffsets()
4312 if (F.referencesReg(SE.getSCEV( in GenerateCrossUseConstantOffsets()
4320 NewF.ScaledReg = SE.getAddExpr(NegImmS, NewF.ScaledReg); in GenerateCrossUseConstantOffsets()
4345 mayUsePostIncMode(TTI, LU, OrigReg, this->L, SE)) in GenerateCrossUseConstantOffsets()
4352 NewF.BaseRegs[N] = SE.getAddExpr(NegImmS, BaseReg); in GenerateCrossUseConstantOffsets()
4447 Cost CostF(L, SE, TTI, AMK); in FilterOutUndesirableDedicatedRegisters()
4480 Cost CostBest(L, SE, TTI, AMK); in FilterOutUndesirableDedicatedRegisters()
4733 Cost CostFA(L, SE, TTI, AMK); in NarrowSearchSpaceByFilterFormulaWithSameScaledReg()
4734 Cost CostFB(L, SE, TTI, AMK); in NarrowSearchSpaceByFilterFormulaWithSameScaledReg()
5075 Cost NewCost(L, SE, TTI, AMK); in SolveRecurse()
5131 Cost SolutionCost(L, SE, TTI, AMK); in Solve()
5133 Cost CurCost(L, SE, TTI, AMK); in Solve()
5306 else if (SE.getEffectiveSCEVType(Ty) == SE.getEffectiveSCEVType(OpTy)) in Expand()
5310 Type *IntTy = SE.getEffectiveSCEVType(Ty); in Expand()
5320 Reg = denormalizeForPostIncUse(Reg, LF.PostIncLoops, SE); in Expand()
5321 Ops.push_back(SE.getUnknown(Rewriter.expandCodeFor(Reg, nullptr))); in Expand()
5331 ScaledS = denormalizeForPostIncUse(ScaledS, Loops, SE); in Expand()
5337 SE.getUnknown(Rewriter.expandCodeFor(ScaledS, nullptr))); in Expand()
5354 Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), nullptr); in Expand()
5356 Ops.push_back(SE.getUnknown(FullV)); in Expand()
5358 ScaledS = SE.getUnknown(Rewriter.expandCodeFor(ScaledS, nullptr)); in Expand()
5361 SE.getMulExpr(ScaledS, SE.getConstant(ScaledS->getType(), F.Scale)); in Expand()
5370 Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), IntTy); in Expand()
5372 Ops.push_back(SE.getUnknown(FullV)); in Expand()
5374 Ops.push_back(SE.getUnknown(F.BaseGV)); in Expand()
5380 Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), Ty); in Expand()
5382 Ops.push_back(SE.getUnknown(FullV)); in Expand()
5394 Ops.push_back(SE.getUnknown(ICmpScaledV)); in Expand()
5400 Ops.push_back(SE.getUnknown(ConstantInt::getSigned(IntTy, Offset))); in Expand()
5408 Ops.push_back(SE.getUnknown(ConstantInt::getSigned(IntTy, in Expand()
5414 SE.getConstant(IntTy, 0) : in Expand()
5415 SE.getAddExpr(Ops); in Expand()
5445 Constant *C = ConstantInt::getSigned(SE.getEffectiveSCEVType(OpTy), in Expand()
5696 LSRInstance::LSRInstance(Loop *L, IVUsers &IU, ScalarEvolution &SE, in LSRInstance() argument
5700 : IU(IU), SE(SE), DT(DT), LI(LI), AC(AC), TLI(TLI), TTI(TTI), L(L), in LSRInstance()
5703 : TTI.getPreferredAddressingMode(L, &SE)), in LSRInstance()
5704 Rewriter(SE, L->getHeader()->getModule()->getDataLayout(), "lsr", false) { in LSRInstance()
6072 bool SCEVToValueExpr(const llvm::SCEVAddRecExpr &SAR, ScalarEvolution &SE) { in SCEVToValueExpr()
6079 const SCEV *Stride = SAR.getStepRecurrence(SE); in SCEVToValueExpr()
6109 ScalarEvolution &SE) { in createIterCountExpr()
6131 if (!SCEVToValueExpr(*Rec, SE)) in createIterCountExpr()
6143 ScalarEvolution &SE) { in SCEVToIterCountExpr()
6151 const SCEV *Stride = SAR.getStepRecurrence(SE); in SCEVToIterCountExpr()
6346 static bool SalvageDVI(llvm::Loop *L, ScalarEvolution &SE, in SalvageDVI() argument
6381 if (SE.containsErasedValue(DVIRec.SCEVs[i]) || in SalvageDVI()
6382 SE.containsUndefs(DVIRec.SCEVs[i])) { in SalvageDVI()
6398 SE.computeConstantDifference(DVIRec.SCEVs[i], SCEVInductionVar)) { in SalvageDVI()
6403 SE)) in SalvageDVI()
6451 DbgRewriteSalvageableDVIs(llvm::Loop *L, ScalarEvolution &SE, in DbgRewriteSalvageableDVIs() argument
6457 const llvm::SCEV *SCEVInductionVar = SE.getSCEV(LSRInductionVar); in DbgRewriteSalvageableDVIs()
6473 if (!IterCountExpr.SCEVToIterCountExpr(*IVAddRec, SE)) in DbgRewriteSalvageableDVIs()
6480 SalvageDVI(L, SE, LSRInductionVar, *DVIRec, SCEVInductionVar, in DbgRewriteSalvageableDVIs()
6490 Loop *L, ScalarEvolution &SE, in DbgGatherSalvagableDVI() argument
6511 if (!SE.isSCEVable(LocOp->getType())) in DbgGatherSalvagableDVI()
6514 const SCEV *S = SE.getSCEV(LocOp); in DbgGatherSalvagableDVI()
6515 if (SE.containsUndefs(S)) in DbgGatherSalvagableDVI()
6531 NewRec->SCEVs.push_back(SE.getSCEV(LocOp)); in DbgGatherSalvagableDVI()
6544 static llvm::PHINode *GetInductionVariable(const Loop &L, ScalarEvolution &SE, in GetInductionVariable() argument
6548 if (!SE.isSCEVable(P->getType())) in GetInductionVariable()
6550 if (const SCEVAddRecExpr *Rec = dyn_cast<SCEVAddRecExpr>(SE.getSCEV(P))) in GetInductionVariable()
6551 return Rec->isAffine() && !SE.containsUndefs(SE.getSCEV(P)); in GetInductionVariable()
6576 static bool ReduceLoopStrength(Loop *L, IVUsers &IU, ScalarEvolution &SE, in ReduceLoopStrength() argument
6586 DbgGatherSalvagableDVI(L, SE, SalvageableDVIRecords, DVIHandles); in ReduceLoopStrength()
6595 LSRInstance(L, IU, SE, DT, LI, TTI, AC, TLI, MSSAU.get()); in ReduceLoopStrength()
6603 SCEVExpander Rewriter(SE, DL, "lsr", false); in ReduceLoopStrength()
6623 SCEVExpander Rewriter(SE, DL, "lsr", false); in ReduceLoopStrength()
6624 int Rewrites = rewriteLoopExitValues(L, &LI, &TLI, &SE, &TTI, Rewriter, &DT, in ReduceLoopStrength()
6641 if (llvm::PHINode *IV = GetInductionVariable(*L, SE, Reducer)) in ReduceLoopStrength()
6642 DbgRewriteSalvageableDVIs(L, SE, IV, SalvageableDVIRecords); in ReduceLoopStrength()
6661 auto &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE(); in runOnLoop() local
6674 return ReduceLoopStrength(L, IU, SE, DT, LI, TTI, AC, TLI, MSSA); in runOnLoop()
6680 if (!ReduceLoopStrength(&L, AM.getResult<IVUsersAnalysis>(L, AR), AR.SE, in run()