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 + + * 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 * 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).