aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2011-08-03 15:57:22 -0700
committerRichard Henderson <rth@gcc.gnu.org>2011-08-03 15:57:22 -0700
commita6365e997e0ea5f378e811d4649fd53c55510c69 (patch)
treea4e798ba3f10202a8a1504f6b63b3e67bf4dd6fc /gcc
parent2c4caf0ab956d49f57544fd65c93dbbd60123eff (diff)
downloadgcc-a6365e997e0ea5f378e811d4649fd53c55510c69.zip
gcc-a6365e997e0ea5f378e811d4649fd53c55510c69.tar.gz
gcc-a6365e997e0ea5f378e811d4649fd53c55510c69.tar.bz2
re PR target/34888 (Stack patterns for AVR not optimal)
PR target/34888 * config/avr/avr.md: New splitter for REG_ARGS_SIZE 0. From-SVN: r177300
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/avr/avr.md11
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2b70738..a6f6b56 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-03 Richard Henderson <rth@redhat.com>
+
+ PR target/34888
+ * config/avr/avr.md: New splitter for REG_ARGS_SIZE 0.
+
2011-08-03 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/49948
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md
index b8560df..b5aa73c 100644
--- a/gcc/config/avr/avr.md
+++ b/gcc/config/avr/avr.md
@@ -235,6 +235,17 @@
DONE;
})
+;; Notice a special-case when adding N to SP where N results in a
+;; zero REG_ARGS_SIZE. This is equivalent to a move from FP.
+(define_split
+ [(set (reg:HI REG_SP) (match_operand:HI 0 "register_operand" ""))]
+ "reload_completed
+ && frame_pointer_needed
+ && !cfun->calls_alloca
+ && find_reg_note (insn, REG_ARGS_SIZE, const0_rtx)"
+ [(set (reg:HI REG_SP) (reg:HI REG_Y))]
+ "")
+
;;========================================================================
;; move byte
;; The last alternative (any immediate constant to any register) is