------- Comment #4 from jakub at gcc dot gnu dot org  2010-03-19 17:35 -------
Ah, I see.  We have
(insn/f 93 8 94 2 pr43437.c:4 (parallel [
            (set/f (mem:SI (pre_dec:SI (reg/f:SI 0 r0)) [0 S4 A32])
                (reg:SI 12 r12))
            (set/f (mem:SI (pre_dec:SI (reg/f:SI 0 r0)) [0 S4 A32])
                (reg:SI 13 r13))
            (set/f (mem:SI (pre_dec:SI (reg/f:SI 0 r0)) [0 S4 A32])
                (reg:SI 14 r14))
            (set/f (mem:SI (pre_dec:SI (reg/f:SI 0 r0)) [0 S4 A32])
                (reg:SI 15 r15))
        ]) 159 {*score.md:3032} (expr_list:REG_DEAD (reg:SI 15 r15)
        (expr_list:REG_DEAD (reg:SI 14 r14)
            (expr_list:REG_DEAD (reg:SI 13 r13)
                (expr_list:REG_DEAD (reg:SI 12 r12)
                    (nil))))))
and adjust_insn turns that into:
(insn/f 93 8 94 2 pr43437.c:4 (parallel [
            (set/f (mem:SI (plus:SI (reg/f:SI 54 _frame)
                        (const_int -20 [0xffffffffffffffec])) [0 S4 A32])
                (reg:SI 12 r12))
            (set/f (mem:SI (plus:SI (reg/f:SI 54 _frame)
                        (const_int -20 [0xffffffffffffffec])) [0 S4 A32])
                (reg:SI 13 r13))
            (set/f (mem:SI (plus:SI (reg/f:SI 54 _frame)
                        (const_int -20 [0xffffffffffffffec])) [0 S4 A32])
                (reg:SI 14 r14))
            (set/f (mem:SI (plus:SI (reg/f:SI 54 _frame)
                        (const_int -20 [0xffffffffffffffec])) [0 S4 A32])
                (reg:SI 15 r15))
            (set (reg/f:SI 0 r0)
                (plus:SI (reg/f:SI 0 r0)
                    (const_int -4 [0xfffffffffffffffc])))
            (set (reg/f:SI 0 r0)
                (plus:SI (reg/f:SI 0 r0)
                    (const_int -4 [0xfffffffffffffffc])))
            (set (reg/f:SI 0 r0)
                (plus:SI (reg/f:SI 0 r0)
                    (const_int -4 [0xfffffffffffffffc])))
            (set (reg/f:SI 0 r0)
                (plus:SI (reg/f:SI 0 r0)
                    (const_int -4 [0xfffffffffffffffc])))
        ]) 159 {*score.md:3032} (expr_list:REG_DEAD (reg:SI 15 r15)
        (expr_list:REG_DEAD (reg:SI 14 r14)
            (expr_list:REG_DEAD (reg:SI 13 r13)
                (expr_list:REG_DEAD (reg:SI 12 r12)
                    (nil))))))
I was assuming more than one autoinc with the same reg doesn't appear in any
port, apparently it does.  Guess adjust_insn could detect this and merge all
the adjustments against the same reg into one.


-- 

jakub at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |jakub at gcc dot gnu dot org
                   |dot org                     |
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2010-03-19 15:58:32         |2010-03-19 17:35:01
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43437

Reply via email to