re PR target/15433 (ICE, cannot split insn)
authorJan Hubicka <jh@suse.cz>
Thu, 17 Jun 2004 19:53:56 +0000 (21:53 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 17 Jun 2004 19:53:56 +0000 (19:53 +0000)
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
gcc/config/i386/i386.md
gcc/except.c

index bab0cf09cc245657935044e089ad026ea621b328..5e6e9258005b092863a6cf2a010a5a032dbdbded 100644 (file)
@@ -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.
index ed2c579330b579121ad22f7d0ece655e092dd5dd..bb6aebfb04705072cfe64b11abe23c9723a2a179 100644 (file)
 
 (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" "")
   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" "")
index 7815fbb6141bf5cbaabcadb77cd06049bee71d1c..3e663dbff8af8b6f6bb4562b66ed3ebef89c4faf 100644 (file)
@@ -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);