[llvm-commits] [llvm-gcc-4.2] r46966 - in /llvm-gcc-4.2/trunk/gcc: config/i386/i386.h config/rs6000/rs6000.h llvm-abi.h
Duncan Sands
baldrick at free.fr
Tue Feb 12 05:17:52 PST 2008
Hi Dale,
> >> Treat struct { long long: 29; }; as int sized and
> >> aligned, rather than long long. ABI issue.
> >
> > if you look at the DECL_SIZE of the bitfield, rather than
> > the type size, I think it gives you 29. If so, DECL_SIZE
> > should simplify things for you. In fact as far as I can
> > see you should never use the type size for a record field.
> > For example the struct conversion stuff uses DECL_SIZE everywhere
> > (except at one point in the field indexing - I have a patch to fix
> > that which I'll apply at some point). Not using the type size
> > makes all these "it's a big type shoved in a small place" problems
> > magically go away.
>
> I'm not sure what your suggestion is exactly; the issue isn't the
> size, it is
> that the code in HandleArgument for general RECORD_TYPEs is looking
> at getDeclaredType, not the type in the field. (So what this patch
> does is
> use the INTEGER_REGS case instead.) The wide use of getDeclaredType
> and the comments describing it make me think it would be unsafe in
> general
> to change that. It would certainly be more elegant if it works, though.
I guess I'm confused, but in the example are you saying that you want
to pass this in registers as a long long? Or the opposite: you want
to pass it as an i32 because it fits in 32 bits? Or something else?
Thanks,
D.
More information about the llvm-commits
mailing list