[LLVMdev] Alignment on byval parameters

Dale Johannesen dalej at apple.com
Fri Feb 22 10:09:35 PST 2008


As you may have seen, my recent checkins complete implementing this  
for x86-32.  It is possible some of it is not right for Linux, and I'd  
like to get some testing help.  Probably the only thing you'd want to  
change is LLVM_BYVAL_ALIGNMENT in
config/i386/llvm-i386-target.h; at the extreme, if you set that to 0  
things should go back to the way they were.

The best test I know for calling convention compatibility is the  
struct-layout-1 part of the gcc testsuite.  It is run like this from  
the gcc build directory:
make -k check RUNTESTFLAGS=struct-layout-1.exp
Takes 15 minutes or so.  I currently have the following failures  
remaining on Darwin:
C:  t025, t028
C++:  t024, t026, t027
All of these are due to using MMX instructions without EMMS in the  
right places (Chris checked in some stuff that was supposed to fix  
this, but it doesn't, I must have oversimplified the test case.)  That  
is, I think all the calling convention stuff is now correct.

Could somebody try this on Linux and investigate any failures other  
than the ones above?

I also noticed 64-bit (MMX) vector parameters were being 8-byte  
aligned; 4 bytes is correct for Darwin.  I suspect that is right for  
Linux also so I changed it unconditionally, but it would be good if  
someone would check.




More information about the llvm-dev mailing list