aboutsummaryrefslogtreecommitdiff
path: root/gcc/sel-sched.c
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2010-01-14 14:16:02 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2010-01-14 14:16:02 +0300
commitf07013eb07cfe45ef2d67ce9ddce7cea5883e5ac (patch)
treeb1c3a7504de19a5476e8315b3be562b68d760ff3 /gcc/sel-sched.c
parenta9ced68beb3b5d81dc6803f04cb33fb5e445c83a (diff)
downloadgcc-f07013eb07cfe45ef2d67ce9ddce7cea5883e5ac.zip
gcc-f07013eb07cfe45ef2d67ce9ddce7cea5883e5ac.tar.gz
gcc-f07013eb07cfe45ef2d67ce9ddce7cea5883e5ac.tar.bz2
sel-sched.c (maybe_emit_renaming_copy): Exit early when expression to rename is not separable.
2010-01-14 Alexander Monakov <amonakov@ispras.ru> * sel-sched.c (maybe_emit_renaming_copy): Exit early when expression to rename is not separable. Otherwise check that its LHS is not NULL. From-SVN: r155898
Diffstat (limited to 'gcc/sel-sched.c')
-rw-r--r--gcc/sel-sched.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index bdc7f9c..a1a0ec0 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -5823,14 +5823,19 @@ maybe_emit_renaming_copy (rtx insn,
moveop_static_params_p params)
{
bool insn_emitted = false;
- rtx cur_reg = expr_dest_reg (params->c_expr);
+ rtx cur_reg;
- gcc_assert (!cur_reg || (params->dest && REG_P (params->dest)));
+ /* Bail out early when expression can not be renamed at all. */
+ if (!EXPR_SEPARABLE_P (params->c_expr))
+ return false;
+
+ cur_reg = expr_dest_reg (params->c_expr);
+ gcc_assert (cur_reg && params->dest && REG_P (params->dest));
/* If original operation has expr and the register chosen for
that expr is not original operation's dest reg, substitute
operation's right hand side with the register chosen. */
- if (cur_reg != NULL_RTX && REGNO (params->dest) != REGNO (cur_reg))
+ if (REGNO (params->dest) != REGNO (cur_reg))
{
insn_t reg_move_insn, reg_move_insn_rtx;