From: Ulrich Weigand Date: Fri, 21 Nov 2014 15:33:27 +0000 (+0000) Subject: re PR rtl-optimization/63952 (bootstrap failure (ICE in prepare_cmp_insn) on s390x... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=de6fba39f3ad3790ba8efe47c764b5fe167155d3;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4a4597877f3..9e0926120d0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-11-21 Ulrich Weigand + + 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 * 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 b9fbf23513d..6ba65647469 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 35ee7ece9ae..f8d584eeeb1 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; }