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