aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgloop.h
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-10-27 08:56:03 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-10-27 08:56:03 +0000
commit61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5 (patch)
treebd4ad7e7b2c8112a0f115b874c66bb4632a2280b /gcc/cfgloop.h
parent88bae6f494dc867edd8e6257658974d629bdc53b (diff)
downloadgcc-61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5.zip
gcc-61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5.tar.gz
gcc-61183076f1dfbea5ac4fb6799aab9bc6e9aa8de5.tar.bz2
cfg.c (free_edge): Add function argument and use it instead of cfun.
2015-10-27 Richard Biener <rguenther@suse.de> * cfg.c (free_edge): Add function argument and use it instead of cfun. (clear_edges): Likewise. * cfg.h (clear_edges): Adjust prototype. * cfgexpand.c (pass_expand::execute): Adjust. * cfgloop.c (release_recorded_exits): Add function argument and use it instead of cfun. * cfgloop.h (release_recorded_exits): Adjust prototype. (loops_state_satisfies_p): Add overload with function argument. (loops_state_set): Likewise. (loops_state_clear): Likewise. (struct loop_iterator): Add function argument to constructor and iterator and use it instead of cfun. (FOR_EACH_LOOP_FN): New macro. (loop_optimizer_finalize): Add overload with function argument. * loop-init.c (loop_optimizer_init): Adjust. (fix_loop_structure): Likewise. (loop_optimizer_finaliz): Add function argument and use it instead of cfun. * tree-cfg.c (delete_tree_cfg_annotations): Likewise. * tree-cfg.h (delete_tree_cfg_annotations): Adjust prototype. * cgraph.c (release_function_body): Do not push/pop cfun. * final.c (rest_of_clean_state): Adjust. * graphite.c (graphite_finalize): Likewise. * tree-ssa-copy.c (fini_copy_prop): Likewise. * tree-ssa-dce.c (perform_tree_ssa_dce): Likewise. * tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Likewise. (tree_unroll_loops_completely): Likewise. (pass_complete_unrolli::execute): Likewise. * tree-ssa-loop-niter.c (free_numbers_of_iterations_estimates): Add function argument and use it instead of cfun. * tree-ssa-loop-niter.h (free_numbers_of_iterations_estimates): Adjust prototype. * tree-ssa-loop.c (tree_ssa_loop_done): Adjust. * tree-ssa.c (delete_tree_ssa): Add function argument and use it instead of cfun. * tree-ssa.h (delete_tree_ssa): Adjust prototype. * tree-ssanames.c (fini_ssanames): Add function argument and use it instead of cfun. * tree-ssanames.c (fini_ssanames): Adjust prototype. * tree-vrp.c (execute_vrp): Adjust. * value-prof.c (free_histograms): Add function argument and use it instead of cfun. * value-prof.h (free_histograms): Adjust prototype. From-SVN: r229405
Diffstat (limited to 'gcc/cfgloop.h')
-rw-r--r--gcc/cfgloop.h60
1 files changed, 46 insertions, 14 deletions
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index 07b070b..cd4a4c9 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -264,7 +264,7 @@ extern void flow_loop_free (struct loop *);
int flow_loop_nodes_find (basic_block, struct loop *);
unsigned fix_loop_structure (bitmap changed_bbs);
bool mark_irreducible_loops (void);
-void release_recorded_exits (void);
+void release_recorded_exits (function *);
void record_loop_exits (void);
void rescan_loop_exit (edge, bool, bool);
@@ -492,27 +492,45 @@ number_of_loops (struct function *fn)
described by FLAGS. */
static inline bool
+loops_state_satisfies_p (function *fn, unsigned flags)
+{
+ return (loops_for_fn (fn)->state & flags) == flags;
+}
+
+static inline bool
loops_state_satisfies_p (unsigned flags)
{
- return (current_loops->state & flags) == flags;
+ return loops_state_satisfies_p (cfun, flags);
}
/* Sets FLAGS to the loops state. */
static inline void
+loops_state_set (function *fn, unsigned flags)
+{
+ loops_for_fn (fn)->state |= flags;
+}
+
+static inline void
loops_state_set (unsigned flags)
{
- current_loops->state |= flags;
+ loops_state_set (cfun, flags);
}
/* Clears FLAGS from the loops state. */
static inline void
+loops_state_clear (function *fn, unsigned flags)
+{
+ loops_for_fn (fn)->state &= ~flags;
+}
+
+static inline void
loops_state_clear (unsigned flags)
{
if (!current_loops)
return;
- current_loops->state &= ~flags;
+ loops_state_clear (cfun, flags);
}
/* Loop iterators. */
@@ -531,11 +549,14 @@ enum li_flags
struct loop_iterator
{
- loop_iterator (loop_p *loop, unsigned flags);
+ loop_iterator (function *fn, loop_p *loop, unsigned flags);
~loop_iterator ();
inline loop_p next ();
+ /* The function we are visiting. */
+ function *fn;
+
/* The list of loops to visit. */
vec<int> to_visit;
@@ -551,7 +572,7 @@ loop_iterator::next ()
while (this->to_visit.iterate (this->idx, &anum))
{
this->idx++;
- loop_p loop = get_loop (cfun, anum);
+ loop_p loop = get_loop (fn, anum);
if (loop)
return loop;
}
@@ -560,26 +581,27 @@ loop_iterator::next ()
}
inline
-loop_iterator::loop_iterator (loop_p *loop, unsigned flags)
+loop_iterator::loop_iterator (function *fn, loop_p *loop, unsigned flags)
{
struct loop *aloop;
unsigned i;
int mn;
this->idx = 0;
- if (!current_loops)
+ this->fn = fn;
+ if (!loops_for_fn (fn))
{
this->to_visit.create (0);
*loop = NULL;
return;
}
- this->to_visit.create (number_of_loops (cfun));
+ this->to_visit.create (number_of_loops (fn));
mn = (flags & LI_INCLUDE_ROOT) ? 0 : 1;
if (flags & LI_ONLY_INNERMOST)
{
- for (i = 0; vec_safe_iterate (current_loops->larray, i, &aloop); i++)
+ for (i = 0; vec_safe_iterate (loops_for_fn (fn)->larray, i, &aloop); i++)
if (aloop != NULL
&& aloop->inner == NULL
&& aloop->num >= mn)
@@ -588,7 +610,7 @@ loop_iterator::loop_iterator (loop_p *loop, unsigned flags)
else if (flags & LI_FROM_INNERMOST)
{
/* Push the loops to LI->TO_VISIT in postorder. */
- for (aloop = current_loops->tree_root;
+ for (aloop = loops_for_fn (fn)->tree_root;
aloop->inner != NULL;
aloop = aloop->inner)
continue;
@@ -614,7 +636,7 @@ loop_iterator::loop_iterator (loop_p *loop, unsigned flags)
else
{
/* Push the loops to LI->TO_VISIT in preorder. */
- aloop = current_loops->tree_root;
+ aloop = loops_for_fn (fn)->tree_root;
while (1)
{
if (aloop->num >= mn)
@@ -643,7 +665,12 @@ loop_iterator::~loop_iterator ()
}
#define FOR_EACH_LOOP(LOOP, FLAGS) \
- for (loop_iterator li(&(LOOP), FLAGS); \
+ for (loop_iterator li(cfun, &(LOOP), FLAGS); \
+ (LOOP); \
+ (LOOP) = li.next ())
+
+#define FOR_EACH_LOOP_FN(FN, LOOP, FLAGS) \
+ for (loop_iterator li(fn, &(LOOP), FLAGS); \
(LOOP); \
(LOOP) = li.next ())
@@ -691,7 +718,12 @@ extern void init_set_costs (void);
/* Loop optimizer initialization. */
extern void loop_optimizer_init (unsigned);
-extern void loop_optimizer_finalize (void);
+extern void loop_optimizer_finalize (function *);
+inline void
+loop_optimizer_finalize ()
+{
+ loop_optimizer_finalize (cfun);
+}
/* Optimization passes. */
enum