[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