[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