It is possible that I'm not solving the real problem here.

struct {
        char a;
        char b;
        int c:8;
        int d:20;
} S;

When this struct is packed and S is aligned at 4 byte, what alignment  
should be specified on load instruction to load 'd' ?

-
Devang
On Feb 7, 2008, at 9:35 AM, Duncan Sands wrote:

> Hi Devang,
>
>> Use appropriate alignment while handling  packed struct member.
>
> the reason I asked for a testcase is that I thought all objects
> created by the IR we generate (whether locals, globals or on the
> heap) were supposed to be aligned at least as much as the gcc
> alignment.  If so, the fact that we create a packed struct type
> (alignment 1) shouldn't make the gcc object alignment info in
> expr_align wrong, in fact it should be irrelevant.  My fear is
> that your change might only be papering over the problem.
>
>>    bool isVolatile = TREE_THIS_VOLATILE(exp);
>>    const Type *Ty = ConvertType(TREE_TYPE(exp));
>>    unsigned Alignment = expr_align(exp) / 8;
>> +  if (TREE_CODE(exp) == COMPONENT_REF)
>> +    if (const StructType *STy =
>> +        dyn_cast<StructType>(ConvertType(TREE_TYPE(TREE_OPERAND(exp,
>> 0))))) +      if (STy->isPacked())
>> +        // Packed struct members use 1 byte alignment
>> +        Alignment = 1;
>> +
>>
>
> Best wishes,
>
> Duncan.



_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to