aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-04-03 19:22:29 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1992-04-03 19:22:29 -0500
commit09835ed242920b265fe83b14436121fb325de9a4 (patch)
treea7bddd8b09006ffc99a1f687300a286ec249ed0d /gcc
parent89d825c9a663b84fb5b4dfae80650d2c340bc69f (diff)
downloadgcc-09835ed242920b265fe83b14436121fb325de9a4.zip
gcc-09835ed242920b265fe83b14436121fb325de9a4.tar.gz
gcc-09835ed242920b265fe83b14436121fb325de9a4.tar.bz2
*** empty log message ***
From-SVN: r676
Diffstat (limited to 'gcc')
-rw-r--r--gcc/caller-save.c10
-rw-r--r--gcc/config/m88k/m88k.md16
2 files changed, 14 insertions, 12 deletions
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index d534b31..6e16711 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -522,6 +522,16 @@ insert_save_restore (insn, save_p, regno, insn_mode)
enum insn_code code;
int i;
+ /* A common failure mode if register status is not correct in the RTL
+ is for this routine to be called with a REGNO we didn't expect to
+ save. That will cause us to write an insn with a (nil) SET_DEST
+ or SET_SRC. Instead of doing so and causing a crash later, check
+ for this common case and abort here instead. This will remove one
+ step in debugging such problems. */
+
+ if (regno_save_mem[regno] == 0)
+ abort ();
+
/* If INSN is a CALL_INSN, we must insert our insns before any
USE insns in front of the CALL_INSN. */
diff --git a/gcc/config/m88k/m88k.md b/gcc/config/m88k/m88k.md
index 7f9841c..4212534 100644
--- a/gcc/config/m88k/m88k.md
+++ b/gcc/config/m88k/m88k.md
@@ -1244,7 +1244,6 @@
;; operand 3 is the offset for the source and destination pointers
;; operand 4 is the first value to be loaded
;; operand 5 is the register to hold the value (r4 or r5)
-;; Upon completion, r2 and r3 are unchanged
(define_expand "call_block_move"
[(set (reg:SI 3) (minus:SI (match_operand:SI 2 "register_operand" "r")
@@ -1255,13 +1254,10 @@
(match_dup 3)))
(use (reg:SI 2))
(use (reg:SI 3))
- (use (reg:SI 4))
- (use (reg:SI 5))
+ (use (match_dup 5))
(parallel [(call (mem:SI (match_operand 0 "" ""))
(const_int 0))
- (use (reg:SI 1))])
- (clobber (reg:SI 4))
- (clobber (reg:SI 5))]
+ (use (reg:SI 1))])]
""
"")
@@ -1279,15 +1275,11 @@
(set (reg:SI 6) (match_operand:SI 6 "immediate_operand" "i"))
(use (reg:SI 2))
(use (reg:SI 3))
- (use (reg:SI 4))
- (use (reg:SI 5))
+ (use (match_dup 5))
(use (reg:SI 6))
(parallel [(call (mem:SI (match_operand 0 "" ""))
(const_int 0))
- (use (reg:SI 1))])
- (clobber (reg:SI 4))
- (clobber (reg:SI 5))
- (clobber (reg:SI 6))]
+ (use (reg:SI 1))])]
""
"")