https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113280
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|ra |
Ever confirmed|0 |1
Last reconfirmed| |2024-01-08
Component|middle-end |rtl-optimization
Status|UNCONFIRMED |NEW
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So the problem seems like combine decides somehow to
combine:
```
(insn 7 4 9 2 (set (reg/v:SF 100 [ xD.4459 ])
(plus:SF (reg/v:SF 102 [ aD.4455 ])
(reg/v:SF 103 [ bD.4456 ]))) "/app/example.cpp":6:7 1043 {addsf3}
(expr_list:REG_DEAD (reg/v:SF 102 [ aD.4455 ])
(nil)))
(insn 9 7 10 2 (set (reg:SF 104 [ xD.4459 ])
(asm_operands:SF ("") ("=X") 0 [
(reg/v:SF 100 [ xD.4459 ])
]
[
(asm_input:SF ("0") /app/example.cpp:8)
]
[] /app/example.cpp:8)) "/app/example.cpp":8:5 -1
(expr_list:REG_DEAD (reg/v:SF 100 [ xD.4459 ])
(nil)))
into:
```
(insn 9 7 10 2 (set (reg:SF 104 [ xD.4459 ])
(asm_operands:SF ("") ("=X") 0 [
(plus:SF (reg:SF 106)
(reg/v:SF 103 [ bD.4456 ]))
]
[
(asm_input:SF ("0") /app/example.cpp:8)
]
[] /app/example.cpp:8)) "/app/example.cpp":8:5 -1
(expr_list:REG_DEAD (reg:SF 106)
(nil)))
```
But the dump from combine does not make sense:
```
Trying 7 -> 9:
7: r100:SF=r106:SF+r103:SF
REG_DEAD r106:SF
9: r104:SF=asm_operands
REG_DEAD r100:SF
Failed to match this instruction:
(set (reg:SF 104 [ xD.4459 ])
(asm_operands:SF ("") ("=X") 0 [
(plus:SF (reg:SF 106)
(reg/v:SF 103 [ bD.4456 ]))
]
[
(asm_input:SF ("0") /app/example.cpp:8)
]
[] /app/example.cpp:8))
allowing combination of insns 7 and 9
original costs 8 + 4 = 12
replacement cost 4
deferring deletion of insn with uid = 7.
modifying insn i3 9: r104:SF=asm_operands
REG_DEAD r106:SF
deferring rescan insn with uid = 9.
```