Commit e10326ff by Richard Sandiford Committed by Richard Sandiford

Make more use of subreg_size_lowpart_offset

This patch uses subreg_size_lowpart_offset in places that open-coded
the calculation.  The reload use (and the LRA one that was based on it)
seemed to ignore the BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN case; it's not
obvious whether that was deliberate or an oversight.

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

gcc/
	* lra-spills.c (assign_mem_slot): Use subreg_size_lowpart_offset.
	* regcprop.c (maybe_mode_change): Likewise.
	* reload1.c (alter_reg): Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r253989
parent cae115d6
2017-10-22 Richard Sandiford <richard.sandiford@linaro.org> 2017-10-22 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* lra-spills.c (assign_mem_slot): Use subreg_size_lowpart_offset.
* regcprop.c (maybe_mode_change): Likewise.
* reload1.c (alter_reg): Likewise.
2017-10-22 Richard Sandiford <richard.sandiford@linaro.org>
* inchash.h (inchash::hash::add_wide_int): New function. * inchash.h (inchash::hash::add_wide_int): New function.
* lto-streamer-out.c (hash_tree): Use it. * lto-streamer-out.c (hash_tree): Use it.
...@@ -153,9 +153,7 @@ assign_mem_slot (int i) ...@@ -153,9 +153,7 @@ assign_mem_slot (int i)
/* On a big endian machine, the "address" of the slot is the address /* On a big endian machine, the "address" of the slot is the address
of the low part that fits its inherent mode. */ of the low part that fits its inherent mode. */
if (BYTES_BIG_ENDIAN && inherent_size < total_size) adjust += subreg_size_lowpart_offset (inherent_size, total_size);
adjust += (total_size - inherent_size);
x = adjust_address_nv (x, GET_MODE (regno_reg_rtx[i]), adjust); x = adjust_address_nv (x, GET_MODE (regno_reg_rtx[i]), adjust);
/* Set all of the memory attributes as appropriate for a spill. */ /* Set all of the memory attributes as appropriate for a spill. */
......
...@@ -407,13 +407,9 @@ maybe_mode_change (machine_mode orig_mode, machine_mode copy_mode, ...@@ -407,13 +407,9 @@ maybe_mode_change (machine_mode orig_mode, machine_mode copy_mode,
int use_nregs = hard_regno_nregs (copy_regno, new_mode); int use_nregs = hard_regno_nregs (copy_regno, new_mode);
int copy_offset int copy_offset
= GET_MODE_SIZE (copy_mode) / copy_nregs * (copy_nregs - use_nregs); = GET_MODE_SIZE (copy_mode) / copy_nregs * (copy_nregs - use_nregs);
int offset unsigned int offset
= GET_MODE_SIZE (orig_mode) - GET_MODE_SIZE (new_mode) - copy_offset; = subreg_size_lowpart_offset (GET_MODE_SIZE (new_mode) + copy_offset,
int byteoffset = offset % UNITS_PER_WORD; GET_MODE_SIZE (orig_mode));
int wordoffset = offset - byteoffset;
offset = ((WORDS_BIG_ENDIAN ? wordoffset : 0)
+ (BYTES_BIG_ENDIAN ? byteoffset : 0));
regno += subreg_regno_offset (regno, orig_mode, offset, new_mode); regno += subreg_regno_offset (regno, orig_mode, offset, new_mode);
if (targetm.hard_regno_mode_ok (regno, new_mode)) if (targetm.hard_regno_mode_ok (regno, new_mode))
return gen_raw_REG (new_mode, regno); return gen_raw_REG (new_mode, regno);
......
...@@ -2251,8 +2251,7 @@ alter_reg (int i, int from_reg, bool dont_share_p) ...@@ -2251,8 +2251,7 @@ alter_reg (int i, int from_reg, bool dont_share_p)
/* On a big endian machine, the "address" of the slot /* On a big endian machine, the "address" of the slot
is the address of the low part that fits its inherent mode. */ is the address of the low part that fits its inherent mode. */
if (BYTES_BIG_ENDIAN && inherent_size < total_size) adjust += subreg_size_lowpart_offset (inherent_size, total_size);
adjust += (total_size - inherent_size);
/* If we have any adjustment to make, or if the stack slot is the /* If we have any adjustment to make, or if the stack slot is the
wrong mode, make a new stack slot. */ wrong mode, make a new stack slot. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment