]> gcc.gnu.org Git - gcc.git/commitdiff
i386.md (movsi_xor): Export.
authorRichard Henderson <rth@redhat.com>
Mon, 8 Oct 2001 22:38:45 +0000 (15:38 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 8 Oct 2001 22:38:45 +0000 (15:38 -0700)
        * i386.md (movsi_xor): Export.
        (setcc peep2): Use it when available; add an alternative to
        match zero_extendhisi2_and.

From-SVN: r46107

gcc/ChangeLog
gcc/config/i386/i386.md

index e8f087cf2926cbca873c0068131ca8e8bbd67248..bc49dc67e1413aa74d5b42f8646c8fe3378e08ce 100644 (file)
@@ -1,3 +1,9 @@
+2001-10-08  Richard Henderson  <rth@redhat.com>
+
+        * i386.md (movsi_xor): Export.
+        (setcc peep2): Use it when available; add an alternative to
+       match zero_extendhisi2_and.
+
 2001-10-08  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * romp-protos.h (romp_initialize_trampoline): New function.
index fa18782102fc922e296ee608f7023268ce415f40..63fefc88bee73f4e9ea99554d5a8416223b7c1e0 100644 (file)
   [(set_attr "type" "pop")
    (set_attr "mode" "SI")])
 
-(define_insn "*movsi_xor"
+(define_insn "movsi_xor"
   [(set (match_operand:SI 0 "register_operand" "=r")
        (match_operand:SI 1 "const0_operand" "i"))
    (clobber (reg:CC 17))]
          [(reg 17) (const_int 0)]))
    (set (match_operand 3 "q_regs_operand" "")
        (zero_extend (match_dup 1)))]
-  "peep2_reg_dead_p (3, operands[1])
+  "(peep2_reg_dead_p (3, operands[1])
+    || operands_match_p (operands[1], operands[3]))
    && ! reg_overlap_mentioned_p (operands[3], operands[0])"
-  [(set (match_dup 3) (const_int 0))
-   (set (match_dup 4) (match_dup 0))
+  [(set (match_dup 4) (match_dup 0))
+   (set (strict_low_part (match_dup 5))
+       (match_dup 2))]
+{
+  operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17);
+  operands[5] = gen_rtx_REG (QImode, REGNO (operands[3]));
+  if (HAVE_movsi_xor)
+    emit_insn (gen_movsi_xor (operands[3], const0_rtx));
+  else
+    emit_insn (gen_movsi (operands[3], const0_rtx));
+})
+
+;; Similar, but match zero_extendhisi2_and, which adds a clobber.
+
+(define_peephole2
+  [(set (reg 17) (match_operand 0 "" ""))
+   (set (match_operand:QI 1 "register_operand" "")
+       (match_operator:QI 2 "ix86_comparison_operator"
+         [(reg 17) (const_int 0)]))
+   (parallel [(set (match_operand 3 "q_regs_operand" "")
+                  (zero_extend (match_dup 1)))
+             (clobber (reg:CC 17))])]
+  "(peep2_reg_dead_p (3, operands[1])
+    || operands_match_p (operands[1], operands[3]))
+   && ! reg_overlap_mentioned_p (operands[3], operands[0])"
+  [(set (match_dup 4) (match_dup 0))
    (set (strict_low_part (match_dup 5))
        (match_dup 2))]
-  "operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17);
-   operands[5] = gen_rtx_REG (QImode, REGNO (operands[3]));")
+{
+  operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17);
+  operands[5] = gen_rtx_REG (QImode, REGNO (operands[3]));
+  if (HAVE_movsi_xor)
+    emit_insn (gen_movsi_xor (operands[3], const0_rtx));
+  else
+    emit_insn (gen_movsi (operands[3], const0_rtx));
+})
 \f
 ;; Call instructions.
 
This page took 0.091173 seconds and 5 git commands to generate.