diff options
author | Kenneth Zadeck <zadeck@gcc.gnu.org> | 2008-03-06 00:21:34 +0000 |
---|---|---|
committer | Kenneth Zadeck <zadeck@gcc.gnu.org> | 2008-03-06 00:21:34 +0000 |
commit | ca9052ce17c72129b59e1e17d790a3e08737f82e (patch) | |
tree | 81a4fa5e0fbdeae7d436872de34208dd812b0bd9 /gcc/global.c | |
parent | 256fe3d795af429bc68d6f9d94c6c3e871a69736 (diff) | |
download | gcc-ca9052ce17c72129b59e1e17d790a3e08737f82e.zip gcc-ca9052ce17c72129b59e1e17d790a3e08737f82e.tar.gz gcc-ca9052ce17c72129b59e1e17d790a3e08737f82e.tar.bz2 |
fwprop.c (update_df): Support width and offset parameters of df_ref_create.
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.
From-SVN: r132962
Diffstat (limited to 'gcc/global.c')
-rw-r--r-- | gcc/global.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/global.c b/gcc/global.c index 12641a6..ca9f4fb 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 |