Home | History | Annotate | Download | only in Analysis

Lines Matching defs:Stride

83     cl::desc("Enable symbolic stride memory access versioning"));
120 // symbolic stride replaced by one.
129 // Replace symbolic stride by one.
155 // Get the stride replaced scev.
578 int64_t Stride = getPtrStride(PSE, Ptr, L, Strides);
579 return Stride == 1;
868 /// \brief Check whether the access through \p Ptr has a constant stride.
878 DEBUG(dbgs() << "LAA: Bad stride - Not a pointer to a scalar type" << *Ptr
890 DEBUG(dbgs() << "LAA: Bad stride - Not an AddRecExpr pointer " << *Ptr
895 // The accesss function must stride over the innermost loop.
897 DEBUG(dbgs() << "LAA: Bad stride - Not striding over innermost loop " <<
904 // An inbounds getelementptr that is a AddRec with a unit stride
905 // cannot wrap per definition. The unit stride requirement is checked later.
906 // An getelementptr without an inbounds attribute and unit stride would have
923 DEBUG(dbgs() << "LAA: Bad stride - Pointer may wrap in the address space "
932 // Calculate the pointer stride and check if it is constant.
935 DEBUG(dbgs() << "LAA: Bad stride - Not a constant strided " << *Ptr <<
951 int64_t Stride = StepVal / Size;
956 // If the SCEV could wrap but we have an inbounds gep with a unit stride we
960 Stride != 1 && Stride != -1) {
973 return Stride;
1143 /// \brief Check the dependence for two accesses with the same stride \p Stride.
1148 static bool areStridedAccessesIndependent(uint64_t Distance, uint64_t Stride,
1150 assert(Stride > 1 && "The stride must be greater than 1");
1160 // No dependence if the scaled distance is not multiple of the stride.
1165 // Two accesses in memory (scaled distance is 2, stride is 4):
1173 // Two accesses in memory (scaled distance is 4, stride is 3):
1176 return ScaledDist % Stride;
1222 // Need accesses with constant stride. We don't want to vectorize
1226 DEBUG(dbgs() << "Pointer access with non-constant stride\n");
1244 uint64_t Stride = std::abs(StrideAPtr);
1247 if (std::abs(Distance) > 0 && Stride > 1 && ATy == BTy &&
1248 areStridedAccessesIndependent(std::abs(Distance), Stride, TypeByteSize)) {
1294 // front needs TypeByteSize * Stride. Vectorizing the last iteration needs
1304 // Two accesses in memory (stride is 2):
1319 TypeByteSize * Stride * (MinNumIter - 1) + TypeByteSize;
1359 << MaxSafeDepDistBytes / (TypeByteSize * Stride) << '\n');
1910 Value *Stride = getStrideFromPointer(Ptr, PSE->getSE(), TheLoop);
1911 if (!Stride)
1915 DEBUG(dbgs() << " Ptr: " << *Ptr << " Stride: " << *Stride << "\n");
1916 SymbolicStrides[Ptr] = Stride;
1917 StrideSet.insert(Stride);