[LLVMdev] another problem with function arguments aligment

Evan Cheng evan.cheng at apple.com
Mon Feb 26 10:02:15 PST 2007


This is a known deficiency of llvm which we haven't had time to deal  
with. At llvm level, function arguments are lowered to integer types  
so some of these type information are lost.

I think adding a short term workaround is possible until we fix this  
"the right way". It involves adding the alignment information to  
ParameterAttributes. This will involve llvm language level and llvm- 
gcc changes.

Evan

On Feb 26, 2007, at 6:41 AM, Lauro Ramos Venancio wrote:

> The ARM EABI (AAPCS) defines:
> - i64 values are 8-bytes aligned
> - "The alignment of an aggregate shall be the alignment of its
> most-aligned component."
>
> So,
>
> struct ss {
>   int x;
>   int y;
> };
>
> void f(int a, struct ss b);
> r0 <- a
> r1-r2 <- b
>
> void g(int a, long long b);
> r0 <- a
> r2-r3 <- b
>
> The problem is: llvm-gcc generates the same bytecode for both  
> functions:
>
> declare void @f(i32, i64)
> declare void @g(i32, i64)
>
> I can't differ an i64 argument from a struct argument.
>
>
> Lauro
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list