[LLVMdev] Alignment of pointee

Krzysztof Parzyszek kparzysz at codeaurora.org
Tue Mar 25 07:08:50 PDT 2014


On 3/25/2014 8:53 AM, Frank Winter wrote:
>
> One can see that if the initial alignment of the pointee of %arg0 was 32
> bytes and since the vectorizer operates on a loop with a fixed trip
> count of 4 and the size of double is 8 bytes, the vector loads and
> stores could be ideally aligned with 32 bytes (which on my target
> architecture would result in vector loads without additional permutations.
>
> Is it somehow possible to achieve this? I am generating the IR with the
> builder, i.e. I am not coming from C or clang.

If you are generating the loads and stores, you could just set the 
alignment to whatever you want, i.e. 32 bytes in your case.

I have wondered about it in a general case, when you simply want to have 
an alignment information on the pointer, and not on loads/stores.  My 
idea was to invent a builtin, something like "assert_aligned", that does 
nothing, other than manifest the alignment by the fact of its existence. 
For example:
   %argp = call i8* llvm.assert.aligned(%arg0, 32)
would state that the pointer %argp is aligned to 32 bytes, and the value 
of it is the same as %arg0 at the place of the "call".

That was a while ago and maybe there are other ways of doing it now.

-Krzysztof

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation



More information about the llvm-dev mailing list