+2013-09-12 Andrew MacLeod <amacleod@redhat.com>
+
+ * 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.
+
2013-09-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/58404
$(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)
+ $(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)
$(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 \
}
-/* 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
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
{
!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. */
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) \
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));
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 *);
#define GCC_TREE_SSA_H
#include "tree-flow.h"
+#include "tree-ssanames.h"
/* Mapping for redirected edges. */
struct _edge_var_map {
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. */
--- /dev/null
+/* 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 */