ifcvt.c (cheap_bb_rtx_cost_p): Don't speculatively execute x87 instructions.
authorRoger Sayle <roger@eyesopen.com>
Mon, 28 Aug 2006 00:58:47 +0000 (00:58 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 28 Aug 2006 00:58:47 +0000 (00:58 +0000)
* ifcvt.c (cheap_bb_rtx_cost_p): Don't speculatively execute
x87 instructions.

From-SVN: r116501

gcc/ChangeLog
gcc/ifcvt.c

index a91944e..3acd226 100644 (file)
@@ -1,3 +1,8 @@
+2006-08-27  Roger Sayle  <roger@eyesopen.com>
+
+       * ifcvt.c (cheap_bb_rtx_cost_p): Don't speculatively execute
+       x87 instructions.
+
 2006-08-27  Kazu Hirata  <kazu@codesourcery.com>
 
        * config/i386/crtfastmath.c: Fix a comment typo.
index 4787a24..987a2fb 100644 (file)
@@ -1,5 +1,5 @@
 /* If-conversion support.
-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
+   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
 
    This file is part of GCC.
@@ -153,14 +153,16 @@ cheap_bb_rtx_cost_p (basic_block bb, int max_cost)
 
          /* If this instruction is the load or set of a "stack" register,
             such as a floating point register on x87, then the cost of
-            speculatively executing this instruction needs to include
-            the additional cost of popping this register off of the
-            register stack.  */
+            speculatively executing this insn may need to include
+            the additional cost of popping its result off of the
+            register stack.  Unfortunately, correctly recognizing and
+            accounting for this additional overhead is tricky, so for
+            now we simply prohibit such speculative execution.  */
 #ifdef STACK_REGS
          {
            rtx set = single_set (insn);
            if (set && STACK_REG_P (SET_DEST (set)))
-             cost += COSTS_N_INSNS (1);
+             return false;
          }
 #endif