aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2002-01-08 13:11:23 +0000
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2002-01-08 13:11:23 +0000
commitf3fd783b565d377ad4edf6ff8c3da11c795af3ef (patch)
tree6c185c391fc86cc3eb147049489c6c8e688c88bb
parentc9138733af0688f73ffe75a3c298a782a0a6c6cb (diff)
* config/s390/linux.h (ASM_OUTPUT_LABELREF): Remove.
* config/s390/s390.c (s390_emit_epilog): Add REG_FRAME_RELATED_EXPR to insn adjusting stack/frame pointer. * config/s390/s390.md (reload_la_64, reload_la_31): Do not accept operands that cause the insn to be non-splittable. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48643 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/s390/linux.h3
-rw-r--r--gcc/config/s390/s390.c6
-rw-r--r--gcc/config/s390/s390.md13
4 files changed, 23 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2165b08f189..bf21f7b555e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2002-01-08 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/linux.h (ASM_OUTPUT_LABELREF): Remove.
+ * config/s390/s390.c (s390_emit_epilog): Add REG_FRAME_RELATED_EXPR
+ to insn adjusting stack/frame pointer.
+ * config/s390/s390.md (reload_la_64, reload_la_31): Do not
+ accept operands that cause the insn to be non-splittable.
+
2002-01-08 Graham Stott <grahams@redhat.com>
* c-tree.h (C_TYPE_FIELDS_READONLY): Uppercase macro parameter.
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
index 9c01e5815e5..55c602edb24 100644
--- a/gcc/config/s390/linux.h
+++ b/gcc/config/s390/linux.h
@@ -82,9 +82,6 @@ Boston, MA 02111-1307, USA. */
/* Prefix for internally generated assembler labels. */
#define LPREFIX ".L"
-#define ASM_OUTPUT_LABELREF(FILE, NAME) \
- fprintf (FILE, "%s", NAME);
-
/* This is how to output the definition of a user-level label named NAME,
such as the label on a static function or variable NAME. */
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index cc409e3aafa..83de4da2cc1 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -3078,6 +3078,12 @@ s390_emit_epilogue ()
insn = emit_insn (gen_add2_insn (frame_pointer, frame_off));
RTX_FRAME_RELATED_P (insn) = 1;
+ REG_NOTES (insn) =
+ gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
+ gen_rtx_SET (VOIDmode, frame_pointer,
+ gen_rtx_PLUS (Pmode, frame_pointer,
+ GEN_INT (frame.frame_size - offset))),
+ REG_NOTES (insn));
}
/* Restore call saved fprs. */
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index a056110378a..31822c9413c 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -3153,7 +3153,10 @@
[(set (match_operand:DI 0 "register_operand" "=d")
(plus:DI (match_operand:DI 1 "general_operand" "g")
(match_operand:DI 2 "general_operand" "g")))]
- "TARGET_64BIT && reload_in_progress"
+ "TARGET_64BIT && reload_in_progress
+ && !address_operand (gen_rtx_PLUS (DImode, operands[1], operands[2]), QImode)
+ && !rtx_equal_p (operands[0], operands[1])
+ && !rtx_equal_p (operands[0], operands[2])"
"#")
(define_split
@@ -3173,7 +3176,6 @@
operands[1] = force_const_mem (DImode, operands[1]);
}")
-
(define_split
[(set (match_operand:DI 0 "register_operand" "")
(plus:DI (match_operand:DI 1 "register_operand" "")
@@ -3297,7 +3299,10 @@
[(set (match_operand:SI 0 "register_operand" "=d")
(plus:SI (match_operand:SI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))]
- "reload_in_progress"
+ "reload_in_progress
+ && !address_operand (gen_rtx_PLUS (SImode, operands[1], operands[2]), QImode)
+ && !rtx_equal_p (operands[0], operands[1])
+ && !rtx_equal_p (operands[0], operands[2])"
"#")
(define_split
@@ -3333,7 +3338,7 @@
&& !legitimate_reload_constant_p (operands[2]))
operands[2] = force_const_mem (SImode, operands[2]);
}")
-
+
;
; addhi3 instruction pattern(s).