This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Unreviewed reload patch from 11/20/2000


http://gcc.gnu.org/ml/gcc-patches/2000-11/msg01036.html

Please bless this.  I bootstrapped the SPARC compiler today with this patch
in place, BTW....

Here's the text from the 11/20 posting
=========================================================


When reload does various substitutions of MEM's for pseudos, it
calls find_reloads_address () to process the address expression.  In
THREE places, it passes a null pointer down for the MEMREFLOC
argument.

When this is NULL, the LEGITIMIZE_RELOAD_ADDRESS macro is not invoked,
as the call is guarded by

    if (memrefloc)

There are actually FOUR places that call find_reloads_address() with a
NULL, but the other place is in handling the 'p' constraint.  And in
this case, you won't have a MEM, just the address beneath.

I've built my compiler and run regression tests (my target machine HAS
to let LEGITIMIZE_RELOAD_ADDRESS see these addresses or we end up with
unrecognized instructions with illegitimate addresses.

ChangeLog entry:

2000-11-20  Alan Lehotsky  <alehotsky@cygnus.com>

         reload.c (get_secondary_mem, find_reloads_address,
         find_reloads_address_1): Pass address of pointer to MEM so that
         LEGITIMIZE_RELOAD_ADDRESS will be run on the substituted address.

-------------

Index: reload.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gcc/reload.c,v
retrieving revision 1.191
diff -c -r1.191 reload.c
*** reload.c    2000/11/13 22:30:40     1.191
--- reload.c    2000/11/20 20:53:08
***************
*** 634,640 ****
                : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS
                : RELOAD_OTHER);

!       find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
                             opnum, type, 0, 0);
       }

--- 634,640 ----
                : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS
                : RELOAD_OTHER);

!       find_reloads_address (mode, &loc, XEXP (loc, 0), &XEXP (loc, 0),
                             opnum, type, 0, 0);
       }

***************
*** 4496,4502 ****
               tem = make_memloc (ad, regno);
               if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
                 {
!                 find_reloads_address (GET_MODE (tem), NULL_PTR, 
XEXP (tem, 0),
                                         &XEXP (tem, 0), opnum, 
ADDR_TYPE (type),
                                         ind_levels, insn);
                 }
--- 4496,4502 ----
               tem = make_memloc (ad, regno);
               if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
                 {
!                 find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
                                         &XEXP (tem, 0), opnum, 
ADDR_TYPE (type),
                                         ind_levels, insn);
                 }
***************
*** 5179,5185 ****
                        We can't use ADDR_TYPE (type) here, because we need to
                        write back the value after reading it, hence we actually
                        need two registers.  */
!                   find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
                                           &XEXP (tem, 0), opnum,
                                           RELOAD_OTHER,
                                           ind_levels, insn);
--- 5179,5185 ----
                        We can't use ADDR_TYPE (type) here, because we need to
                        write back the value after reading it, hence we actually
                        need two registers.  */
!                   find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
                                           &XEXP (tem, 0), opnum,
                                           RELOAD_OTHER,
                                           ind_levels, insn);
-- 
------------------------------------------------------------------------

		    Quality Software Management
		http://www.tiac.net/users/qsmgmt
			apl@alum.mit.edu
			(978)287-0435 Voice
			(978)808-6836 Cell
			(978)287-0436 Fax

	Software Process Improvement and Management Consulting
	     Language Design and Compiler Implementation

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]