From 9a9cbcd200bcb0bd9fc107407a8d1da83c1d25a5 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Wed, 30 Jan 2008 11:18:27 +0000 Subject: 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131960 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/global.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'gcc/global.c') diff --git a/gcc/global.c b/gcc/global.c index b8a0ec78158..12641a60cba 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]; -- cgit v1.2.1