HAO CHEN GUI <guih...@linux.ibm.com> writes: > Hi Richard, > > 在 2024/6/17 17:04, Richard Sandiford 写道: >> I don't think we should keep the single_set condition after this change. >> insn_cost can handle all instructions. > > Just tested with removing single_set condition. It causes some regressions. > If the new_rtl is a debug insn, it still can do the replacement as it can > be recog and it's not a single_set rtl. After removing single_set condition, > the "ok" (recog) will be reset to false in the "if" block as the cost of > debug insn is unknown. So the replacement won't be done. > > bool ok = recog (attempt, use_change); > if (ok && !prop.changed_mem_p () && !use_insn->is_asm ()) > { > bool strict_p = !prop.likely_profitable_p (); > if (!change_is_worthwhile (use_change, strict_p)) > { > if (dump_file) > fprintf (dump_file, "change not profitable"); > ok = false; > } > } > > if (!ok) > { > /* The pattern didn't match, but if all uses of SRC folded to > constants, we can add a REG_EQUAL note for the result, if there > isn't one already. */ > if (!prop.folded_to_constants_p ())
We shouldn't be trying to cost changes to debug insns, so I think the extra condition should be !use_insn->is_debug_insn (). Thanks, Richard