From df9a397c08d6a08316bc1dd815291f4159edc87a Mon Sep 17 00:00:00 2001 From: rth Date: Tue, 23 Nov 2004 23:03:15 +0000 Subject: * 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 --- gcc/simplify-rtx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'gcc/simplify-rtx.c') 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); -- cgit v1.2.1