diff options
author | Roman Zippel <zippel@linux-m68k.org> | 2007-06-22 02:55:07 +0000 |
---|---|---|
committer | Roman Zippel <zippel@gcc.gnu.org> | 2007-06-22 02:55:07 +0000 |
commit | 7bb3ae2f52ac91eeefaa8eb8266bdcbde531c773 (patch) | |
tree | 0b4d0595823c9e7cba340a59cfc4262f391cc686 | |
parent | aa7393d96a504d2290fbd06806a9bc24304c195f (diff) | |
download | gcc-7bb3ae2f52ac91eeefaa8eb8266bdcbde531c773.zip gcc-7bb3ae2f52ac91eeefaa8eb8266bdcbde531c773.tar.gz gcc-7bb3ae2f52ac91eeefaa8eb8266bdcbde531c773.tar.bz2 |
df-scan.c (df_read_modify_subreg_p): Use REGMODE_NATURAL_SIZE.
* df-scan.c (df_read_modify_subreg_p): Use REGMODE_NATURAL_SIZE.
(df_def_record_1): Set (DF_REF_READ_WRITE | DF_REF_PARTIAL) for
partial register accesses.
From-SVN: r125940
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/df-scan.c | 31 |
2 files changed, 13 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7ca7ae3..fff3cab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-06-22 Roman Zippel <zippel@linux-m68k.org> + + * df-scan.c (df_read_modify_subreg_p): Use REGMODE_NATURAL_SIZE. + (df_def_record_1): Set (DF_REF_READ_WRITE | DF_REF_PARTIAL) for + partial register accesses. + 2007-06-21 Adam Nemet <anemet@caviumnetworks.com> * fold-const.c (debug_fold_checksum): Move it under diff --git a/gcc/df-scan.c b/gcc/df-scan.c index 97ce8aa..61147be 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -2703,7 +2703,8 @@ df_read_modify_subreg_p (rtx x) return false; isize = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))); osize = GET_MODE_SIZE (GET_MODE (x)); - return (isize > osize && isize > UNITS_PER_WORD); + return isize > osize + && isize > REGMODE_NATURAL_SIZE (GET_MODE (SUBREG_REG (x))); } @@ -2718,7 +2719,6 @@ df_def_record_1 (struct df_collection_rec *collection_rec, { rtx *loc; rtx dst; - bool dst_in_strict_lowpart = false; /* We may recursively call ourselves on EXPR_LIST when dealing with PARALLEL construct. */ @@ -2749,33 +2749,16 @@ df_def_record_1 (struct df_collection_rec *collection_rec, /* Maybe, we should flag the use of STRICT_LOW_PART somehow. It might be handy for the reg allocator. */ while (GET_CODE (dst) == STRICT_LOW_PART - || GET_CODE (dst) == ZERO_EXTRACT - || df_read_modify_subreg_p (dst)) + || GET_CODE (dst) == ZERO_EXTRACT) { -#if 0 - /* Strict low part always contains SUBREG, but we do not want to make - it appear outside, as whole register is always considered. */ - if (GET_CODE (dst) == STRICT_LOW_PART) - { - loc = &XEXP (dst, 0); - dst = *loc; - } -#endif + flags |= DF_REF_READ_WRITE | DF_REF_PARTIAL; loc = &XEXP (dst, 0); - if (GET_CODE (dst) == STRICT_LOW_PART) - dst_in_strict_lowpart = true; dst = *loc; - flags |= DF_REF_READ_WRITE; - } - /* Sets to a subreg of a single word register are partial sets if - they are wrapped in a strict lowpart, and not partial otherwise. - */ - if (GET_CODE (dst) == SUBREG && REG_P (SUBREG_REG (dst)) - && dst_in_strict_lowpart) - flags |= DF_REF_PARTIAL; - + if (df_read_modify_subreg_p (dst)) + flags |= DF_REF_READ_WRITE | DF_REF_PARTIAL; + if (REG_P (dst) || (GET_CODE (dst) == SUBREG && REG_P (SUBREG_REG (dst)))) df_ref_record (collection_rec, |