aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2010-01-14 14:13:36 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2010-01-14 14:13:36 +0300
commit0c94f956cf3f91faa1ec0364568fa51ad51d1a91 (patch)
treec6f74d619b6674a5dcebcea86e3e405121292c65 /gcc
parent136e01a3a9df48f5edc19e5b46c9c418a7fdd8f5 (diff)
downloadgcc-0c94f956cf3f91faa1ec0364568fa51ad51d1a91.zip
gcc-0c94f956cf3f91faa1ec0364568fa51ad51d1a91.tar.gz
gcc-0c94f956cf3f91faa1ec0364568fa51ad51d1a91.tar.bz2
sel-sched.c (mark_unavailable_hard_regs): Do not try to search available registers when failed to discover LHS register class.
2010-01-14 Alexander Monakov <amonakov@ispras.ru> * sel-sched.c (mark_unavailable_hard_regs): Do not try to search available registers when failed to discover LHS register class. Fix indentation. Update comment. From-SVN: r155896
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/sel-sched.c18
2 files changed, 15 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1f9b351..56375a9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-01-14 Alexander Monakov <amonakov@ispras.ru>
+
+ * sel-sched.c (mark_unavailable_hard_regs): Do not try to search
+ available registers when failed to discover LHS register class.
+ Fix indentation. Update comment.
+
2010-01-14 Andrey Belevantsev <abel@ispras.ru>
Alexander Monakov <amonakov@ispras.ru>
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 1b8f471..7fb0882 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -1229,19 +1229,19 @@ mark_unavailable_hard_regs (def_t def, struct reg_rename *reg_rename_p,
if (!reload_completed && !HARD_REGISTER_NUM_P (regno))
return;
- mode = GET_MODE (orig_dest);
+ if (reload_completed)
+ cl = get_reg_class (def->orig_insn);
- /* Stop when mode is not supported for renaming. Also can't proceed
- if the original register is one of the fixed_regs, global_regs or
- frame pointer. */
+ /* Stop if the original register is one of the fixed_regs, global_regs or
+ frame pointer, or we could not discover its class. */
if (fixed_regs[regno]
|| global_regs[regno]
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
- || (frame_pointer_needed && regno == HARD_FRAME_POINTER_REGNUM)
+ || (frame_pointer_needed && regno == HARD_FRAME_POINTER_REGNUM)
#else
- || (frame_pointer_needed && regno == FRAME_POINTER_REGNUM)
+ || (frame_pointer_needed && regno == FRAME_POINTER_REGNUM)
#endif
- )
+ || (reload_completed && cl == NO_REGS))
{
SET_HARD_REG_SET (reg_rename_p->unavailable_hard_regs);
@@ -1296,11 +1296,11 @@ mark_unavailable_hard_regs (def_t def, struct reg_rename *reg_rename_p,
/* Leave regs as 'available' only from the current
register class. */
- cl = get_reg_class (def->orig_insn);
- gcc_assert (cl != NO_REGS);
COPY_HARD_REG_SET (reg_rename_p->available_for_renaming,
reg_class_contents[cl]);
+ mode = GET_MODE (orig_dest);
+
/* Leave only registers available for this mode. */
if (!sel_hrd.regs_for_mode_ok[mode])
init_regs_for_mode (mode);