This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tree-profiling] support for multiple cfgs
- From: Steven Bosscher <stevenb at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 10 Jun 2004 23:18:26 +0200
- Subject: [tree-profiling] support for multiple cfgs
- Organization: SUSE Labs
Hi,
I've just commited the attached patch to the tree profiling
branch.
Bootstrapped and tested on i686-unknown-linux-gnu.
Gr.
Steven
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v
retrieving revision 1.903.2.179.2.10
diff -c -3 -p -r1.903.2.179.2.10 Makefile.in
*** Makefile.in 4 Jun 2004 20:44:42 -0000 1.903.2.179.2.10
--- Makefile.in 10 Jun 2004 12:34:25 -0000
*************** PARAMS_H = params.h params.def
*** 686,692 ****
TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \
input.h statistics.h
BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \
! hard-reg-set.h cfghooks.h
COVERAGE_H = coverage.h gcov-io.h gcov-iov.h
DEMANGLE_H = $(srcdir)/../include/demangle.h
RECOG_H = recog.h
--- 686,692 ----
TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \
input.h statistics.h
BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \
! hard-reg-set.h cfghooks.h function.h
COVERAGE_H = coverage.h gcov-io.h gcov-iov.h
DEMANGLE_H = $(srcdir)/../include/demangle.h
RECOG_H = recog.h
*************** tree-ssa-pre.o : tree-ssa-pre.c $(TREE_F
*** 1625,1631 ****
tree-cfg.o : tree-cfg.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) flags.h output.h \
diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
! $(TREE_DUMP_H) except.h langhooks.h cfgloop.h gt-tree-cfg.h tree-pass.h
tree-tailcall.o : tree-tailcall.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_P_H) function.h $(TM_H) coretypes.h \
$(TREE_DUMP_H) diagnostic.h except.h tree-pass.h flags.h langhooks.h
--- 1625,1631 ----
tree-cfg.o : tree-cfg.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) flags.h output.h \
diagnostic.h errors.h function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
! $(TREE_DUMP_H) except.h langhooks.h cfgloop.h tree-pass.h
tree-tailcall.o : tree-tailcall.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_P_H) function.h $(TM_H) coretypes.h \
$(TREE_DUMP_H) diagnostic.h except.h tree-pass.h flags.h langhooks.h
*************** cfghooks.o: cfghooks.c $(CONFIG_H) $(SYS
*** 1911,1917 ****
$(BASIC_BLOCK_H) cfglayout.h $(TREE_FLOW_H) $(TIMEVAR_H) toplev.h
cfgexpand.o : cfgexpand.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
! $(TREE_DUMP_H) except.h langhooks.h cfgloop.h gt-tree-cfg.h tree-pass.h $(RTL_H)
cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
function.h except.h $(GGC_H) $(TM_P_H) insn-config.h $(EXPR_H)
--- 1911,1917 ----
$(BASIC_BLOCK_H) cfglayout.h $(TREE_FLOW_H) $(TIMEVAR_H) toplev.h
cfgexpand.o : cfgexpand.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) function.h $(TIMEVAR_H) $(TM_H) coretypes.h \
! $(TREE_DUMP_H) except.h langhooks.h cfgloop.h tree-pass.h $(RTL_H)
cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
function.h except.h $(GGC_H) $(TM_P_H) insn-config.h $(EXPR_H)
*************** GTFILES = $(srcdir)/input.h $(srcdir)/co
*** 2303,2309 ****
$(srcdir)/tree-mudflap.c $(srcdir)/tree-flow.h \
$(srcdir)/c-objc-common.c $(srcdir)/c-common.c $(srcdir)/c-parse.in \
$(srcdir)/tree-ssanames.c $(srcdir)/tree-eh.c \
! $(srcdir)/tree-phinodes.c $(srcdir)/tree-cfg.c \
$(srcdir)/tree-dfa.c $(srcdir)/tree-ssa-ccp.c \
$(srcdir)/tree-iterator.c $(srcdir)/gimplify.c \
$(srcdir)/tree-alias-type.h $(srcdir)/tree-alias-common.h \
--- 2303,2309 ----
$(srcdir)/tree-mudflap.c $(srcdir)/tree-flow.h \
$(srcdir)/c-objc-common.c $(srcdir)/c-common.c $(srcdir)/c-parse.in \
$(srcdir)/tree-ssanames.c $(srcdir)/tree-eh.c \
! $(srcdir)/tree-phinodes.c \
$(srcdir)/tree-dfa.c $(srcdir)/tree-ssa-ccp.c \
$(srcdir)/tree-iterator.c $(srcdir)/gimplify.c \
$(srcdir)/tree-alias-type.h $(srcdir)/tree-alias-common.h \
*************** gt-c-pragma.h gtype-c.h gt-input.h gt-cf
*** 2329,2335 ****
gt-tree-alias-common.h gt-tree-mudflap.h \
gt-tree-ssa-ccp.h gt-tree-eh.h \
gt-tree-ssanames.h gt-tree-iterator.h gt-gimplify.h \
! gt-tree-phinodes.h gt-tree-cfg.h gt-tree-nested.h \
gt-stringpool.h gt-langhooks.h : s-gtype ; @true
gtyp-gen.h: s-gtyp-gen ; @true
--- 2329,2335 ----
gt-tree-alias-common.h gt-tree-mudflap.h \
gt-tree-ssa-ccp.h gt-tree-eh.h \
gt-tree-ssanames.h gt-tree-iterator.h gt-gimplify.h \
! gt-tree-phinodes.h gt-tree-nested.h \
gt-stringpool.h gt-langhooks.h : s-gtype ; @true
gtyp-gen.h: s-gtyp-gen ; @true
Index: basic-block.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/basic-block.h,v
retrieving revision 1.153.2.46.2.6
diff -c -3 -p -r1.153.2.46.2.6 basic-block.h
*** basic-block.h 17 May 2004 22:19:30 -0000 1.153.2.46.2.6
--- basic-block.h 10 Jun 2004 12:34:25 -0000
*************** struct basic_block_def GTY((chain_next (
*** 274,280 ****
int partition;
/* The data used by basic block copying and reordering functions. */
! struct reorder_block_def * GTY ((skip (""))) rbi;
/* Annotations used at the tree level. */
struct bb_ann_d *tree_annotations;
--- 274,280 ----
int partition;
/* The data used by basic block copying and reordering functions. */
! struct reorder_block_def *rbi;
/* Annotations used at the tree level. */
struct bb_ann_d *tree_annotations;
*************** struct basic_block_def GTY((chain_next (
*** 283,303 ****
typedef struct basic_block_def *basic_block;
/* Structure to hold information about the blocks during reordering and
! copying. */
! typedef struct reorder_block_def
{
rtx header;
rtx footer;
basic_block next;
! basic_block original;
! /* Used by loop copying. */
! basic_block copy;
int duplicated;
! /* These fields are used by bb-reorder pass. */
int visited;
! } *reorder_block_def;
#define BB_FREQ_MAX 10000
--- 283,311 ----
typedef struct basic_block_def *basic_block;
/* Structure to hold information about the blocks during reordering and
! copying. Needs to be put on a diet. */
! struct reorder_block_def GTY(())
{
rtx header;
rtx footer;
+
basic_block next;
!
! /* These pointers may be unreliable as the first is only used for
! debugging (and should probably be removed, and the second is only
! used by copying. The basic blocks pointed to may be removed and
! that leaves these pointers pointing to garbage. */
! basic_block GTY ((skip (""))) original;
! basic_block GTY ((skip (""))) copy;
!
int duplicated;
! /* This field is used by the bb-reorder and tracer passes. */
int visited;
! };
!
! typedef struct reorder_block_def *reorder_block_def;
#define BB_FREQ_MAX 10000
*************** typedef struct reorder_block_def
*** 315,337 ****
#define HOT_PARTITION 1
#define COLD_PARTITION 2
! /* Number of basic blocks in the current function. */
!
! extern int n_basic_blocks;
!
! /* First free basic block number. */
!
! extern int last_basic_block;
!
! /* Number of edges in the current function. */
!
! extern int n_edges;
!
! /* Index by basic block number, get basic block struct info. */
! extern GTY(()) varray_type basic_block_info;
! #define BASIC_BLOCK(N) (VARRAY_BB (basic_block_info, (N)))
/* For iterating over basic blocks. */
#define FOR_BB_BETWEEN(BB, FROM, TO, DIR) \
--- 323,378 ----
#define HOT_PARTITION 1
#define COLD_PARTITION 2
! /* A structure to group all the per-function control flow graph data.
! The x_* prefixing is necessary because otherwise references to the
! fields of this struct are interpreted as the defines for backward
! source compatibility following the definition of this struct. */
! struct control_flow_graph GTY(())
! {
! /* Block pointers for the exit and entry of a function.
! These are always the head and tail of the basic block list. */
! basic_block x_entry_block_ptr;
! basic_block x_exit_block_ptr;
!
! /* Index by basic block number, get basic block struct info. */
! varray_type x_basic_block_info;
!
! /* Number of basic blocks in this flow graph. */
! int x_n_basic_blocks;
!
! /* Number of edges in this flow graph. */
! int x_n_edges;
!
! /* The first free basic block number. */
! int x_last_basic_block;
!
! /* Mapping of labels to their associated blocks. At present
! only used for the tree CFG. */
! varray_type x_label_to_block_map;
! };
! /* Defines for accessing the fields of the CFG structure for function FN. */
! #define ENTRY_BLOCK_PTR_FOR_FUNCTION(FN) ((FN)->cfg->x_entry_block_ptr)
! #define EXIT_BLOCK_PTR_FOR_FUNCTION(FN) ((FN)->cfg->x_exit_block_ptr)
! #define basic_block_info_for_function(FN) ((FN)->cfg->x_basic_block_info)
! #define n_basic_blocks_for_function(FN) ((FN)->cfg->x_n_basic_blocks)
! #define n_edges_for_function(FN) ((FN)->cfg->x_n_edges)
! #define last_basic_block_for_function(FN) ((FN)->cfg->x_last_basic_block)
! #define label_to_block_map_for_function(FN) ((FN)->cfg->x_label_to_block_map)
!
! #define BASIC_BLOCK_FOR_FUNCTION(FN,N) \
! (VARRAY_BB (basic_block_info_for_function(FN), (N)))
!
! /* Defines for texual backward source compatibility. */
! #define ENTRY_BLOCK_PTR (cfun->cfg->x_entry_block_ptr)
! #define EXIT_BLOCK_PTR (cfun->cfg->x_exit_block_ptr)
! #define basic_block_info (cfun->cfg->x_basic_block_info)
! #define n_basic_blocks (cfun->cfg->x_n_basic_blocks)
! #define n_edges (cfun->cfg->x_n_edges)
! #define last_basic_block (cfun->cfg->x_last_basic_block)
! #define label_to_block_map (cfun->cfg->x_label_to_block_map)
! #define BASIC_BLOCK(N) (VARRAY_BB (basic_block_info, (N)))
/* For iterating over basic blocks. */
#define FOR_BB_BETWEEN(BB, FROM, TO, DIR) \
*************** extern struct obstack flow_obstack;
*** 395,404 ****
/* Special block number not valid for any block. */
#define INVALID_BLOCK (-3)
- /* Similarly, block pointers for the edge list. */
- extern GTY(()) basic_block ENTRY_BLOCK_PTR;
- extern GTY(()) basic_block EXIT_BLOCK_PTR;
-
#define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0)
#define set_block_for_insn(INSN, BB) (BLOCK_FOR_INSN (INSN) = BB)
--- 436,441 ----
*************** extern void reorder_basic_blocks (void);
*** 679,687 ****
extern void partition_hot_cold_basic_blocks (void);
/* In cfg.c */
- extern void alloc_rbi_pool (void);
extern void initialize_bb_rbi (basic_block bb);
- extern void free_rbi_pool (void);
/* In dominance.c */
--- 716,722 ----
Index: cfg.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfg.c,v
retrieving revision 1.34.2.23.2.8
diff -c -3 -p -r1.34.2.23.2.8 cfg.c
*** cfg.c 18 Apr 2004 10:35:19 -0000 1.34.2.23.2.8
--- cfg.c 10 Jun 2004 12:34:25 -0000
*************** Software Foundation, 59 Temple Place - S
*** 61,67 ****
#include "toplev.h"
#include "tm_p.h"
#include "obstack.h"
- #include "alloc-pool.h"
#include "timevar.h"
#include "ggc.h"
--- 61,66 ----
*************** Software Foundation, 59 Temple Place - S
*** 70,97 ****
struct obstack flow_obstack;
static char *flow_firstobj;
- /* Number of basic blocks in the current function. */
-
- int n_basic_blocks;
-
- /* First free basic block number. */
-
- int last_basic_block;
-
- /* Number of edges in the current function. */
-
- int n_edges;
-
- /* The basic block array. */
-
- varray_type basic_block_info;
-
- /* The special entry and exit blocks. */
- basic_block ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR;
-
- /* Memory alloc pool for bb member rbi. */
- alloc_pool rbi_pool;
-
void debug_flow_info (void);
static void free_edge (edge);
--- 69,74 ----
*************** init_flow (void)
*** 116,124 ****
flow_firstobj = obstack_alloc (&flow_obstack, 0);
}
! ENTRY_BLOCK_PTR = ggc_alloc_cleared (sizeof (*ENTRY_BLOCK_PTR));
ENTRY_BLOCK_PTR->index = ENTRY_BLOCK;
! EXIT_BLOCK_PTR = ggc_alloc_cleared (sizeof (*EXIT_BLOCK_PTR));
EXIT_BLOCK_PTR->index = EXIT_BLOCK;
ENTRY_BLOCK_PTR->next_bb = EXIT_BLOCK_PTR;
EXIT_BLOCK_PTR->prev_bb = ENTRY_BLOCK_PTR;
--- 93,101 ----
flow_firstobj = obstack_alloc (&flow_obstack, 0);
}
! ENTRY_BLOCK_PTR = ggc_alloc_cleared (sizeof (struct basic_block_def));
ENTRY_BLOCK_PTR->index = ENTRY_BLOCK;
! EXIT_BLOCK_PTR = ggc_alloc_cleared (sizeof (struct basic_block_def));
EXIT_BLOCK_PTR->index = EXIT_BLOCK;
ENTRY_BLOCK_PTR->next_bb = EXIT_BLOCK_PTR;
EXIT_BLOCK_PTR->prev_bb = ENTRY_BLOCK_PTR;
*************** alloc_block (void)
*** 184,207 ****
return bb;
}
- /* Create memory pool for rbi_pool. */
-
- void
- alloc_rbi_pool (void)
- {
- rbi_pool = create_alloc_pool ("rbi pool",
- sizeof (struct reorder_block_def),
- n_basic_blocks + 2);
- }
-
- /* Free rbi_pool. */
-
- void
- free_rbi_pool (void)
- {
- free_alloc_pool (rbi_pool);
- }
-
/* Initialize rbi (the structure containing data used by basic block
duplication and reordering) for the given basic block. */
--- 161,166 ----
*************** initialize_bb_rbi (basic_block bb)
*** 210,217 ****
{
if (bb->rbi)
abort ();
! bb->rbi = pool_alloc (rbi_pool);
! memset (bb->rbi, 0, sizeof (struct reorder_block_def));
}
/* Link block B to chain after AFTER. */
--- 169,175 ----
{
if (bb->rbi)
abort ();
! bb->rbi = ggc_alloc_cleared (sizeof (struct reorder_block_def));
}
/* Link block B to chain after AFTER. */
Index: cfganal.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfganal.c,v
retrieving revision 1.25.2.13
diff -c -3 -p -r1.25.2.13 cfganal.c
*** cfganal.c 13 Feb 2004 13:11:03 -0000 1.25.2.13
--- cfganal.c 10 Jun 2004 12:34:25 -0000
*************** Software Foundation, 59 Temple Place - S
*** 27,32 ****
--- 27,33 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "insn-config.h"
#include "recog.h"
#include "toplev.h"
Index: cfgcleanup.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgcleanup.c,v
retrieving revision 1.62.2.21.2.7
diff -c -3 -p -r1.62.2.21.2.7 cfgcleanup.c
*** cfgcleanup.c 4 Jun 2004 20:44:50 -0000 1.62.2.21.2.7
--- cfgcleanup.c 10 Jun 2004 12:34:25 -0000
*************** Software Foundation, 59 Temple Place - S
*** 38,43 ****
--- 38,44 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "timevar.h"
#include "output.h"
#include "insn-config.h"
Index: cfghooks.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfghooks.c,v
retrieving revision 1.1.2.10.2.4
diff -c -3 -p -r1.1.2.10.2.4 cfghooks.c
*** cfghooks.c 29 Apr 2004 07:27:33 -0000 1.1.2.10.2.4
--- cfghooks.c 10 Jun 2004 12:34:25 -0000
*************** Boston, MA 02111-1307, USA. */
*** 26,31 ****
--- 26,32 ----
#include "tree.h"
#include "rtl.h"
#include "basic-block.h"
+ #include "function.h"
#include "tree-flow.h"
#include "timevar.h"
#include "toplev.h"
Index: cfglayout.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfglayout.c,v
retrieving revision 1.19.2.18.2.6
diff -c -3 -p -r1.19.2.18.2.6 cfglayout.c
*** cfglayout.c 27 May 2004 00:33:37 -0000 1.19.2.18.2.6
--- cfglayout.c 10 Jun 2004 12:34:25 -0000
*************** cfg_layout_duplicate_bb (basic_block bb)
*** 1115,1131 ****
}
/* Main entry point to this module - initialize the data structures for
! CFG layout changes. It keeps LOOPS up-to-date if not null. */
void
cfg_layout_initialize (void)
{
basic_block bb;
- /* Our algorithm depends on fact that there are no dead jumptables
- around the code. */
- alloc_rbi_pool ();
-
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
initialize_bb_rbi (bb);
--- 1115,1129 ----
}
/* Main entry point to this module - initialize the data structures for
! CFG layout changes. It keeps LOOPS up-to-date if not null.
! Our algorithm depends on fact that there are no dead jumptables
! around the code. */
void
cfg_layout_initialize (void)
{
basic_block bb;
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
initialize_bb_rbi (bb);
*************** cfg_layout_finalize (void)
*** 1183,1189 ****
verify_insn_chain ();
#endif
- free_rbi_pool ();
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
bb->rbi = NULL;
--- 1181,1186 ----
*************** end:
*** 1247,1253 ****
void
copy_bbs (basic_block *bbs, unsigned n, basic_block *new_bbs,
! edge *edges, unsigned n_edges, edge *new_edges,
struct loop *base)
{
unsigned i, j;
--- 1244,1250 ----
void
copy_bbs (basic_block *bbs, unsigned n, basic_block *new_bbs,
! edge *edges, unsigned num_edges, edge *new_edges,
struct loop *base)
{
unsigned i, j;
*************** copy_bbs (basic_block *bbs, unsigned n,
*** 1286,1292 ****
}
/* Redirect edges. */
! for (j = 0; j < n_edges; j++)
new_edges[j] = NULL;
for (i = 0; i < n; i++)
{
--- 1283,1289 ----
}
/* Redirect edges. */
! for (j = 0; j < num_edges; j++)
new_edges[j] = NULL;
for (i = 0; i < n; i++)
{
*************** copy_bbs (basic_block *bbs, unsigned n,
*** 1295,1301 ****
for (e = new_bb->succ; e; e = e->succ_next)
{
! for (j = 0; j < n_edges; j++)
if (edges[j] && edges[j]->src == bb && edges[j]->dest == e->dest)
new_edges[j] = e;
--- 1292,1298 ----
for (e = new_bb->succ; e; e = e->succ_next)
{
! for (j = 0; j < num_edges; j++)
if (edges[j] && edges[j]->src == bb && edges[j]->dest == e->dest)
new_edges[j] = e;
Index: cfgloop.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgloop.c,v
retrieving revision 1.14.2.14.2.1
diff -c -3 -p -r1.14.2.14.2.1 cfgloop.c
*** cfgloop.c 3 Mar 2004 14:17:35 -0000 1.14.2.14.2.1
--- cfgloop.c 10 Jun 2004 12:34:25 -0000
*************** Software Foundation, 59 Temple Place - S
*** 25,30 ****
--- 25,31 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "toplev.h"
#include "cfgloop.h"
#include "flags.h"
*************** get_loop_body_in_dom_order (const struct
*** 1019,1025 ****
/* Gets exit edges of a LOOP, returning their number in N_EDGES. */
edge *
! get_loop_exit_edges (const struct loop *loop, unsigned int *n_edges)
{
edge *edges, e;
unsigned i, n;
--- 1020,1026 ----
/* Gets exit edges of a LOOP, returning their number in N_EDGES. */
edge *
! get_loop_exit_edges (const struct loop *loop, unsigned int *num_edges)
{
edge *edges, e;
unsigned i, n;
*************** get_loop_exit_edges (const struct loop *
*** 1035,1041 ****
if (!flow_bb_inside_loop_p (loop, e->dest))
n++;
edges = xmalloc (n * sizeof (edge));
! *n_edges = n;
n = 0;
for (i = 0; i < loop->num_nodes; i++)
for (e = body[i]->succ; e; e = e->succ_next)
--- 1036,1042 ----
if (!flow_bb_inside_loop_p (loop, e->dest))
n++;
edges = xmalloc (n * sizeof (edge));
! *num_edges = n;
n = 0;
for (i = 0; i < loop->num_nodes; i++)
for (e = body[i]->succ; e; e = e->succ_next)
Index: cfgloopanal.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgloopanal.c,v
retrieving revision 1.2.4.10.2.5
diff -c -3 -p -r1.2.4.10.2.5 cfgloopanal.c
*** cfgloopanal.c 17 May 2004 22:19:34 -0000 1.2.4.10.2.5
--- cfgloopanal.c 10 Jun 2004 12:34:25 -0000
*************** Software Foundation, 59 Temple Place - S
*** 25,30 ****
--- 25,31 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "cfgloop.h"
#include "expr.h"
#include "output.h"
Index: cfgloopmanip.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgloopmanip.c,v
retrieving revision 1.3.2.14.2.2
diff -c -3 -p -r1.3.2.14.2.2 cfgloopmanip.c
*** cfgloopmanip.c 17 May 2004 22:19:34 -0000 1.3.2.14.2.2
--- cfgloopmanip.c 10 Jun 2004 12:34:26 -0000
*************** Software Foundation, 59 Temple Place - S
*** 25,30 ****
--- 25,31 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "cfgloop.h"
#include "cfglayout.h"
#include "output.h"
*************** fix_irreducible_loops (basic_block from)
*** 251,257 ****
int stack_top;
sbitmap on_stack;
edge *edges, e;
! unsigned n_edges, i;
if (!(from->flags & BB_IRREDUCIBLE_LOOP))
return;
--- 252,258 ----
int stack_top;
sbitmap on_stack;
edge *edges, e;
! unsigned num_edges, i;
if (!(from->flags & BB_IRREDUCIBLE_LOOP))
return;
*************** fix_irreducible_loops (basic_block from)
*** 276,294 ****
bb->flags &= ~BB_IRREDUCIBLE_LOOP;
if (bb->loop_father->header == bb)
! edges = get_loop_exit_edges (bb->loop_father, &n_edges);
else
{
! n_edges = 0;
for (e = bb->succ; e; e = e->succ_next)
! n_edges++;
! edges = xmalloc (n_edges * sizeof (edge));
! n_edges = 0;
for (e = bb->succ; e; e = e->succ_next)
! edges[n_edges++] = e;
}
! for (i = 0; i < n_edges; i++)
{
e = edges[i];
--- 277,295 ----
bb->flags &= ~BB_IRREDUCIBLE_LOOP;
if (bb->loop_father->header == bb)
! edges = get_loop_exit_edges (bb->loop_father, &num_edges);
else
{
! num_edges = 0;
for (e = bb->succ; e; e = e->succ_next)
! num_edges++;
! edges = xmalloc (num_edges * sizeof (edge));
! num_edges = 0;
for (e = bb->succ; e; e = e->succ_next)
! edges[num_edges++] = e;
}
! for (i = 0; i < num_edges; i++)
{
e = edges[i];
*************** unloop (struct loops *loops, struct loop
*** 583,589 ****
unsigned i, n;
basic_block latch = loop->latch;
edge *edges;
! unsigned n_edges;
/* This is relatively straightforward. The dominators are unchanged, as
loop header dominates loop latch, so the only thing we have to care of
--- 584,590 ----
unsigned i, n;
basic_block latch = loop->latch;
edge *edges;
! unsigned num_edges;
/* This is relatively straightforward. The dominators are unchanged, as
loop header dominates loop latch, so the only thing we have to care of
*************** unloop (struct loops *loops, struct loop
*** 592,598 ****
its work. */
body = get_loop_body (loop);
! edges = get_loop_exit_edges (loop, &n_edges);
n = loop->num_nodes;
for (i = 0; i < n; i++)
if (body[i]->loop_father == loop)
--- 593,599 ----
its work. */
body = get_loop_body (loop);
! edges = get_loop_exit_edges (loop, &num_edges);
n = loop->num_nodes;
for (i = 0; i < n; i++)
if (body[i]->loop_father == loop)
*************** unloop (struct loops *loops, struct loop
*** 621,630 ****
update the irreducible marks inside its body. While it is certainly
possible to do, it is a bit complicated and this situation should be
very rare, so we just remark all loops in this case. */
! for (i = 0; i < n_edges; i++)
if (edges[i]->flags & EDGE_IRREDUCIBLE_LOOP)
break;
! if (i != n_edges)
mark_irreducible_loops (loops);
free (edges);
}
--- 622,631 ----
update the irreducible marks inside its body. While it is certainly
possible to do, it is a bit complicated and this situation should be
very rare, so we just remark all loops in this case. */
! for (i = 0; i < num_edges; i++)
if (edges[i]->flags & EDGE_IRREDUCIBLE_LOOP)
break;
! if (i != num_edges)
mark_irreducible_loops (loops);
free (edges);
}
Index: cfgrtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgrtl.c,v
retrieving revision 1.57.2.28.2.8
diff -c -3 -p -r1.57.2.28.2.8 cfgrtl.c
*** cfgrtl.c 29 Apr 2004 07:27:34 -0000 1.57.2.28.2.8
--- cfgrtl.c 10 Jun 2004 12:34:26 -0000
*************** cfg_layout_delete_block (basic_block bb)
*** 2615,2620 ****
--- 2615,2623 ----
to = &bb->next_bb->rbi->header;
else
to = &cfg_layout_function_footer;
+
+ bb->rbi = NULL;
+
rtl_delete_block (bb);
if (prev)
Index: conflict.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/conflict.c,v
retrieving revision 1.14.2.8
diff -c -3 -p -r1.14.2.8 conflict.c
*** conflict.c 3 Jan 2004 23:01:46 -0000 1.14.2.8
--- conflict.c 10 Jun 2004 12:34:26 -0000
*************** Software Foundation, 59 Temple Place - S
*** 34,39 ****
--- 34,40 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
/* A register conflict graph is an undirected graph containing nodes
for some or all of the regs used in a function. Arcs represent
Index: dominance.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dominance.c,v
retrieving revision 1.10.2.14.2.2
diff -c -3 -p -r1.10.2.14.2.2 dominance.c
*** dominance.c 30 Mar 2004 23:19:04 -0000 1.10.2.14.2.2
--- dominance.c 10 Jun 2004 12:34:26 -0000
***************
*** 40,45 ****
--- 40,46 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "errors.h"
#include "et-forest.h"
Index: flow.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/flow.c,v
retrieving revision 1.534.2.26.2.3
diff -c -3 -p -r1.534.2.26.2.3 flow.c
*** flow.c 17 May 2004 22:19:45 -0000 1.534.2.26.2.3
--- flow.c 10 Jun 2004 12:34:26 -0000
*************** free_basic_block_vars (void)
*** 771,776 ****
--- 771,779 ----
}
n_basic_blocks = 0;
last_basic_block = 0;
+ n_edges = 0;
+
+ label_to_block_map = NULL;
ENTRY_BLOCK_PTR->aux = NULL;
ENTRY_BLOCK_PTR->global_live_at_end = NULL;
Index: function.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.c,v
retrieving revision 1.374.2.42.2.9
diff -c -3 -p -r1.374.2.42.2.9 function.c
*** function.c 4 Jun 2004 20:44:59 -0000 1.374.2.42.2.9
--- function.c 10 Jun 2004 12:34:27 -0000
*************** allocate_struct_function (tree fndecl)
*** 6258,6263 ****
--- 6258,6264 ----
tree fntype = fndecl ? TREE_TYPE (fndecl) : NULL_TREE;
cfun = ggc_alloc_cleared (sizeof (struct function));
+ cfun->cfg = ggc_alloc_cleared (sizeof (struct control_flow_graph));
max_parm_reg = LAST_VIRTUAL_REGISTER + 1;
Index: function.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.h,v
retrieving revision 1.83.2.27.2.6
diff -c -3 -p -r1.83.2.27.2.6 function.h
*** function.h 27 May 2004 00:34:01 -0000 1.83.2.27.2.6
--- function.h 10 Jun 2004 12:34:27 -0000
*************** struct function GTY(())
*** 181,186 ****
--- 181,189 ----
struct emit_status *emit;
struct varasm_status *varasm;
+ /* The control flow graph for this function. */
+ struct control_flow_graph *cfg;
+
/* For tree-optimize.c. */
/* Saved tree and arguments during tree optimization. Used later for
Index: loop-doloop.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop-doloop.c,v
retrieving revision 2.2.4.2
diff -c -3 -p -r2.2.4.2 loop-doloop.c
*** loop-doloop.c 17 May 2004 22:19:50 -0000 2.2.4.2
--- loop-doloop.c 10 Jun 2004 12:34:27 -0000
*************** Software Foundation, 59 Temple Place - S
*** 28,33 ****
--- 28,34 ----
#include "expr.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "toplev.h"
#include "tm_p.h"
#include "cfgloop.h"
Index: loop-init.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop-init.c,v
retrieving revision 1.2.2.8.2.1
diff -c -3 -p -r1.2.2.8.2.1 loop-init.c
*** loop-init.c 3 Mar 2004 14:18:06 -0000 1.2.2.8.2.1
--- loop-init.c 10 Jun 2004 12:34:27 -0000
*************** Software Foundation, 59 Temple Place - S
*** 25,30 ****
--- 25,31 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "cfgloop.h"
#include "cfglayout.h"
Index: loop-iv.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop-iv.c,v
retrieving revision 2.6.2.4
diff -c -3 -p -r2.6.2.4 loop-iv.c
*** loop-iv.c 27 May 2004 00:34:04 -0000 2.6.2.4
--- loop-iv.c 10 Jun 2004 12:34:27 -0000
*************** Software Foundation, 59 Temple Place - S
*** 54,59 ****
--- 54,60 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "cfgloop.h"
#include "expr.h"
#include "output.h"
Index: loop-unroll.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop-unroll.c,v
retrieving revision 1.2.2.6.4.1
diff -c -3 -p -r1.2.2.6.4.1 loop-unroll.c
*** loop-unroll.c 3 Mar 2004 14:18:06 -0000 1.2.2.6.4.1
--- loop-unroll.c 10 Jun 2004 12:34:27 -0000
*************** Software Foundation, 59 Temple Place - S
*** 25,30 ****
--- 25,31 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "cfgloop.h"
#include "cfglayout.h"
#include "params.h"
Index: loop-unswitch.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop-unswitch.c,v
retrieving revision 1.2.2.9.2.4
diff -c -3 -p -r1.2.2.9.2.4 loop-unswitch.c
*** loop-unswitch.c 27 May 2004 00:34:05 -0000 1.2.2.9.2.4
--- loop-unswitch.c 10 Jun 2004 12:34:27 -0000
*************** Software Foundation, 59 Temple Place - S
*** 25,30 ****
--- 25,31 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "cfgloop.h"
#include "cfglayout.h"
#include "params.h"
Index: sbitmap.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/sbitmap.c,v
retrieving revision 1.21.2.9
diff -c -3 -p -r1.21.2.9 sbitmap.c
*** sbitmap.c 3 Jan 2004 23:02:00 -0000 1.21.2.9
--- sbitmap.c 10 Jun 2004 12:34:28 -0000
*************** Software Foundation, 59 Temple Place - S
*** 26,31 ****
--- 26,32 ----
#include "flags.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
/* Bitmap manipulation routines. */
Index: tracer.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tracer.c,v
retrieving revision 1.2.6.10.2.2
diff -c -3 -p -r1.2.6.10.2.2 tracer.c
*** tracer.c 3 Mar 2004 14:18:16 -0000 1.2.6.10.2.2
--- tracer.c 10 Jun 2004 12:34:28 -0000
***************
*** 41,46 ****
--- 41,47 ----
#include "rtl.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "output.h"
#include "cfglayout.h"
#include "fibheap.h"
Index: tree-cfg.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-cfg.c,v
retrieving revision 1.1.4.267.2.16
diff -c -3 -p -r1.1.4.267.2.16 tree-cfg.c
*** tree-cfg.c 4 Jun 2004 20:45:05 -0000 1.1.4.267.2.16
--- tree-cfg.c 10 Jun 2004 12:34:28 -0000
*************** Boston, MA 02111-1307, USA. */
*** 52,61 ****
/* Initial capacity for the basic block array. */
static const int initial_cfg_capacity = 20;
- /* Mapping of labels to their associated blocks. This can greatly speed up
- building of the CFG in code with lots of gotos. */
- static GTY(()) varray_type label_to_block_map;
-
/* CFG statistics. */
struct cfg_stats_d
{
--- 52,57 ----
*************** build_tree_cfg (tree *tp)
*** 122,130 ****
/* Register specific tree functions. */
tree_register_cfg_hooks ();
- /* Initialize rbi_pool. */
- alloc_rbi_pool ();
-
/* Initialize the basic block array. */
init_flow ();
n_basic_blocks = 0;
--- 118,123 ----
*************** dump_cfg_stats (FILE *file)
*** 2289,2295 ****
{
static long max_num_merged_labels = 0;
unsigned long size, total = 0;
! long n_edges;
basic_block bb;
const char * const fmt_str = "%-30s%-13s%12s\n";
const char * const fmt_str_1 = "%-30s%13lu%11lu%c\n";
--- 2282,2288 ----
{
static long max_num_merged_labels = 0;
unsigned long size, total = 0;
! long num_edges;
basic_block bb;
const char * const fmt_str = "%-30s%-13s%12s\n";
const char * const fmt_str_1 = "%-30s%13lu%11lu%c\n";
*************** dump_cfg_stats (FILE *file)
*** 2310,2325 ****
fprintf (file, fmt_str_1, "Basic blocks", n_basic_blocks, SCALE (size),
LABEL (size));
! n_edges = 0;
FOR_EACH_BB (bb)
{
edge e;
for (e = bb->succ; e; e = e->succ_next)
! n_edges++;
}
! size = n_edges * sizeof (struct edge_def);
total += size;
! fprintf (file, fmt_str_1, "Edges", n_edges, SCALE (size), LABEL (size));
size = n_basic_blocks * sizeof (struct bb_ann_d);
total += size;
--- 2303,2318 ----
fprintf (file, fmt_str_1, "Basic blocks", n_basic_blocks, SCALE (size),
LABEL (size));
! num_edges = 0;
FOR_EACH_BB (bb)
{
edge e;
for (e = bb->succ; e; e = e->succ_next)
! num_edges++;
}
! size = num_edges * sizeof (struct edge_def);
total += size;
! fprintf (file, fmt_str_1, "Edges", num_edges, SCALE (size), LABEL (size));
size = n_basic_blocks * sizeof (struct bb_ann_d);
total += size;
*************** delete_tree_cfg_annotations (void)
*** 2673,2680 ****
free_blocks_annotations ();
free_dominance_info (CDI_DOMINATORS);
- label_to_block_map = NULL;
- free_rbi_pool ();
FOR_EACH_BB (bb)
bb->rbi = NULL;
}
--- 2666,2671 ----
*************** struct tree_opt_pass pass_warn_function_
*** 4761,4764 ****
0 /* todo_flags_finish */
};
- #include "gt-tree-cfg.h"
--- 4752,4754 ----
Index: tree-complex.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-complex.c,v
retrieving revision 1.1.2.6.2.2
diff -c -3 -p -r1.1.2.6.2.2 tree-complex.c
*** tree-complex.c 4 Jun 2004 20:45:05 -0000 1.1.2.6.2.2
--- tree-complex.c 10 Jun 2004 12:34:28 -0000
*************** Software Foundation, 59 Temple Place - S
*** 23,28 ****
--- 23,30 ----
#include "coretypes.h"
#include "tree.h"
#include "tm.h"
+ #include "basic-block.h"
+ #include "function.h"
#include "tree-flow.h"
#include "tree-gimple.h"
#include "tree-iterator.h"
Index: tree-flow.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-flow.h,v
retrieving revision 1.1.4.187.2.9
diff -c -3 -p -r1.1.4.187.2.9 tree-flow.h
*** tree-flow.h 27 May 2004 00:34:12 -0000 1.1.4.187.2.9
--- tree-flow.h 10 Jun 2004 12:34:28 -0000
*************** Boston, MA 02111-1307, USA. */
*** 25,30 ****
--- 25,31 ----
#include "bitmap.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "hashtab.h"
#include "tree-gimple.h"
#include "tree-ssa-operands.h"
Index: tree-phinodes.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-phinodes.c,v
retrieving revision 1.1.2.9.2.2
diff -c -3 -p -r1.1.2.9.2.2 tree-phinodes.c
*** tree-phinodes.c 4 Jun 2004 20:45:06 -0000 1.1.2.9.2.2
--- tree-phinodes.c 10 Jun 2004 12:34:28 -0000
*************** Boston, MA 02111-1307, USA. */
*** 27,32 ****
--- 27,33 ----
#include "varray.h"
#include "ggc.h"
#include "basic-block.h"
+ #include "function.h"
#include "tree-flow.h"
#include "toplev.h"
Index: tree-sra.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-sra.c,v
retrieving revision 1.1.2.20.2.3
diff -c -3 -p -r1.1.2.20.2.3 tree-sra.c
*** tree-sra.c 17 May 2004 22:19:55 -0000 1.1.2.20.2.3
--- tree-sra.c 10 Jun 2004 12:34:28 -0000
*************** Software Foundation, 59 Temple Place - S
*** 34,39 ****
--- 34,40 ----
#include "tm_p.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "diagnostic.h"
#include "langhooks.h"
#include "tree-inline.h"
Index: tree-ssa-ccp.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-ccp.c,v
retrieving revision 1.1.2.139.2.7
diff -c -3 -p -r1.1.2.139.2.7 tree-ssa-ccp.c
*** tree-ssa-ccp.c 4 Jun 2004 20:45:06 -0000 1.1.2.139.2.7
--- tree-ssa-ccp.c 10 Jun 2004 12:34:28 -0000
*************** Software Foundation, 59 Temple Place - S
*** 47,53 ****
#include "tm_p.h"
#include "hard-reg-set.h"
#include "basic-block.h"
!
#include "diagnostic.h"
#include "tree-inline.h"
#include "tree-flow.h"
--- 47,53 ----
#include "tm_p.h"
#include "hard-reg-set.h"
#include "basic-block.h"
! #include "function.h"
#include "diagnostic.h"
#include "tree-inline.h"
#include "tree-flow.h"
Index: tree-ssa-dce.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-dce.c,v
retrieving revision 1.1.2.78.2.5
diff -c -3 -p -r1.1.2.78.2.5 tree-ssa-dce.c
*** tree-ssa-dce.c 17 May 2004 22:19:55 -0000 1.1.2.78.2.5
--- tree-ssa-dce.c 10 Jun 2004 12:34:28 -0000
*************** Software Foundation, 59 Temple Place - S
*** 55,60 ****
--- 55,61 ----
#include "tm_p.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "tree.h"
#include "diagnostic.h"
Index: tree-ssa-dse.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-dse.c,v
retrieving revision 1.1.4.4
diff -c -3 -p -r1.1.4.4 tree-ssa-dse.c
*** tree-ssa-dse.c 30 Mar 2004 23:19:31 -0000 1.1.4.4
--- tree-ssa-dse.c 10 Jun 2004 12:34:28 -0000
*************** Boston, MA 02111-1307, USA. */
*** 28,33 ****
--- 28,34 ----
#include "rtl.h"
#include "tm_p.h"
#include "basic-block.h"
+ #include "function.h"
#include "timevar.h"
#include "diagnostic.h"
#include "tree-flow.h"
Index: tree-ssa-forwprop.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-forwprop.c,v
retrieving revision 1.1.2.1.2.5
diff -c -3 -p -r1.1.2.1.2.5 tree-ssa-forwprop.c
*** tree-ssa-forwprop.c 17 May 2004 22:19:55 -0000 1.1.2.1.2.5
--- tree-ssa-forwprop.c 10 Jun 2004 12:34:28 -0000
*************** Boston, MA 02111-1307, USA. */
*** 28,33 ****
--- 28,34 ----
#include "rtl.h"
#include "tm_p.h"
#include "basic-block.h"
+ #include "function.h"
#include "timevar.h"
#include "diagnostic.h"
#include "tree-flow.h"
Index: tree-ssa-phiopt.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-phiopt.c,v
retrieving revision 1.1.2.1.2.7
diff -c -3 -p -r1.1.2.1.2.7 tree-ssa-phiopt.c
*** tree-ssa-phiopt.c 27 May 2004 00:34:13 -0000 1.1.2.1.2.7
--- tree-ssa-phiopt.c 10 Jun 2004 12:34:28 -0000
*************** Software Foundation, 59 Temple Place - S
*** 29,34 ****
--- 29,35 ----
#include "flags.h"
#include "tm_p.h"
#include "basic-block.h"
+ #include "function.h"
#include "timevar.h"
#include "diagnostic.h"
#include "tree-flow.h"
Index: tree-ssa-pre.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-pre.c,v
retrieving revision 1.1.4.129.2.5
diff -c -3 -p -r1.1.4.129.2.5 tree-ssa-pre.c
*** tree-ssa-pre.c 4 Jun 2004 20:45:07 -0000 1.1.4.129.2.5
--- tree-ssa-pre.c 10 Jun 2004 12:34:28 -0000
*************** Boston, MA 02111-1307, USA. */
*** 31,36 ****
--- 31,37 ----
#include "tm_p.h"
#include "hard-reg-set.h"
#include "basic-block.h"
+ #include "function.h"
#include "diagnostic.h"
#include "tree-inline.h"
#include "tree-flow.h"
Index: var-tracking.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/var-tracking.c,v
retrieving revision 2.4.2.1.2.4
diff -c -3 -p -r2.4.2.1.2.4 var-tracking.c
*** var-tracking.c 17 May 2004 22:19:58 -0000 2.4.2.1.2.4
--- var-tracking.c 10 Jun 2004 12:34:29 -0000
***************
*** 93,98 ****
--- 93,99 ----
#include "rtl.h"
#include "tree.h"
#include "hard-reg-set.h"
+ #include "function.h"
#include "basic-block.h"
#include "flags.h"
#include "output.h"