Use df_read_modify_subreg_p in cprop.c

local_cprop_find_used_regs punted on all multiword registers,
with the comment:

          /* Setting a subreg of a register larger than word_mode leaves
             the non-written words unchanged.  */

But this only applies if the outer mode is smaller than the
inner mode.  If they're the same size then writes to the subreg
are a normal full update.

This patch uses df_read_modify_subreg_p instead.  A later patch
adds more uses of the same routine, but this part had a (positive)
effect on code generation for the testsuite whereas the others
seemed to be simple clean-ups.

gcc/
2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

	* cprop.c (local_cprop_find_used_regs): Use df_read_modify_subreg_p.

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

From-SVN: r242488
This commit is contained in:
Richard Sandiford 2016-11-16 13:07:08 +00:00 committed by Richard Sandiford
parent d964ba07c7
commit 41c7cac56c
2 changed files with 7 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2016-11-16 Richard Sandiford <richard.sandiford@arm.com>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* cprop.c (local_cprop_find_used_regs): Use df_read_modify_subreg_p.
2016-11-16 Richard Biener <rguenther@suse.de>
PR middle-end/78333

View File

@ -1161,9 +1161,7 @@ local_cprop_find_used_regs (rtx *xptr, void *data)
return;
case SUBREG:
/* Setting a subreg of a register larger than word_mode leaves
the non-written words unchanged. */
if (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (x))) > BITS_PER_WORD)
if (df_read_modify_subreg_p (x))
return;
break;