Lines Matching refs:SCEV
341 const SCEV *FullDependence::getDistance(unsigned Level) const { in getDistance()
384 const SCEV *DependenceInfo::Constraint::getX() const { in getX()
392 const SCEV *DependenceInfo::Constraint::getY() const { in getY()
400 const SCEV *DependenceInfo::Constraint::getA() const { in getA()
409 const SCEV *DependenceInfo::Constraint::getB() const { in getB()
418 const SCEV *DependenceInfo::Constraint::getC() const { in getC()
427 const SCEV *DependenceInfo::Constraint::getD() const { in getD()
440 void DependenceInfo::Constraint::setPoint(const SCEV *X, const SCEV *Y, in setPoint()
448 void DependenceInfo::Constraint::setLine(const SCEV *AA, const SCEV *BB, in setLine()
449 const SCEV *CC, const Loop *CurLoop) { in setLine()
457 void DependenceInfo::Constraint::setDistance(const SCEV *D, in setDistance()
549 const SCEV *Prod1 = SE->getMulExpr(X->getA(), Y->getB()); in intersectConstraints()
550 const SCEV *Prod2 = SE->getMulExpr(X->getB(), Y->getA()); in intersectConstraints()
568 const SCEV *C1B2 = SE->getMulExpr(X->getC(), Y->getB()); in intersectConstraints()
569 const SCEV *C1A2 = SE->getMulExpr(X->getC(), Y->getA()); in intersectConstraints()
570 const SCEV *C2B1 = SE->getMulExpr(Y->getC(), X->getB()); in intersectConstraints()
571 const SCEV *C2A1 = SE->getMulExpr(Y->getC(), X->getA()); in intersectConstraints()
572 const SCEV *A1B2 = SE->getMulExpr(X->getA(), Y->getB()); in intersectConstraints()
573 const SCEV *A2B1 = SE->getMulExpr(Y->getA(), X->getB()); in intersectConstraints()
634 const SCEV *A1X1 = SE->getMulExpr(Y->getA(), X->getX()); in intersectConstraints()
635 const SCEV *B1Y1 = SE->getMulExpr(Y->getB(), X->getY()); in intersectConstraints()
636 const SCEV *Sum = SE->getAddExpr(A1X1, B1Y1); in intersectConstraints()
678 const SCEV *Distance = getDistance(II); in dump()
858 bool DependenceInfo::isLoopInvariant(const SCEV *Expression, in isLoopInvariant()
876 void DependenceInfo::collectCommonLoops(const SCEV *Expression, in collectCommonLoops()
895 const SCEV *Src = Pair->Src; in unifySubscriptType()
896 const SCEV *Dst = Pair->Dst; in unifySubscriptType()
920 const SCEV *Src = Pair->Src; in unifySubscriptType()
921 const SCEV *Dst = Pair->Dst; in unifySubscriptType()
945 const SCEV *Src = Pair->Src; in removeMatchingExtensions()
946 const SCEV *Dst = Pair->Dst; in removeMatchingExtensions()
951 const SCEV *SrcCastOp = SrcCast->getOperand(); in removeMatchingExtensions()
952 const SCEV *DstCastOp = DstCast->getOperand(); in removeMatchingExtensions()
962 bool DependenceInfo::checkSubscript(const SCEV *Expr, const Loop *LoopNest, in checkSubscript()
979 const SCEV *Start = AddRec->getStart(); in checkSubscript()
980 const SCEV *Step = AddRec->getStepRecurrence(*SE); in checkSubscript()
981 const SCEV *UB = SE->getBackedgeTakenCount(AddRec->getLoop()); in checkSubscript()
1000 bool DependenceInfo::checkSrcSubscript(const SCEV *Src, const Loop *LoopNest, in checkSrcSubscript()
1007 bool DependenceInfo::checkDstSubscript(const SCEV *Dst, const Loop *LoopNest, in checkDstSubscript()
1017 DependenceInfo::classifyPair(const SCEV *Src, const Loop *SrcLoopNest, in classifyPair()
1018 const SCEV *Dst, const Loop *DstLoopNest, in classifyPair()
1051 bool DependenceInfo::isKnownPredicate(ICmpInst::Predicate Pred, const SCEV *X, in isKnownPredicate()
1052 const SCEV *Y) const { in isKnownPredicate()
1061 const SCEV *Xop = CX->getOperand(); in isKnownPredicate()
1062 const SCEV *Yop = CY->getOperand(); in isKnownPredicate()
1076 const SCEV *Delta = SE->getMinusSCEV(X, Y); in isKnownPredicate()
1098 bool DependenceInfo::isKnownLessThan(const SCEV *S, const SCEV *Size) const { in isKnownLessThan()
1110 const SCEV *Bound = SE->getMinusSCEV(S, Size); in isKnownLessThan()
1113 const SCEV *BECount = SE->getBackedgeTakenCount(AddRec->getLoop()); in isKnownLessThan()
1115 const SCEV *Limit = AddRec->evaluateAtIteration(BECount, *SE); in isKnownLessThan()
1123 const SCEV *LimitedBound = in isKnownLessThan()
1128 bool DependenceInfo::isKnownNonNegative(const SCEV *S, const Value *Ptr) const { in isKnownNonNegative()
1154 const SCEV *DependenceInfo::collectUpperBound(const Loop *L, Type *T) const { in collectUpperBound()
1156 const SCEV *UB = SE->getBackedgeTakenCount(L); in collectUpperBound()
1167 if (const SCEV *UB = collectUpperBound(L, T)) in collectConstantUpperBound()
1183 bool DependenceInfo::testZIV(const SCEV *Src, const SCEV *Dst, in testZIV()
1230 bool DependenceInfo::strongSIVtest(const SCEV *Coeff, const SCEV *SrcConst, in strongSIVtest()
1231 const SCEV *DstConst, const Loop *CurLoop, in strongSIVtest()
1245 const SCEV *Delta = SE->getMinusSCEV(SrcConst, DstConst); in strongSIVtest()
1250 if (const SCEV *UpperBound = collectUpperBound(CurLoop, Delta->getType())) { in strongSIVtest()
1253 const SCEV *AbsDelta = in strongSIVtest()
1255 const SCEV *AbsCoeff = in strongSIVtest()
1257 const SCEV *Product = SE->getMulExpr(UpperBound, AbsCoeff); in strongSIVtest()
1367 const SCEV *Coeff, const SCEV *SrcConst, const SCEV *DstConst, in weakCrossingSIVtest()
1369 Constraint &NewConstraint, const SCEV *&SplitIter) const { in weakCrossingSIVtest()
1378 const SCEV *Delta = SE->getMinusSCEV(DstConst, SrcConst); in weakCrossingSIVtest()
1428 if (const SCEV *UpperBound = collectUpperBound(CurLoop, Delta->getType())) { in weakCrossingSIVtest()
1430 const SCEV *ConstantTwo = SE->getConstant(UpperBound->getType(), 2); in weakCrossingSIVtest()
1431 const SCEV *ML = SE->getMulExpr(SE->getMulExpr(ConstCoeff, UpperBound), in weakCrossingSIVtest()
1566 bool DependenceInfo::exactSIVtest(const SCEV *SrcCoeff, const SCEV *DstCoeff, in exactSIVtest()
1567 const SCEV *SrcConst, const SCEV *DstConst, in exactSIVtest()
1580 const SCEV *Delta = SE->getMinusSCEV(DstConst, SrcConst); in exactSIVtest()
1759 bool DependenceInfo::weakZeroSrcSIVtest(const SCEV *DstCoeff, in weakZeroSrcSIVtest()
1760 const SCEV *SrcConst, in weakZeroSrcSIVtest()
1761 const SCEV *DstConst, in weakZeroSrcSIVtest()
1776 const SCEV *Delta = SE->getMinusSCEV(SrcConst, DstConst); in weakZeroSrcSIVtest()
1791 const SCEV *AbsCoeff = in weakZeroSrcSIVtest()
1794 const SCEV *NewDelta = in weakZeroSrcSIVtest()
1799 if (const SCEV *UpperBound = collectUpperBound(CurLoop, Delta->getType())) { in weakZeroSrcSIVtest()
1801 const SCEV *Product = SE->getMulExpr(AbsCoeff, UpperBound); in weakZeroSrcSIVtest()
1869 bool DependenceInfo::weakZeroDstSIVtest(const SCEV *SrcCoeff, in weakZeroDstSIVtest()
1870 const SCEV *SrcConst, in weakZeroDstSIVtest()
1871 const SCEV *DstConst, in weakZeroDstSIVtest()
1885 const SCEV *Delta = SE->getMinusSCEV(DstConst, SrcConst); in weakZeroDstSIVtest()
1900 const SCEV *AbsCoeff = in weakZeroDstSIVtest()
1903 const SCEV *NewDelta = in weakZeroDstSIVtest()
1908 if (const SCEV *UpperBound = collectUpperBound(CurLoop, Delta->getType())) { in weakZeroDstSIVtest()
1910 const SCEV *Product = SE->getMulExpr(AbsCoeff, UpperBound); in weakZeroDstSIVtest()
1954 bool DependenceInfo::exactRDIVtest(const SCEV *SrcCoeff, const SCEV *DstCoeff, in exactRDIVtest()
1955 const SCEV *SrcConst, const SCEV *DstConst, in exactRDIVtest()
1965 const SCEV *Delta = SE->getMinusSCEV(DstConst, SrcConst); in exactRDIVtest()
2111 bool DependenceInfo::symbolicRDIVtest(const SCEV *A1, const SCEV *A2, in symbolicRDIVtest()
2112 const SCEV *C1, const SCEV *C2, in symbolicRDIVtest()
2122 const SCEV *N1 = collectUpperBound(Loop1, A1->getType()); in symbolicRDIVtest()
2123 const SCEV *N2 = collectUpperBound(Loop2, A1->getType()); in symbolicRDIVtest()
2126 const SCEV *C2_C1 = SE->getMinusSCEV(C2, C1); in symbolicRDIVtest()
2127 const SCEV *C1_C2 = SE->getMinusSCEV(C1, C2); in symbolicRDIVtest()
2135 const SCEV *A1N1 = SE->getMulExpr(A1, N1); in symbolicRDIVtest()
2144 const SCEV *A2N2 = SE->getMulExpr(A2, N2); in symbolicRDIVtest()
2156 const SCEV *A1N1 = SE->getMulExpr(A1, N1); in symbolicRDIVtest()
2157 const SCEV *A2N2 = SE->getMulExpr(A2, N2); in symbolicRDIVtest()
2158 const SCEV *A1N1_A2N2 = SE->getMinusSCEV(A1N1, A2N2); in symbolicRDIVtest()
2177 const SCEV *A1N1 = SE->getMulExpr(A1, N1); in symbolicRDIVtest()
2178 const SCEV *A2N2 = SE->getMulExpr(A2, N2); in symbolicRDIVtest()
2179 const SCEV *A1N1_A2N2 = SE->getMinusSCEV(A1N1, A2N2); in symbolicRDIVtest()
2196 const SCEV *A1N1 = SE->getMulExpr(A1, N1); in symbolicRDIVtest()
2205 const SCEV *A2N2 = SE->getMulExpr(A2, N2); in symbolicRDIVtest()
2226 bool DependenceInfo::testSIV(const SCEV *Src, const SCEV *Dst, unsigned &Level, in testSIV()
2228 const SCEV *&SplitIter) const { in testSIV()
2234 const SCEV *SrcConst = SrcAddRec->getStart(); in testSIV()
2235 const SCEV *DstConst = DstAddRec->getStart(); in testSIV()
2236 const SCEV *SrcCoeff = SrcAddRec->getStepRecurrence(*SE); in testSIV()
2237 const SCEV *DstCoeff = DstAddRec->getStepRecurrence(*SE); in testSIV()
2257 const SCEV *SrcConst = SrcAddRec->getStart(); in testSIV()
2258 const SCEV *SrcCoeff = SrcAddRec->getStepRecurrence(*SE); in testSIV()
2259 const SCEV *DstConst = Dst; in testSIV()
2267 const SCEV *DstConst = DstAddRec->getStart(); in testSIV()
2268 const SCEV *DstCoeff = DstAddRec->getStepRecurrence(*SE); in testSIV()
2269 const SCEV *SrcConst = Src; in testSIV()
2294 bool DependenceInfo::testRDIV(const SCEV *Src, const SCEV *Dst, in testRDIV()
2302 const SCEV *SrcConst, *DstConst; in testRDIV()
2303 const SCEV *SrcCoeff, *DstCoeff; in testRDIV()
2360 bool DependenceInfo::testMIV(const SCEV *Src, const SCEV *Dst, in testMIV()
2374 const SCEVConstant *getConstantPart(const SCEV *Expr) { in getConstantPart()
2402 bool DependenceInfo::gcdMIVtest(const SCEV *Src, const SCEV *Dst, in gcdMIVtest()
2413 const SCEV *Coefficients = Src; in gcdMIVtest()
2416 const SCEV *Coeff = AddRec->getStepRecurrence(*SE); in gcdMIVtest()
2426 const SCEV *SrcConst = Coefficients; in gcdMIVtest()
2435 const SCEV *Coeff = AddRec->getStepRecurrence(*SE); in gcdMIVtest()
2445 const SCEV *DstConst = Coefficients; in gcdMIVtest()
2448 const SCEV *Delta = SE->getMinusSCEV(DstConst, SrcConst); in gcdMIVtest()
2454 const SCEV *Operand = Sum->getOperand(Op); in gcdMIVtest()
2508 const SCEV *SrcCoeff = AddRec->getStepRecurrence(*SE); in gcdMIVtest()
2509 const SCEV *DstCoeff = SE->getMinusSCEV(SrcCoeff, SrcCoeff); in gcdMIVtest()
2510 const SCEV *Inner = Src; in gcdMIVtest()
2513 const SCEV *Coeff = AddRec->getStepRecurrence(*SE); in gcdMIVtest()
2530 const SCEV *Coeff = AddRec->getStepRecurrence(*SE); in gcdMIVtest()
2605 bool DependenceInfo::banerjeeMIVtest(const SCEV *Src, const SCEV *Dst, in banerjeeMIVtest()
2611 const SCEV *A0; in banerjeeMIVtest()
2614 const SCEV *B0; in banerjeeMIVtest()
2617 const SCEV *Delta = SE->getMinusSCEV(B0, A0); in banerjeeMIVtest()
2689 const SCEV *Delta) const { in exploreDirections()
2804 BoundInfo *Bound, const SCEV *Delta) const { in testBounds()
2806 if (const SCEV *LowerBound = getLowerBound(Bound)) in testBounds()
2809 if (const SCEV *UpperBound = getUpperBound(Bound)) in testBounds()
2875 const SCEV *Delta = SE->getMinusSCEV(A[K].Coeff, B[K].Coeff); in findBoundsEQ()
2876 const SCEV *NegativePart = getNegativePart(Delta); in findBoundsEQ()
2879 const SCEV *PositivePart = getPositivePart(Delta); in findBoundsEQ()
2886 const SCEV *Delta = SE->getMinusSCEV(A[K].Coeff, B[K].Coeff); in findBoundsEQ()
2887 const SCEV *NegativePart = getNegativePart(Delta); in findBoundsEQ()
2890 const SCEV *PositivePart = getPositivePart(Delta); in findBoundsEQ()
2915 const SCEV *Iter_1 = SE->getMinusSCEV( in findBoundsLT()
2917 const SCEV *NegPart = in findBoundsLT()
2921 const SCEV *PosPart = in findBoundsLT()
2929 const SCEV *NegPart = in findBoundsLT()
2933 const SCEV *PosPart = in findBoundsLT()
2959 const SCEV *Iter_1 = SE->getMinusSCEV( in findBoundsGT()
2961 const SCEV *NegPart = in findBoundsGT()
2965 const SCEV *PosPart = in findBoundsGT()
2973 const SCEV *NegPart = getNegativePart(SE->getMinusSCEV(A[K].Coeff, B[K].PosPart)); in findBoundsGT()
2976 const SCEV *PosPart = getPositivePart(SE->getMinusSCEV(A[K].Coeff, B[K].NegPart)); in findBoundsGT()
2984 const SCEV *DependenceInfo::getPositivePart(const SCEV *X) const { in getPositivePart()
2990 const SCEV *DependenceInfo::getNegativePart(const SCEV *X) const { in getNegativePart()
2999 DependenceInfo::collectCoeffInfo(const SCEV *Subscript, bool SrcFlag, in collectCoeffInfo()
3000 const SCEV *&Constant) const { in collectCoeffInfo()
3001 const SCEV *Zero = SE->getZero(Subscript->getType()); in collectCoeffInfo()
3044 const SCEV *DependenceInfo::getLowerBound(BoundInfo *Bound) const { in getLowerBound()
3045 const SCEV *Sum = Bound[1].Lower[Bound[1].Direction]; in getLowerBound()
3060 const SCEV *DependenceInfo::getUpperBound(BoundInfo *Bound) const { in getUpperBound()
3061 const SCEV *Sum = Bound[1].Upper[Bound[1].Direction]; in getUpperBound()
3081 const SCEV *DependenceInfo::findCoefficient(const SCEV *Expr, in findCoefficient()
3097 const SCEV *DependenceInfo::zeroCoefficient(const SCEV *Expr, in zeroCoefficient()
3116 const SCEV *DependenceInfo::addToCoefficient(const SCEV *Expr, in addToCoefficient()
3118 const SCEV *Value) const { in addToCoefficient()
3124 SCEV::FlagAnyWrap); // Worst case, with no info. in addToCoefficient()
3126 const SCEV *Sum = SE->getAddExpr(AddRec->getStepRecurrence(*SE), Value); in addToCoefficient()
3135 return SE->getAddRecExpr(AddRec, Value, TargetLoop, SCEV::FlagAnyWrap); in addToCoefficient()
3153 bool DependenceInfo::propagate(const SCEV *&Src, const SCEV *&Dst, in propagate()
3177 bool DependenceInfo::propagateDistance(const SCEV *&Src, const SCEV *&Dst, in propagateDistance()
3182 const SCEV *A_K = findCoefficient(Src, CurLoop); in propagateDistance()
3185 const SCEV *DA_K = SE->getMulExpr(A_K, CurConstraint.getD()); in propagateDistance()
3203 bool DependenceInfo::propagateLine(const SCEV *&Src, const SCEV *&Dst, in propagateLine()
3207 const SCEV *A = CurConstraint.getA(); in propagateLine()
3208 const SCEV *B = CurConstraint.getB(); in propagateLine()
3209 const SCEV *C = CurConstraint.getC(); in propagateLine()
3222 const SCEV *AP_K = findCoefficient(Dst, CurLoop); in propagateLine()
3237 const SCEV *A_K = findCoefficient(Src, CurLoop); in propagateLine()
3251 const SCEV *A_K = findCoefficient(Src, CurLoop); in propagateLine()
3260 const SCEV *A_K = findCoefficient(Src, CurLoop); in propagateLine()
3278 bool DependenceInfo::propagatePoint(const SCEV *&Src, const SCEV *&Dst, in propagatePoint()
3281 const SCEV *A_K = findCoefficient(Src, CurLoop); in propagatePoint()
3282 const SCEV *AP_K = findCoefficient(Dst, CurLoop); in propagatePoint()
3283 const SCEV *XA_K = SE->getMulExpr(A_K, CurConstraint.getX()); in propagatePoint()
3284 const SCEV *YAP_K = SE->getMulExpr(AP_K, CurConstraint.getY()); in propagatePoint()
3358 const SCEV *SrcAccessFn = SE->getSCEVAtScope(SrcPtr, SrcLoop); in tryDelinearize()
3359 const SCEV *DstAccessFn = SE->getSCEVAtScope(DstPtr, DstLoop); in tryDelinearize()
3368 SmallVector<const SCEV *, 4> SrcSubscripts, DstSubscripts; in tryDelinearize()
3404 Instruction *Src, Instruction *Dst, const SCEV *SrcAccessFn, in tryDelinearizeFixedSize()
3405 const SCEV *DstAccessFn, SmallVectorImpl<const SCEV *> &SrcSubscripts, in tryDelinearizeFixedSize()
3406 SmallVectorImpl<const SCEV *> &DstSubscripts) { in tryDelinearizeFixedSize()
3448 SmallVectorImpl<const SCEV *> &Subscripts, in tryDelinearizeFixedSize()
3452 const SCEV *S = Subscripts[I]; in tryDelinearizeFixedSize()
3456 const SCEV *Range = SE->getConstant( in tryDelinearizeFixedSize()
3481 Instruction *Src, Instruction *Dst, const SCEV *SrcAccessFn, in tryDelinearizeParametricSize()
3482 const SCEV *DstAccessFn, SmallVectorImpl<const SCEV *> &SrcSubscripts, in tryDelinearizeParametricSize()
3483 SmallVectorImpl<const SCEV *> &DstSubscripts) { in tryDelinearizeParametricSize()
3494 const SCEV *ElementSize = SE->getElementSize(Src); in tryDelinearizeParametricSize()
3498 const SCEV *SrcSCEV = SE->getMinusSCEV(SrcAccessFn, SrcBase); in tryDelinearizeParametricSize()
3499 const SCEV *DstSCEV = SE->getMinusSCEV(DstAccessFn, DstBase); in tryDelinearizeParametricSize()
3507 SmallVector<const SCEV *, 4> Terms; in tryDelinearizeParametricSize()
3512 SmallVector<const SCEV *, 4> Sizes; in tryDelinearizeParametricSize()
3636 const SCEV *SrcSCEV = SE->getSCEV(SrcPtr); in depends()
3637 const SCEV *DstSCEV = SE->getSCEV(DstPtr); in depends()
3801 const SCEV *SplitIter = nullptr; in depends()
3852 const SCEV *SplitIter = nullptr; in depends()
4024 const SCEV *DependenceInfo::getSplitIteration(const Dependence &Dep, in getSplitIteration()
4047 const SCEV *SrcSCEV = SE->getSCEV(SrcPtr); in getSplitIteration()
4048 const SCEV *DstSCEV = SE->getSCEV(DstPtr); in getSplitIteration()
4120 const SCEV *SplitIter = nullptr; in getSplitIteration()
4159 const SCEV *SplitIter = nullptr; in getSplitIteration()