diff mbox series

[i386] : Merge ftest insn patterns with FP compare insn patterns

Message ID CAFULd4ZZfOTyzxiNn3ZJR64qcBpW4CyUMYZ0nDZ2x=moRNomow@mail.gmail.com
State New
Headers show
Series [i386] : Merge ftest insn patterns with FP compare insn patterns | expand

Commit Message

Uros Bizjak Oct. 5, 2018, 5:11 p.m. UTC
Now that we have universal "C" constraint, we can use it in FP compare
insn patterns to merge ftest insn patterns.

2018-10-05  Uros Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.md (*cmpxf_i387): Change operand 2 predicate
    to reg_or_0_operand.  Add "C" constraint.
    (*cmpxf_cc_i387): Ditto.
    (*cmp<mode>_i387): Change operand 2 predicate
    to nonimm_or_0_operand.  Add "C" constraint.
    (*cmp<mode>_cc_i387): Ditto.
    (*cmp<mode>_0_i387): Remove insn pattern.
    (*cmp<mode>_0_cc_i387): Ditto.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Committed to mainline SVN.

Uros.
diff mbox series

Patch

diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 122e57f98cc4..d7afb6a0bdaf 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1461,52 +1461,18 @@ 
   DONE;
 })
 
-
 ;; FP compares, step 1:
 ;; Set the FP condition codes and move fpsr to ax.
 
 ;; We may not use "#" to split and emit these
 ;; due to reg-stack pops killing fpsr.
 
-(define_insn "*cmp<mode>_0_i387"
-  [(set (match_operand:HI 0 "register_operand" "=a")
-	(unspec:HI
-	  [(compare:CCFP
-	     (match_operand:X87MODEF 1 "register_operand" "f")
-	     (match_operand:X87MODEF 2 "const0_operand"))]
-	UNSPEC_FNSTSW))]
-  "TARGET_80387"
-  "* return output_fp_compare (insn, operands, false, false);"
-  [(set_attr "type" "multi")
-   (set_attr "unit" "i387")
-   (set_attr "mode" "<MODE>")])
-
-(define_insn_and_split "*cmp<mode>_0_cc_i387"
-  [(set (reg:CCFP FLAGS_REG)
-	(compare:CCFP
-	  (match_operand:X87MODEF 1 "register_operand" "f")
-	  (match_operand:X87MODEF 2 "const0_operand")))
-   (clobber (match_operand:HI 0 "register_operand" "=a"))]
-  "TARGET_80387 && TARGET_SAHF && !TARGET_CMOVE"
-  "#"
-  "&& reload_completed"
-  [(set (match_dup 0)
-	(unspec:HI
-	  [(compare:CCFP (match_dup 1)(match_dup 2))]
-	UNSPEC_FNSTSW))
-   (set (reg:CC FLAGS_REG)
-	(unspec:CC [(match_dup 0)] UNSPEC_SAHF))]
-  ""
-  [(set_attr "type" "multi")
-   (set_attr "unit" "i387")
-   (set_attr "mode" "<MODE>")])
-
 (define_insn "*cmpxf_i387"
   [(set (match_operand:HI 0 "register_operand" "=a")
 	(unspec:HI
 	  [(compare:CCFP
 	     (match_operand:XF 1 "register_operand" "f")
-	     (match_operand:XF 2 "register_operand" "f"))]
+	     (match_operand:XF 2 "reg_or_0_operand" "fC"))]
 	  UNSPEC_FNSTSW))]
   "TARGET_80387"
   "* return output_fp_compare (insn, operands, false, false);"
@@ -1518,7 +1484,7 @@ 
   [(set (reg:CCFP FLAGS_REG)
 	(compare:CCFP
 	  (match_operand:XF 1 "register_operand" "f")
-	  (match_operand:XF 2 "register_operand" "f")))
+	  (match_operand:XF 2 "reg_or_0_operand" "fC")))
    (clobber (match_operand:HI 0 "register_operand" "=a"))]
   "TARGET_80387 && TARGET_SAHF && !TARGET_CMOVE"
   "#"
@@ -1539,7 +1505,7 @@ 
 	(unspec:HI
 	  [(compare:CCFP
 	     (match_operand:MODEF 1 "register_operand" "f")
-	     (match_operand:MODEF 2 "nonimmediate_operand" "fm"))]
+	     (match_operand:MODEF 2 "nonimm_or_0_operand" "fmC"))]
 	  UNSPEC_FNSTSW))]
   "TARGET_80387"
   "* return output_fp_compare (insn, operands, false, false);"
@@ -1551,7 +1517,7 @@ 
   [(set (reg:CCFP FLAGS_REG)
 	(compare:CCFP
 	  (match_operand:MODEF 1 "register_operand" "f")
-	  (match_operand:MODEF 2 "nonimmediate_operand" "fm")))
+	  (match_operand:MODEF 2 "nonimm_or_0_operand" "fmC")))
    (clobber (match_operand:HI 0 "register_operand" "=a"))]
   "TARGET_80387 && TARGET_SAHF && !TARGET_CMOVE"
   "#"