Commit bafcb153 by Aditya Kumar Committed by Sebastian Pop

move graphite bookkeeping from sese to sese_info

2015-10-06  Aditya Kumar  <aditya.k7@samsung.com>
                Sebastian Pop  <s.pop@samsung.com>

                * graphite-isl-ast-to-gimple.c (translate_isl_ast_to_gimple): Use
                an sese_info_p.
                (copy_def): Same.
                (copy_internal_parameters): Same.
                (translate_isl_ast_to_gimple): Use an sese_l.
                (build_iv_mapping): Same.
                * graphite-poly.c (new_sese): Rename new_sese_info.
                (free_sese): Rename free_sese_info.
                * graphite-poly.h (struct scop): Use an sese_info_p.
                (scop_set_region): Same.
                * graphite-scop-detection.c (struct sese_l): Moved...
                (get_entry_bb): Moved...
                (get_exit_bb): Moved...
                (parameter_index_in_region_1): Use an sese_info_p.
                (parameter_index_in_region): Same.
                (scan_tree_for_params): Same.
                (find_params_in_bb): Same.
                (sese_dom_walker): Use an sese_l.
                * graphite-sese-to-poly.c (remove_invariant_phi): Same.
                (reduction_phi_p): Same.
                (parameter_index_in_region_1): Use an sese_info_p.
                (propagate_expr_outside_region): Use an sese_l.
                * graphite.c: Replace uses of SCOP_REGION.
                * sese.c (sese_record_loop): Use an sese_info_p.
                (build_sese_loop_nests): Same.
                (sese_build_liveouts_use): Same.
                (sese_build_liveouts_bb): Same.
                (sese_build_liveouts_bb): Same.
                (sese_bad_liveouts_use): Same.
                (sese_reset_debug_liveouts_bb): Same.
                (sese_build_liveouts): Same.
                (new_sese): Renamed new_sese_info.
                (free_sese): Renamed free_sese_info.
                (set_rename): Use an sese_info_p.
                (graphite_copy_stmts_from_block): Same.
                (copy_bb_and_scalar_dependences): Same.
                (outermost_loop_in_sese_1): Use an sese_l.
                (outermost_loop_in_sese): Same.
                (if_region_set_false_region): Use an sese_info_p.
                (move_sese_in_condition): Same.
                (scalar_evolution_in_region): Use an sese_l.
                * sese.h (struct sese_l): ... here.
                (SESE_ENTRY): Remove.
                (SESE_ENTRY_BB): Remove.
                (SESE_EXIT): Remove.
                (SESE_EXIT_BB): Remove.
                (sese_contains_loop): Use an sese_info_p.
                (sese_nb_params): Same.
                (bb_in_sese_p): Use an sese_l.
                (stmt_in_sese_p): Same.
                (defined_in_sese_p): Same.
                (loop_in_sese_p): Same.
                (sese_loop_depth): Same.
                (struct ifsese_s): Use an sese_info_p.
                (gbb_loop_at_index): Use an sese_l.
                (nb_common_loops): Same.
                (scev_analyzable_p): Same.

Co-Authored-By: Sebastian Pop <s.pop@samsung.com>

From-SVN: r228572
parent b850dd2f
2015-10-07 Aditya Kumar <aditya.k7@samsung.com>
Sebastian Pop <s.pop@samsung.com>
* graphite-isl-ast-to-gimple.c (translate_isl_ast_to_gimple): Use
an sese_info_p.
(copy_def): Same.
(copy_internal_parameters): Same.
(translate_isl_ast_to_gimple): Use an sese_l.
(build_iv_mapping): Same.
* graphite-poly.c (new_sese): Rename new_sese_info.
(free_sese): Rename free_sese_info.
* graphite-poly.h (struct scop): Use an sese_info_p.
(scop_set_region): Same.
* graphite-scop-detection.c (struct sese_l): Moved...
(get_entry_bb): Moved...
(get_exit_bb): Moved...
(parameter_index_in_region_1): Use an sese_info_p.
(parameter_index_in_region): Same.
(scan_tree_for_params): Same.
(find_params_in_bb): Same.
(sese_dom_walker): Use an sese_l.
* graphite-sese-to-poly.c (remove_invariant_phi): Same.
(reduction_phi_p): Same.
(parameter_index_in_region_1): Use an sese_info_p.
(propagate_expr_outside_region): Use an sese_l.
* graphite.c: Replace uses of SCOP_REGION.
* sese.c (sese_record_loop): Use an sese_info_p.
(build_sese_loop_nests): Same.
(sese_build_liveouts_use): Same.
(sese_build_liveouts_bb): Same.
(sese_build_liveouts_bb): Same.
(sese_bad_liveouts_use): Same.
(sese_reset_debug_liveouts_bb): Same.
(sese_build_liveouts): Same.
(new_sese): Renamed new_sese_info.
(free_sese): Renamed free_sese_info.
(set_rename): Use an sese_info_p.
(graphite_copy_stmts_from_block): Same.
(copy_bb_and_scalar_dependences): Same.
(outermost_loop_in_sese_1): Use an sese_l.
(outermost_loop_in_sese): Same.
(if_region_set_false_region): Use an sese_info_p.
(move_sese_in_condition): Same.
(scalar_evolution_in_region): Use an sese_l.
* sese.h (struct sese_l): ... here.
(SESE_ENTRY): Remove.
(SESE_ENTRY_BB): Remove.
(SESE_EXIT): Remove.
(SESE_EXIT_BB): Remove.
(sese_contains_loop): Use an sese_info_p.
(sese_nb_params): Same.
(bb_in_sese_p): Use an sese_l.
(stmt_in_sese_p): Same.
(defined_in_sese_p): Same.
(loop_in_sese_p): Same.
(sese_loop_depth): Same.
(struct ifsese_s): Use an sese_info_p.
(gbb_loop_at_index): Use an sese_l.
(nb_common_loops): Same.
(scev_analyzable_p): Same.
2015-10-07 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_conditional_register_usage): Use
......@@ -132,7 +132,7 @@ void ivs_params_clear (ivs_params &ip)
class translate_isl_ast_to_gimple
{
public:
translate_isl_ast_to_gimple (sese r)
translate_isl_ast_to_gimple (sese_info_p r)
: region (r)
{ }
......@@ -261,9 +261,9 @@ class translate_isl_ast_to_gimple
corresponding tree expressions. */
void build_iv_mapping (vec<tree> iv_map, gimple_poly_bb_p gbb,
__isl_keep isl_ast_expr *user_expr, ivs_params &ip,
sese region);
sese_l &region);
private:
sese region;
sese_info_p region;
};
/* Return the tree variable that corresponds to the given isl ast identifier
......@@ -741,7 +741,7 @@ void
translate_isl_ast_to_gimple::
build_iv_mapping (vec<tree> iv_map, gimple_poly_bb_p gbb,
__isl_keep isl_ast_expr *user_expr, ivs_params &ip,
sese region)
sese_l &region)
{
gcc_assert (isl_ast_expr_get_type (user_expr) == isl_ast_expr_op &&
isl_ast_expr_get_op_type (user_expr) == isl_ast_op_call);
......@@ -756,7 +756,6 @@ build_iv_mapping (vec<tree> iv_map, gimple_poly_bb_p gbb,
loop_p old_loop = gbb_loop_at_index (gbb, region, i - 1);
iv_map[old_loop->num] = t;
}
}
/* Translates an isl_ast_node_user to Gimple.
......@@ -787,10 +786,10 @@ translate_isl_ast_node_user (__isl_keep isl_ast_node *node,
iv_map.create (nb_loops);
iv_map.safe_grow_cleared (nb_loops);
build_iv_mapping (iv_map, gbb, user_expr, ip, SCOP_REGION (pbb->scop));
build_iv_mapping (iv_map, gbb, user_expr, ip, pbb->scop->region->region);
isl_ast_expr_free (user_expr);
next_e = copy_bb_and_scalar_dependences (GBB_BB (gbb),
SCOP_REGION (pbb->scop), next_e,
pbb->scop->region, next_e,
iv_map,
&graphite_regenerate_error);
iv_map.release ();
......@@ -910,7 +909,7 @@ print_isl_ast_node (FILE *file, __isl_keep isl_ast_node *node,
static void
add_parameters_to_ivs_params (scop_p scop, ivs_params &ip)
{
sese region = SCOP_REGION (scop);
sese_info_p region = scop->region;
unsigned nb_parameters = isl_set_dim (scop->param_context, isl_dim_param);
gcc_assert (nb_parameters == SESE_PARAMS (region).length ());
unsigned i;
......@@ -1075,13 +1074,14 @@ scop_to_isl_ast (scop_p scop, ivs_params &ip)
DEF_STMT. GSI points to entry basic block of the TO_REGION. */
static void
copy_def(tree tr, gimple *def_stmt, sese region, sese to_region, gimple_stmt_iterator *gsi)
copy_def (tree tr, gimple *def_stmt, sese_info_p region, sese_info_p to_region,
gimple_stmt_iterator *gsi)
{
if (!defined_in_sese_p (tr, region))
if (!defined_in_sese_p (tr, region->region))
return;
ssa_op_iter iter;
use_operand_p use_p;
FOR_EACH_SSA_USE_OPERAND (use_p, def_stmt, iter, SSA_OP_USE)
{
tree use_tr = USE_FROM_PTR (use_p);
......@@ -1116,14 +1116,14 @@ copy_def(tree tr, gimple *def_stmt, sese region, sese to_region, gimple_stmt_ite
}
static void
copy_internal_parameters(sese region, sese to_region)
copy_internal_parameters (sese_info_p region, sese_info_p to_region)
{
/* For all the parameters which definitino is in the if_region->false_region,
insert code on true_region (if_region->true_region->entry). */
int i;
tree tr;
gimple_stmt_iterator gsi = gsi_start_bb(to_region->entry->dest);
gimple_stmt_iterator gsi = gsi_start_bb(to_region->region.entry->dest);
FOR_EACH_VEC_ELT (region->params, i, tr)
{
......@@ -1144,7 +1144,7 @@ bool
graphite_regenerate_ast_isl (scop_p scop)
{
loop_p context_loop;
sese region = SCOP_REGION (scop);
sese_info_p region = scop->region;
ifsese if_region = NULL;
isl_ast_node *root_node;
ivs_params ip;
......@@ -1165,19 +1165,19 @@ graphite_regenerate_ast_isl (scop_p scop)
if_region = move_sese_in_condition (region);
sese_insert_phis_for_liveouts (region,
if_region->region->exit->src,
if_region->false_region->exit,
if_region->true_region->exit);
if_region->region->region.exit->src,
if_region->false_region->region.exit,
if_region->true_region->region.exit);
recompute_all_dominators ();
graphite_verify ();
context_loop = SESE_ENTRY (region)->src->loop_father;
context_loop = region->region.entry->src->loop_father;
/* Copy all the parameters which are defined in the region. */
copy_internal_parameters(if_region->false_region, if_region->true_region);
translate_isl_ast_to_gimple t(region);
edge e = single_succ_edge (if_region->true_region->entry->dest);
edge e = single_succ_edge (if_region->true_region->region.entry->dest);
split_edge (e);
t.translate_isl_ast (context_loop, root_node, e, ip);
......
......@@ -303,7 +303,7 @@ remove_gbbs_in_scop (scop_p scop)
scop_p
new_scop (edge entry, edge exit)
{
sese region = new_sese (entry, exit);
sese_info_p region = new_sese_info (entry, exit);
scop_p scop = XNEW (struct scop);
scop->param_context = NULL;
......@@ -336,7 +336,7 @@ free_scop (scop_p scop)
poly_bb_p pbb;
remove_gbbs_in_scop (scop);
free_sese (SCOP_REGION (scop));
free_sese_info (SCOP_REGION (scop));
FOR_EACH_VEC_ELT (SCOP_BBS (scop), i, pbb)
free_poly_bb (pbb);
......
......@@ -407,7 +407,7 @@ struct dr_info
struct scop
{
/* A SCOP is defined as a SESE region. */
sese region;
sese_info_p region;
/* Number of parameters in SCoP. */
graphite_dim_t nb_params;
......@@ -468,7 +468,7 @@ extern bool apply_poly_transforms (scop_p);
/* Set the region of SCOP to REGION. */
static inline void
scop_set_region (scop_p scop, sese region)
scop_set_region (scop_p scop, sese_info_p region)
{
scop->region = region;
}
......
......@@ -118,7 +118,7 @@ remove_simple_copy_phi (gphi_iterator *psi)
loop ENTRY edge the assignment RES = INIT. */
static void
remove_invariant_phi (sese region, gphi_iterator *psi)
remove_invariant_phi (sese_l &region, gphi_iterator *psi)
{
gphi *phi = psi->phi ();
loop_p loop = loop_containing_stmt (phi);
......@@ -161,7 +161,7 @@ simple_copy_phi_p (gphi *phi)
be considered. */
static bool
reduction_phi_p (sese region, gphi_iterator *psi)
reduction_phi_p (sese_l &region, gphi_iterator *psi)
{
loop_p loop;
gphi *phi = psi->phi ();
......@@ -335,7 +335,7 @@ build_scop_scattering (scop_p scop)
int prefix = 0;
if (previous_gbb)
prefix = nb_common_loops (SCOP_REGION (scop), previous_gbb, gbb);
prefix = nb_common_loops (scop->region->region, previous_gbb, gbb);
previous_gbb = gbb;
......@@ -357,7 +357,7 @@ extract_affine_chrec (scop_p s, tree e, __isl_take isl_space *space)
isl_pw_aff *lhs = extract_affine (s, CHREC_LEFT (e), isl_space_copy (space));
isl_pw_aff *rhs = extract_affine (s, CHREC_RIGHT (e), isl_space_copy (space));
isl_local_space *ls = isl_local_space_from_space (space);
unsigned pos = sese_loop_depth (SCOP_REGION (s), get_chrec_loop (e)) - 1;
unsigned pos = sese_loop_depth (s->region->region, get_chrec_loop (e)) - 1;
isl_aff *loop = isl_aff_set_coefficient_si
(isl_aff_zero_on_domain (ls), isl_dim_in, pos, 1);
isl_pw_aff *l = isl_pw_aff_from_aff (loop);
......@@ -482,7 +482,7 @@ wrap (isl_pw_aff *pwaff, unsigned width)
Otherwise returns -1. */
static inline int
parameter_index_in_region_1 (tree name, sese region)
parameter_index_in_region_1 (tree name, sese_info_p region)
{
int i;
tree p;
......@@ -540,7 +540,7 @@ extract_affine (scop_p s, tree e, __isl_take isl_space *space)
case SSA_NAME:
gcc_assert (-1 != parameter_index_in_region_1 (e, s->region)
|| !invariant_in_sese_p_rec (e, s->region));
|| !invariant_in_sese_p_rec (e, s->region->region));
res = extract_affine_name (s, e, space);
break;
......@@ -571,7 +571,7 @@ extract_affine (scop_p s, tree e, __isl_take isl_space *space)
static void
set_scop_parameter_dim (scop_p scop)
{
sese region = SCOP_REGION (scop);
sese_info_p region = scop->region;
unsigned nbp = sese_nb_params (region);
isl_space *space = isl_space_set_alloc (scop->isl_context, nbp, 0);
......@@ -594,7 +594,7 @@ build_loop_iteration_domains (scop_p scop, struct loop *loop,
{
tree nb_iters = number_of_latch_executions (loop);
sese region = SCOP_REGION (scop);
sese_l region = scop->region->region;
gcc_assert (loop_in_sese_p (loop, region));
isl_set *inner = isl_set_copy (outer);
......@@ -704,7 +704,7 @@ create_pw_aff_from_tree (poly_bb_p pbb, tree t)
{
scop_p scop = PBB_SCOP (pbb);
t = scalar_evolution_in_region (SCOP_REGION (scop), pbb_loop (pbb), t);
t = scalar_evolution_in_region (scop->region->region, pbb_loop (pbb), t);
gcc_assert (!automatically_generated_chrec_p (t));
return extract_affine (scop, t, isl_set_get_space (pbb->domain));
......@@ -818,7 +818,7 @@ add_conditions_to_constraints (scop_p scop)
static void
add_param_constraints (scop_p scop, graphite_dim_t p)
{
tree parameter = SESE_PARAMS (SCOP_REGION (scop))[p];
tree parameter = SESE_PARAMS (scop->region)[p];
tree type = TREE_TYPE (parameter);
tree lb = NULL_TREE;
tree ub = NULL_TREE;
......@@ -892,14 +892,14 @@ build_scop_context (scop_p scop)
static void
build_scop_iteration_domain (scop_p scop)
{
sese region = SCOP_REGION (scop);
sese_info_p region = scop->region;
int nb_loops = number_of_loops (cfun);
isl_set **doms = XCNEWVEC (isl_set *, nb_loops);
int i;
struct loop *loop;
FOR_EACH_VEC_ELT (SESE_LOOP_NEST (region), i, loop)
if (!loop_in_sese_p (loop_outer (loop), region))
if (!loop_in_sese_p (loop_outer (loop), region->region))
build_loop_iteration_domains (scop, loop, 0,
isl_set_copy (scop->param_context), doms);
......@@ -1166,7 +1166,7 @@ build_scop_drs (scop_p scop)
static void
analyze_drs_in_stmts (scop_p scop, basic_block bb, vec<gimple *> stmts)
{
sese region = SCOP_REGION (scop);
sese_l region = scop->region->region;
if (!bb_in_sese_p (bb, region))
return;
......@@ -1284,7 +1284,7 @@ insert_out_of_ssa_copy_on_edge (scop_p scop, edge e, tree res, tree expr)
gsi_commit_edge_inserts ();
basic_block bb = gimple_bb (stmt);
if (!bb_in_sese_p (bb, SCOP_REGION (scop)))
if (!bb_in_sese_p (bb, scop->region->region))
return;
if (!gbb_from_bb (bb))
......@@ -1326,7 +1326,7 @@ scalar_close_phi_node_p (gimple *phi)
all the uses of DEF outside REGION. */
static void
propagate_expr_outside_region (tree def, tree expr, sese region)
propagate_expr_outside_region (tree def, tree expr, sese_l &region)
{
gimple_seq stmts;
bool replaced_once = false;
......@@ -1355,7 +1355,7 @@ propagate_expr_outside_region (tree def, tree expr, sese region)
if (replaced_once)
{
gsi_insert_seq_on_edge (SESE_ENTRY (region), stmts);
gsi_insert_seq_on_edge (region.entry, stmts);
gsi_commit_edge_inserts ();
}
}
......@@ -1366,7 +1366,7 @@ propagate_expr_outside_region (tree def, tree expr, sese region)
static void
rewrite_close_phi_out_of_ssa (scop_p scop, gimple_stmt_iterator *psi)
{
sese region = SCOP_REGION (scop);
sese_l region = scop->region->region;
gimple *phi = gsi_stmt (*psi);
tree res = gimple_phi_result (phi);
basic_block bb = gimple_bb (phi);
......@@ -1499,7 +1499,7 @@ static void
rewrite_reductions_out_of_ssa (scop_p scop)
{
basic_block bb;
sese region = SCOP_REGION (scop);
sese_l region = scop->region->region;
FOR_EACH_BB_FN (bb, cfun)
if (bb_in_sese_p (bb, region))
......@@ -1564,7 +1564,7 @@ handle_scalar_deps_crossing_scop_limits (scop_p scop, tree def, gimple *stmt)
tree var = create_tmp_reg (TREE_TYPE (def));
tree new_name = make_ssa_name (var, stmt);
bool needs_copy = false;
sese region = SCOP_REGION (scop);
sese_l region = scop->region->region;
imm_use_iterator imm_iter;
gimple *use_stmt;
......@@ -1588,7 +1588,7 @@ handle_scalar_deps_crossing_scop_limits (scop_p scop, tree def, gimple *stmt)
if (needs_copy)
{
gimple *assign = gimple_build_assign (new_name, def);
gimple_stmt_iterator psi = gsi_after_labels (SESE_EXIT (region)->dest);
gimple_stmt_iterator psi = gsi_after_labels (region.exit->dest);
update_stmt (assign);
gsi_insert_before (&psi, assign, GSI_SAME_STMT);
......@@ -1602,7 +1602,7 @@ handle_scalar_deps_crossing_scop_limits (scop_p scop, tree def, gimple *stmt)
static bool
rewrite_cross_bb_scalar_deps (scop_p scop, gimple_stmt_iterator *gsi)
{
sese region = SCOP_REGION (scop);
sese_l region = scop->region->region;
gimple *stmt = gsi_stmt (*gsi);
imm_use_iterator imm_iter;
tree def;
......@@ -1687,11 +1687,11 @@ rewrite_cross_bb_scalar_deps_out_of_ssa (scop_p scop)
{
basic_block bb;
gimple_stmt_iterator psi;
sese region = SCOP_REGION (scop);
sese_l region = scop->region->region;
bool changed = false;
/* Create an extra empty BB after the scop. */
split_edge (SESE_EXIT (region));
split_edge (region.exit);
FOR_EACH_BB_FN (bb, cfun)
if (bb_in_sese_p (bb, region))
......
......@@ -144,7 +144,7 @@ print_graphite_scop_statistics (FILE* file, scop_p scop)
gimple_stmt_iterator psi;
loop_p loop = bb->loop_father;
if (!bb_in_sese_p (bb, SCOP_REGION (scop)))
if (!bb_in_sese_p (bb, scop->region->region))
continue;
n_bbs++;
......@@ -162,7 +162,7 @@ print_graphite_scop_statistics (FILE* file, scop_p scop)
n_p_stmts += bb->count;
}
if (loop->header == bb && loop_in_sese_p (loop, SCOP_REGION (scop)))
if (loop->header == bb && loop_in_sese_p (loop, scop->region->region))
{
n_loops++;
n_p_loops += bb->count;
......@@ -171,8 +171,8 @@ print_graphite_scop_statistics (FILE* file, scop_p scop)
fprintf (file, "\nFunction Name: %s\n", current_function_name ());
edge scop_begin = scop->region->entry;
edge scop_end = scop->region->exit;
edge scop_begin = scop->region->region.entry;
edge scop_end = scop->region->region.exit;
fprintf (file, "\nSCoP (entry_edge (bb_%d, bb_%d), ",
scop_begin->src->index, scop_begin->dest->index);
......
......@@ -26,10 +26,48 @@ typedef hash_map<tree, tree> parameter_rename_map_t;
/* A Single Entry, Single Exit region is a part of the CFG delimited
by two edges. */
typedef struct sese_s
struct sese_l
{
/* Single ENTRY and single EXIT from the SESE region. */
edge entry, exit;
sese_l (edge e, edge x) : entry (e), exit (x) {}
/* This is to push objects of sese_l in a vec. */
sese_l (int i) : entry (NULL), exit (NULL) { gcc_assert (i == 0); }
operator bool () const { return entry && exit; }
const sese_l &
operator= (const sese_l &s)
{
entry = s.entry;
exit = s.exit;
return *this;
}
edge entry;
edge exit;
};
/* Get the entry of an sese S. */
static inline basic_block
get_entry_bb (sese_l &s)
{
return s.entry->dest;
}
/* Get the exit of an sese S. */
static inline basic_block
get_exit_bb (sese_l &s)
{
return s.exit->src;
}
/* A helper structure for bookkeeping information about a scop in graphite. */
typedef struct sese_info_t
{
/* The SESE region. */
sese_l region;
/* Parameters used within the SCOP. */
vec<tree> params;
......@@ -45,31 +83,27 @@ typedef struct sese_s
can only add new params before generating the bb domains, otherwise they
become invalid. */
bool add_params;
} *sese;
} *sese_info_p;
#define SESE_ENTRY(S) (S->entry)
#define SESE_ENTRY_BB(S) (S->entry->dest)
#define SESE_EXIT(S) (S->exit)
#define SESE_EXIT_BB(S) (S->exit->dest)
#define SESE_PARAMS(S) (S->params)
#define SESE_LOOPS(S) (S->loops)
#define SESE_LOOP_NEST(S) (S->loop_nest)
#define SESE_ADD_PARAMS(S) (S->add_params)
extern sese new_sese (edge, edge);
extern void free_sese (sese);
extern void sese_insert_phis_for_liveouts (sese, basic_block, edge, edge);
extern void build_sese_loop_nests (sese);
extern edge copy_bb_and_scalar_dependences (basic_block, sese, edge,
extern sese_info_p new_sese_info (edge, edge);
extern void free_sese_info (sese_info_p);
extern void sese_insert_phis_for_liveouts (sese_info_p, basic_block, edge, edge);
extern void build_sese_loop_nests (sese_info_p);
extern edge copy_bb_and_scalar_dependences (basic_block, sese_info_p, edge,
vec<tree> , bool *);
extern struct loop *outermost_loop_in_sese (sese, basic_block);
extern tree scalar_evolution_in_region (sese, loop_p, tree);
extern bool invariant_in_sese_p_rec (tree, sese);
extern struct loop *outermost_loop_in_sese (sese_l &, basic_block);
extern tree scalar_evolution_in_region (sese_l &, loop_p, tree);
extern bool invariant_in_sese_p_rec (tree, sese_l &);
/* Check that SESE contains LOOP. */
static inline bool
sese_contains_loop (sese sese, struct loop *loop)
sese_contains_loop (sese_info_p sese, struct loop *loop)
{
return bitmap_bit_p (SESE_LOOPS (sese), loop->num);
}
......@@ -77,7 +111,7 @@ sese_contains_loop (sese sese, struct loop *loop)
/* The number of parameters in REGION. */
static inline unsigned
sese_nb_params (sese region)
sese_nb_params (sese_info_p region)
{
return SESE_PARAMS (region).length ();
}
......@@ -109,36 +143,32 @@ bb_in_region (basic_block bb, basic_block entry, basic_block exit)
EXIT blocks. */
static inline bool
bb_in_sese_p (basic_block bb, sese region)
bb_in_sese_p (basic_block bb, sese_l &r)
{
basic_block entry = SESE_ENTRY_BB (region);
basic_block exit = SESE_EXIT_BB (region);
return bb_in_region (bb, entry, exit);
return bb_in_region (bb, r.entry->dest, r.exit->dest);
}
/* Returns true when STMT is defined in REGION. */
static inline bool
stmt_in_sese_p (gimple *stmt, sese region)
stmt_in_sese_p (gimple *stmt, sese_l &r)
{
basic_block bb = gimple_bb (stmt);
return bb && bb_in_sese_p (bb, region);
return bb && bb_in_sese_p (bb, r);
}
/* Returns true when NAME is defined in REGION. */
static inline bool
defined_in_sese_p (tree name, sese region)
defined_in_sese_p (tree name, sese_l &r)
{
gimple *stmt = SSA_NAME_DEF_STMT (name);
return stmt_in_sese_p (stmt, region);
return stmt_in_sese_p (SSA_NAME_DEF_STMT (name), r);
}
/* Returns true when LOOP is in REGION. */
static inline bool
loop_in_sese_p (struct loop *loop, sese region)
loop_in_sese_p (struct loop *loop, sese_l &region)
{
return (bb_in_sese_p (loop->header, region)
&& bb_in_sese_p (loop->latch, region));
......@@ -168,7 +198,7 @@ loop_in_sese_p (struct loop *loop, sese region)
loop_2 is completely contained -> depth 1 */
static inline unsigned int
sese_loop_depth (sese region, loop_p loop)
sese_loop_depth (sese_l &region, loop_p loop)
{
unsigned int depth = 0;
......@@ -183,7 +213,7 @@ sese_loop_depth (sese region, loop_p loop)
/* Splits BB to make a single entry single exit region. */
static inline sese
static inline sese_info_p
split_region_for_bb (basic_block bb)
{
edge entry, exit;
......@@ -205,15 +235,7 @@ split_region_for_bb (basic_block bb)
exit = split_block (bb, gsi_stmt (gsi));
}
return new_sese (entry, exit);
}
/* Returns the block preceding the entry of a SESE. */
static inline basic_block
block_before_sese (sese sese)
{
return SESE_ENTRY (sese)->src;
return new_sese_info (entry, exit);
}
......@@ -221,13 +243,13 @@ block_before_sese (sese sese)
/* A single entry single exit specialized for conditions. */
typedef struct ifsese_s {
sese region;
sese true_region;
sese false_region;
sese_info_p region;
sese_info_p true_region;
sese_info_p false_region;
} *ifsese;
extern void if_region_set_false_region (ifsese, sese);
extern ifsese move_sese_in_condition (sese);
extern void if_region_set_false_region (ifsese, sese_info_p);
extern ifsese move_sese_in_condition (sese_info_p);
extern edge get_true_edge_from_guard_bb (basic_block);
extern edge get_false_edge_from_guard_bb (basic_block);
extern void set_ifsese_condition (ifsese, tree);
......@@ -235,13 +257,13 @@ extern void set_ifsese_condition (ifsese, tree);
static inline edge
if_region_entry (ifsese if_region)
{
return SESE_ENTRY (if_region->region);
return if_region->region->region.entry;
}
static inline edge
if_region_exit (ifsese if_region)
{
return SESE_EXIT (if_region->region);
return if_region->region->region.exit;
}
static inline basic_block
......@@ -311,7 +333,7 @@ gbb_loop (gimple_poly_bb_p gbb)
If there is no corresponding gimple loop, we return NULL. */
static inline loop_p
gbb_loop_at_index (gimple_poly_bb_p gbb, sese region, int index)
gbb_loop_at_index (gimple_poly_bb_p gbb, sese_l &region, int index)
{
loop_p loop = gbb_loop (gbb);
int depth = sese_loop_depth (region, loop);
......@@ -319,7 +341,7 @@ gbb_loop_at_index (gimple_poly_bb_p gbb, sese region, int index)
while (--depth > index)
loop = loop_outer (loop);
gcc_assert (sese_contains_loop (region, loop));
gcc_assert (loop_in_sese_p (loop, region));
return loop;
}
......@@ -327,7 +349,7 @@ gbb_loop_at_index (gimple_poly_bb_p gbb, sese region, int index)
/* The number of common loops in REGION for GBB1 and GBB2. */
static inline int
nb_common_loops (sese region, gimple_poly_bb_p gbb1, gimple_poly_bb_p gbb2)
nb_common_loops (sese_l &region, gimple_poly_bb_p gbb1, gimple_poly_bb_p gbb2)
{
loop_p l1 = gbb_loop (gbb1);
loop_p l2 = gbb_loop (gbb2);
......@@ -340,7 +362,7 @@ nb_common_loops (sese region, gimple_poly_bb_p gbb1, gimple_poly_bb_p gbb2)
evolution analyzer. */
static inline bool
scev_analyzable_p (tree def, sese region)
scev_analyzable_p (tree def, sese_l &region)
{
loop_p loop;
tree scev;
......
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