diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2016-11-16 13:07:08 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2016-11-16 13:07:08 +0000 |
commit | 41c7cac56c4e6fd1f65281ae3a49bc2308be5191 (patch) | |
tree | 1acc46013971eef5f7ea5a8dbc857b58f238086d /gcc/cprop.c | |
parent | d964ba07c74523684f25cc9f4860ea2f8dba2513 (diff) | |
download | gcc-41c7cac56c4e6fd1f65281ae3a49bc2308be5191.zip gcc-41c7cac56c4e6fd1f65281ae3a49bc2308be5191.tar.gz gcc-41c7cac56c4e6fd1f65281ae3a49bc2308be5191.tar.bz2 |
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
Diffstat (limited to 'gcc/cprop.c')
-rw-r--r-- | gcc/cprop.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/gcc/cprop.c b/gcc/cprop.c index 6b4c0b8..31868a5 100644 --- a/gcc/cprop.c +++ b/gcc/cprop.c @@ -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; |