summaryrefslogtreecommitdiff
path: root/gcc/caller-save.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1992-09-02 23:08:44 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1992-09-02 23:08:44 +0000
commit6e0a289cfe3e446684cdbf8cc3f692041c2c17d5 (patch)
treeb232ee329c42b7d80e02a4c5264140599800c7c0 /gcc/caller-save.c
parent8745019ddb6f71beead15cdd083414b7b2076ffb (diff)
downloadgcc-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.c14
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 ();