aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2014-12-15 20:04:04 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2014-12-15 20:04:04 +0000
commitd8c1674416836c4b4573172b541992ddd12df713 (patch)
tree66048c3dfb9781777bc6aed4106af213685f2349
parent7b6e0c544a78f8ab4c5dc2c09b77266f870124e1 (diff)
downloadgcc-d8c1674416836c4b4573172b541992ddd12df713.zip
gcc-d8c1674416836c4b4573172b541992ddd12df713.tar.gz
gcc-d8c1674416836c4b4573172b541992ddd12df713.tar.bz2
re PR target/62642 (x86 rdtsc is moved through barrier)
2014-12-15 Vladimir Makarov <vmakarov@redhat.com> PR target/62642 * ira.c (rtx_moveable_p): Prevent UNSPEC_VOLATILE moves. From-SVN: r218761
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ira.c6
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8276d64..87ee0f9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/ira.c b/gcc/ira.c
index e610d35..f08aa23 100644
--- 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;
}