aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2014-11-21 15:33:27 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2014-11-21 15:33:27 +0000
commitde6fba39f3ad3790ba8efe47c764b5fe167155d3 (patch)
tree137a6922a0e69c0f98212f3b1b7adbf7f2e13d08 /gcc
parent4190ea38047f64e87940fc747d108a6bfdaa809f (diff)
downloadgcc-de6fba39f3ad3790ba8efe47c764b5fe167155d3.zip
gcc-de6fba39f3ad3790ba8efe47c764b5fe167155d3.tar.gz
gcc-de6fba39f3ad3790ba8efe47c764b5fe167155d3.tar.bz2
re PR rtl-optimization/63952 (bootstrap failure (ICE in prepare_cmp_insn) on s390x in libjava)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/s390/s390.md11
-rw-r--r--gcc/optabs.c7
3 files changed, 16 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4a45978..9e09261 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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,
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index b9fbf23..6ba6564 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -8142,16 +8142,13 @@
(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;")
-
+ ""
+ "")
;;
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 35ee7ec..f8d584e 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -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;
}