Skip to content
Snippets Groups Projects
Commit 94e23f53 authored by Richard Sandiford's avatar Richard Sandiford Committed by Richard Sandiford
Browse files

Turn SECONDARY_MEMORY_NEEDED_MODE into a target hook


This includes a change to LRA.  Previously the code was:

    if (sclass == NO_REGS && dclass == NO_REGS)
      return false;
  #ifdef SECONDARY_MEMORY_NEEDED
    if (SECONDARY_MEMORY_NEEDED (sclass, dclass, GET_MODE (src))
  #ifdef SECONDARY_MEMORY_NEEDED_MODE
        && ((sclass != NO_REGS && dclass != NO_REGS)
            || GET_MODE (src) != SECONDARY_MEMORY_NEEDED_MODE (GET_MODE (src)))
  #endif
        )
      {
        *sec_mem_p = true;
        return false;
      }
  #endif

in which the positioning of the second ifdef meant that defining
SECONDARY_MEMORY_NEEDED_MODE to its default value was not a no-op:
without a definition, we would consider using secondary reloads for
mem<-reg and reg<-mem reloads even if the secondary memory has the
same mode as the original mem, while defining it would avoid this.
The latter behaviour seems correct.

The default is different for reload and LRA.  For LRA the default is
to use the original mode, while reload promotes smaller-than-word
integral modes to word mode:

  if (GET_MODE_BITSIZE (mode) < BITS_PER_WORD && INTEGRAL_MODE_P (mode))
    mode = mode_for_size (BITS_PER_WORD,
                          GET_MODE_CLASS (mode), 0).require ();

Some of the ports that have switched to LRA seemed to have
SECONDARY_MEMORY_NEEDED_MDOEs based on the old reload definition,
and still referred to the reload.c:get_secondary_mem function in
the comments.  The patch just keeps them as-is.

2017-09-13  Richard Sandiford  <richard.sandiford@linaro.org>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

gcc/
	* target.def (secondary_memory_needed_mode): New hook:
	* targhooks.c (default_secondary_memory_needed_mode): Declare.
	* targhooks.h (default_secondary_memory_needed_mode): New function.
	* doc/tm.texi.in (SECONDARY_MEMORY_NEEDED_MODE): Replace with...
	(TARGET_SECONDARY_MEMORY_NEEDED_MODE): ...this.
	* doc/tm.texi: Regenerate.
	* lra-constraints.c (check_and_process_move): Use
	targetm.secondary_memory_needed_mode instead of
	TARGET_SECONDARY_MEMORY_NEEDED_MODE.
	(curr_insn_transform): Likewise.
	* reload.c (get_secondary_mem): Likewise.
	* config/alpha/alpha.h (SECONDARY_MEMORY_NEEDED_MODE): Delete.
	* config/alpha/alpha.c (alpha_secondary_memory_needed_mode): New
	function.
	(TARGET_SECONDARY_MEMORY_NEEDED_MODE): Redefine.
	* config/i386/i386.h (SECONDARY_MEMORY_NEEDED_MODE): Delete.
	* config/i386/i386.c (ix86_secondary_memory_needed_mode): New function.
	(TARGET_SECONDARY_MEMORY_NEEDED_MODE): Redefine.
	* config/powerpcspe/powerpcspe.h (SECONDARY_MEMORY_NEEDED_MODE):
	Delete.
	* config/powerpcspe/powerpcspe-protos.h
	(rs6000_secondary_memory_needed_mode): Delete.
	* config/powerpcspe/powerpcspe.c
	(TARGET_SECONDARY_MEMORY_NEEDED_MODE): Redefine.
	(rs6000_secondary_memory_needed_mode): Make static.
	* config/rs6000/rs6000.h (SECONDARY_MEMORY_NEEDED_MODE): Delete.
	* config/rs6000/rs6000-protos.h (rs6000_secondary_memory_needed_mode):
	Delete.
	* config/rs6000/rs6000.c (TARGET_SECONDARY_MEMORY_NEEDED_MODE):
	Redefine.
	(rs6000_secondary_memory_needed_mode): Make static.
	* config/s390/s390.h (SECONDARY_MEMORY_NEEDED_MODE): Delete.
	* config/s390/s390.c (s390_secondary_memory_needed_mode): New function.
	(TARGET_SECONDARY_MEMORY_NEEDED_MODE): Redefine.
	* config/sparc/sparc.h (SECONDARY_MEMORY_NEEDED_MODE): Delete.
	* config/sparc/sparc.c (TARGET_SECONDARY_MEMORY_NEEDED_MODE):
	Redefine.
	(sparc_secondary_memory_needed_mode): New function.
	* system.h (TARGET_SECONDARY_MEMORY_NEEDED_MODE): Poison.

Co-Authored-By: default avatarAlan Hayward <alan.hayward@arm.com>
Co-Authored-By: default avatarDavid Sherwood <david.sherwood@arm.com>

From-SVN: r252455
parent bb5d9711
No related branches found
No related tags found
Loading
Showing
with 150 additions and 118 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment