diff options
author | Alexander Monakov <amonakov@ispras.ru> | 2010-01-14 14:13:36 +0300 |
---|---|---|
committer | Alexander Monakov <amonakov@gcc.gnu.org> | 2010-01-14 14:13:36 +0300 |
commit | 0c94f956cf3f91faa1ec0364568fa51ad51d1a91 (patch) | |
tree | c6f74d619b6674a5dcebcea86e3e405121292c65 /gcc | |
parent | 136e01a3a9df48f5edc19e5b46c9c418a7fdd8f5 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/sel-sched.c | 18 |
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); |