* tree-flow.h (FREE_SSANAMES): Move to tree-ssanames.c
(SSANAMES, MODIFIED_NORETURN_CALLS, DEFAULT_DEFS, ptr_info_def,
num_ssa_names, ssa_name): Move to tree-ssanames.h + prototypes.
* tree-flow-inline.h (make_ssa_name, copy_ssa_name, duplicate_ssa_name,
make_temp_ssa_name): move to tree-ssanames.h
* tree-ssa-alias.h: Move prototype.
* tree-ssa.h: Include tree-ssanames.h.
* tree-ssanames.c (FREE_SSANAMES): Move to here.
* tree-ssanames.h: New. Move items from tree-flow*.h
* Makefile.in (tree-ssanames.h): Add to tree-ssanames.o and GTFILES.
*************** struct GTY(()) gimple_df {
htab_t GTY ((param_is (struct tm_restart_node))) tm_restart;
};
- /* Accessors for internal use only. Generic code should use abstraction
- provided by tree-flow-inline.h or specific modules. */
- #define FREE_SSANAMES(fun) (fun)->gimple_df->free_ssanames
- #define SSANAMES(fun) (fun)->gimple_df->ssa_names
- #define MODIFIED_NORETURN_CALLS(fun) (fun)->gimple_df->modified_noreturn_calls
- #define DEFAULT_DEFS(fun) (fun)->gimple_df->default_defs
typedef struct
{
*************** typedef struct
!end_htab_p (&(ITER)); \
RESULT = (TYPE) next_htab_element (&(ITER)))
- /*---------------------------------------------------------------------------
- Attributes for SSA_NAMEs.
-
- NOTE: These structures are stored in struct tree_ssa_name
- but are only used by the tree optimizers, so it makes better sense
- to declare them here to avoid recompiling unrelated files when
- making changes.
- ---------------------------------------------------------------------------*/
-
- /* Aliasing information for SSA_NAMEs representing pointer variables. */
-
- struct GTY(()) ptr_info_def
- {
- /* The points-to solution. */
- struct pt_solution pt;
-
- /* Alignment and misalignment of the pointer in bytes. Together
- align and misalign specify low known bits of the pointer.
- ptr & (align - 1) == misalign. */
-
- /* When known, this is the power-of-two byte alignment of the object this
- pointer points into. This is usually DECL_ALIGN_UNIT for decls and
- MALLOC_ABI_ALIGNMENT for allocated storage. When the alignment is not
- known, it is zero. Do not access directly but use functions
- get_ptr_info_alignment, set_ptr_info_alignment,
- mark_ptr_info_alignment_unknown and similar. */
- unsigned int align;
-
- /* When alignment is known, the byte offset this pointer differs from the
- above alignment. Access only through the same helper functions as align
- above. */
- unsigned int misalign;
- };
-
-
/* It is advantageous to avoid things like life analysis for variables which
do not need PHI nodes. This enum describes whether or not a particular
variable may need a PHI node. */
*************** struct int_tree_map {
tree to;
};
- #define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names))
- #define ssa_name(i) ((*cfun->gimple_df->ssa_names)[(i)])
-
/* Macros for showing usage statistics. */
#define SCALE(x) ((unsigned long) ((x) < 1024*10 \
? (x) \
*************** void mark_virtual_operands_for_renaming
tree get_current_def (tree);
void set_current_def (tree, tree);
- /* In tree-ssanames.c */
- extern void init_ssanames (struct function *, int);
- extern void fini_ssanames (void);
- extern tree make_ssa_name_fn (struct function *, tree, gimple);
- extern tree copy_ssa_name_fn (struct function *, tree, gimple);
- extern tree duplicate_ssa_name_fn (struct function *, tree, gimple);
- extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
- extern void release_ssa_name (tree);
- extern void release_defs (gimple);
- extern void replace_ssa_name_symbol (tree, tree);
- extern bool get_ptr_info_alignment (struct ptr_info_def *, unsigned int *,
- unsigned int *);
- extern void mark_ptr_info_alignment_unknown (struct ptr_info_def *);
- extern void set_ptr_info_alignment (struct ptr_info_def *, unsigned int,
- unsigned int);
- extern void adjust_ptr_info_misalignment (struct ptr_info_def *,
- unsigned int);
-
- extern void ssanames_print_statistics (void);
-
/* In tree-ssa-ccp.c */
tree fold_const_aggregate_ref (tree);
tree gimple_fold_stmt_to_constant (gimple, tree (*)(tree));
*************** gimple_ssa_operands (const struct functi
}
- /* Return an SSA_NAME node for variable VAR defined in statement STMT
- in function cfun. */
-
- static inline tree
- make_ssa_name (tree var, gimple stmt)
- {
- return make_ssa_name_fn (cfun, var, stmt);
- }
-
- /* Return an SSA_NAME node using the template SSA name NAME defined in
- statement STMT in function cfun. */
-
- static inline tree
- copy_ssa_name (tree var, gimple stmt)
- {
- return copy_ssa_name_fn (cfun, var, stmt);
- }
-
- /* Creates a duplicate of a SSA name NAME tobe defined by statement STMT
- in function cfun. */
-
- static inline tree
- duplicate_ssa_name (tree var, gimple stmt)
- {
- return duplicate_ssa_name_fn (cfun, var, stmt);
- }
-
- /* Return an anonymous SSA_NAME node for type TYPE defined in statement STMT
- in function cfun. Arrange so that it uses NAME in dumps. */
-
- static inline tree
- make_temp_ssa_name (tree type, gimple stmt, const char *name)
- {
- tree ssa_name;
- gcc_checking_assert (TYPE_P (type));
- ssa_name = make_ssa_name_fn (cfun, type, stmt);
- SET_SSA_NAME_VAR_OR_IDENTIFIER (ssa_name, get_identifier (name));
- return ssa_name;
- }
-
/* Returns the base object and a constant BITS_PER_UNIT offset in *POFFSET that
denotes the starting address of the memory access EXP.
Returns NULL_TREE if the offset is not constant or any component
*************** extern void *walk_non_aliased_vuses (ao_
extern unsigned int walk_aliased_vdefs (ao_ref *, tree,
bool (*)(ao_ref *, tree, void *),
void *, bitmap *);
- extern struct ptr_info_def *get_ptr_info (tree);
extern void dump_alias_info (FILE *);
extern void debug_alias_info (void);
extern void dump_points_to_solution (FILE *, struct pt_solution *);
*************** along with GCC; see the file COPYING3.
#define GCC_TREE_SSA_H
#include "tree-flow.h"
+ #include "tree-ssanames.h"
/* Mapping for redirected edges. */
struct _edge_var_map {
*************** along with GCC; see the file COPYING3.
unsigned int ssa_name_nodes_reused;
unsigned int ssa_name_nodes_created;
+ #define FREE_SSANAMES(fun) (fun)->gimple_df->free_ssanames
+
+
/* Initialize management of SSA_NAMEs to default SIZE. If SIZE is
zero use default. */
***************
+ /* SSA name expresssons routines
+ Copyright (C) 2013 Free Software Foundation, Inc.
+
+ 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/>. */
+
+ #ifndef GCC_TREE_SSANAMES_H
+ #define GCC_TREE_SSANAMES_H
+
+ /* Aliasing information for SSA_NAMEs representing pointer variables. */
+
+ struct GTY(()) ptr_info_def
+ {
+ /* The points-to solution. */
+ struct pt_solution pt;
+
+ /* Alignment and misalignment of the pointer in bytes. Together
+ align and misalign specify low known bits of the pointer.
+ ptr & (align - 1) == misalign. */
+
+ /* When known, this is the power-of-two byte alignment of the object this
+ pointer points into. This is usually DECL_ALIGN_UNIT for decls and
+ MALLOC_ABI_ALIGNMENT for allocated storage. When the alignment is not
+ known, it is zero. Do not access directly but use functions
+ get_ptr_info_alignment, set_ptr_info_alignment,
+ mark_ptr_info_alignment_unknown and similar. */
+ unsigned int align;
+
+ /* When alignment is known, the byte offset this pointer differs from the
+ above alignment. Access only through the same helper functions as align
+ above. */
+ unsigned int misalign;
+ };
+
+
+ #define SSANAMES(fun) (fun)->gimple_df->ssa_names
+ #define MODIFIED_NORETURN_CALLS(fun) (fun)->gimple_df->modified_noreturn_calls
+ #define DEFAULT_DEFS(fun) (fun)->gimple_df->default_defs
+
+ #define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names))
+ #define ssa_name(i) ((*cfun->gimple_df->ssa_names)[(i)])
+
+
+ extern void init_ssanames (struct function *, int);
+ extern void fini_ssanames (void);
+ extern void ssanames_print_statistics (void);
+ extern tree make_ssa_name_fn (struct function *, tree, gimple);
+ extern void release_ssa_name (tree);
+ extern bool get_ptr_info_alignment (struct ptr_info_def *, unsigned int *,
+ unsigned int *);
+ extern void mark_ptr_info_alignment_unknown (struct ptr_info_def *);
+ extern void set_ptr_info_alignment (struct ptr_info_def *, unsigned int,
+ unsigned int);
+ extern void adjust_ptr_info_misalignment (struct ptr_info_def *,
+ unsigned int);
+ extern struct ptr_info_def *get_ptr_info (tree);
+
+ extern tree copy_ssa_name_fn (struct function *, tree, gimple);
+ extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
+ extern tree duplicate_ssa_name_fn (struct function *, tree, gimple);
+ extern void release_defs (gimple);
+ extern void replace_ssa_name_symbol (tree, tree);
+
+
+ /* Return an SSA_NAME node for variable VAR defined in statement STMT
+ in function cfun. */
+
+ static inline tree
+ make_ssa_name (tree var, gimple stmt)
+ {
+ return make_ssa_name_fn (cfun, var, stmt);
+ }
+
+ /* Return an SSA_NAME node using the template SSA name NAME defined in
+ statement STMT in function cfun. */
+
+ static inline tree
+ copy_ssa_name (tree var, gimple stmt)
+ {
+ return copy_ssa_name_fn (cfun, var, stmt);
+ }
+
+ /* Creates a duplicate of a SSA name NAME tobe defined by statement STMT
+ in function cfun. */
+
+ static inline tree
+ duplicate_ssa_name (tree var, gimple stmt)
+ {
+ return duplicate_ssa_name_fn (cfun, var, stmt);
+ }
+
+ /* Return an anonymous SSA_NAME node for type TYPE defined in statement STMT
+ in function cfun. Arrange so that it uses NAME in dumps. */
+
+ static inline tree
+ make_temp_ssa_name (tree type, gimple stmt, const char *name)
+ {
+ tree ssa_name;
+ gcc_checking_assert (TYPE_P (type));
+ ssa_name = make_ssa_name_fn (cfun, type, stmt);
+ SET_SSA_NAME_VAR_OR_IDENTIFIER (ssa_name, get_identifier (name));
+ return ssa_name;
+ }
+
+
+ #endif /* GCC_TREE_SSANAMES_H */
*************** tree-ssa-threadupdate.o : tree-ssa-threa
$(DIAGNOSTIC_H) $(FUNCTION_H) $(TM_H) coretypes.h $(DUMPFILE_H) \
$(BASIC_BLOCK_H) $(FLAGS_H) $(CFGLOOP_H)
tree-ssanames.o : tree-ssanames.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
! $(TM_H) $(TREE_H) $(TREE_SSA_H) $(TREE_PASS_H)
tree-phinodes.o : tree-phinodes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(TREE_H) $(GGC_H) $(BASIC_BLOCK_H) $(TREE_SSA_H) \
gt-tree-phinodes.h $(DIAGNOSTIC_CORE_H) $(GIMPLE_H)
$(DIAGNOSTIC_H) $(FUNCTION_H) $(TM_H) coretypes.h $(DUMPFILE_H) \
$(BASIC_BLOCK_H) $(FLAGS_H) $(CFGLOOP_H)
tree-ssanames.o : tree-ssanames.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
! $(TM_H) $(TREE_H) $(TREE_SSA_H) $(TREE_PASS_H) tree-ssanames.h
tree-phinodes.o : tree-phinodes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(TREE_H) $(GGC_H) $(BASIC_BLOCK_H) $(TREE_SSA_H) \
gt-tree-phinodes.h $(DIAGNOSTIC_CORE_H) $(GIMPLE_H)
*************** GTFILES = $(CPP_ID_DATA_H) $(srcdir)/inp
$(srcdir)/tree-ssa-propagate.c \
$(srcdir)/tree-phinodes.c \
$(srcdir)/tree-ssa-alias.h \
+ $(srcdir)/tree-ssanames.h \
$(srcdir)/ipa-prop.h \
$(srcdir)/trans-mem.c \
$(srcdir)/lto-streamer.h \