https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79671
--- Comment #97 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- I thought that at that point t is the type of to the outer reference. thus in this example: cat t1.c #include <x86intrin.h> union xx { __m64 m; long long l; }; union xx t; __m64 test(long long x) { t.l=x; return t.m; } gcc -S t1.c -fdump-rtl-final I see this in t1.c.309r.final (insn 7 6 8 2 (set (mem/j/c:DI (symbol_ref:DI ("t") [flags 0x2] <var_decl 0x7fe3bff8a090 t>) [1 t.l+0 S8 A64]) (reg:DI 0 ax [89])) "t1.c":13 81 {*movdi_internal} (nil)) (insn 8 7 11 2 (set (reg:V2SI 0 ax [orig:87 _4 ] [87]) (mem/j/c:V2SI (symbol_ref:DI ("t") [flags 0x2] <var_decl 0x7fe3bff8a090 t>) [1 t.m+0 S8 A64])) "t1.c":14 1100 {*movv2si_internal} (nil))