|
GCC Middle and Back End API Reference
|

Go to the source code of this file.
Data Structures | |
| class | sese_l |
| class | sese_info_t |
| struct | ifsese_s |
| struct | gimple_poly_bb |
Macros | |
| #define | GBB_BB(GBB) |
| #define | GBB_PBB(GBB) |
| #define | GBB_DATA_REFS(GBB) |
| #define | GBB_CONDITIONS(GBB) |
| #define | GBB_CONDITION_CASES(GBB) |
Typedefs | |
| typedef struct ifsese_s * | ifsese |
| typedef class sese_info_t * | sese_info_p |
| typedef std::pair< gimple *, tree > | scalar_use |
| typedef struct gimple_poly_bb * | gimple_poly_bb_p |
| #define GBB_BB | ( | GBB | ) |
Referenced by gbb_loop(), and pbb_bb().
| #define GBB_CONDITION_CASES | ( | GBB | ) |
| #define GBB_CONDITIONS | ( | GBB | ) |
| #define GBB_DATA_REFS | ( | GBB | ) |
| #define GBB_PBB | ( | GBB | ) |
| typedef struct gimple_poly_bb * gimple_poly_bb_p |
Single entry single exit control flow regions. Copyright (C) 2008-2026 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.
| typedef std::pair<gimple *, tree> scalar_use |
| typedef class sese_info_t * sese_info_p |
A helper structure for bookkeeping information about a scop in graphite.
|
inline |
Checks whether BB is contained in the region delimited by ENTRY and EXIT blocks.
References bb_in_region(), CDI_DOMINATORS, and dominated_by_p().
Referenced by bb_in_region(), bb_in_sese_p(), and do_rpo_vn_1().
|
inline |
Checks whether BB is contained in the region delimited by ENTRY and EXIT blocks.
References bb_in_region(), bb_in_sese_p(), and r.
Referenced by bb_in_sese_p(), loop_in_sese_p(), sese_build_liveouts(), sese_build_liveouts_use(), sese_reset_debug_liveouts(), and stmt_in_sese_p().
Returns true when NAME is defined in REGION.
References defined_in_sese_p(), r, SSA_NAME_DEF_STMT, and stmt_in_sese_p().
Referenced by defined_in_sese_p(), invariant_in_sese_p_rec(), scalar_evolution_in_region(), and scev_analyzable_p().
| void dump_edge | ( | const_edge | e | ) |
References dump_edge().
Referenced by dump_edge().
| void dump_sese | ( | const sese_l & | ) |
References dump_sese().
Referenced by dump_sese().
|
extern |
|
inline |
Return the innermost loop that contains the basic block GBB.
References GBB_BB, and gbb_loop().
Referenced by gbb_loop(), gbb_loop_at_index(), nb_common_loops(), and pbb_loop().
|
inline |
Returns the gimple loop, that corresponds to the loop_iterator_INDEX. If there is no corresponding gimple loop, we return NULL.
References gbb_loop(), gbb_loop_at_index(), gcc_assert, loop_in_sese_p(), loop_outer(), and sese_loop_depth().
Referenced by gbb_loop_at_index().
|
inline |
|
inline |
|
extern |
Returns the first successor edge of BB with EDGE_TRUE_VALUE flag cleared.
References FOR_EACH_EDGE, gcc_unreachable, get_false_edge_from_guard_bb(), NULL, and basic_block_def::succs.
Referenced by get_false_edge_from_guard_bb().
|
extern |
Returns the first successor edge of BB with EDGE_TRUE_VALUE flag set.
References FOR_EACH_EDGE, gcc_unreachable, get_true_edge_from_guard_bb(), NULL, and basic_block_def::succs.
Referenced by get_true_edge_from_guard_bb().
References if_region_entry(), and ifsese_s::region.
Referenced by if_region_entry(), and if_region_get_condition_block().
References if_region_exit(), and ifsese_s::region.
Referenced by if_region_exit().
|
inline |
References if_region_entry(), and if_region_get_condition_block().
Referenced by if_region_get_condition_block().
Return true when T is defined outside REGION or when no definitions are variant in REGION. When HAS_VDEFS is a valid pointer, sets HAS_VDEFS to true when T depends on memory that may change in REGION.
References defined_in_sese_p(), FOR_EACH_SSA_USE_OPERAND, gimple_vdef(), gimple_vuse(), invariant_in_sese_p_rec(), SSA_NAME_DEF_STMT, SSA_OP_USE, and USE_FROM_PTR.
Referenced by invariant_in_sese_p_rec().
Returns true when LOOP is in REGION.
References bb_in_sese_p(), loop::header, loop::latch, and loop_in_sese_p().
Referenced by gbb_loop_at_index(), loop_in_sese_p(), outermost_loop_in_sese(), outermost_loop_in_sese_1(), scalar_evolution_in_region(), scev_analyzable_p(), and sese_loop_depth().
|
extern |
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(), move_sese_in_condition(), NULL_TREE, ifsese_s::region, set_immediate_dominator(), single_pred_edge(), single_succ_edge(), split_edge(), and ifsese_s::true_region.
Referenced by move_sese_in_condition().
|
inline |
The number of common loops in REGION for GBB1 and GBB2.
References find_common_loop(), gbb_loop(), nb_common_loops(), and sese_loop_depth().
Referenced by nb_common_loops().
|
extern |
Builds a new SESE region from edges ENTRY and EXIT.
References new_sese_info(), and NULL.
Referenced by new_sese_info().
|
extern |
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(), outermost_loop_in_sese(), and outermost_loop_in_sese_1().
Referenced by outermost_loop_in_sese().
| void print_edge | ( | FILE * | file, |
| const_edge | e ) |
| void print_sese | ( | FILE * | file, |
| const sese_l & | s ) |
Pretty print sese S to FILE.
References print_edge(), and print_sese().
Referenced by debug_sese(), and print_sese().
Returns the scalar evolution of T in REGION. Every variable that is not defined in the REGION is considered a parameter.
References analyze_scalar_evolution(), defined_in_sese_p(), sese_l::entry, instantiate_scev(), loop_in_sese_p(), NULL, scalar_evolution_in_region(), and TREE_CODE.
Referenced by scalar_evolution_in_region(), and 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_analyzable_p(), scev_is_linear_expression(), SSA_NAME_DEF_STMT, TREE_CODE, and TREE_TYPE.
Referenced by scev_analyzable_p().
|
extern |
Build the LIVEOUTS of REGION: the set of variables defined inside and used outside the REGION.
References bb_in_sese_p(), BITMAP_ALLOC, cfun, FOR_EACH_BB_FN, gcc_assert, NULL, sese_build_liveouts(), and sese_build_liveouts_bb().
Referenced by sese_build_liveouts().
|
extern |
Insert in the block BB phi nodes for variables defined in REGION and used outside the REGION. The code generation moves REGION in the else clause of an "if (1)" and generates code in the then clause that is at this point empty: | if (1) | empty; | else | REGION;
References EXECUTE_IF_SET_IN_BITMAP, i, MAY_HAVE_DEBUG_BIND_STMTS, sese_add_exit_phis_edge(), sese_insert_phis_for_liveouts(), sese_reset_debug_liveouts(), ssa_name, and virtual_operand_p().
Referenced by sese_insert_phis_for_liveouts().
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(), loop_outer(), and sese_loop_depth().
Referenced by gbb_loop_at_index(), nb_common_loops(), and sese_loop_depth().
|
inline |
|
extern |
Return true if BB is empty, contains only DEBUG_INSNs.
References gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), is_gimple_debug(), and sese_trivially_empty_bb_p().
Referenced by sese_trivially_empty_bb_p().
Replaces the condition of the IF_REGION with CONDITION: | if (CONDITION) | true_region; | else | false_region;
References force_gimple_operand_gsi_1(), gcc_assert, gimple_build_cond_from_tree(), gsi_insert_before(), gsi_last_bb(), gsi_remove(), GSI_SAME_STMT, is_gimple_condexpr_for_cond(), NULL_TREE, ifsese_s::region, and set_ifsese_condition().
Referenced by set_ifsese_condition().
Returns true when STMT is defined in REGION.
References bb_in_sese_p(), gimple_bb(), r, and stmt_in_sese_p().
Referenced by defined_in_sese_p(), and stmt_in_sese_p().
| 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, i, and vec_find().
Referenced by vec_find().