From 0620be185dfe68d566205c6f11268378b3675533 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 17 Jun 2004 21:53:56 +0200 Subject: [PATCH] re PR target/15433 (ICE, cannot split insn) PR target/15433 * i386.md (SSE SF cmov 0 splitter): The conditional is VOIDmode; fix operand numbering in the output template. (SSE DF cmov 0 splitter): The conditional is VOIDmode. From-SVN: r83305 --- gcc/ChangeLog | 11 +++++++++++ gcc/config/i386/i386.md | 8 ++++---- gcc/except.c | 5 +++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bab0cf09cc2..5e6e9258005 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2004-06-17 Jan Hubicka + + PR target/15433 + * i386.md (SSE SF cmov 0 splitter): The conditional is VOIDmode; fix + operand numbering in the output template. + (SSE DF cmov 0 splitter): The conditional is VOIDmode. + +2004-06-17 Jan Hubicka + + * except.c (can_throw_internal): Recognize RESX expresisons. + 2004-06-17 Jan Hubicka * cfgbuild.c (make_edges): Do not use label_value_list. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index ed2c579330b..bb6aebfb047 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -18191,7 +18191,7 @@ (define_split [(set (match_operand:SF 0 "register_operand" "") - (if_then_else (match_operator:SF 1 "comparison_operator" + (if_then_else (match_operator 1 "comparison_operator" [(match_operand:SF 4 "nonimmediate_operand" "") (match_operand:SF 5 "nonimmediate_operand" "")]) (match_operand:SF 2 "nonmemory_operand" "") @@ -18217,19 +18217,19 @@ if (const0_operand (operands[2], GET_MODE (operands[2]))) { operands[7] = operands[3]; - operands[6] = gen_rtx_NOT (V4SFmode, operands[5]); + operands[6] = gen_rtx_NOT (V4SFmode, operands[8]); } else { operands[7] = operands[2]; - operands[6] = operands[0]; + operands[6] = operands[8]; } operands[7] = simplify_gen_subreg (V4SFmode, operands[7], SFmode, 0); }) (define_split [(set (match_operand:DF 0 "register_operand" "") - (if_then_else (match_operator:DF 1 "comparison_operator" + (if_then_else (match_operator 1 "comparison_operator" [(match_operand:DF 4 "nonimmediate_operand" "") (match_operand:DF 5 "nonimmediate_operand" "")]) (match_operand:DF 2 "nonmemory_operand" "") diff --git a/gcc/except.c b/gcc/except.c index 7815fbb6141..3e663dbff8a 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -3114,6 +3114,11 @@ can_throw_internal (rtx insn) if (! INSN_P (insn)) return false; + if (GET_CODE (insn) == JUMP_INSN + && GET_CODE (PATTERN (insn)) == RESX + && XINT (PATTERN (insn), 0) > 0) + return can_throw_internal_1 (XINT (PATTERN (insn), 0)); + if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) insn = XVECEXP (PATTERN (insn), 0, 0); -- 2.30.2