summaryrefslogtreecommitdiff
path: root/gcc/global.c
diff options
context:
space:
mode:
authorzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-06 00:21:34 +0000
committerzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-06 00:21:34 +0000
commit30de5b5537b5cff2d191755ec90e82f71f56339d (patch)
tree81a4fa5e0fbdeae7d436872de34208dd812b0bd9 /gcc/global.c
parent20775aa9250a1d4745803ac46d202617f0c7e942 (diff)
downloadgcc-30de5b5537b5cff2d191755ec90e82f71f56339d.tar.gz
2008-03-05 Kenneth Zadeck <zadeck@naturalbridge.com>
* fwprop.c (update_df): Support width and offset parameters of df_ref_create. * ra-conflict.c (mark_reg_store, clear_reg_in_live, global_conflicts): Change DF_REF_EXTRACT to either DF_REF_ZERO_EXTRACT or DF_REF_SIGN_EXTRACT. Change DF_REF_STRICT_LOWER_PART to DF_REF_STRICT_LOW_PART. * df-scan.c (df_ref_record, df_defs_record, df_ref_create_structure, df_def_record_1, df_uses_record, df_get_conditional_uses, df_get_call_refs, df_insn_refs_collect, df_bb_refs_collect, df_entry_block_defs_collect, df_exit_block_uses_collect): Support new width and offset fields. (ref_extract_pool): New storage pool. (df_free_ref): New function. (df_reg_chain_unlink, df_free_collection_rec, df_sort_and_compress_refs): Call df_free_ref. (df_ref_equal_p, df_ref_compare): Compare offset and width fields of df_ref_extract. (df_ref_create_structure): Allocate df_ref_extract if offset and width fields are used. (df_def_record_1): Get offset and width from ZERO_EXTRACT. (df_uses_record): Get offset and width from ZERO_EXTRACT and SIGN_EXTRACT. * global.c (build_insn_chain): Change DF_REF_EXTRACT to either DF_REF_ZERO_EXTRACT or DF_REF_SIGN_EXTRACT. Change DF_REF_STRICT_LOWER_PART to DF_REF_STRICT_LOW_PART. * df.h (df_ref_flags): Change DF_REF_EXTRACT to either DF_REF_ZERO_EXTRACT or DF_REF_SIGN_EXTRACT. Change DF_REF_STRICT_LOWER_PART to DF_REF_STRICT_LOW_PART. (df_ref_extract): New structure. (DF_REF_WIDTH, DF_REF_OFFSET): New macros. (df_ref_create): Add width and offset parameters. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132962 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/global.c')
-rw-r--r--gcc/global.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/global.c b/gcc/global.c
index 12641a60cba..ca9f4fb1a8a 100644
--- a/gcc/global.c
+++ b/gcc/global.c
@@ -1490,7 +1490,7 @@ build_insn_chain (void)
/* We can model subregs, but not if they are
wrapped in ZERO_EXTRACTS. */
if (GET_CODE (reg) == SUBREG
- && !DF_REF_FLAGS_IS_SET (def, DF_REF_EXTRACT))
+ && !DF_REF_FLAGS_IS_SET (def, DF_REF_ZERO_EXTRACT))
{
unsigned int start = SUBREG_BYTE (reg);
unsigned int last = start
@@ -1503,7 +1503,7 @@ build_insn_chain (void)
regno, reg);
if (!DF_REF_FLAGS_IS_SET
- (def, DF_REF_STRICT_LOWER_PART))
+ (def, DF_REF_STRICT_LOW_PART))
{
/* Expand the range to cover entire words.
Bytes added here are "don't care". */
@@ -1566,7 +1566,7 @@ build_insn_chain (void)
precisely so we do not need to look at the
fabricated use. */
if (DF_REF_FLAGS_IS_SET (use, DF_REF_READ_WRITE)
- && !DF_REF_FLAGS_IS_SET (use, DF_REF_EXTRACT)
+ && !DF_REF_FLAGS_IS_SET (use, DF_REF_ZERO_EXTRACT)
&& DF_REF_FLAGS_IS_SET (use, DF_REF_SUBREG))
continue;
@@ -1585,7 +1585,8 @@ build_insn_chain (void)
if (regno < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
{
if (GET_CODE (reg) == SUBREG
- && !DF_REF_FLAGS_IS_SET (use, DF_REF_EXTRACT))
+ && !DF_REF_FLAGS_IS_SET (use,
+ DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT))
{
unsigned int start = SUBREG_BYTE (reg);
unsigned int last = start