+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
;; 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)