Hello!

Similar to Segher's rs6000 patch [1], attached patch removes redundant
reversed jcc insn patterns.

2017-10-09  Uros Bizjak  <ubiz...@gmail.com>

    * config/i386/i386.md (*jcc_2): Remove insn pattern.
    (*jcc<mode>_0_r_i387): Ditto.
    (*jccxf_r_i387): Ditto.
    (*jcc<mode>_r_i387): Ditto.
    (*jccu<mode>_r_i387): Ditto.
    (*jcc<X87MODEF:mode>_<SWI24:mode>_r_i387): Ditto.
    (*jcc): Rename from *jcc_1.

[1] https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00451.html

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. I have
also compared several Polyhedron asm dumps before and after the patch,
and there were no differences (with -m32 -march=i386, w/ and w/o
-ffast-math).

Committed to mainline SVN.

Uros.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 99497a9..1a794c0 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -11963,7 +11963,7 @@
 ;; Basic conditional jump instructions.
 ;; We ignore the overflow flag for signed branch instructions.
 
-(define_insn "*jcc_1"
+(define_insn "*jcc"
   [(set (pc)
        (if_then_else (match_operator 1 "ix86_comparison_operator"
                                      [(reg FLAGS_REG) (const_int 0)])
@@ -11983,26 +11983,6 @@
          (const_int 6)))
    (set_attr "maybe_prefix_bnd" "1")])
 
-(define_insn "*jcc_2"
-  [(set (pc)
-       (if_then_else (match_operator 1 "ix86_comparison_operator"
-                                     [(reg FLAGS_REG) (const_int 0)])
-                     (pc)
-                     (label_ref (match_operand 0))))]
-  ""
-  "%!%+j%c1\t%l0"
-  [(set_attr "type" "ibr")
-   (set_attr "modrm" "0")
-   (set (attr "length")
-       (if_then_else
-         (and (ge (minus (match_dup 0) (pc))
-                  (const_int -126))
-              (lt (minus (match_dup 0) (pc))
-                  (const_int 128)))
-         (const_int 2)
-         (const_int 6)))
-   (set_attr "maybe_prefix_bnd" "1")])
-
 ;; In general it is not safe to assume too much about CCmode registers,
 ;; so simplify-rtx stops when it sees a second one.  Under certain
 ;; conditions this is safe on x86, so help combine not create
@@ -12069,19 +12049,6 @@
   "TARGET_80387 && !TARGET_CMOVE"
   "#")
 
-(define_insn "*jcc<mode>_0_r_i387"
-  [(set (pc)
-       (if_then_else (match_operator:CCFP 0 "ix86_fp_comparison_operator"
-                       [(match_operand:X87MODEF 1 "register_operand" "f")
-                        (match_operand:X87MODEF 2 "const0_operand")])
-         (pc)
-         (label_ref (match_operand 3))))
-   (clobber (reg:CCFP FPSR_REG))
-   (clobber (reg:CCFP FLAGS_REG))
-   (clobber (match_scratch:HI 4 "=a"))]
-  "TARGET_80387 && !TARGET_CMOVE"
-  "#")
-
 (define_insn "*jccxf_i387"
   [(set (pc)
        (if_then_else (match_operator:CCFP 0 "ix86_fp_comparison_operator"
@@ -12095,19 +12062,6 @@
   "TARGET_80387 && !TARGET_CMOVE"
   "#")
 
-(define_insn "*jccxf_r_i387"
-  [(set (pc)
-       (if_then_else (match_operator:CCFP 0 "ix86_fp_comparison_operator"
-                       [(match_operand:XF 1 "register_operand" "f")
-                        (match_operand:XF 2 "register_operand" "f")])
-         (pc)
-         (label_ref (match_operand 3))))
-   (clobber (reg:CCFP FPSR_REG))
-   (clobber (reg:CCFP FLAGS_REG))
-   (clobber (match_scratch:HI 4 "=a"))]
-  "TARGET_80387 && !TARGET_CMOVE"
-  "#")
-
 (define_insn "*jcc<mode>_i387"
   [(set (pc)
        (if_then_else (match_operator:CCFP 0 "ix86_fp_comparison_operator"
@@ -12121,19 +12075,6 @@
   "TARGET_80387 && !TARGET_CMOVE"
   "#")
 
-(define_insn "*jcc<mode>_r_i387"
-  [(set (pc)
-       (if_then_else (match_operator:CCFP 0 "ix86_fp_comparison_operator"
-                       [(match_operand:MODEF 1 "register_operand" "f")
-                        (match_operand:MODEF 2 "nonimmediate_operand" "fm")])
-         (pc)
-         (label_ref (match_operand 3))))
-   (clobber (reg:CCFP FPSR_REG))
-   (clobber (reg:CCFP FLAGS_REG))
-   (clobber (match_scratch:HI 4 "=a"))]
-  "TARGET_80387 && !TARGET_CMOVE"
-  "#")
-
 (define_insn "*jccu<mode>_i387"
   [(set (pc)
        (if_then_else (match_operator:CCFPU 0 "ix86_fp_comparison_operator"
@@ -12147,19 +12088,6 @@
   "TARGET_80387 && !TARGET_CMOVE"
   "#")
 
-(define_insn "*jccu<mode>_r_i387"
-  [(set (pc)
-       (if_then_else (match_operator:CCFPU 0 "ix86_fp_comparison_operator"
-                       [(match_operand:X87MODEF 1 "register_operand" "f")
-                        (match_operand:X87MODEF 2 "register_operand" "f")])
-         (pc)
-         (label_ref (match_operand 3))))
-   (clobber (reg:CCFP FPSR_REG))
-   (clobber (reg:CCFP FLAGS_REG))
-   (clobber (match_scratch:HI 4 "=a"))]
-  "TARGET_80387 && !TARGET_CMOVE"
-  "#")
-
 (define_split
   [(set (pc)
        (if_then_else (match_operator 0 "ix86_fp_comparison_operator"
@@ -12219,23 +12147,6 @@
        || optimize_function_for_size_p (cfun))"
   "#")
 
-(define_insn "*jcc<X87MODEF:mode>_<SWI24:mode>_r_i387"
-  [(set (pc)
-       (if_then_else
-         (match_operator:CCFP 0 "ix86_swapped_fp_comparison_operator"
-           [(match_operator:X87MODEF 1 "float_operator"
-             [(match_operand:SWI24 2 "nonimmediate_operand" "m")])
-            (match_operand:X87MODEF 3 "register_operand" "f")])
-         (pc)
-         (label_ref (match_operand 4))))
-   (clobber (reg:CCFP FPSR_REG))
-   (clobber (reg:CCFP FLAGS_REG))
-   (clobber (match_scratch:HI 5 "=a"))]
-  "TARGET_80387 && !TARGET_CMOVE
-   && (TARGET_USE_<SWI24:MODE>MODE_FIOP
-       || optimize_function_for_size_p (cfun))"
-  "#")
-
 (define_split
   [(set (pc)
        (if_then_else

Reply via email to