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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

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

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Yeah, in *.postreload we had:
(insn 250 28 30 2 (set (reg:TI 3 bx [235])
        (mem/j/c:TI (plus:DI (reg/f:DI 7 sp)
                (const_int 704 [0x2c0])) [1 v32u128_1+0 S16 A256]))
pr69896.c:13 84 {*movti_internal}
     (nil))
(insn 30 250 273 2 (set (reg:TI 40 r11 [orig:98 _15 ] [98])
        (reg:TI 3 bx [235])) pr69896.c:13 84 {*movti_internal}
     (nil))
(note 273 30 31 2 NOTE_INSN_DELETED)
(insn 31 273 32 2 (set (reg:SI 3 bx [orig:99 _16 ] [99])
        (reg:SI 40 r11 [orig:98 _15 ] [98])) pr69896.c:13 86 {*movsi_internal}
     (nil))
...
(insn 271 37 278 2 (set (mem/c:TI (plus:DI (reg/f:DI 7 sp)
                (const_int 32 [0x20])) [6 %sfp+-352 S16 A128])
        (reg:TI 40 r11 [orig:98 _15 ] [98])) pr69896.c:13 84 {*movti_internal}
     (nil))
(uses of reg:SI 3 bx [orig:99 _16 ] [99]) were removed during *.postreload).
Then in *.split2 we get:
(insn 279 28 280 2 (set (reg:DI 3 bx [235])
        (mem/j/c:DI (plus:DI (reg/f:DI 7 sp)
                (const_int 704 [0x2c0])) [1 v32u128_1+0 S8 A256])) pr69896.c:13
85 {*movdi_internal}
     (nil))
(insn 280 279 281 2 (set (reg:DI 4 si [+8 ])
        (mem/j/c:DI (plus:DI (reg/f:DI 7 sp)
                (const_int 712 [0x2c8])) [1 v32u128_1+8 S8 A64])) pr69896.c:13
85 {*movdi_internal}
     (nil))
(insn 281 280 282 2 (set (reg:DI 40 r11 [orig:98 _15 ] [98])
        (reg:DI 3 bx [235])) pr69896.c:13 85 {*movdi_internal}
     (nil))
(insn 282 281 273 2 (set (reg:DI 41 r12 [ _15+8 ])
        (reg:DI 4 si [+8 ])) pr69896.c:13 85 {*movdi_internal}
     (nil))
(note 273 282 31 2 NOTE_INSN_DELETED)
(insn 31 273 32 2 (set (reg:SI 3 bx [orig:99 _16 ] [99])
        (reg:SI 40 r11 [orig:98 _15 ] [98])) pr69896.c:13 86 {*movsi_internal}
     (nil))     
...
(insn 283 37 284 2 (set (mem/c:DI (plus:DI (reg/f:DI 7 sp)
                (const_int 32 [0x20])) [6 %sfp+-352 S8 A128])
        (reg:DI 40 r11 [orig:98 _15 ] [98])) pr69896.c:13 85 {*movdi_internal}
     (nil))
(insn 284 283 278 2 (set (mem/c:DI (plus:DI (reg/f:DI 7 sp)
                (const_int 40 [0x28])) [6 %sfp+-344 S8 A64])
        (reg:DI 41 r12 [ _15+8 ])) pr69896.c:13 85 {*movdi_internal}
     (nil))

I believe it is the *.pro_and_epilogue pass that makes the invalid
transformation:
 (insn 31 273 32 2 (set (reg:SI 3 bx [orig:99 _16 ] [99])
-        (reg:SI 40 r11 [orig:98 _15 ] [98])) pr69896.c:13 86 {*movsi_internal}
+        (reg:SI 3 bx [orig:98 _15 ] [98])) pr69896.c:13 86 {*movsi_internal}
      (nil))
is fine, but
 (insn 283 37 284 2 (set (mem/c:DI (plus:DI (reg/f:DI 7 sp)
                 (const_int 32 [0x20])) [6 %sfp+-352 S8 A128])
-        (reg:DI 40 r11 [orig:98 _15 ] [98])) pr69896.c:13 85 {*movdi_internal}
+        (reg:DI 3 bx [orig:98 _15 ] [98])) pr69896.c:13 85 {*movdi_internal}
      (nil))
is wrong, unless insn 31 is removed or turned into DImode assignment instead of
SImode.
 (insn 284 283 278 2 (set (mem/c:DI (plus:DI (reg/f:DI 7 sp)
                 (const_int 40 [0x28])) [6 %sfp+-344 S8 A64])
-        (reg:DI 41 r12 [ _15+8 ])) pr69896.c:13 85 {*movdi_internal}
+        (reg:DI 4 si [orig:41 _15+8 ] [41])) pr69896.c:13 85 {*movdi_internal}
      (nil))
 (note 278 284 251 2 NOTE_INSN_DELETED)
 (insn 251 278 38 2 (set (reg:SI 4 si [236])
-        (reg:SI 40 r11 [orig:98 _15 ] [98])) pr69896.c:13 86 {*movsi_internal}
+        (reg:SI 3 bx [orig:98 _15 ] [98])) pr69896.c:13 86 {*movsi_internal}
      (nil))
 (insn 38 251 39 2 (set (mem/c:SI (plus:DI (reg/f:DI 7 sp)
                 (const_int 88 [0x58])) [3  S4 A64])
-        (reg:SI 4 si [236])) pr69896.c:13 86 {*movsi_internal}
+        (reg:SI 3 bx [236])) pr69896.c:13 86 {*movsi_internal}
      (nil))
are all fine.  -fno-shrink-wrapping indeed fixes this, as the invalid
transformation is not performed.

Reply via email to