aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1992-09-02 17:08:44 -0600
committerJeff Law <law@gcc.gnu.org>1992-09-02 17:08:44 -0600
commitc515799cd1dcb0df1462738acce002dd6f9f0099 (patch)
treeb232ee329c42b7d80e02a4c5264140599800c7c0
parentc07c29b98c3406fa3ff6c924b8400346a49732d3 (diff)
downloadgcc-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.c14
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 ();