re PR target/21099 (ICE on mmx intrinsics)
authorRichard Henderson <rth@gcc.gnu.org>
Sat, 23 Apr 2005 17:14:27 +0000 (10:14 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Sat, 23 Apr 2005 17:14:27 +0000 (10:14 -0700)
        PR target/21099
        * config/i386/i386.c (ix86_split_to_parts): Use proper mode when
        simplifying CONST_VECTOR.

From-SVN: r98624

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/tree-eh.c

index c8758e1996903e235c095507b9a02ae0f0d2409a..d5595bf1e4eac1fe40ed33c2501a9e365b2dffd6 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-23  Richard Henderson  <rth@redhat.com>
+
+       PR target/21099
+       * config/i386/i386.c (ix86_split_to_parts): Use proper mode when
+       simplifying CONST_VECTOR.
+
 2005-04-23  Kazu Hirata  <kazu@cs.umass.edu>
 
        * tree-ssa-live.c (live_worklist): Take a stack allocated on
        decode_addr_const): Likewise.
 
 2005-04-21 Alan Modra  <amodra@bigpond.net.au>
-           Fariborz Jahanian <fjahanian@apple.com>
+          Fariborz Jahanian <fjahanian@apple.com>
 
        * config/rs6000/rs6000.c (rs6000_arg_partial_bytes): Fix size of
        portion of argument passed in fpr.
        * fold-const (fold_binary):  Fold ~X ^ ~ Y to X ^ Y.
 
 2005-04-20  Michael Pogue  <michael.pogue@sun.com>
-            Joseph S. Myers  <joseph@codesourcery.com>
+           Joseph S. Myers  <joseph@codesourcery.com>
 
        * c.opt (Wint-to-pointer-cast, Wpointer-to-int-cast): New options.
        * c-typeck.c (build_c_cast): Check these options.
index 8560fd3cc9a5d5fa96f2f9a87026bc11be6ccc8a..b8ac322d56ec7737e8a5d1b6dd8852e2be5737dc 100644 (file)
@@ -10621,7 +10621,10 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode)
   if (GET_CODE (operand) == CONST_VECTOR)
     {
       enum machine_mode imode = int_mode_for_mode (mode);
-      operand = simplify_subreg (imode, operand, mode, 0);
+      /* Caution: if we looked through a constant pool memory above,
+        the operand may actually have a different mode now.  That's
+        ok, since we want to pun this all the way back to an integer.  */
+      operand = simplify_subreg (imode, operand, GET_MODE (operand), 0);
       gcc_assert (operand != NULL);
       mode = imode;
     }
index 90f90611d019b5056358677091bb6f445a64d3fe..bfac6bc0dbf744ca743999811b3b2830f466b6bb 100644 (file)
@@ -1920,7 +1920,12 @@ tree_could_throw_p (tree t)
 bool
 tree_can_throw_internal (tree stmt)
 {
-  int region_nr = lookup_stmt_eh_region (stmt);
+  int region_nr;
+
+  if (TREE_CODE (stmt) == RESX_EXPR)
+    region_nr = TREE_INT_CST_LOW (TREE_OPERAND (stmt, 0));
+  else
+    region_nr = lookup_stmt_eh_region (stmt);
   if (region_nr < 0)
     return false;
   return can_throw_internal_1 (region_nr);
@@ -1931,8 +1936,9 @@ tree_can_throw_external (tree stmt)
 {
   int region_nr = lookup_stmt_eh_region (stmt);
   if (region_nr < 0)
-    return false;
-  return can_throw_external_1 (region_nr);
+    return tree_could_throw_p (stmt);
+  else
+    return can_throw_external_1 (region_nr);
 }
 
 bool