http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49798
--- Comment #13 from H.J. Lu <hjl.tools at gmail dot com> 2011-07-21 17:16:35 UTC --- With -mx32 -O, I got foo (union U u) { union U v; _Bool D.2704; double D.2703; double D.2702; int D.2701; # BLOCK 2 freq:10000 # PRED: ENTRY [100.0%] (fallthru,exec) v = {}; v.m = &xxxx; D.2702_1 = u.d; D.2703_2 = v.d; D.2704_3 = D.2702_1 == D.2703_2; D.2701_4 = (int) D.2704_3; return D.2701_4; # SUCC: EXIT [100.0%] } In x.i.153r.dfinit, (insn 8 6 9 2 (set (reg:SI 68) (symbol_ref:SI ("xxxx") [flags 0x40] <var_decl 0x7fd45d36e140 xxxx>)) x.i:12 64 {*movsi_internal} (nil)) (insn 9 8 10 2 (set (reg:DI 67) (zero_extend:DI (reg:SI 68))) x.i:12 112 {*zero_extendsidi2_rex64} (nil)) x.i.154r.cse1 has (insn 8 6 9 2 (set (reg/f:SI 68) (symbol_ref:SI ("xxxx") [flags 0x40] <var_decl 0x7fd45d36e140 xxxx>)) x.i:12 64 {*movsi_internal} (nil)) (insn 9 8 10 2 (set (reg/f:DI 67) (symbol_ref:DI ("xxxx") [flags 0x40] <var_decl 0x7fd45d36e140 xxxx>)) x.i:12 62 {*movdi_internal_rex64} (nil))