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;

Reply via email to