[llvm-dev] How exactly is datatype alignment determined?

Dr. ERDI Gergo via llvm-dev llvm-dev at lists.llvm.org
Mon May 22 08:26:51 PDT 2017


On Mon, 22 May 2017, Dr. ERDI Gergo wrote:

> Actually, tracking down the sequence of function calls, it turns out that '8' 
> is ultimately coming from the following call in DataLayout::getAlignment:
>
> getAlignmentInfo(AGGREGATE_ALIGN, 0, abi_or_pref, Ty);
>
> this seems to return 8 with the following datalayout string:
>
> e-S8:p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8
>
> I think my problem is that 'a:8' probably doesn't mean what I think it should 
> mean. What is the difference between 'a:8' and 'a:0'?

OK I just now tried with 'a:0' for identical result. I am now quite sure I 
am fully confused about what these alignment settings mean.

Does 'a:8' mean single byte alignment (i.e. *no* alignment)? If yes, does 
that mean getAlignment for a struct type should return 1? In fact, when 
getAlignment returns 8, does that mean 8 bits (no alignment) or 8 bytes 
(64 bits) alignment? Or does that mean the lowest 8 bits of the address 
needs to be 0, i.e. 256-byte alignment?


More information about the llvm-dev mailing list