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

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |rtl-optimization
           Keywords|needs-bisection             |

--- Comment #3 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Richard Biener from comment #2)
> Possibly target independent rtl-optimization issue.

It is _subreg1 pass that converts:

(insn 10 7 11 2 (set (reg/v:TI 106 [ h ])
        (rotate:TI (reg/v:TI 106 [ h ])
            (const_int 64 [0x40]))) "pr114211.c":9:5 1042
{rotl64ti2_doubleword}
     (nil))

to:

(insn 39 7 40 2 (set (reg:DI 128 [ h+8 ])
        (reg:DI 127 [ h ])) "pr114211.c":9:5 84 {*movdi_internal}
     (nil))
(insn 40 39 11 2 (set (reg:DI 127 [ h ])
        (reg:DI 128 [ h+8 ])) "pr114211.c":9:5 84 {*movdi_internal}
     (nil))

Well... this won't swap. Either parallel should be emitted, or a temporary
should be used.

Adding -fno-split-wide-types fixes the testcase.

Re-confirmed as rtl-optimization problem.

Reply via email to