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

            Bug ID: 117699
           Summary: Scratch from peephole2 overlaps operands
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gjl at gcc dot gnu.org
  Target Milestone: ---

Created attachment 59641
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59641&action=edit
bogus-peep2.diff

THIS PR REQUIRES A PATCH bogus-peep2.diff AS ATTACHED TO REPRODUCE

The required patch is atop 2024-11-19 current trunk
b222ee10045db06655d2a9f0d87e25c5083d98c8

On an early work-in-progress, peephole2 produces the following insn:

$ avr-gcc bogus-peep2.c -S -Os -da

long ashl32_7 (int i, long x)
{
    return x << 7;
}

$ cat bogus-peep2.c.333r.peephole2

Splitting with gen_peephole2_100 (avr.md:5387)
...
(insn 24 8 15 2 (parallel [
            (set (reg:SI 22 r22 [orig:47 _3 ] [47])
                 (ashift:SI (reg:SI 20 r20 [orig:48 x ] [48])
                            (const_int 7 [0x7])))
            (clobber (reg:QI 24 r24))
            (clobber (reg:CC 36 cc))
        ]) "bogus-peep2.c":3:14 -1
     (nil))

Output reg22:SI extends from r22...r25 and scratch r24:QI overlaps it.
This is the RTL peephole avr.md:5387:

(define_peephole2
  [(match_scratch:QI 3 "d")
   (parallel [(set (match_operand:ALL4 0 "register_operand" "")
                   (ashift:ALL4 (match_operand:ALL4 1 "register_operand" "")
                                (match_operand:QI 2 "const_int_operand" "")))
              (clobber (reg:CC REG_CC))])]
  ""
  [(parallel [(set (match_dup 0)
                   (ashift:ALL4 (match_dup 1)
                                (match_dup 2)))
              (clobber (match_dup 3))
              (clobber (reg:CC REG_CC))])])


Target: avr
Configured with: ../../source/gcc-master/configure --target=avr --disable-nls
--with-dwarf2 --with-gnu-as --with-gnu-ld --disable-shared
--enable-languages=c,c++
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 15.0.0 20241119 (experimental) (GCC)

Reply via email to