On Mon, 2 Apr 2007, Christopher Lamb wrote:>> In this model, you represent each alignment value as a pair <align,offs>, >> where offs is always less than align. This allows you to say that "this >> load is 2 bytes away from a 16-byte aligned pointer" for example. > > Shouldn't it be, "this load is a multiple of 2-bytes away from a 16-byte > aligned pointer", isn't that more general?It is both more general and less precise :)> The case I'm dealing with directly pertains to indexing arrays that are > themselves aligned. This information allows loads/stores (say in an unrolled > loop) to be coalesced as they can be determined to reference to the same > memory.Ok.> This would mean that the alignment of the load itself will be align if no > offset is provided and min(align, offs) if an offset alignment is provided. > Do you think it will be difficult for the front-end to provide these two > alignments?The front-end won't be able to give you information about a loop of code that traverses an array, but subsequent optimization/analysis passes can. I think that either form of information would be easy to get, but I don't know what the tradeoffs are (loss of generality or loss of precision). Devang, do you have any thoughts on this or idea of how it would impact a vectorizor?> Also, I've noticed that a some transformations on Loads/Stores don't preserve > either volatility or alignment information.I'm not suprised about the alignment piece (it hasn't been filled in yet) but not preserving volatility is definitely a bug. -Chris -- http://nondot.org/sabre/ http://llvm.org/
On Apr 2, 2007, at 2:12 PM, Chris Lattner wrote:> > Devang, do you have any thoughts on this or idea of how it would > impact a > vectorizor?When you say "load is multiple of 4 bytes away from a 8-byte aligned data" it is not clear whether it is 16-byte aligned or not. However, "load is 4 bytes away from a 8-byte aligned data" is clear - it is aligned at 12-byte and not 16-byte. However, that means, for loops this becomes "load is N bytes away from a 8-byte aligned data" where N is dependent on IV. - Devang
On Apr 2, 2007, at 5:01 PM, Devang Patel wrote:> > On Apr 2, 2007, at 2:12 PM, Chris Lattner wrote: >> >> Devang, do you have any thoughts on this or idea of how it would >> impact a >> vectorizor? > > When you say "load is multiple of 4 bytes away from a 8-byte aligned > data" > it is not clear whether it is 16-byte aligned or not. However, "load > is 4 bytes > away from a 8-byte aligned data" is clear - it is aligned at 12-byte > and not > 16-byte. > > However, that means, for loops this becomes "load is N bytes away > from a 8-byte aligned data" where N is dependent on IV.So in the loop case analysis of the IV is necessary to determine the actual alignment? Would the form for the loops require that the offset be tracked as a multiple of the IV stride? Would the IV stride analysis normally be performed in the front end (and thus end up in the BC)? If this is the the case then I'd take Chris's suggestion of the <align, offs> pair, as it is clear in the static offset case and the actual alignment could be deduced, along with an <align, stride> pair for the IV case. This the previous meaning of simply <align> would be equivalent to <align, stride> where align == stride. -- Christopher Lamb -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070402/5266d5e1/attachment.html>