From: aesok Date: Fri, 29 Jun 2007 20:05:56 +0000 (+0000) Subject: PR target/32335 X-Git-Tag: upstream/4.9.2~47810 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a4c6e6a2c9dfd34ec1dc8b08e87a81ca0a8c138e;p=platform%2Fupstream%2Flinaro-gcc.git PR target/32335 * config/avr/avr.c: Include dataflow header file. (expand_prologue): Adjust for prologue insn change. * config/avr/avr.md (call_prologue_saves): Only modify REG_SP once inside a insn. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126121 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 72780c1..e01cf06 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2007-06-29 Anatoly Sokolov + + PR target/32335 + * config/avr/avr.c: Include dataflow header file. + (expand_prologue): Adjust for prologue insn change. + * config/avr/avr.md (call_prologue_saves): Only modify REG_SP once + inside a insn. + 2007-06-29 Richard Guenther PR middle-end/32493 diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index a393cff..d9dec88 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -44,6 +44,7 @@ #include "tm_p.h" #include "target.h" #include "target-def.h" +#include "df.h" /* Maximal allowed offset for an address in the LD command */ #define MAX_LD_OFFSET(MODE) (64 - (signed)GET_MODE_SIZE (MODE)) @@ -631,9 +632,13 @@ expand_prologue (void) } else if (minimize && (frame_pointer_needed || live_seq > 6)) { + insn = emit_move_insn (gen_rtx_REG (HImode, REG_X), + gen_int_mode (size, HImode)); + RTX_FRAME_RELATED_P (insn) = 1; + insn = - emit_insn (gen_call_prologue_saves (gen_int_mode (size, HImode), - gen_int_mode (live_seq, HImode))); + emit_insn (gen_call_prologue_saves (gen_int_mode (live_seq, HImode), + gen_int_mode (size + live_seq, HImode))); RTX_FRAME_RELATED_P (insn) = 1; } else diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 34dc703..2a7c9c8 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -2706,20 +2706,16 @@ ;; Library prologue saves (define_insn "call_prologue_saves" [(unspec_volatile:HI [(const_int 0)] UNSPECV_PROLOGUE_SAVES) - (set (reg:HI REG_SP) (minus:HI - (reg:HI REG_SP) - (match_operand:HI 0 "immediate_operand" ""))) + (match_operand:HI 0 "immediate_operand" "") (set (reg:HI REG_SP) (minus:HI (reg:HI REG_SP) (match_operand:HI 1 "immediate_operand" ""))) - (set (reg:HI REG_X) (match_dup 0)) + (use (reg:HI REG_X)) (clobber (reg:HI REG_Z))] "" - "ldi r26,lo8(%0) - ldi r27,hi8(%0) - ldi r30,pm_lo8(1f) + "ldi r30,pm_lo8(1f) ldi r31,pm_hi8(1f) - %~jmp __prologue_saves__+((18 - %1) * 2) + %~jmp __prologue_saves__+((18 - %0) * 2) 1:" [(set_attr_alternative "length" [(if_then_else (eq_attr "mcu_mega" "yes")