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

Drea Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2026-10-20
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Drea Pinski <pinskia at gcc dot gnu.org> ---
from .final:
```
(insn 67 60 22 2 (set (reg/v:SI 38 r10 [orig:122 offset ] [122])
        (reg:SI 4 si [orig:149 bit ] [149])) "/app/example.cpp":4:14 100
{*movsi_internal}
     (nil))
...
(insn 11 61 95 2 (parallel [
            (set (reg/v:SI 38 r10 [orig:122 offset ] [122])
                (and:SI (reg/v:SI 38 r10 [orig:122 offset ] [122])
                    (const_int 63 [0x3f])))
            (clobber (reg:CC 17 flags))
        ]) "/app/example.cpp":4:14 754 {*andsi_1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
...
(insn 65 85 96 2 (set (reg:QI 2 cx [orig:132 _36 ] [132])
        (reg:QI 4 si [orig:149 bit ] [149])) "/app/example.cpp":4:14 102
{*movqi_internal}
     (nil))
...
(insn 71 97 72 2 (parallel [
            (set (reg:SI 2 cx [orig:132 _36 ] [132])
                (and:SI (reg:SI 2 cx [orig:132 _36 ] [132])
                    (const_int 63 [0x3f])))
            (clobber (reg:CC 17 flags))
        ]) "/app/example.cpp":4:14 754 {*andsi_1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
```

Combine creates them:
```
(insn 10 9 11 2 (parallel [
            (set (reg:QI 132 [ _36 ])
                (and:QI (subreg:QI (reg/v:DI 129 [ bit ]) 0)
                    (const_int 63 [0x3f])))
            (clobber (reg:CC 17 flags))
        ]) "/app/example.cpp":4:14 756 {*andqi_1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
(insn 11 10 13 2 (parallel [
            (set (reg/v:SI 122 [ offset ])
                (and:SI (subreg:SI (reg/v:DI 129 [ bit ]) 0)
                    (const_int 63 [0x3f])))
            (clobber (reg:CC 17 flags))
        ]) "/app/example.cpp":4:14 754 {*andsi_1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
```


```
Trying 10 -> 11:
   10: {r132:QI=r129:DI#0&0x3f;clobber flags:CC;}
      REG_UNUSED flags:CC
   11: r122:SI=zero_extend(r132:QI)
Failed to match this instruction:
(parallel [
        (set (reg/v:SI 122 [ offsetD.3492 ])
            (and:SI (subreg:SI (reg/v:DI 129 [ bitD.3487 ]) 0)
                (const_int 63 [0x3f])))
        (set (reg:QI 132 [ _36 ])
            (and:QI (subreg:QI (reg/v:DI 129 [ bitD.3487 ]) 0)
                (const_int 63 [0x3f])))
    ])
Failed to match this instruction:
(parallel [
        (set (reg/v:SI 122 [ offsetD.3492 ])
            (and:SI (subreg:SI (reg/v:DI 129 [ bitD.3487 ]) 0)
                (const_int 63 [0x3f])))
        (set (reg:QI 132 [ _36 ])
            (and:QI (subreg:QI (reg/v:DI 129 [ bitD.3487 ]) 0)
                (const_int 63 [0x3f])))
    ])
Successfully matched this instruction:
(set (reg:QI 132 [ _36 ])
    (and:QI (subreg:QI (reg/v:DI 129 [ bitD.3487 ]) 0)
        (const_int 63 [0x3f])))
Successfully matched this instruction:
(set (reg/v:SI 122 [ offsetD.3492 ])
    (and:SI (subreg:SI (reg/v:DI 129 [ bitD.3487 ]) 0)
        (const_int 63 [0x3f])))
allowing combination of insns 10 and 11
original costs 4 + 4 = 8
replacement costs 4 + 4 = 8
modifying insn i2    10: {r132:QI=r129:DI#0&0x3f;clobber flags:CC;}
      REG_UNUSED flags:CC
deferring rescan insn with uid = 10.
modifying insn i3    11: {r122:SI=r129:DI#0&0x3f;clobber flags:CC;}
      REG_UNUSED flags:CC
deferring rescan insn with uid = 11.
```

Instead of setting 122 to the and and then setting 132 to a subreg of 122.  It
duplicated the and

Reply via email to