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

Jorn Wolfgang Rennecke <amylaar at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amylaar at gcc dot gnu.org

--- Comment #2 from Jorn Wolfgang Rennecke <amylaar at gcc dot gnu.org> ---
This also causes trouble with my cpymem patch.

With the *movv8si_mem_to_mem pattern, ira.cc:combine_and_move_insns
will eagerly transform

(insn 1606 1603 1608 77 (set (reg/f:SI 1187)
        (plus:SI (reg/f:SI 65 frame)
            (const_int -1248 [0xfffffffffffffb20])))
"/home/amylaar/embecosm/fsf-cme3/gcc/gcc/testsuite/c-c++-common/torture/complex-sign-add.c":44:0
discrim 126 4 {*addsi3}
     (nil))

(insn 1608 1606 1609 77 (set (reg:V8SI 1189)
        (mem/u/c:V8SI (reg/f:SI 5064) [0  S32 A128]))
"/home/amylaar/embecosm/fsf-cme3/gcc/gcc/testsuite/c-c++-common/torture/complex-sign-add.c":44:0
discrim 126 1151 {*movv8si}
     (expr_list:REG_DEAD (reg/f:SI 5064)
        (expr_list:REG_EQUAL (mem/u/c:V8SI (const:SI (plus:SI (symbol_ref:SI
("*.LANCHOR0") [flags 0x182])
                        (const_int 64 [0x40]))) [0  S32 A128])
            (nil))))

(insn 1609 1608 12961 77 (set (mem/v/c:V8SI (reg/f:SI 1187) [1  S32 A128])
        (reg:V8SI 1189))
"/home/amylaar/embecosm/fsf-cme3/gcc/gcc/testsuite/c-c++-common/torture/complex-sign-add.c":44:0
discrim 126 1151 {*movv8si}
     (expr_list:REG_DEAD (reg:V8SI 1189)
        (expr_list:REG_DEAD (reg/f:SI 1187)
            (nil))))

into


(insn 1608 1603 16000 77 (set (reg:V8SI 1189)
        (mem/u/c:V8SI (reg/f:SI 5064) [0  S32 A128]))
"/home/amylaar/embecosm/fsf-cme3/gcc/gcc/testsuite/c-c++-common/torture/complex-sign-add.c":44:0
discrim 126 1151 {*movv8si}
     (expr_list:REG_EQUIV (mem/u/c:V8SI (const:SI (plus:SI (symbol_ref:SI
("*.LANCHOR0") [flags 0x182])
                    (const_int 64 [0x40]))) [0  S32 A128])
        (expr_list:REG_DEAD (reg/f:SI 5064)
            (nil))))

(insn 16000 1608 1609 77 (set (reg/f:SI 1187)
        (plus:SI (reg/f:SI 65 frame)
            (const_int -1248 [0xfffffffffffffb20])))
"/home/amylaar/embecosm/fsf-cme3/gcc/gcc/testsuite/c-c++-common/torture/complex-sign-add.c":44:0
discrim 126 4 {*addsi3}
     (expr_list:REG_EQUIV (plus:SI (reg/f:SI 65 frame)
            (const_int -1248 [0xfffffffffffffb20]))
        (nil)))

(insn 1609 16000 12961 77 (set (mem/v/c:V8SI (reg/f:SI 1187) [1  S32 A128])
        (mem/u/c:V8SI (reg/f:SI 5064) [0  S32 A128]))
"/home/amylaar/embecosm/fsf-cme3/gcc/gcc/testsuite/c-c++-common/torture/complex-sign-add.c":44:0
discrim 126 -1
     (expr_list:REG_DEAD (reg:V8SI 1189)
        (expr_list:REG_DEAD (reg/f:SI 1187)
            (nil))))

during compilation of check_add_long_double.

When a pattern with a mandatory split is recognized, you must make sure it can
be split.  If the pattern ceases to be valid at some point during the
compilation, you must make sure it can be split or otherwise transformed
before another attempt to recognize it is made.

Reply via email to