Lines Matching full:slices
84 /// Hidden option to enable randomly shuffling the slices to help uncover
86 static cl::opt<bool> SROARandomShuffleSlices("sroa-random-shuffle-slices",
206 /// \brief Representation of the alloca slices.
208 /// This class represents the slices of an alloca which are formed by its
210 /// for the slices used and we reflect that in this structure. The uses are
211 /// stored, sorted by increasing beginning offset and with unsplittable slices
212 /// starting at a particular offset before splittable slices.
215 /// \brief Construct the slices of a particular alloca.
220 /// If this is true, the slices are never fully built and should be
224 /// \brief Support for iterating over the slices.
227 iterator begin() { return Slices.begin(); }
228 iterator end() { return Slices.end(); }
231 const_iterator begin() const { return Slices.begin(); }
232 const_iterator end() const { return Slices.end(); }
280 /// of slices.
283 /// store a pointer to that here and abort trying to form slices of the
284 /// alloca. This will be null if the alloca slices are analyzed successfully.
287 /// \brief The slices of the alloca.
289 /// We store a vector of the slices formed by uses of the alloca here. This
291 /// slices before the splittable ones. See the Slice inner class for more
293 SmallVector<Slice, 8> Slices;
327 /// \brief Builder for the alloca slices.
329 /// This class builds a set of alloca slices by recursively visiting the uses
387 S.Slices.push_back(Slice(BeginOffset, EndOffset, U, IsSplittable));
538 S.Slices[MTPI->second].kill();
561 MemTransferSliceMap.insert(std::make_pair(&II, S.Slices.size()));
564 Slice &PrevP = S.Slices[PrevIdx];
582 assert(S.Slices[PrevIdx].getUse()->getUser() == &II &&
740 Slices.erase(std::remove_if(Slices.begin(), Slices.end(),
742 Slices.end());
747 std::shuffle(Slices.begin(), Slices.end(), MT);
753 std::sort(Slices.begin(), Slices.end());
778 OS << "Can't analyze slices for alloca: " << AI << "\n"
784 OS << "Slices of alloca: " << AI << "\n";
1011 /// sequence of slices.
1020 // always get consistent results regardless of the order of slices.
1050 // To avoid depending on the order of slices, Ty and TyIsCommon must not
1689 slices can be
2114 // interchangeably for unsplit slices.
3204 // Now that we've processed all the slices in the new partition, check if any
3285 /// \brief Walks the slices of an alloca and form partitions based on them,
3307 // Form a partition including all of the overlapping slices with this
3317 // Collect all of the overlapping splittable slices.
3335 // Rewrite a sequence of overlapping slices.
3343 // Accumulate all the splittable slices from the [SI,SJ) region which
3362 // Even if we have split slices, if the next slice is splittable and the
3363 // split slices reach it, we can simply set up the beginning offset of the
3371 // Otherwise, we have a tail of split slices. Rewrite them with an empty
3372 // range of slices.
3415 /// the slices of the alloca, and then hands it off to be split and
3439 // Build the slices using a recursive instruction-visiting builder.
3467 // No slices to split. Leave the dead alloca for a later pass to clean up.