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

--- Comment #3 from Richard Sandiford <rsandifo at gcc dot gnu.org> ---
In RTL terms, the dup is vec_duplicate.  The combination is:

Trying 10 -> 13:
   10: r107:V4SF=vec_duplicate(r115:SF)
      REG_DEAD r115:SF
   13: r110:V4SF=r111:V4SF*r107:V4SF
      REG_DEAD r111:V4SF
Failed to match this instruction:
(parallel [
        (set (reg:V4SF 110 [ _2 ])
            (mult:V4SF (vec_duplicate:V4SF (reg:SF 115))
                (reg:V4SF 111 [ *ptr_6(D) ])))
        (set (reg:V4SF 107)
            (vec_duplicate:V4SF (reg:SF 115)))
    ])
Failed to match this instruction:
(parallel [
        (set (reg:V4SF 110 [ _2 ])
            (mult:V4SF (vec_duplicate:V4SF (reg:SF 115))
                (reg:V4SF 111 [ *ptr_6(D) ])))
        (set (reg:V4SF 107)
            (vec_duplicate:V4SF (reg:SF 115)))
    ])
Successfully matched this instruction:
(set (reg:V4SF 107)
    (vec_duplicate:V4SF (reg:SF 115)))
Successfully matched this instruction:
(set (reg:V4SF 110 [ _2 ])
    (mult:V4SF (vec_duplicate:V4SF (reg:SF 115))
        (reg:V4SF 111 [ *ptr_6(D) ])))
allowing combination of insns 10 and 13
original costs 8 + 20 = 28
replacement costs 8 + 20 = 28
modifying insn i2    10: r107:V4SF=vec_duplicate(r115:SF)
deferring rescan insn with uid = 10.
modifying insn i3    13: r110:V4SF=vec_duplicate(r115:SF)*r111:V4SF
      REG_DEAD r115:SF
      REG_DEAD r111:V4SF
deferring rescan insn with uid = 13.

Reply via email to