This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Remove basic_block->loop_depth
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 13 Aug 2012 14:59:37 +0200 (CEST)
- Subject: [PATCH] Remove basic_block->loop_depth
Accessing loop_depth (bb->loop_father) isn't very expensive. The
following removes the duplicate info in basic-blocks which is not
properly kept up-to-date at the moment.
Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
Richard.
2012-08-13 Richard Guenther <rguenther@suse.de>
* basic-block.h (struct basic_block): Remove loop_depth
member, move flags and index members next to each other.
* cfgloop.h (bb_loop_depth): New inline function.
* cfghooks.c (split_block): Do not set loop_depth.
(duplicate_block): Likewise.
* cfgloop.c (flow_loop_nodes_find): Likewise.
(flow_loops_find): Likewise.
(add_bb_to_loop): Likewise.
(remove_bb_from_loops): Likewise.
* cfgrtl.c (force_nonfallthru_and_redirect): Likewise.
* gimple-streamer-in.c (input_bb): Do not stream loop_depth.
* gimple-streamer-out.c (output_bb): Likewise.
* bt-load.c: Include cfgloop.h.
(migrate_btr_defs): Use bb_loop_depth.
* cfg.c (dump_bb_info): Likewise.
* final.c (compute_alignments): Likewise.
* ira.c (update_equiv_regs): Likewise.
* tree-ssa-copy.c (init_copy_prop): Likewise.
* tree-ssa-dom.c (loop_depth_of_name): Likewise.
* tree-ssa-forwprop.c: Include cfgloop.h.
(forward_propagate_addr_expr): Use bb_loop_depth.
* tree-ssa-pre.c (insert_into_preds_of_block): Likewise.
* tree-ssa-sink.c (select_best_block): Likewise.
* ipa-inline-analysis.c: Include cfgloop.h.
(estimate_function_body_sizes): Use bb_loop_depth.
* Makefile.in (tree-ssa-forwprop.o): Depend on $(CFGLOOP_H).
(ipa-inline-analysis.o): Likewise.
(bt-load.o): Likewise.
Index: trunk/gcc/basic-block.h
===================================================================
*** trunk.orig/gcc/basic-block.h 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/basic-block.h 2012-08-13 14:03:09.438889233 +0200
*************** struct GTY((chain_next ("%h.next_bb"), c
*** 160,173 ****
} GTY ((tag ("1"))) x;
} GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il;
! /* Expected number of executions: calculated in profile.c. */
! gcov_type count;
/* The index of this block. */
int index;
! /* The loop depth of this block. */
! int loop_depth;
/* Expected frequency. Normalized to be in range 0 to BB_FREQ_MAX. */
int frequency;
--- 160,173 ----
} GTY ((tag ("1"))) x;
} GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il;
! /* Various flags. See cfg-flags.def. */
! int flags;
/* The index of this block. */
int index;
! /* Expected number of executions: calculated in profile.c. */
! gcov_type count;
/* Expected frequency. Normalized to be in range 0 to BB_FREQ_MAX. */
int frequency;
*************** struct GTY((chain_next ("%h.next_bb"), c
*** 176,184 ****
among several basic blocks that share a common locus, allowing for
more accurate sample-based profiling. */
int discriminator;
-
- /* Various flags. See cfg-flags.def. */
- int flags;
};
/* This ensures that struct gimple_bb_info is smaller than
--- 176,181 ----
Index: trunk/gcc/cfghooks.c
===================================================================
*** trunk.orig/gcc/cfghooks.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/cfghooks.c 2012-08-13 14:03:09.438889233 +0200
*************** split_block (basic_block bb, void *i)
*** 462,468 ****
new_bb->count = bb->count;
new_bb->frequency = bb->frequency;
- new_bb->loop_depth = bb->loop_depth;
new_bb->discriminator = bb->discriminator;
if (dom_info_available_p (CDI_DOMINATORS))
--- 462,467 ----
*************** duplicate_block (basic_block bb, edge e,
*** 985,991 ****
if (after)
move_block_after (new_bb, after);
- new_bb->loop_depth = bb->loop_depth;
new_bb->flags = bb->flags;
FOR_EACH_EDGE (s, ei, bb->succs)
{
--- 984,989 ----
Index: trunk/gcc/cfgloop.c
===================================================================
*** trunk.orig/gcc/cfgloop.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/cfgloop.c 2012-08-13 14:11:57.325870997 +0200
*************** flow_loop_nodes_find (basic_block header
*** 229,238 ****
int num_nodes = 1;
edge latch;
edge_iterator latch_ei;
- unsigned depth = loop_depth (loop);
header->loop_father = loop;
- header->loop_depth = depth;
FOR_EACH_EDGE (latch, latch_ei, loop->header->preds)
{
--- 229,236 ----
*************** flow_loop_nodes_find (basic_block header
*** 243,249 ****
num_nodes++;
VEC_safe_push (basic_block, heap, stack, latch->src);
latch->src->loop_father = loop;
- latch->src->loop_depth = depth;
while (!VEC_empty (basic_block, stack))
{
--- 241,246 ----
*************** flow_loop_nodes_find (basic_block header
*** 260,266 ****
if (ancestor->loop_father != loop)
{
ancestor->loop_father = loop;
- ancestor->loop_depth = depth;
num_nodes++;
VEC_safe_push (basic_block, heap, stack, ancestor);
}
--- 257,262 ----
*************** path_without_edge_flags (basic_block fro
*** 419,425 ****
}
/* Find all the natural loops in the function and save in LOOPS structure and
! recalculate loop_depth information in basic block structures.
Return the number of natural loops found. */
int
--- 415,421 ----
}
/* Find all the natural loops in the function and save in LOOPS structure and
! recalculate loop_father information in basic block structures.
Return the number of natural loops found. */
int
*************** flow_loops_find (struct loops *loops)
*** 458,465 ****
{
edge_iterator ei;
- header->loop_depth = 0;
-
/* If we have an abnormal predecessor, do not consider the
loop (not worth the problems). */
if (bb_has_abnormal_pred (header))
--- 454,459 ----
*************** add_bb_to_loop (basic_block bb, struct l
*** 1243,1249 ****
gcc_assert (bb->loop_father == NULL);
bb->loop_father = loop;
- bb->loop_depth = loop_depth (loop);
loop->num_nodes++;
FOR_EACH_VEC_ELT (loop_p, loop->superloops, i, ploop)
ploop->num_nodes++;
--- 1237,1242 ----
*************** remove_bb_from_loops (basic_block bb)
*** 1273,1279 ****
FOR_EACH_VEC_ELT (loop_p, loop->superloops, i, ploop)
ploop->num_nodes--;
bb->loop_father = NULL;
- bb->loop_depth = 0;
FOR_EACH_EDGE (e, ei, bb->succs)
{
--- 1266,1271 ----
Index: trunk/gcc/cfgrtl.c
===================================================================
*** trunk.orig/gcc/cfgrtl.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/cfgrtl.c 2012-08-13 14:03:09.440889233 +0200
*************** force_nonfallthru_and_redirect (edge e,
*** 1438,1444 ****
jump_block = create_basic_block (note, NULL, e->src);
jump_block->count = count;
jump_block->frequency = EDGE_FREQUENCY (e);
- jump_block->loop_depth = target->loop_depth;
/* Make sure new block ends up in correct hot/cold section. */
--- 1438,1443 ----
Index: trunk/gcc/gimple-streamer-in.c
===================================================================
*** trunk.orig/gcc/gimple-streamer-in.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/gimple-streamer-in.c 2012-08-13 14:03:09.441889233 +0200
*************** input_bb (struct lto_input_block *ib, en
*** 296,302 ****
bb->count = (streamer_read_hwi (ib) * count_materialization_scale
+ REG_BR_PROB_BASE / 2) / REG_BR_PROB_BASE;
- bb->loop_depth = streamer_read_hwi (ib);
bb->frequency = streamer_read_hwi (ib);
bb->flags = streamer_read_hwi (ib);
--- 296,301 ----
Index: trunk/gcc/bt-load.c
===================================================================
*** trunk.orig/gcc/bt-load.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/bt-load.c 2012-08-13 14:03:09.442889232 +0200
*************** along with GCC; see the file COPYING3.
*** 37,42 ****
--- 37,43 ----
#include "tree-pass.h"
#include "recog.h"
#include "df.h"
+ #include "cfgloop.h"
/* Target register optimizations - these are performed after reload. */
*************** migrate_btr_defs (enum reg_class btr_cla
*** 1408,1414 ****
fprintf(dump_file,
"Basic block %d: count = " HOST_WIDEST_INT_PRINT_DEC
" loop-depth = %d idom = %d\n",
! i, (HOST_WIDEST_INT) bb->count, bb->loop_depth,
get_immediate_dominator (CDI_DOMINATORS, bb)->index);
}
}
--- 1409,1415 ----
fprintf(dump_file,
"Basic block %d: count = " HOST_WIDEST_INT_PRINT_DEC
" loop-depth = %d idom = %d\n",
! i, (HOST_WIDEST_INT) bb->count, bb_loop_depth (bb),
get_immediate_dominator (CDI_DOMINATORS, bb)->index);
}
}
Index: trunk/gcc/cfg.c
===================================================================
*** trunk.orig/gcc/cfg.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/cfg.c 2012-08-13 14:03:09.442889232 +0200
*************** dump_bb_info (FILE *outf, basic_block bb
*** 698,704 ****
if (flags & TDF_COMMENT)
fputs (";; ", outf);
fprintf (outf, "%sbasic block %d, loop depth %d",
! s_indent, bb->index, bb->loop_depth);
if (flags & TDF_DETAILS)
{
fprintf (outf, ", count " HOST_WIDEST_INT_PRINT_DEC,
--- 698,704 ----
if (flags & TDF_COMMENT)
fputs (";; ", outf);
fprintf (outf, "%sbasic block %d, loop depth %d",
! s_indent, bb->index, bb_loop_depth (bb));
if (flags & TDF_DETAILS)
{
fprintf (outf, ", count " HOST_WIDEST_INT_PRINT_DEC,
Index: trunk/gcc/final.c
===================================================================
*** trunk.orig/gcc/final.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/final.c 2012-08-13 14:03:09.442889232 +0200
*************** compute_alignments (void)
*** 739,745 ****
{
if (dump_file)
fprintf(dump_file, "BB %4i freq %4i loop %2i loop_depth %2i skipped.\n",
! bb->index, bb->frequency, bb->loop_father->num, bb->loop_depth);
continue;
}
max_log = LABEL_ALIGN (label);
--- 739,746 ----
{
if (dump_file)
fprintf(dump_file, "BB %4i freq %4i loop %2i loop_depth %2i skipped.\n",
! bb->index, bb->frequency, bb->loop_father->num,
! bb_loop_depth (bb));
continue;
}
max_log = LABEL_ALIGN (label);
*************** compute_alignments (void)
*** 756,762 ****
{
fprintf(dump_file, "BB %4i freq %4i loop %2i loop_depth %2i fall %4i branch %4i",
bb->index, bb->frequency, bb->loop_father->num,
! bb->loop_depth,
fallthru_frequency, branch_frequency);
if (!bb->loop_father->inner && bb->loop_father->num)
fprintf (dump_file, " inner_loop");
--- 757,763 ----
{
fprintf(dump_file, "BB %4i freq %4i loop %2i loop_depth %2i fall %4i branch %4i",
bb->index, bb->frequency, bb->loop_father->num,
! bb_loop_depth (bb),
fallthru_frequency, branch_frequency);
if (!bb->loop_father->inner && bb->loop_father->num)
fprintf (dump_file, " inner_loop");
Index: trunk/gcc/gimple-streamer-out.c
===================================================================
*** trunk.orig/gcc/gimple-streamer-out.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/gimple-streamer-out.c 2012-08-13 14:03:09.443889232 +0200
*************** output_bb (struct output_block *ob, basi
*** 176,182 ****
streamer_write_uhwi (ob, bb->index);
streamer_write_hwi (ob, bb->count);
- streamer_write_hwi (ob, bb->loop_depth);
streamer_write_hwi (ob, bb->frequency);
streamer_write_hwi (ob, bb->flags);
--- 176,181 ----
Index: trunk/gcc/ira.c
===================================================================
*** trunk.orig/gcc/ira.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/ira.c 2012-08-13 14:03:09.443889232 +0200
*************** update_equiv_regs (void)
*** 2777,2783 ****
a register can be set below its use. */
FOR_EACH_BB (bb)
{
! loop_depth = bb->loop_depth;
for (insn = BB_HEAD (bb);
insn != NEXT_INSN (BB_END (bb));
--- 2777,2783 ----
a register can be set below its use. */
FOR_EACH_BB (bb)
{
! loop_depth = bb_loop_depth (bb);
for (insn = BB_HEAD (bb);
insn != NEXT_INSN (BB_END (bb));
*************** update_equiv_regs (void)
*** 3053,3059 ****
basic block. */
FOR_EACH_BB_REVERSE (bb)
{
! loop_depth = bb->loop_depth;
for (insn = BB_END (bb);
insn != PREV_INSN (BB_HEAD (bb));
insn = PREV_INSN (insn))
--- 3053,3059 ----
basic block. */
FOR_EACH_BB_REVERSE (bb)
{
! loop_depth = bb_loop_depth (bb);
for (insn = BB_END (bb);
insn != PREV_INSN (BB_HEAD (bb));
insn = PREV_INSN (insn))
Index: trunk/gcc/tree-ssa-copy.c
===================================================================
*** trunk.orig/gcc/tree-ssa-copy.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/tree-ssa-copy.c 2012-08-13 14:03:09.443889232 +0200
*************** init_copy_prop (void)
*** 670,676 ****
FOR_EACH_BB (bb)
{
gimple_stmt_iterator si;
! int depth = bb->loop_depth;
for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
{
--- 670,676 ----
FOR_EACH_BB (bb)
{
gimple_stmt_iterator si;
! int depth = bb_loop_depth (bb);
for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
{
Index: trunk/gcc/tree-ssa-dom.c
===================================================================
*** trunk.orig/gcc/tree-ssa-dom.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/tree-ssa-dom.c 2012-08-13 14:03:09.444889232 +0200
*************** loop_depth_of_name (tree x)
*** 1391,1397 ****
if (!defbb)
return 0;
! return defbb->loop_depth;
}
/* Record that X is equal to Y in const_and_copies. Record undo
--- 1391,1397 ----
if (!defbb)
return 0;
! return bb_loop_depth (defbb);
}
/* Record that X is equal to Y in const_and_copies. Record undo
Index: trunk/gcc/tree-ssa-forwprop.c
===================================================================
*** trunk.orig/gcc/tree-ssa-forwprop.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/tree-ssa-forwprop.c 2012-08-13 14:03:09.444889232 +0200
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,38 ----
#include "flags.h"
#include "gimple.h"
#include "expr.h"
+ #include "cfgloop.h"
/* This pass propagates the RHS of assignment statements into use
sites of the LHS of the assignment. It's basically a specialized
*************** forward_propagate_addr_expr_1 (tree name
*** 1002,1008 ****
static bool
forward_propagate_addr_expr (tree name, tree rhs)
{
! int stmt_loop_depth = gimple_bb (SSA_NAME_DEF_STMT (name))->loop_depth;
imm_use_iterator iter;
gimple use_stmt;
bool all = true;
--- 1003,1009 ----
static bool
forward_propagate_addr_expr (tree name, tree rhs)
{
! int stmt_loop_depth = bb_loop_depth (gimple_bb (SSA_NAME_DEF_STMT (name)));
imm_use_iterator iter;
gimple use_stmt;
bool all = true;
*************** forward_propagate_addr_expr (tree name,
*** 1025,1031 ****
/* If the use is in a deeper loop nest, then we do not want
to propagate non-invariant ADDR_EXPRs into the loop as that
is likely adding expression evaluations into the loop. */
! if (gimple_bb (use_stmt)->loop_depth > stmt_loop_depth
&& !is_gimple_min_invariant (rhs))
{
all = false;
--- 1026,1032 ----
/* If the use is in a deeper loop nest, then we do not want
to propagate non-invariant ADDR_EXPRs into the loop as that
is likely adding expression evaluations into the loop. */
! if (bb_loop_depth (gimple_bb (use_stmt)) > stmt_loop_depth
&& !is_gimple_min_invariant (rhs))
{
all = false;
Index: trunk/gcc/tree-ssa-pre.c
===================================================================
*** trunk.orig/gcc/tree-ssa-pre.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/tree-ssa-pre.c 2012-08-13 14:03:09.445889232 +0200
*************** insert_into_preds_of_block (basic_block
*** 3204,3210 ****
gimple phi;
/* Make sure we aren't creating an induction variable. */
! if (block->loop_depth > 0 && EDGE_COUNT (block->preds) == 2)
{
bool firstinsideloop = false;
bool secondinsideloop = false;
--- 3204,3210 ----
gimple phi;
/* Make sure we aren't creating an induction variable. */
! if (bb_loop_depth (block) > 0 && EDGE_COUNT (block->preds) == 2)
{
bool firstinsideloop = false;
bool secondinsideloop = false;
Index: trunk/gcc/tree-ssa-sink.c
===================================================================
*** trunk.orig/gcc/tree-ssa-sink.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/tree-ssa-sink.c 2012-08-13 14:03:09.445889232 +0200
*************** select_best_block (basic_block early_bb,
*** 212,218 ****
{
/* If we've moved into a lower loop nest, then that becomes
our best block. */
! if (temp_bb->loop_depth < best_bb->loop_depth)
best_bb = temp_bb;
/* Walk up the dominator tree, hopefully we'll find a shallower
--- 212,218 ----
{
/* If we've moved into a lower loop nest, then that becomes
our best block. */
! if (bb_loop_depth (temp_bb) < bb_loop_depth (best_bb))
best_bb = temp_bb;
/* Walk up the dominator tree, hopefully we'll find a shallower
*************** select_best_block (basic_block early_bb,
*** 223,229 ****
/* If we found a shallower loop nest, then we always consider that
a win. This will always give us the most control dependent block
within that loop nest. */
! if (best_bb->loop_depth < early_bb->loop_depth)
return best_bb;
/* Get the sinking threshold. If the statement to be moved has memory
--- 223,229 ----
/* If we found a shallower loop nest, then we always consider that
a win. This will always give us the most control dependent block
within that loop nest. */
! if (bb_loop_depth (best_bb) < bb_loop_depth (early_bb))
return best_bb;
/* Get the sinking threshold. If the statement to be moved has memory
*************** select_best_block (basic_block early_bb,
*** 239,245 ****
/* If BEST_BB is at the same nesting level, then require it to have
significantly lower execution frequency to avoid gratutious movement. */
! if (best_bb->loop_depth == early_bb->loop_depth
&& best_bb->frequency < (early_bb->frequency * threshold / 100.0))
return best_bb;
--- 239,245 ----
/* If BEST_BB is at the same nesting level, then require it to have
significantly lower execution frequency to avoid gratutious movement. */
! if (bb_loop_depth (best_bb) == bb_loop_depth (early_bb)
&& best_bb->frequency < (early_bb->frequency * threshold / 100.0))
return best_bb;
Index: trunk/gcc/Makefile.in
===================================================================
*** trunk.orig/gcc/Makefile.in 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/Makefile.in 2012-08-13 14:03:09.446889232 +0200
*************** tree-ssa-dse.o : tree-ssa-dse.c $(CONFIG
*** 2271,2277 ****
$(TREE_FLOW_H) $(TREE_PASS_H) domwalk.h $(FLAGS_H) \
$(GIMPLE_PRETTY_PRINT_H) langhooks.h
tree-ssa-forwprop.o : tree-ssa-forwprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
! $(TM_H) $(TREE_H) $(TM_P_H) $(BASIC_BLOCK_H) \
$(TREE_FLOW_H) $(TREE_PASS_H) $(DIAGNOSTIC_H) \
langhooks.h $(FLAGS_H) $(GIMPLE_H) $(GIMPLE_PRETTY_PRINT_H) $(EXPR_H)
tree-ssa-phiprop.o : tree-ssa-phiprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
--- 2271,2277 ----
$(TREE_FLOW_H) $(TREE_PASS_H) domwalk.h $(FLAGS_H) \
$(GIMPLE_PRETTY_PRINT_H) langhooks.h
tree-ssa-forwprop.o : tree-ssa-forwprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
! $(TM_H) $(TREE_H) $(TM_P_H) $(BASIC_BLOCK_H) $(CFGLOOP_H) \
$(TREE_FLOW_H) $(TREE_PASS_H) $(DIAGNOSTIC_H) \
langhooks.h $(FLAGS_H) $(GIMPLE_H) $(GIMPLE_PRETTY_PRINT_H) $(EXPR_H)
tree-ssa-phiprop.o : tree-ssa-phiprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
*************** ipa-inline.o : ipa-inline.c $(CONFIG_H)
*** 2899,2905 ****
$(EXCEPT_H) $(GIMPLE_PRETTY_PRINT_H) ipa-inline.h $(TARGET_H) $(IPA_UTILS_H)
ipa-inline-analysis.o : ipa-inline-analysis.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) langhooks.h $(TREE_INLINE_H) $(FLAGS_H) $(CGRAPH_H) intl.h \
! $(DIAGNOSTIC_H) $(PARAMS_H) $(TREE_PASS_H) \
$(HASHTAB_H) $(COVERAGE_H) $(GGC_H) $(TREE_FLOW_H) $(IPA_PROP_H) \
$(GIMPLE_PRETTY_PRINT_H) ipa-inline.h $(LTO_STREAMER_H) $(DATA_STREAMER_H) \
$(TREE_STREAMER_H)
--- 2899,2905 ----
$(EXCEPT_H) $(GIMPLE_PRETTY_PRINT_H) ipa-inline.h $(TARGET_H) $(IPA_UTILS_H)
ipa-inline-analysis.o : ipa-inline-analysis.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) langhooks.h $(TREE_INLINE_H) $(FLAGS_H) $(CGRAPH_H) intl.h \
! $(DIAGNOSTIC_H) $(PARAMS_H) $(TREE_PASS_H) $(CFGLOOP_H) \
$(HASHTAB_H) $(COVERAGE_H) $(GGC_H) $(TREE_FLOW_H) $(IPA_PROP_H) \
$(GIMPLE_PRETTY_PRINT_H) ipa-inline.h $(LTO_STREAMER_H) $(DATA_STREAMER_H) \
$(TREE_STREAMER_H)
*************** caller-save.o : caller-save.c $(CONFIG_H
*** 3183,3189 ****
bt-load.o : bt-load.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(EXCEPT_H) \
$(RTL_H) hard-reg-set.h $(REGS_H) $(TM_P_H) $(FIBHEAP_H) $(EXPR_H) \
$(TARGET_H) $(FLAGS_H) $(INSN_ATTR_H) $(FUNCTION_H) $(TREE_PASS_H) \
! $(DIAGNOSTIC_CORE_H) $(DF_H) vecprim.h $(RECOG_H)
reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
conditions.h hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h \
$(INSN_ATTR_H) $(EXCEPT_H) $(RECOG_H) $(FUNCTION_H) $(FLAGS_H) output.h \
--- 3183,3189 ----
bt-load.o : bt-load.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(EXCEPT_H) \
$(RTL_H) hard-reg-set.h $(REGS_H) $(TM_P_H) $(FIBHEAP_H) $(EXPR_H) \
$(TARGET_H) $(FLAGS_H) $(INSN_ATTR_H) $(FUNCTION_H) $(TREE_PASS_H) \
! $(DIAGNOSTIC_CORE_H) $(DF_H) vecprim.h $(RECOG_H) $(CFGLOOP_H)
reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
conditions.h hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h \
$(INSN_ATTR_H) $(EXCEPT_H) $(RECOG_H) $(FUNCTION_H) $(FLAGS_H) output.h \
Index: trunk/gcc/cfgloop.h
===================================================================
*** trunk.orig/gcc/cfgloop.h 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/cfgloop.h 2012-08-13 14:03:23.524888740 +0200
*************** loop_depth (const struct loop *loop)
*** 445,450 ****
--- 445,458 ----
return VEC_length (loop_p, loop->superloops);
}
+ /* Returns the loop depth of the loop BB belongs to. */
+
+ static inline int
+ bb_loop_depth (const_basic_block bb)
+ {
+ return bb->loop_father ? loop_depth (bb->loop_father) : 0;
+ }
+
/* Returns the immediate superloop of LOOP, or NULL if LOOP is the outermost
loop. */
Index: trunk/gcc/ipa-inline-analysis.c
===================================================================
*** trunk.orig/gcc/ipa-inline-analysis.c 2012-08-13 13:58:13.000000000 +0200
--- trunk/gcc/ipa-inline-analysis.c 2012-08-13 14:03:09.446889232 +0200
*************** along with GCC; see the file COPYING3.
*** 87,92 ****
--- 87,93 ----
#include "tree-streamer.h"
#include "ipa-inline.h"
#include "alloc-pool.h"
+ #include "cfgloop.h"
/* Estimate runtime of function can easilly run into huge numbers with many
nested loops. Be sure we can compute time * INLINE_SIZE_SCALE * 2 in an
*************** estimate_function_body_sizes (struct cgr
*** 2088,2094 ****
es->call_stmt_size = this_size;
es->call_stmt_time = this_time;
! es->loop_depth = bb->loop_depth;
edge_set_predicate (edge, &bb_predicate);
}
--- 2089,2095 ----
es->call_stmt_size = this_size;
es->call_stmt_time = this_time;
! es->loop_depth = bb_loop_depth (bb);
edge_set_predicate (edge, &bb_predicate);
}