From: Vladimir Makarov Date: Mon, 15 Dec 2014 20:04:04 +0000 (+0000) Subject: re PR target/62642 (x86 rdtsc is moved through barrier) X-Git-Tag: releases/gcc-5.1.0~2342 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d8c1674416836c4b4573172b541992ddd12df713;p=thirdparty%2Fgcc.git re PR target/62642 (x86 rdtsc is moved through barrier) 2014-12-15 Vladimir Makarov PR target/62642 * ira.c (rtx_moveable_p): Prevent UNSPEC_VOLATILE moves. From-SVN: r218761 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8276d646c5d8..87ee0f9f4757 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,9 +1,14 @@ +2014-12-15 Vladimir Makarov + + PR target/62642 + * ira.c (rtx_moveable_p): Prevent UNSPEC_VOLATILE moves. + 2014-12-15 Vladimir Makarov * 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 e610d3581776..f08aa23e408d 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; }