PR target/49313
authorgjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Oct 2011 17:47:56 +0000 (17:47 +0000)
committergjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Oct 2011 17:47:56 +0000 (17:47 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180620 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/avr/avr.md

index ae569a8..33651a2 100644 (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
index 35d4bdc..064db2c 100644 (file)
 
 ;; 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)