------- Comment #1 from pinskia at gcc dot gnu dot org 2006-12-21 22:23 ------- The problem is that we force the struct to be BLKmode from DImode with: /* If structure's known alignment is less than what the scalar mode would need, and it matters, then stick with BLKmode. */ if (TYPE_MODE (type) != BLKmode && STRICT_ALIGNMENT && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type)))) { /* If this is the only reason this type is BLKmode, then don't force containing types to be BLKmode. */ TYPE_NO_FORCE_BLK (type) = 1; TYPE_MODE (type) = BLKmode; }
Which causes us to store this to the stack all the time. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30271