re PR rtl-optimization/63952 (bootstrap failure (ICE in prepare_cmp_insn) on s390x...
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 21 Nov 2014 15:33:27 +0000 (15:33 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Fri, 21 Nov 2014 15:33:27 +0000 (15:33 +0000)
PR rtl-optimization/63952
* optabs.c (prepare_cmp_insn): Do not call can_compare_p for CCmode.
* config/s390/s390.md ("cbranchcc4"): Accept any s390_comparison.
Remove incorrect TARGET_HARD_FLOAT check and no-op expander code.

From-SVN: r217929

gcc/ChangeLog
gcc/config/s390/s390.md
gcc/optabs.c

index 4a4597877f3babaa5e5fcae5e7edf8ec9768914c..9e0926120d020c49dea595de473c07e9941152f9 100644 (file)
@@ -1,3 +1,10 @@
+2014-11-21  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       PR rtl-optimization/63952
+       * optabs.c (prepare_cmp_insn): Do not call can_compare_p for CCmode.
+       * config/s390/s390.md ("cbranchcc4"): Accept any s390_comparison.
+       Remove incorrect TARGET_HARD_FLOAT check and no-op expander code.
+
 2014-11-21  Ilya Tocar  <ilya.tocar@intel.com>
 
        * common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512IFMA_SET,
index b9fbf23513d5d299ac5df1c979e00932dbf22763..6ba6564746979e63efb7999f8a9803f7bc9300ea 100644 (file)
 
 (define_expand "cbranchcc4"
   [(set (pc)
-        (if_then_else (match_operator 0 "s390_eqne_operator"
+        (if_then_else (match_operator 0 "s390_comparison"
                       [(match_operand 1 "cc_reg_operand" "")
-                        (match_operand 2 "const0_operand" "")])
+                        (match_operand 2 "const_int_operand" "")])
                      (label_ref (match_operand 3 "" ""))
                       (pc)))]
-  "TARGET_HARD_FLOAT"
-  "s390_emit_jump (operands[3],
-    s390_emit_compare (GET_CODE (operands[0]), operands[1], operands[2]));
-   DONE;")
-
+  ""
+  "")
 
 
 ;;
index 35ee7ece9aed4a1f5bd376e47d9ecc701c3bc970..f8d584eeeb11a2c19d8c8d887a0ff18aed5f56b4 100644 (file)
@@ -4167,8 +4167,11 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx_code comparison, rtx size,
 
   if (GET_MODE_CLASS (mode) == MODE_CC)
     {
-      gcc_assert (can_compare_p (comparison, CCmode, ccp_jump));
-      *ptest = gen_rtx_fmt_ee (comparison, VOIDmode, x, y);
+      enum insn_code icode = optab_handler (cbranch_optab, CCmode);
+      test = gen_rtx_fmt_ee (comparison, VOIDmode, x, y);
+      gcc_assert (icode != CODE_FOR_nothing
+                  && insn_operand_matches (icode, 0, test));
+      *ptest = test;
       return;
     }