diff options
author | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-01 03:36:43 +0000 |
---|---|---|
committer | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-01 03:36:43 +0000 |
commit | a2bdd6432ca7a2e629c7bbdef12ae5b75a8da5c2 (patch) | |
tree | b81fab7b64f19da71fa7bc7fb05aa9bf93363c02 /gcc/df-scan.c | |
parent | c8707f088b4d233f1d672a367bba72ef28785f7f (diff) | |
download | gcc-a2bdd6432ca7a2e629c7bbdef12ae5b75a8da5c2.tar.gz |
* df-scan.c (df_ref_chain_change_bb): Simplify.
(df_insn_change_bb): Add new_bb argument. Simplify. Call
set_block_for_insn if there's any change.
* df.h ((df_insn_change_bb): Fix prototype.
* cfgrtl.c (update_bb_for_insn_chain): Pass bb to
df_insn_change_bb, don't call set_block_for_insn.
* emit-rtl.c (reorder_insns): Likewise.
* haifa-sched.c (move_insn): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132795 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/df-scan.c')
-rw-r--r-- | gcc/df-scan.c | 50 |
1 files changed, 17 insertions, 33 deletions
diff --git a/gcc/df-scan.c b/gcc/df-scan.c index f3a90262f99..3dc759cedb3 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -1,6 +1,6 @@ /* Scanning of rtl for dataflow analysis. - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008 Free Software Foundation, Inc. Originally contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com) Major rewrite contributed by Danny Berlin (dberlin@dberlin.org) @@ -1753,14 +1753,10 @@ df_maybe_reorganize_def_refs (enum df_ref_order order) } -/* Change the BB of all refs in the ref chain to NEW_BB. - Assumes that all refs in the chain have the same BB. - If changed, return the original bb the chain belonged to - (or . - If no change, return NEW_BB. - If something's wrong, it will return NULL. */ +/* Change the BB of all refs in the ref chain from OLD_BB to NEW_BB. + Assumes that all refs in the chain have the same BB. */ -static basic_block +static void df_ref_chain_change_bb (struct df_ref **ref_rec, basic_block old_bb, basic_block new_bb) @@ -1769,18 +1765,10 @@ df_ref_chain_change_bb (struct df_ref **ref_rec, { struct df_ref *ref = *ref_rec; - if (DF_REF_BB (ref) == new_bb) - return new_bb; - else - { - gcc_assert (old_bb == NULL || DF_REF_BB (ref) == old_bb); - old_bb = DF_REF_BB (ref); - DF_REF_BB (ref) = new_bb; - } + gcc_assert (DF_REF_BB (ref) == old_bb); + DF_REF_BB (ref) = new_bb; ref_rec++; } - - return old_bb; } @@ -1789,13 +1777,17 @@ df_ref_chain_change_bb (struct df_ref **ref_rec, instructions from one block to another. */ void -df_insn_change_bb (rtx insn) +df_insn_change_bb (rtx insn, basic_block new_bb) { - basic_block new_bb = BLOCK_FOR_INSN (insn); - basic_block old_bb = NULL; + basic_block old_bb = BLOCK_FOR_INSN (insn); struct df_insn_info *insn_info; unsigned int uid = INSN_UID (insn); + if (old_bb == new_bb) + return; + + set_block_for_insn (insn, new_bb); + if (!df) return; @@ -1814,17 +1806,9 @@ df_insn_change_bb (rtx insn) if (!INSN_P (insn)) return; - old_bb = df_ref_chain_change_bb (insn_info->defs, old_bb, new_bb); - if (old_bb == new_bb) - return; - - old_bb = df_ref_chain_change_bb (insn_info->uses, old_bb, new_bb); - if (old_bb == new_bb) - return; - - old_bb = df_ref_chain_change_bb (insn_info->eq_uses, old_bb, new_bb); - if (old_bb == new_bb) - return; + df_ref_chain_change_bb (insn_info->defs, old_bb, new_bb); + df_ref_chain_change_bb (insn_info->uses, old_bb, new_bb); + df_ref_chain_change_bb (insn_info->eq_uses, old_bb, new_bb); df_set_bb_dirty (new_bb); if (old_bb) |