Commit bd08db74 by Richard Henderson

re PR target/21099 (ICE on mmx intrinsics)

        PR target/21099
        * config/i386/i386.c (ix86_split_to_parts): Use proper mode when
        simplifying CONST_VECTOR.

From-SVN: r98624
parent 670026fb
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> 2005-04-23 Kazu Hirata <kazu@cs.umass.edu>
* tree-ssa-live.c (live_worklist): Take a stack allocated on * tree-ssa-live.c (live_worklist): Take a stack allocated on
......
...@@ -10621,7 +10621,10 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode) ...@@ -10621,7 +10621,10 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode)
if (GET_CODE (operand) == CONST_VECTOR) if (GET_CODE (operand) == CONST_VECTOR)
{ {
enum machine_mode imode = int_mode_for_mode (mode); 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); gcc_assert (operand != NULL);
mode = imode; mode = imode;
} }
......
...@@ -1920,7 +1920,12 @@ tree_could_throw_p (tree t) ...@@ -1920,7 +1920,12 @@ tree_could_throw_p (tree t)
bool bool
tree_can_throw_internal (tree stmt) 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) if (region_nr < 0)
return false; return false;
return can_throw_internal_1 (region_nr); return can_throw_internal_1 (region_nr);
...@@ -1931,7 +1936,8 @@ tree_can_throw_external (tree stmt) ...@@ -1931,7 +1936,8 @@ tree_can_throw_external (tree stmt)
{ {
int region_nr = lookup_stmt_eh_region (stmt); int region_nr = lookup_stmt_eh_region (stmt);
if (region_nr < 0) if (region_nr < 0)
return false; return tree_could_throw_p (stmt);
else
return can_throw_external_1 (region_nr); return can_throw_external_1 (region_nr);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment