diff options
author | Anatoly Sokolov <aesok@post.ru> | 2007-06-30 00:05:56 +0400 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2007-06-30 00:05:56 +0400 |
commit | 4e63b362a711b50ad75dcac2da73127503be2609 (patch) | |
tree | 2bf2b704aa5edd46264cdd2ecd892fed1c6d82ea /gcc/config | |
parent | f535826b35af889f4df263e2f77f000312814d7d (diff) | |
download | gcc-4e63b362a711b50ad75dcac2da73127503be2609.zip gcc-4e63b362a711b50ad75dcac2da73127503be2609.tar.gz gcc-4e63b362a711b50ad75dcac2da73127503be2609.tar.bz2 |
re PR target/32335 (libgcc build failure, ICE in cselib_record_set, at cselib.c:1508)
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.
From-SVN: r126121
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/avr/avr.c | 9 | ||||
-rw-r--r-- | gcc/config/avr/avr.md | 12 |
2 files changed, 11 insertions, 10 deletions
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") |