The following patch fixes
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62642
The patch was successfully bootstrapped on x86-64.
It is difficult for me to make a testcase to check the right code
generation. So the patch has no test.
Committed as rev. 218761.
2014-12-15 Vladimir Makarov <vmaka...@redhat.com>
PR target/62642
* ira.c (rtx_moveable_p): Prevent UNSPEC_VOLATILE moves.
Index: ira.c
===================================================================
--- ira.c (revision 218685)
+++ ira.c (working copy)
@@ -4358,6 +4358,12 @@ rtx_moveable_p (rtx *loc, enum op_type t
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;
}