From: Georg-Johann Lay Date: Fri, 28 Oct 2011 17:47:56 +0000 (+0000) Subject: re PR target/49313 (Inefficient libgcc implementations for avr) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f89d6e77d72b81f2b5c6b2f591db7499df1189d1;p=gcc.git re PR target/49313 (Inefficient libgcc implementations for avr) PR target/49313 * config/avr/avr.md (parityhi2): Expand allowing pseudos. (*parityhi2): New pre-reload insn-and-split to map 16-bit parity to the libgcc insn. (*parityqihi2): Same for 8-bit parity. From-SVN: r180620 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ae569a889b5..33651a263cf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-10-28 Georg-Johann Lay + + PR target/49313 + * config/avr/avr.md (parityhi2): Expand allowing pseudos. + (*parityhi2): New pre-reload insn-and-split to map 16-bit parity + to the libgcc insn. + (*parityqihi2): Same for 8-bit parity. + 2011-10-28 Julian Brown PR rtl-optimization/47918 diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 35d4bdc1717..064db2cc000 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -4288,15 +4288,41 @@ ;; Parity +;; Postpone expansion of 16-bit parity to libgcc call until after combine for +;; better 8-bit parity recognition. + (define_expand "parityhi2" + [(parallel [(set (match_operand:HI 0 "register_operand" "") + (parity:HI (match_operand:HI 1 "register_operand" ""))) + (clobber (reg:HI 24))])]) + +(define_insn_and_split "*parityhi2" + [(set (match_operand:HI 0 "register_operand" "=r") + (parity:HI (match_operand:HI 1 "register_operand" "r"))) + (clobber (reg:HI 24))] + "!reload_completed" + { gcc_unreachable(); } + "&& 1" [(set (reg:HI 24) - (match_operand:HI 1 "register_operand" "")) + (match_dup 1)) (set (reg:HI 24) (parity:HI (reg:HI 24))) - (set (match_operand:HI 0 "register_operand" "") - (reg:HI 24))] - "" - "") + (set (match_dup 0) + (reg:HI 24))]) + +(define_insn_and_split "*parityqihi2" + [(set (match_operand:HI 0 "register_operand" "=r") + (parity:HI (match_operand:QI 1 "register_operand" "r"))) + (clobber (reg:HI 24))] + "!reload_completed" + { gcc_unreachable(); } + "&& 1" + [(set (reg:QI 24) + (match_dup 1)) + (set (reg:HI 24) + (zero_extend:HI (parity:QI (reg:QI 24)))) + (set (match_dup 0) + (reg:HI 24))]) (define_expand "paritysi2" [(set (reg:SI 22)