http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55051
--- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> 2012-10-25 00:49:09 UTC --- LRA generates (gdb) call debug_rtx (insn) (insn 6 20 7 2 (set (reg/f:SI 0 ax [orig:65 gomp_tls_data.ts.work_share ] [65]) (mem/f/j/c:SI (plus:SI (reg:SI 2 cx [68]) (reg:DI 0 ax [64])) [0 gomp_tls_data.ts.work_share+0 S4 A32])) /tmp/x.i:23 65 {*movsi_internal} (expr_list:REG_DEAD (reg:SI 2 cx [68]) (expr_list:REG_DEAD (reg:DI 0 ax [64]) (nil)))) from (insn 6 5 7 2 (set (reg/f:SI 65 [ gomp_tls_data.ts.work_share ]) (mem/f/j/c:SI (plus:DI (plus:DI (zero_extend:DI (unspec:SI [ (const_int 0 [0]) ] UNSPEC_TP)) (reg:DI 64)) (const_int 4 [0x4])) [0 gomp_tls_data.ts.work_share+0 S4 A32])) /tmp/x.i:23 65 {*movsi_internal} (expr_list:REG_DEAD (reg:DI 64) (nil))) It fails to properly handle zero_extend.