summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2005-05-23 16:43:06 +0000
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2005-05-23 16:43:06 +0000
commit43944aa4bf5cda5c46a808cb8d816bb4ad7f2eb6 (patch)
tree75fe125e64472287e5cab8c642b6da6eefe175a9
parent134f92d719f5437eae5b338f1787578a1c1444af (diff)
downloadgcc-43944aa4bf5cda5c46a808cb8d816bb4ad7f2eb6.tar.gz
2005-05-23 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.c (s390_optimize_prologue): Don't replace an insn saving less registers than the replacement. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100081 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/s390/s390.c34
2 files changed, 17 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 25e9ec32955..783c56dbf6c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-05-23 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * config/s390/s390.c (s390_optimize_prologue): Don't replace an insn
+ saving less registers than the replacement.
+
2005-05-23 Jan Hubicka <jh@suse.cz>
* tree-flow.h (stmt_ann_d): Kill GTY ((skip)) mark on BB.
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 7cf56cc13a3..9de797a97a3 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -7951,6 +7951,10 @@ s390_optimize_prologue (void)
if (GET_CODE (base) != REG || off < 0)
continue;
+ if (cfun_frame_layout.first_save_gpr != -1
+ && (cfun_frame_layout.first_save_gpr < first
+ || cfun_frame_layout.last_save_gpr > last))
+ continue;
if (REGNO (base) != STACK_POINTER_REGNUM
&& REGNO (base) != HARD_FRAME_POINTER_REGNUM)
continue;
@@ -7972,7 +7976,8 @@ s390_optimize_prologue (void)
continue;
}
- if (GET_CODE (PATTERN (insn)) == SET
+ if (cfun_frame_layout.first_save_gpr == -1
+ && GET_CODE (PATTERN (insn)) == SET
&& GET_CODE (SET_SRC (PATTERN (insn))) == REG
&& (REGNO (SET_SRC (PATTERN (insn))) == BASE_REGNUM
|| (!TARGET_CPU_ZARCH
@@ -7990,16 +7995,6 @@ s390_optimize_prologue (void)
if (REGNO (base) != STACK_POINTER_REGNUM
&& REGNO (base) != HARD_FRAME_POINTER_REGNUM)
continue;
- if (cfun_frame_layout.first_save_gpr != -1)
- {
- new_insn = save_gprs (base,
- off + (cfun_frame_layout.first_save_gpr
- - first) * UNITS_PER_WORD,
- cfun_frame_layout.first_save_gpr,
- cfun_frame_layout.last_save_gpr);
- new_insn = emit_insn_before (new_insn, insn);
- INSN_ADDRESSES_NEW (new_insn, -1);
- }
remove_insn (insn);
continue;
@@ -8017,6 +8012,10 @@ s390_optimize_prologue (void)
if (GET_CODE (base) != REG || off < 0)
continue;
+ if (cfun_frame_layout.first_restore_gpr != -1
+ && (cfun_frame_layout.first_restore_gpr < first
+ || cfun_frame_layout.last_restore_gpr > last))
+ continue;
if (REGNO (base) != STACK_POINTER_REGNUM
&& REGNO (base) != HARD_FRAME_POINTER_REGNUM)
continue;
@@ -8038,7 +8037,8 @@ s390_optimize_prologue (void)
continue;
}
- if (GET_CODE (PATTERN (insn)) == SET
+ if (cfun_frame_layout.first_restore_gpr == -1
+ && GET_CODE (PATTERN (insn)) == SET
&& GET_CODE (SET_DEST (PATTERN (insn))) == REG
&& (REGNO (SET_DEST (PATTERN (insn))) == BASE_REGNUM
|| (!TARGET_CPU_ZARCH
@@ -8056,16 +8056,6 @@ s390_optimize_prologue (void)
if (REGNO (base) != STACK_POINTER_REGNUM
&& REGNO (base) != HARD_FRAME_POINTER_REGNUM)
continue;
- if (cfun_frame_layout.first_restore_gpr != -1)
- {
- new_insn = restore_gprs (base,
- off + (cfun_frame_layout.first_restore_gpr
- - first) * UNITS_PER_WORD,
- cfun_frame_layout.first_restore_gpr,
- cfun_frame_layout.last_restore_gpr);
- new_insn = emit_insn_before (new_insn, insn);
- INSN_ADDRESSES_NEW (new_insn, -1);
- }
remove_insn (insn);
continue;