https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120423

Georg-Johann Lay <gjl at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |14.2.0

--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
With -da, the .ira dump has the following paradoxical subreg:

(insn 9 6 10 2 (set (reg:HI 50 [ _3 ])
        (ashift:HI (subreg:HI (mem/c:QI (symbol_ref:HI ("val") [flags 0x2] 
<var_decl 0x7fcd9e0f2980 val>) [0 val+0 S1 A8]) 0)
            (const_int 8 [0x8]))) "pr120423-2.c":12:16 667 {ashlhi3}

Then, .reload has:

Reloads for insn # 9
Reload 0: reload_in (QI) = (mem/c:QI (symbol_ref:HI ("val") [flags 0x2] 
<var_decl 0x7f53023f9980 val>) [0 val+0 S1 A8])
        GENERAL_REGS, RELOAD_FOR_INPUT (opnum = 1)
        reload_in_reg: (mem/c:QI (symbol_ref:HI ("val") [flags 0x2]  <var_decl
0x7f53023f9980 val>) [0 val+0 S1 A8])
        reload_reg_rtx: (reg:QI 31 r31)

and transforms insn 9 to:

(insn 9 18 10 2 (set (reg:HI 18 r18 [orig:50 _3 ] [50])
        (ashift:HI (reg:HI 31 r31)
            (const_int 8 [0x8]))) "pr120423-2.c":12:16 667 {ashlhi3}

which is obvously wrong since there is HImode in an odd regiser number.  This
triggers the ICE in postreload.

Reply via email to