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. ```