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