GCC Middle and Back End API Reference
|
Go to the source code of this file.
Data Structures | |
struct | sese_s |
struct | ifsese_s |
struct | rename_map_elt_s |
struct | gimple_bb |
Macros | |
#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) |
#define | GBB_BB(GBB) (GBB)->bb |
#define | GBB_PBB(GBB) (GBB)->pbb |
#define | GBB_DATA_REFS(GBB) (GBB)->data_refs |
#define | GBB_CONDITIONS(GBB) (GBB)->conditions |
#define | GBB_CONDITION_CASES(GBB) (GBB)->condition_cases |
Typedefs | |
typedef struct sese_s * | sese |
typedef struct ifsese_s * | ifsese |
typedef struct rename_map_elt_s * | rename_map_elt |
typedef struct gimple_bb * | gimple_bb_p |
#define GBB_BB | ( | GBB | ) | (GBB)->bb |
Referenced by number_of_write_pdrs().
#define GBB_CONDITION_CASES | ( | GBB | ) | (GBB)->condition_cases |
#define GBB_CONDITIONS | ( | GBB | ) | (GBB)->conditions |
#define GBB_DATA_REFS | ( | GBB | ) | (GBB)->data_refs |
#define GBB_PBB | ( | GBB | ) | (GBB)->pbb |
#define SESE_ADD_PARAMS | ( | S | ) | (S->add_params) |
Referenced by create_if_region_on_edge().
Referenced by loop_in_sese_p().
Referenced by loop_in_sese_p().
Referenced by eq_rename_map_elts().
Referenced by eq_rename_map_elts().
Referenced by sese_contains_loop().
typedef struct gimple_bb * gimple_bb_p |
typedef struct rename_map_elt_s * rename_map_elt |
Structure containing the mapping between the old names and the new names used after block copy in the new loop context.
Single entry single exit control flow regions. Copyright (C) 2008-2013 Free Software Foundation, Inc. Contributed by Jan Sjodin jan.s and Sebastian Pop jodi n@amd .comsebas. tian .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 region is a part of the CFG delimited by two edges.
|
inlinestatic |
Checks whether BB is contained in the region delimited by ENTRY and EXIT blocks.
|
inlinestatic |
Checks whether BB is contained in the region delimited by ENTRY and EXIT blocks.
References gimple_bb().
Referenced by sese_record_loop().
|
inlinestatic |
Returns the block preceding the entry of a SESE.
Referenced by move_sese_in_condition().
void build_sese_loop_nests | ( | sese | ) |
edge copy_bb_and_scalar_dependences | ( | basic_block | bb, |
sese | region, | ||
edge | next_e, | ||
vec< tree > | iv_map, | ||
bool * | gloog_error | ||
) |
Copies BB and includes in the copied BB all the statements that can be reached following the use-def chains from the memory accesses, and returns the next edge following this new block. GLOOG_ERROR is set when the code generation cannot continue.
|
inlinestatic |
Returns true when NAME is defined in REGION.
Referenced by move_sese_in_condition().
int eq_rename_map_elts | ( | const void * | , |
const void * | |||
) |
void free_sese | ( | sese | ) |
|
staticread |
Return the innermost loop that contains the basic block GBB.
References find_common_loop(), and sese_loop_depth().
|
inlinestatic |
Returns the gimple loop, that corresponds to the loop_iterator_INDEX. If there is no corresponding gimple loop, we return NULL.
References TREE_TYPE.
edge get_false_edge_from_guard_bb | ( | basic_block | ) |
edge get_true_edge_from_guard_bb | ( | basic_block | ) |
|
inlinestatic |
References rename_map_elt_s::expr, and rename_map_elt_s::old_name.
|
inlinestatic |
|
inlinestatic |
References rename_map_elt_s::expr, and rename_map_elt_s::old_name.
|
inlinestatic |
Returns true when LOOP is in REGION.
References gcc_assert, loop_outer(), SESE_ENTRY_BB, and SESE_EXIT.
Referenced by move_sese_in_condition().
|
inlinestatic |
The number of common loops in REGION for GBB1 and GBB2.
|
inlinestatic |
Constructs a new SCEV_INFO_STR structure for VAR and INSTANTIATED_BELOW.
References gimple_bb::bb, and gimple_bb::pbb.
|
read |
|
inlinestatic |
Free and compute again all the dominators information.
hashval_t rename_map_elt_info | ( | const void * | ) |
|
inlinestatic |
Return true when DEF can be analyzed in REGION by the scalar evolution analyzer.
When Graphite generates code for a scev, the code generator expresses the scev in function of a single induction variable. This is unsafe for floating point computations, as it may replace a floating point sum reduction with a multiplication. The following test returns false for non integer types to avoid such problems.
|
inlinestatic |
void sese_insert_phis_for_liveouts | ( | sese | region, |
basic_block | bb, | ||
edge | false_e, | ||
edge | true_e | ||
) |
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 edge_def::flags, and FOR_EACH_EDGE.
|
inlinestatic |
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
Referenced by gbb_loop().
|
inlinestatic |
The number of parameters in REGION.
|
inlinestatic |
Splits BB to make a single entry single exit region.
|
inlinestatic |
Returns true when STMT is defined in REGION.