From bcb141cd4ea07a59c3f8fb72aaa39dd6417e9e78 Mon Sep 17 00:00:00 2001 From: hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Thu, 17 Jun 2004 19:53:56 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83305 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 bab0cf09cc24..5e6e9258005b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2004-06-17 Jan Hubicka <jh@suse.cz> + + 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 <jh@suse.cz> + + * except.c (can_throw_internal): Recognize RESX expresisons. + 2004-06-17 Jan Hubicka <jh@suse.cz> * 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 ed2c579330b5..bb6aebfb0470 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 7815fbb6141b..3e663dbff8af 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); -- GitLab