http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58546
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|c |target
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This is a target specific issue as the RTL looks fine from expand:
;; c_I_lsm.5_11 = c[6];
(insn 30 29 31 (set (reg/f:DI 94)
(const:DI (plus:DI (symbol_ref:DI ("c") [flags 0x2] <var_decl
0x7f865aabf390 c>)
(const_int 12 [0xc])))) -1
(nil))
(insn 31 30 0 (set (reg:HI 86 [ c_I_lsm.5 ])
(mem/c:HI (reg/f:DI 94) [2 c+12 S2 A32])) -1
(nil))
It is ok even until after reload (in older 4.9):
(insn 40 63 64 2 (parallel [
(set (reg:HI 2 cx [orig:98 D.1755 ] [98])
(plus:HI (reg:HI 2 cx [orig:98 D.1755 ] [98])
(mem/c:HI (const:DI (plus:DI (symbol_ref:DI ("c") [flags
0x2] <var_decl 0x7f865aabf390 c>)
(const_int 12 [0xc]))) [2 c+12 S2 A32])))
(clobber (reg:CC 17 flags))
]) 263 {*addhi_1}
(nil))
---- CUT ----
It produces an SI mode during split after register allocation:
(insn 68 63 61 2 (parallel [
(set (reg:SI 2 cx [orig:98 D.1755 ] [98])
(plus:SI (reg:SI 2 cx [orig:98 D.1755 ] [98])
(mem/c:SI (const:DI (plus:DI (symbol_ref:DI ("c") [flags
0x2] <var_decl 0x7fe45464c390 c>)
(const_int 12 [0xc]))) [2 c+12 S4 A32])))
(clobber (reg:CC 17 flags))
]) 260 {*addsi_1}
(nil))