ifcvt: Don't speculation move inline-asm [PR102150]

So unlike loop invariant motion, moving an inline-asm out of an
if is not always profitable and the cost estimate for the instruction
inside inline-asm is unknown.

This is a regression from GCC 4.6 which didn't speculatively move inline-asm
as far as I can tell.
Bootstrapped and tested on x86_64-linux-gnu.

	PR rtl-optimization/102150
gcc/ChangeLog:

	* ifcvt.cc (cheap_bb_rtx_cost_p): Return false if the insn
	has an inline-asm in it.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
This commit is contained in:
Andrew Pinski 2025-02-11 15:13:07 -08:00
parent 30dfcecddc
commit aa972d0274

View file

@ -166,6 +166,13 @@ cheap_bb_rtx_cost_p (const_basic_block bb,
{
if (NONJUMP_INSN_P (insn))
{
/* Inline-asm's cost is not very estimatable.
It could be a costly instruction but the
estimate would be the same as a non costly
instruction. */
if (asm_noperands (PATTERN (insn)) >= 0)
return false;
int cost = insn_cost (insn, speed) * REG_BR_PROB_BASE;
if (cost == 0)
return false;