| Index: gcc/gcc/tree-ssa-live.h
|
| diff --git a/gcc/gcc/tree-ssa-live.h b/gcc/gcc/tree-ssa-live.h
|
| index de4726245f801ffa31c601667a764a32a3982684..f49f065d69d5d450079aef9e8c9603181cc4f3ae 100644
|
| --- a/gcc/gcc/tree-ssa-live.h
|
| +++ b/gcc/gcc/tree-ssa-live.h
|
| @@ -27,19 +27,19 @@ along with GCC; see the file COPYING3. If not see
|
|
|
|
|
|
|
| -/* Used to create the variable mapping when we go out of SSA form.
|
| +/* Used to create the variable mapping when we go out of SSA form.
|
|
|
| Mapping from an ssa_name to a partition number is maintained, as well as
|
| partition number to back to ssa_name. A partition can also be represented
|
| - by a non-ssa_name variable. This allows ssa_names and their partition to
|
| + by a non-ssa_name variable. This allows ssa_names and their partition to
|
| be coalesced with live on entry compiler variables, as well as eventually
|
| - having real compiler variables assigned to each partition as part of the
|
| - final stage of going of of ssa.
|
| + having real compiler variables assigned to each partition as part of the
|
| + final stage of going of of ssa.
|
|
|
| Non-ssa_names maintain their partition index in the variable annotation.
|
|
|
| This data structure also supports "views", which work on a subset of all
|
| - partitions. This allows the coalescer to decide what partitions are
|
| + partitions. This allows the coalescer to decide what partitions are
|
| interesting to it, and only work with those partitions. Whenever the view
|
| is changed, the partition numbers change, but none of the partition groupings
|
| change. (ie, it is truly a view since it doesn't change anything)
|
| @@ -60,9 +60,6 @@ typedef struct _var_map
|
| int *partition_to_view;
|
| int *view_to_partition;
|
|
|
| - /* Mapping of partition numbers to variables. */
|
| - tree *partition_to_var;
|
| -
|
| /* Current number of partitions in var_map based on the current view. */
|
| unsigned int num_partitions;
|
|
|
| @@ -80,8 +77,6 @@ typedef struct _var_map
|
| } *var_map;
|
|
|
|
|
| -/* Partition number of a non ssa-name variable. */
|
| -#define VAR_ANN_PARTITION(ann) (ann->partition)
|
| /* Index to the basevar table of a non ssa-name variable. */
|
| #define VAR_ANN_BASE_INDEX(ann) (ann->base_index)
|
|
|
| @@ -93,7 +88,6 @@ extern var_map init_var_map (int);
|
| extern void delete_var_map (var_map);
|
| extern void dump_var_map (FILE *, var_map);
|
| extern int var_union (var_map, tree, tree);
|
| -extern void change_partition_var (var_map, tree, int);
|
| extern void partition_view_normal (var_map, bool);
|
| extern void partition_view_bitmap (var_map, bitmap, bool);
|
| #ifdef ENABLE_CHECKING
|
| @@ -110,23 +104,25 @@ num_var_partitions (var_map map)
|
| }
|
|
|
|
|
| -/* Given partition index I from MAP, return the variable which represents that
|
| +/* Given partition index I from MAP, return the variable which represents that
|
| partition. */
|
| -
|
| +
|
| static inline tree
|
| partition_to_var (var_map map, int i)
|
| {
|
| + tree name;
|
| if (map->view_to_partition)
|
| i = map->view_to_partition[i];
|
| i = partition_find (map->var_partition, i);
|
| - return map->partition_to_var[i];
|
| + name = ssa_name (i);
|
| + return name;
|
| }
|
|
|
|
|
| -/* Given ssa_name VERSION, if it has a partition in MAP, return the var it
|
| +/* Given ssa_name VERSION, if it has a partition in MAP, return the var it
|
| is associated with. Otherwise return NULL. */
|
|
|
| -static inline tree
|
| +static inline tree
|
| version_to_var (var_map map, int version)
|
| {
|
| int part;
|
| @@ -135,34 +131,23 @@ version_to_var (var_map map, int version)
|
| part = map->partition_to_view[part];
|
| if (part == NO_PARTITION)
|
| return NULL_TREE;
|
| -
|
| +
|
| return partition_to_var (map, part);
|
| }
|
| -
|
|
|
| -/* Given VAR, return the partition number in MAP which contains it.
|
| +
|
| +/* Given VAR, return the partition number in MAP which contains it.
|
| NO_PARTITION is returned if it's not in any partition. */
|
|
|
| static inline int
|
| var_to_partition (var_map map, tree var)
|
| {
|
| - var_ann_t ann;
|
| int part;
|
|
|
| - if (TREE_CODE (var) == SSA_NAME)
|
| - {
|
| - part = partition_find (map->var_partition, SSA_NAME_VERSION (var));
|
| - if (map->partition_to_view)
|
| - part = map->partition_to_view[part];
|
| - }
|
| - else
|
| - {
|
| - ann = var_ann (var);
|
| - if (ann && ann->out_of_ssa_tag)
|
| - part = VAR_ANN_PARTITION (ann);
|
| - else
|
| - part = NO_PARTITION;
|
| - }
|
| + gcc_assert (TREE_CODE (var) == SSA_NAME);
|
| + part = partition_find (map->var_partition, SSA_NAME_VERSION (var));
|
| + if (map->partition_to_view)
|
| + part = map->partition_to_view[part];
|
| return part;
|
| }
|
|
|
| @@ -187,7 +172,7 @@ var_to_partition_to_var (var_map map, tree var)
|
| static inline int
|
| basevar_index (var_map map, int partition)
|
| {
|
| - gcc_assert (partition >= 0
|
| + gcc_assert (partition >= 0
|
| && partition <= (int) num_var_partitions (map));
|
| return map->partition_to_base_index[partition];
|
| }
|
| @@ -203,40 +188,35 @@ num_basevars (var_map map)
|
|
|
|
|
|
|
| -/* This routine registers a partition for SSA_VAR with MAP. Any unregistered
|
| - partitions may be filtered out by a view later. */
|
| +/* This routine registers a partition for SSA_VAR with MAP. Any unregistered
|
| + partitions may be filtered out by a view later. */
|
|
|
| static inline void
|
| -register_ssa_partition (var_map map, tree ssa_var)
|
| +register_ssa_partition (var_map map ATTRIBUTE_UNUSED,
|
| + tree ssa_var ATTRIBUTE_UNUSED)
|
| {
|
| - int version;
|
| -
|
| #if defined ENABLE_CHECKING
|
| register_ssa_partition_check (ssa_var);
|
| #endif
|
| -
|
| - version = SSA_NAME_VERSION (ssa_var);
|
| - if (map->partition_to_var[version] == NULL_TREE)
|
| - map->partition_to_var[version] = ssa_var;
|
| }
|
|
|
|
|
| -/* ---------------- live on entry/exit info ------------------------------
|
| +/* ---------------- live on entry/exit info ------------------------------
|
|
|
| This structure is used to represent live range information on SSA based
|
| trees. A partition map must be provided, and based on the active partitions,
|
| live-on-entry information and live-on-exit information can be calculated.
|
| - As well, partitions are marked as to whether they are global (live
|
| + As well, partitions are marked as to whether they are global (live
|
| outside the basic block they are defined in).
|
|
|
| - The live-on-entry information is per block. It provide a bitmap for
|
| - each block which has a bit set for each partition that is live on entry to
|
| + The live-on-entry information is per block. It provide a bitmap for
|
| + each block which has a bit set for each partition that is live on entry to
|
| that block.
|
|
|
| The live-on-exit information is per block. It provides a bitmap for each
|
| block indicating which partitions are live on exit from the block.
|
|
|
| - For the purposes of this implementation, we treat the elements of a PHI
|
| + For the purposes of this implementation, we treat the elements of a PHI
|
| as follows:
|
|
|
| Uses in a PHI are considered LIVE-ON-EXIT to the block from which they
|
| @@ -245,9 +225,9 @@ register_ssa_partition (var_map map, tree ssa_var)
|
|
|
| The Def of a PHI node is *not* considered live on entry to the block.
|
| It is considered to be "define early" in the block. Picture it as each
|
| - block having a stmt (or block-preheader) before the first real stmt in
|
| + block having a stmt (or block-preheader) before the first real stmt in
|
| the block which defines all the variables that are defined by PHIs.
|
| -
|
| +
|
| ----------------------------------------------------------------------- */
|
|
|
|
|
| @@ -296,7 +276,7 @@ partition_is_global (tree_live_info_p live, int p)
|
| }
|
|
|
|
|
| -/* Return the bitmap from LIVE representing the live on entry blocks for
|
| +/* Return the bitmap from LIVE representing the live on entry blocks for
|
| partition P. */
|
|
|
| static inline bitmap
|
| @@ -326,7 +306,7 @@ live_on_exit (tree_live_info_p live, basic_block bb)
|
|
|
| /* Return the partition map which the information in LIVE utilizes. */
|
|
|
| -static inline var_map
|
| +static inline var_map
|
| live_var_map (tree_live_info_p live)
|
| {
|
| return live->map;
|
| @@ -336,7 +316,7 @@ live_var_map (tree_live_info_p live)
|
| /* Merge the live on entry information in LIVE for partitions P1 and P2. Place
|
| the result into P1. Clear P2. */
|
|
|
| -static inline void
|
| +static inline void
|
| live_merge_and_clear (tree_live_info_p live, int p1, int p2)
|
| {
|
| gcc_assert (live->livein[p1]);
|
| @@ -348,7 +328,7 @@ live_merge_and_clear (tree_live_info_p live, int p1, int p2)
|
|
|
| /* Mark partition P as live on entry to basic block BB in LIVE. */
|
|
|
| -static inline void
|
| +static inline void
|
| make_live_on_entry (tree_live_info_p live, basic_block bb , int p)
|
| {
|
| bitmap_set_bit (live->livein[bb->index], p);
|
| @@ -361,8 +341,8 @@ extern var_map coalesce_ssa_name (void);
|
|
|
|
|
| /* From tree-ssa-ter.c */
|
| -extern gimple *find_replaceable_exprs (var_map);
|
| -extern void dump_replaceable_exprs (FILE *, gimple *);
|
| +extern bitmap find_replaceable_exprs (var_map);
|
| +extern void dump_replaceable_exprs (FILE *, bitmap);
|
|
|
|
|
| #endif /* _TREE_SSA_LIVE_H */
|
|
|