diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-09-02 23:08:44 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-09-02 23:08:44 +0000 |
commit | 6e0a289cfe3e446684cdbf8cc3f692041c2c17d5 (patch) | |
tree | b232ee329c42b7d80e02a4c5264140599800c7c0 /gcc/caller-save.c | |
parent | 8745019ddb6f71beead15cdd083414b7b2076ffb (diff) | |
download | gcc-6e0a289cfe3e446684cdbf8cc3f692041c2c17d5.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@2038 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/caller-save.c')
-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 ed4c7819336..35dc355e4fc 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 (); |