summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-23 17:14:27 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-23 17:14:27 +0000
commit16cf2c2e3114e96a2d1bc126e72e5778d3ee98d1 (patch)
tree770cddb92eacfefb07d3a6c24437a30c14f1bce2 /gcc
parent5339686859d5ebbc14b8b3ad7a01d023e5ef82f9 (diff)
downloadppe42-gcc-16cf2c2e3114e96a2d1bc126e72e5778d3ee98d1.tar.gz
ppe42-gcc-16cf2c2e3114e96a2d1bc126e72e5778d3ee98d1.zip
PR target/21099
* config/i386/i386.c (ix86_split_to_parts): Use proper mode when simplifying CONST_VECTOR. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98624 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.c5
-rw-r--r--gcc/tree-eh.c12
3 files changed, 21 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c8758e19969..d5595bf1e4e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
@@ -644,7 +650,7 @@
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.
@@ -1122,7 +1128,7 @@
* 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.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 8560fd3cc9a..b8ac322d56e 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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;
}
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index 90f90611d01..bfac6bc0dbf 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -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
OpenPOWER on IntegriCloud