[llvm-dev] MCRegisterClass mandatory vs preferred alignment?

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Mon Aug 31 15:21:10 PDT 2015

Looking around today, it appears that TargetRegisterClass and 
MCRegisterClass only includes a single alignment.  This is documented as 
being the minimum legal alignment, but it appears to often be greater 
than this in practice.  For instance, on x86 the alignment of %ymm0 is 
listed as 32, not 1.  Does anyone know why this is?

Additionally, where are these alignments actually defined?  I don't seem 
them appearing in the X86RegisterInfo.td files as I would naively expect.

The background for my question is that I'm looking into adding a 
function attribute which uses unaligned loads and stores for register 
spilling on x86 to avoid the need for dynamic frame realignment.  (see 
the previous thread "Aligned vector spills and variably sized stack 
frames")  The key difference w.r.t. to the existing "no-realign-stack" 
attribute is that situations which *require* a stack realignment will 
generate a fatal_error rather than silently miscompiling.  The current 
mechanism works by essentially ignoring the alignment criteria and just 
hoping everything works out in practice.


More information about the llvm-dev mailing list