diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2012-03-05 10:28:45 +0000 |
---|---|---|
committer | Georg-Johann Lay <gjl@gcc.gnu.org> | 2012-03-05 10:28:45 +0000 |
commit | d84f3a058b23726afe83d314b87b06b8e1cfd1be (patch) | |
tree | f960a6a0c3c6d0041e3a430bae1e54f44b552427 /gcc | |
parent | 1f338c3122d82be876f7e639fcdc10e52258a04c (diff) | |
download | gcc-d84f3a058b23726afe83d314b87b06b8e1cfd1be.zip gcc-d84f3a058b23726afe83d314b87b06b8e1cfd1be.tar.gz gcc-d84f3a058b23726afe83d314b87b06b8e1cfd1be.tar.bz2 |
avr.md (*umaddqihi4.2): New insn-and-split.
* config/avr/avr.md (*umaddqihi4.2): New insn-and-split.
From-SVN: r184919
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/avr/avr.md | 23 |
2 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f1d679..06f8dcf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2012-03-05 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md (*umaddqihi4.2): New insn-and-split. + 2012-03-04 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (pro_epilogue_adjust_stack): Check Pmode diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 5cc3e3e..bcf21af 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -1692,6 +1692,29 @@ ;; Handle small constants +;; Special case of a += 2*b as frequently seen with accesses to int arrays. +;; This is shorter, faster than MUL and has lower register pressure. + +(define_insn_and_split "*umaddqihi4.2" + [(set (match_operand:HI 0 "register_operand" "=r") + (plus:HI (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r")) + (const_int 2)) + (match_operand:HI 2 "register_operand" "r")))] + "!reload_completed + && !reg_overlap_mentioned_p (operands[0], operands[1])" + { gcc_unreachable(); } + "&& 1" + [(set (match_dup 0) + (match_dup 2)) + ; *addhi3_zero_extend + (set (match_dup 0) + (plus:HI (zero_extend:HI (match_dup 1)) + (match_dup 0))) + ; *addhi3_zero_extend + (set (match_dup 0) + (plus:HI (zero_extend:HI (match_dup 1)) + (match_dup 0)))]) + ;; "umaddqihi4.uconst" ;; "maddqihi4.sconst" (define_insn_and_split "*<extend_u>maddqihi4.<extend_su>const" |