https://gcc.gnu.org/g:aa972d027437784686dfc66180dc1b640e7dbb39
commit r15-7495-gaa972d027437784686dfc66180dc1b640e7dbb39 Author: Andrew Pinski <quic_apin...@quicinc.com> Date: Tue Feb 11 15:13:07 2025 -0800 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_apin...@quicinc.com> Diff: --- gcc/ifcvt.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc index cb5597bc171d..6d67bef41c88 100644 --- a/gcc/ifcvt.cc +++ b/gcc/ifcvt.cc @@ -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;