diff options
author | Richard Sandiford <rsandifo@nildram.co.uk> | 2008-01-30 11:18:27 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2008-01-30 11:18:27 +0000 |
commit | f36a5a8853c2407900cdc21b3a400130aa6f6dda (patch) | |
tree | 6593f73075d1b463fa35f873cbf27a2fb1776eb3 /gcc/global.c | |
parent | 393c005884c547ee6d4cebb2fb938e6214714e9e (diff) | |
download | gcc-f36a5a8853c2407900cdc21b3a400130aa6f6dda.zip gcc-f36a5a8853c2407900cdc21b3a400130aa6f6dda.tar.gz gcc-f36a5a8853c2407900cdc21b3a400130aa6f6dda.tar.bz2 |
re PR rtl-optimization/34998 (gcc.c-torture/execute/20040709-1.c fails for -EL -mips16 -O3)
gcc/
PR rtl-optimization/34998
* global.c (build_insn_chain): Treat non-subreg_lowpart
SUBREGs of pseudos as clobbering all the words covered by the
SUBREG, not just all the bytes.
* ra-conflict.c (clear_reg_in_live): Likewise. Take the
original df_ref rather than an extract parameter.
(global_conflicts): Update call accordingly.
From-SVN: r131960
Diffstat (limited to 'gcc/global.c')
-rw-r--r-- | gcc/global.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/global.c b/gcc/global.c index b8a0ec7..12641a6 100644 --- a/gcc/global.c +++ b/gcc/global.c @@ -1501,6 +1501,17 @@ build_insn_chain (void) live_subregs, live_subregs_used, regno, reg); + + if (!DF_REF_FLAGS_IS_SET + (def, DF_REF_STRICT_LOWER_PART)) + { + /* Expand the range to cover entire words. + Bytes added here are "don't care". */ + start = start / UNITS_PER_WORD * UNITS_PER_WORD; + last = ((last + UNITS_PER_WORD - 1) + / UNITS_PER_WORD * UNITS_PER_WORD); + } + /* Ignore the paradoxical bits. */ if ((int)last > live_subregs_used[regno]) last = live_subregs_used[regno]; |