diff options
author | amonakov <amonakov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-14 11:16:02 +0000 |
---|---|---|
committer | amonakov <amonakov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-14 11:16:02 +0000 |
commit | f7d03b30194c3926e7c7bea1057ed616bb15b4d5 (patch) | |
tree | b1c3a7504de19a5476e8315b3be562b68d760ff3 /gcc/sel-sched.c | |
parent | 936f065ecc891b03ff28f25812fa0034dd3ef30b (diff) | |
download | gcc-f7d03b30194c3926e7c7bea1057ed616bb15b4d5.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155898 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sel-sched.c')
-rw-r--r-- | gcc/sel-sched.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index bdc7f9c42bc..a1a0ec06e0d 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; |