aboutsummaryrefslogtreecommitdiff
path: root/gcc/cprop.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2016-11-16 13:07:08 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2016-11-16 13:07:08 +0000
commit41c7cac56c4e6fd1f65281ae3a49bc2308be5191 (patch)
tree1acc46013971eef5f7ea5a8dbc857b58f238086d /gcc/cprop.c
parentd964ba07c74523684f25cc9f4860ea2f8dba2513 (diff)
downloadgcc-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.c4
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;