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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |rtl-optimization
                 CC|                            |vmakarov at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-12-19

--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
This is the problematic insn in _.c.322r.ira dump:

(insn 9 5 10 2 (parallel [
            (set (reg:HI 99 [ _2 ])
                (lshiftrt:HI (subreg:HI (reg/v:V32HI 165 [ u ]) 0)
                    (const_int 1 [0x1])))
            (clobber (reg:CC 17 flags))
        ]) "pr118067.c":10:8 1215 {*lshrhi3_1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))

Reload tries to reload input operand with:

(insn 193 5 191 2 (set (reg:SI 338)
        (subreg/j:SI (reg/v:V32HI 165 [ u ]) 0)) "pr118067.c":10:8 96
{*movsi_internal}
     (nil))
(note 191 193 192 2 NOTE_INSN_DELETED)
(insn 192 191 9 2 (set (subreg/j:SI (reg:HI 337) 0)
        (reg:SI 338)) "pr118067.c":10:8 96 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 338)
        (nil)))
(insn 9 192 10 2 (parallel [
            (set (reg:HI 99 [ _2 ])
                (lshiftrt:HI (reg:HI 337)
                    (const_int 1 [0x1])))
            (clobber (reg:CC 17 flags))
        ]) "pr118067.c":10:8 1215 {*lshrhi3_1}
     (expr_list:REG_DEAD (reg:HI 337)
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))
...
(insn 209 156 158 2 (set (reg:HI 354 [orig:99 _2 ] [99])
        (reg:HI 99 [ _2 ])) "pr118067.c":10:8 97 {*movhi_internal}
     (expr_list:REG_DEAD (reg:HI 99 [ _2 ])
        (nil)))

and chooses alternative 1 using mask register reload r337:

      Choosing alt 1 in insn 9:  (0) ?k  (1) k  (2) Ww {*lshrhi3_1}
      Creating newreg=337, assigning class ALL_MASK_REGS to r337

and:

      Creating newreg=338, assigning class NO_REGS to secondary r338

deleting insn with uid = 191.

with:

      Choosing alt 11 in insn 193:  (0) m  (1) ?v {*movsi_internal}
      Choosing alt 15 in insn 192:  (0) *k  (1) *kBk {*movsi_internal}
      Choosing alt 6 in insn 209:  (0) r  (1) *k {*movhi_internal}

There are plenty of mask registers available, so there is no reason for spill
failure.

Confirmed as RA problem, CC added.

Reply via email to