diff options
author | Richard Henderson <rth@redhat.com> | 2003-04-10 15:17:36 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2003-04-10 15:17:36 -0700 |
commit | b9de9ea4b19da2382a4bf738d25078e0f9b4826e (patch) | |
tree | 6a4522966c3397c6b6b77aa1cda90a098554fc9c | |
parent | 73ae1804d5a04653067bdf612a48ab5f2babaa99 (diff) |
re PR rtl-optimization/10352 (ICE in find_reloads_toplev)
PR opt/10352
Tue Jul 23 21:49:24 2002 J"orn Rennecke <joern.rennecke@superh.com>
* simplify-rtx.c (simplify_subreg): When converting to a non-int
mode, try to convert to an integer mode of matching size first.
* g++.dg/opt/reload2.C: New.
From-SVN: r65441
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/simplify-rtx.c | 14 |
2 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 95bc948fe15..1e7b58270aa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-04-09 Richard Henderson <rth@redhat.com> + + PR opt/10352 + Tue Jul 23 21:49:24 2002 J"orn Rennecke <joern.rennecke@superh.com> + * simplify-rtx.c (simplify_subreg): When converting to a non-int + mode, try to convert to an integer mode of matching size first. + 2003-04-09 Alan Modra <amodra@bigpond.net.au> * config/rs6000/rs6000.c (rs6000_emit_prologue): Use correct mode to diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 2896041c4fd..afd2b3c5d70 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2484,6 +2484,20 @@ simplify_subreg (outermode, op, innermode, byte) return new; } + if (GET_MODE_CLASS (outermode) != MODE_INT + && GET_MODE_CLASS (outermode) != MODE_CC) + { + enum machine_mode new_mode = int_mode_for_mode (outermode); + + if (new_mode != innermode || byte != 0) + { + op = simplify_subreg (new_mode, op, innermode, byte); + if (! op) + return NULL_RTX; + return simplify_subreg (outermode, op, new_mode, 0); + } + } + offset = byte * BITS_PER_UNIT; switch (GET_CODE (op)) { |