diff options
author | Jeff Law <law@gcc.gnu.org> | 1992-09-02 17:08:44 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1992-09-02 17:08:44 -0600 |
commit | c515799cd1dcb0df1462738acce002dd6f9f0099 (patch) | |
tree | b232ee329c42b7d80e02a4c5264140599800c7c0 | |
parent | c07c29b98c3406fa3ff6c924b8400346a49732d3 (diff) | |
download | gcc-c515799cd1dcb0df1462738acce002dd6f9f0099.zip gcc-c515799cd1dcb0df1462738acce002dd6f9f0099.tar.gz gcc-c515799cd1dcb0df1462738acce002dd6f9f0099.tar.bz2 |
caller-save.c (init_caller_save): If we were unable to find a simple insn which meets all its constraints to save...
* caller-save.c (init_caller_save): If we were unable to
find a simple insn which meets all its constraints to save
and restore with a single insn in a mode, then set
regno_save_mode to VOIDmode to insure that this mode is never
used to caller-save the current register.
From-SVN: r2038
-rw-r--r-- | gcc/caller-save.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/caller-save.c b/gcc/caller-save.c index ed4c781..35dc355 100644 --- a/gcc/caller-save.c +++ b/gcc/caller-save.c @@ -223,11 +223,15 @@ init_caller_save () ok &= constrain_operands (reg_restore_code[i][j], 1); } - if (! ok && j == 1) - { - call_fixed_regs[i] = 1; - SET_HARD_REG_BIT (call_fixed_reg_set, i); - } + if (! ok) + { + regno_save_mode[i][j] = VOIDmode; + if (j == 1) + { + call_fixed_regs[i] = 1; + SET_HARD_REG_BIT (call_fixed_reg_set, i); + } + } } end_sequence (); |