aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-23 23:03:15 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-23 23:03:15 +0000
commitdf9a397c08d6a08316bc1dd815291f4159edc87a (patch)
treed1a76f18f5ec7676024c59484c69a8c80a10e55b /gcc
parentf4e1623043decd25fbe99d994c385b02eb52dc3a (diff)
* simplify-rtx.c (simplify_subreg): Use subreg_regno_offset directly
instead of using a SUBREG temporary. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91114 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/simplify-rtx.c7
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a16e9b6f041..9752df3b6ee 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-23 Richard Henderson <rth@redhat.com>
+
+ * simplify-rtx.c (simplify_subreg): Use subreg_regno_offset directly
+ instead of using a SUBREG temporary.
+
2004-11-23 Kazu Hirata <kazu@cs.umass.edu>
* tree-cfg.c (tree_forwarder_block_p): Speed up by reordering
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index ac896ab27ab..8ecd8fc5528 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -3675,14 +3675,15 @@ simplify_subreg (enum machine_mode outermode, rtx op,
&& subreg_offset_representable_p (REGNO (op), innermode,
byte, outermode))
{
- rtx tem = gen_rtx_SUBREG (outermode, op, byte);
- int final_regno = subreg_hard_regno (tem, 0);
+ unsigned int regno = REGNO (op);
+ unsigned int final_regno
+ = regno + subreg_regno_offset (regno, innermode, byte, outermode);
/* ??? We do allow it if the current REG is not valid for
its mode. This is a kludge to work around how float/complex
arguments are passed on 32-bit SPARC and should be fixed. */
if (HARD_REGNO_MODE_OK (final_regno, outermode)
- || ! HARD_REGNO_MODE_OK (REGNO (op), innermode))
+ || ! HARD_REGNO_MODE_OK (regno, innermode))
{
rtx x = gen_rtx_REG_offset (op, outermode, final_regno, byte);