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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
      Known to fail|16.0                        |15.2.1
   Last reconfirmed|                            |2025-12-30
     Ever confirmed|0                           |1

--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> ---
The issue happens in LRA, I was able to trigger the bug with current x86_64
gcc-15:

Target: x86_64-pc-linux-gnu
gcc version 15.2.1 20251230 [releases/gcc-15 r15-10642-ga54c5e248ad] (GCC) 


We have the following in _.324r.ira:

...

(insn 425 430 441 11 (parallel [
            (set (reg/v:SI 675 [ r ])
                (plus:SI (reg:SI 103 [ _6 ])
                    (const_int -8 [0xfffffffffffffff8])))
            (clobber (reg:CC 17 flags))
        ]) "pr123121.c":37:5 283 {*addsi_1}
     (expr_list:REG_DEAD (reg:SI 103 [ _6 ])
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))
...

(insn 736 433 435 11 (set (reg:SI 994)
        (const_int 0 [0])) "pr123121.c":39:12 96 {*movsi_internal}
     (expr_list:REG_EQUIV (const_int 0 [0])
        (nil)))
(insn 435 736 442 11 (set (reg:SI 992 [ _9 ])
        (if_then_else:SI (leu (reg:CC 17 flags)
                (const_int 0 [0]))
            (reg/v:SI 675 [ r ])
            (reg:SI 994))) "pr123121.c":39:12 1804 {*movsicc_noc}
     (expr_list:REG_DEAD (reg:SI 994)
        (expr_list:REG_DEAD (reg:CC 17 flags)
            (expr_list:REG_EQUAL (if_then_else:SI (leu (reg:CC 17 flags)
                        (const_int 0 [0]))
                    (reg/v:SI 675 [ r ])
                    (const_int 0 [0]))
                (nil)))))
...

and in _.325r.reload dump:

       ...
  425: {r15:SI=dx:SI-0x8;clobber flags:CC;}                  <- sets r15
  980: NOTE_INSN_DELETED
  441: r13:DI=zero_extend(bp:QI)
  887: dx:SI=bp:SI
  446: di:SI=zero_extract(dx:SI,0x8,0x8)
  886: r9:SI=di:SI
  428: {ax:SI=0x1/si:SI;dx:SI=0x1%si:SI;clobber flags:CC;}
  986: NOTE_INSN_DELETED
 1014: NOTE_INSN_DELETED
  467: r8:DI=zero_extend(si:QI)
  889: ax:SI=si:SI
  471: di:SI=zero_extract(ax:SI,0x8,0x8)
  888: r11:SI=di:SI
 1013: NOTE_INSN_DELETED
 1012: [sp:DI-0x28]=r10:DI
  890: r10:DI=[sp:DI-0x28]
  438: di:SI=[r10:DI+0x8]
  978: ax:SI=[sp:DI-0x20]
  542: dx:DI=zero_extend(ax:QI)
  891: [sp:DI-0x70]=dx:DI
 1011: NOTE_INSN_DELETED
  977: NOTE_INSN_DELETED
 1010: NOTE_INSN_DELETED
 1009: [sp:DI-0x20]=ax:SI
  893: ax:SI=[sp:DI-0x20]
  546: dx:SI=zero_extract(ax:SI,0x8,0x8)
  892: [sp:DI-0x64]=dx:SI
 1008: NOTE_INSN_DELETED
  975: NOTE_INSN_DELETED
  561: r12:DI=zero_extend(r15:QI)
  973: ax:SI=r15:SI                                         <- moves r15 to rax
  571: dx:SI=zero_extract(ax:SI,0x8,0x8)
  894: [sp:DI-0x74]=dx:SI
 1007: NOTE_INSN_DELETED
  972: NOTE_INSN_DELETED
  517: r10:DI=zero_extend(di:QI)
  897: dx:SI=di:SI
  521: dx:SI=zero_extract(dx:SI,0x8,0x8)
  896: [sp:DI-0x68]=dx:SI
 1006: NOTE_INSN_DELETED
  971: NOTE_INSN_DELETED
 1019: {ax:SI=0x1/si:SI;dx:SI=0x1%si:SI;clobber flags:CC;}  <- *** clobbers rax
  984: NOTE_INSN_DELETED
  429: {dx:SI=dx:SI-r14:SI;clobber flags:CC;}
  433: flags:CC=cmp(bx:SI,0x2)
  736: bx:SI=0
      REG_EQUIV 0
 1005: NOTE_INSN_DELETED
  898: NOTE_INSN_DELETED
 1004: [sp:DI-0x1c]=ax:SI                                  <- spills clobbered
rax
  983: NOTE_INSN_DELETED
  435: bx:SI={(leu(flags:CC,0))?[sp:DI-0x1c]:bx:SI}        <- fills clobbered
rax
      REG_EQUAL {(leu(flags:CC,0))?r675:SI:0}
      ...

FYI, I was not able to trigger the bug with current mainline:

gcc version 16.0.0 20251209 (experimental) [master r16-5996-g0fcb1bd46a4] (GCC) 

So, it is either fixed or gone latent in the mainline.

Reply via email to