Go to the source code of this file.
|
void | print_edge (FILE *file, const_edge e) |
|
void | print_sese (FILE *file, const sese_l &s) |
|
void | dump_edge (const_edge e) |
|
void | dump_sese (const sese_l &) |
|
basic_block | get_entry_bb (const sese_l &s) |
|
basic_block | get_exit_bb (const sese_l &s) |
|
template<typename T > |
int | vec_find (const vec< T > &v, const T &elem) |
|
sese_info_p | new_sese_info (edge, edge) |
|
void | free_sese_info (sese_info_p) |
|
void | sese_insert_phis_for_liveouts (sese_info_p, basic_block, edge, edge) |
|
class loop * | outermost_loop_in_sese (sese_l &, basic_block) |
|
tree | scalar_evolution_in_region (const sese_l &, loop_p, tree) |
|
bool | scev_analyzable_p (tree, sese_l &) |
|
bool | invariant_in_sese_p_rec (tree, const sese_l &, bool *) |
|
void | sese_build_liveouts (sese_info_p) |
|
bool | sese_trivially_empty_bb_p (basic_block) |
|
unsigned | sese_nb_params (sese_info_p region) |
|
bool | bb_in_region (const_basic_block bb, const_basic_block entry, const_basic_block exit) |
|
bool | bb_in_sese_p (basic_block bb, const sese_l &r) |
|
bool | stmt_in_sese_p (gimple *stmt, const sese_l &r) |
|
bool | defined_in_sese_p (tree name, const sese_l &r) |
|
bool | loop_in_sese_p (class loop *loop, const sese_l ®ion) |
|
unsigned int | sese_loop_depth (const sese_l ®ion, loop_p loop) |
|
ifsese | move_sese_in_condition (sese_info_p) |
|
void | set_ifsese_condition (ifsese, tree) |
|
edge | get_true_edge_from_guard_bb (basic_block) |
|
edge | get_false_edge_from_guard_bb (basic_block) |
|
edge | if_region_entry (ifsese if_region) |
|
edge | if_region_exit (ifsese if_region) |
|
basic_block | if_region_get_condition_block (ifsese if_region) |
|
class loop * | gbb_loop (gimple_poly_bb_p gbb) |
|
loop_p | gbb_loop_at_index (gimple_poly_bb_p gbb, sese_l ®ion, int index) |
|
int | nb_common_loops (sese_l ®ion, gimple_poly_bb_p gbb1, gimple_poly_bb_p gbb2) |
|
◆ GBB_BB
◆ GBB_CONDITION_CASES
#define GBB_CONDITION_CASES |
( |
| GBB | ) |
|
◆ GBB_CONDITIONS
#define GBB_CONDITIONS |
( |
| GBB | ) |
|
◆ GBB_DATA_REFS
#define GBB_DATA_REFS |
( |
| GBB | ) |
|
◆ GBB_PBB
◆ gimple_poly_bb_p
◆ ifsese
Single entry single exit control flow regions.
Copyright (C) 2008-2024 Free Software Foundation, Inc.
Contributed by Jan Sjodin <jan.sjodin@amd.com> and
Sebastian Pop <sebastian.pop@amd.com>.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>.
A single entry single exit specialized for conditions.
◆ scalar_use
◆ sese_info_p
A helper structure for bookkeeping information about a scop in graphite.
◆ bb_in_region()
◆ bb_in_sese_p()
◆ defined_in_sese_p()
◆ dump_edge()
◆ dump_sese()
void dump_sese |
( |
const sese_l & | | ) |
|
◆ free_sese_info()
◆ gbb_loop()
◆ gbb_loop_at_index()
◆ get_entry_bb()
◆ get_exit_bb()
◆ get_false_edge_from_guard_bb()
◆ get_true_edge_from_guard_bb()
◆ if_region_entry()
◆ if_region_exit()
◆ if_region_get_condition_block()
◆ invariant_in_sese_p_rec()
◆ loop_in_sese_p()
◆ move_sese_in_condition()
Moves REGION in a condition expression:
| if (1)
| ;
| else
| REGION;
References CDI_DOMINATORS, dom_info_available_p(), ifsese_s::false_region, find_edge(), gimple_build_cond(), GSI_CONTINUE_LINKING, gsi_insert_after(), gsi_last_bb(), integer_one_node, integer_zero_node, make_edge(), NULL_TREE, ifsese_s::region, set_immediate_dominator(), single_pred_edge(), single_succ_edge(), split_edge(), and ifsese_s::true_region.
◆ nb_common_loops()
◆ new_sese_info()
Builds a new SESE region from edges ENTRY and EXIT.
References NULL.
◆ outermost_loop_in_sese()
Same as outermost_loop_in_sese_1, returns the outermost loop
containing BB in REGION, but makes sure that the returned loop
belongs to the REGION, and so this returns the first loop in the
REGION when the loop containing BB does not belong to REGION.
References gcc_assert, loop_in_sese_p(), and outermost_loop_in_sese_1().
◆ print_edge()
◆ print_sese()
void print_sese |
( |
FILE * | file, |
|
|
const sese_l & | s ) |
◆ scalar_evolution_in_region()
◆ scev_analyzable_p()
Return true when DEF can be analyzed in REGION by the scalar
evolution analyzer.
References chrec_contains_symbols_defined_in_loop(), chrec_contains_undetermined(), defined_in_sese_p(), INTEGRAL_TYPE_P, loop_containing_stmt(), loop_in_sese_p(), loop::num, POINTER_TYPE_P, scalar_evolution_in_region(), scev_is_linear_expression(), SSA_NAME_DEF_STMT, TREE_CODE, and TREE_TYPE.
◆ sese_build_liveouts()
◆ sese_insert_phis_for_liveouts()
◆ sese_loop_depth()
unsigned int sese_loop_depth |
( |
const sese_l & | region, |
|
|
loop_p | loop ) |
|
inline |
Returns the loop depth of LOOP in REGION. The loop depth
is the same as the normal loop depth, but limited by a region.
Example:
loop_0
loop_1
{
S0
<- region start
S1
loop_2
S2
S3
<- region end
}
loop_0 does not exist in the region -> invalid
loop_1 exists, but is not completely contained in the region -> depth 0
loop_2 is completely contained -> depth 1
References loop_in_sese_p(), and loop_outer().
Referenced by gbb_loop_at_index(), and nb_common_loops().
◆ sese_nb_params()
The number of parameters in REGION.
◆ sese_trivially_empty_bb_p()
◆ set_ifsese_condition()
void set_ifsese_condition |
( |
ifsese | if_region, |
|
|
tree | condition ) |
|
extern |
◆ stmt_in_sese_p()
◆ vec_find()
int vec_find |
( |
const vec< T > & | v, |
|
|
const T & | elem ) |
Returns the index of V where ELEM can be found. -1 Otherwise.
References FOR_EACH_VEC_ELT, and i.