From 41c7cac56c4e6fd1f65281ae3a49bc2308be5191 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 16 Nov 2016 13:07:08 +0000 Subject: [PATCH] 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 Alan Hayward David Sherwood * cprop.c (local_cprop_find_used_regs): Use df_read_modify_subreg_p. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r242488 --- gcc/ChangeLog | 6 ++++++ gcc/cprop.c | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a49e0249236..fe32d0f7d31 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-16 Richard Sandiford + Alan Hayward + David Sherwood + + * cprop.c (local_cprop_find_used_regs): Use df_read_modify_subreg_p. + 2016-11-16 Richard Biener PR middle-end/78333 diff --git a/gcc/cprop.c b/gcc/cprop.c index 6b4c0b8fa38..31868a5c6bb 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; -- 2.30.2