http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47862
--- Comment #2 from Pat Haugen <pthaugen at gcc dot gnu.org> 2011-02-25 00:55:20 UTC --- The DI mode for the spill locations is being decided in caller-save.c:init_caller_save(), which appears to decide what mode should be used when a caller-saved reg needs to be saved/restored (regno_save_mode[][]). This is done up front, without regard to what mode is actually in a register at the time of its use. The volatile floating point regs end up with a DI mode, the volatile Altivec regs get V2DF mode.