re PR target/62642 (x86 rdtsc is moved through barrier)
authorVladimir Makarov <vmakarov@redhat.com>
Mon, 15 Dec 2014 20:04:04 +0000 (20:04 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Mon, 15 Dec 2014 20:04:04 +0000 (20:04 +0000)
2014-12-15  Vladimir Makarov  <vmakarov@redhat.com>

PR target/62642
* ira.c (rtx_moveable_p): Prevent UNSPEC_VOLATILE moves.

From-SVN: r218761

gcc/ChangeLog
gcc/ira.c

index 8276d64..87ee0f9 100644 (file)
@@ -1,9 +1,14 @@
 2014-12-15  Vladimir Makarov  <vmakarov@redhat.com>
 
+       PR target/62642
+       * ira.c (rtx_moveable_p): Prevent UNSPEC_VOLATILE moves.
+
+2014-12-15  Vladimir Makarov  <vmakarov@redhat.com>
+
        * ira-int.h (ira_prohibited_class_mode_regs): Remove.
        (struct target_ira_int): Move x_ira_prohibited_class_mode_regs to
        ...
-       * ira.h (struct target_ira_int): ... here.
+       * ira.h (struct target_ira): ... here.
        (ira_prohibited_class_mode_regs): Define.
        * lra-constraints.c (process_alt_operands): Add one more condition
        to refuse alternative when reload pseudo of given class can not
index e610d35..f08aa23 100644 (file)
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -4358,6 +4358,12 @@ rtx_moveable_p (rtx *loc, enum op_type type)
     case CLOBBER:
       return rtx_moveable_p (&SET_DEST (x), OP_OUT);
 
+    case UNSPEC_VOLATILE:
+      /* It is a bad idea to consider insns with with such rtl
+        as moveable ones.  The insn scheduler also considers them as barrier
+        for a reason.  */
+      return false;
+
     default:
       break;
     }