Commit 63642d5a by Alexandre Oliva Committed by Alexandre Oliva

df-scan.c (df_ref_chain_change_bb): Simplify.

* 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.

From-SVN: r132795
parent e0651058
2008-03-01 Alexandre Oliva <aoliva@redhat.com> 2008-03-01 Alexandre Oliva <aoliva@redhat.com>
* 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.
2008-03-01 Alexandre Oliva <aoliva@redhat.com>
* rtlanal.c (loc_mentioned_in_p): Test XVECEXPs correctly. * rtlanal.c (loc_mentioned_in_p): Test XVECEXPs correctly.
2008-03-01 Alexandre Oliva <aoliva@redhat.com> 2008-03-01 Alexandre Oliva <aoliva@redhat.com>
......
/* Control flow graph manipulation code for GNU compiler. /* Control flow graph manipulation code for GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -477,13 +477,8 @@ update_bb_for_insn_chain (rtx begin, rtx end, basic_block bb) ...@@ -477,13 +477,8 @@ update_bb_for_insn_chain (rtx begin, rtx end, basic_block bb)
end = NEXT_INSN (end); end = NEXT_INSN (end);
for (insn = begin; insn != end; insn = NEXT_INSN (insn)) for (insn = begin; insn != end; insn = NEXT_INSN (insn))
{
if (!BARRIER_P (insn)) if (!BARRIER_P (insn))
{ df_insn_change_bb (insn, bb);
set_block_for_insn (insn, bb);
df_insn_change_bb (insn);
}
}
} }
/* Update BLOCK_FOR_INSN of insns in BB to BB, /* Update BLOCK_FOR_INSN of insns in BB to BB,
......
/* Scanning of rtl for dataflow analysis. /* Scanning of rtl for dataflow analysis.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
Free Software Foundation, Inc. 2008 Free Software Foundation, Inc.
Originally contributed by Michael P. Hayes Originally contributed by Michael P. Hayes
(m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com) (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
Major rewrite contributed by Danny Berlin (dberlin@dberlin.org) Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
...@@ -1753,14 +1753,10 @@ df_maybe_reorganize_def_refs (enum df_ref_order order) ...@@ -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. /* 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. 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. */
static basic_block static void
df_ref_chain_change_bb (struct df_ref **ref_rec, df_ref_chain_change_bb (struct df_ref **ref_rec,
basic_block old_bb, basic_block old_bb,
basic_block new_bb) basic_block new_bb)
...@@ -1769,18 +1765,10 @@ df_ref_chain_change_bb (struct df_ref **ref_rec, ...@@ -1769,18 +1765,10 @@ df_ref_chain_change_bb (struct df_ref **ref_rec,
{ {
struct df_ref *ref = *ref_rec; struct df_ref *ref = *ref_rec;
if (DF_REF_BB (ref) == new_bb) gcc_assert (DF_REF_BB (ref) == old_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; DF_REF_BB (ref) = new_bb;
}
ref_rec++; ref_rec++;
} }
return old_bb;
} }
...@@ -1789,13 +1777,17 @@ df_ref_chain_change_bb (struct df_ref **ref_rec, ...@@ -1789,13 +1777,17 @@ df_ref_chain_change_bb (struct df_ref **ref_rec,
instructions from one block to another. */ instructions from one block to another. */
void 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 = BLOCK_FOR_INSN (insn);
basic_block old_bb = NULL;
struct df_insn_info *insn_info; struct df_insn_info *insn_info;
unsigned int uid = INSN_UID (insn); unsigned int uid = INSN_UID (insn);
if (old_bb == new_bb)
return;
set_block_for_insn (insn, new_bb);
if (!df) if (!df)
return; return;
...@@ -1814,17 +1806,9 @@ df_insn_change_bb (rtx insn) ...@@ -1814,17 +1806,9 @@ df_insn_change_bb (rtx insn)
if (!INSN_P (insn)) if (!INSN_P (insn))
return; return;
old_bb = df_ref_chain_change_bb (insn_info->defs, old_bb, new_bb); df_ref_chain_change_bb (insn_info->defs, old_bb, new_bb);
if (old_bb == new_bb) df_ref_chain_change_bb (insn_info->uses, old_bb, new_bb);
return; df_ref_chain_change_bb (insn_info->eq_uses, old_bb, new_bb);
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_set_bb_dirty (new_bb); df_set_bb_dirty (new_bb);
if (old_bb) if (old_bb)
......
/* Form lists of pseudo register references for autoinc optimization /* Form lists of pseudo register references for autoinc optimization
for GNU compiler. This is part of flow optimization. for GNU compiler. This is part of flow optimization.
Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc. Free Software Foundation, Inc.
Originally contributed by Michael P. Hayes Originally contributed by Michael P. Hayes
(m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com) (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
...@@ -871,7 +871,7 @@ extern bool df_insn_rescan (rtx); ...@@ -871,7 +871,7 @@ extern bool df_insn_rescan (rtx);
extern void df_insn_rescan_all (void); extern void df_insn_rescan_all (void);
extern void df_process_deferred_rescans (void); extern void df_process_deferred_rescans (void);
extern void df_recompute_luids (basic_block); extern void df_recompute_luids (basic_block);
extern void df_insn_change_bb (rtx); extern void df_insn_change_bb (rtx, basic_block);
extern void df_maybe_reorganize_use_refs (enum df_ref_order); extern void df_maybe_reorganize_use_refs (enum df_ref_order);
extern void df_maybe_reorganize_def_refs (enum df_ref_order); extern void df_maybe_reorganize_def_refs (enum df_ref_order);
extern void df_ref_change_reg_with_loc (int, int, rtx); extern void df_ref_change_reg_with_loc (int, int, rtx);
......
...@@ -3737,10 +3737,7 @@ reorder_insns (rtx from, rtx to, rtx after) ...@@ -3737,10 +3737,7 @@ reorder_insns (rtx from, rtx to, rtx after)
for (x = from; x != NEXT_INSN (to); x = NEXT_INSN (x)) for (x = from; x != NEXT_INSN (to); x = NEXT_INSN (x))
if (!BARRIER_P (x)) if (!BARRIER_P (x))
{ df_insn_change_bb (x, bb);
set_block_for_insn (x, bb);
df_insn_change_bb (x);
}
} }
} }
......
/* Instruction scheduling pass. /* Instruction scheduling pass.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
and currently maintained by, Jim Wilson (wilson@cygnus.com) and currently maintained by, Jim Wilson (wilson@cygnus.com)
...@@ -1835,8 +1836,7 @@ move_insn (rtx insn) ...@@ -1835,8 +1836,7 @@ move_insn (rtx insn)
gcc_assert (BB_END (bb) == last); gcc_assert (BB_END (bb) == last);
} }
set_block_for_insn (insn, bb); df_insn_change_bb (insn, bb);
df_insn_change_bb (insn);
/* Update BB_END, if needed. */ /* Update BB_END, if needed. */
if (BB_END (bb) == last) if (BB_END (bb) == last)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment