Lines Matching full:alignment
14 // complex alignment assumptions that apply to vector loads and stores that
19 #define AA_NAME "alignment-from-assumptions"
42 "Number of loads changed by alignment assumptions");
44 "Number of stores changed by alignment assumptions");
46 "Number of memory intrinsics changed by alignment assumptions");
70 // For memory transfers, we need a common alignment for both the source and
71 // destination. If we have a new alignment for only one operand of a transfer
73 // another assumption later, then we may change the alignment at that point.
86 static const char aip_name[] = "Alignment from assumptions";
99 // Given an expression for the (constant) alignment, AlignSCEV, and an
101 // DiffSCEV, compute the alignment of the displaced pointer if it can be reduced
102 // to a constant. Using SCEV to compute alignment handles the case where
108 // DiffUnits = Diff % int64_t(Alignment) in getNewAlignmentDiff()
120 // If the displacement is an exact multiple of the alignment, then the in getNewAlignmentDiff()
121 // displaced pointer has the same alignment as the aligned pointer, so in getNewAlignmentDiff()
122 // return the alignment value. in getNewAlignmentDiff()
138 // alignment AlignSCEV. Use that information, if possible, to compute a new
139 // alignment for Ptr.
154 DEBUG(dbgs() << "AFI: alignment of " << *Ptr << " relative to " << in getNewAlignment()
159 DEBUG(dbgs() << "\tnew alignment: " << NewAlignment << "\n"); in getNewAlignment()
165 // The relative offset to the alignment assumption did not yield a constant, in getNewAlignment()
168 // 32-byte aligned, but instead alternate between 32 and 16-byte alignment. in getNewAlignment()
169 // As a result, the new alignment will not be a constant, but can still in getNewAlignment()
175 DEBUG(dbgs() << "\ttrying start/inc alignment using start " << in getNewAlignment()
178 // Now compute the new alignment using the displacement to the value in the in getNewAlignment()
179 // first iteration, and also the alignment using the per-iteration delta. in getNewAlignment()
185 DEBUG(dbgs() << "\tnew start alignment: " << NewAlignment << "\n"); in getNewAlignment()
186 DEBUG(dbgs() << "\tnew inc alignment: " << NewIncAlignment << "\n"); in getNewAlignment()
192 DEBUG(dbgs() << "\tnew start/inc alignment: " << in getNewAlignment()
198 DEBUG(dbgs() << "\tnew start/inc alignment: " << in getNewAlignment()
203 DEBUG(dbgs() << "\tnew start/inc alignment: " << in getNewAlignment()
215 // An alignment assume must be a statement about the least-significant in extractAlignmentInfo()
255 // trivial and tells us nothing about the alignment of the left operand). in extractAlignmentInfo()
260 // Cap the alignment at the maximum with which LLVM can deal (and make sure in extractAlignmentInfo()
262 uint64_t Alignment; in extractAlignmentInfo() local
265 Alignment = std::min(1u << TrailingOnes, +Value::MaximumAlignment); in extractAlignmentInfo()
268 AlignSCEV = SE->getConstant(Int64Ty, Alignment); in extractAlignmentInfo()
348 // For memory transfers, we need a common alignment for both the in processAssumption()
349 // source and destination. If we have a new alignment for this in processAssumption()
352 // change the alignment at that point. in processAssumption()