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
This commit is contained in:
Georg-Johann Lay 2011-10-28 17:47:56 +00:00 committed by Georg-Johann Lay
parent 58a9e3c406
commit f89d6e77d7
2 changed files with 39 additions and 5 deletions

View file

@ -1,3 +1,11 @@
2011-10-28 Georg-Johann Lay <avr@gjlay.de>
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 <julian@codesourcery.com>
PR rtl-optimization/47918

View file

@ -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)