OSDN Git Service

PR target/32335
authoraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Jun 2007 20:05:56 +0000 (20:05 +0000)
committeraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Jun 2007 20:05:56 +0000 (20:05 +0000)
* 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

gcc/ChangeLog
gcc/config/avr/avr.c
gcc/config/avr/avr.md

index 72780c1..e01cf06 100644 (file)
@@ -1,3 +1,11 @@
+2007-06-29 Anatoly Sokolov <aesok@post.ru>
+
+       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  <rguenther@suse.de>
 
        PR middle-end/32493
index a393cff..d9dec88 100644 (file)
@@ -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
index 34dc703..2a7c9c8 100644 (file)
 ;;  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")