summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/gimple.c38
-rw-r--r--gcc/tree-outof-ssa.h1
-rw-r--r--gcc/tree-ssa-coalesce.c41
-rw-r--r--gcc/tree-ssa-coalesce.h25
-rw-r--r--gcc/tree-ssa-live.h4
6 files changed, 74 insertions, 44 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8764f0dd2f3..8431db03726 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2013-10-01 Andrew MacLeod <amacleod@redhat.com>
+ * tree-ssa-live.h (coalesce_ssa_name): Move Prototype to...
+ * tree-ssa-coalesce.h: New. Move prototype to here.
+ * tree-outof-ssa.h: Include tree-ssa-coalesce.h.
+ * tree-ssa-coalesce.c: Include tree-outof-ssa.h.
+ (gimple_can_coalesce_p): Move to...
+ * gimple.c (gimple_can_coalesce_p): Here.
+
+2013-10-01 Andrew MacLeod <amacleod@redhat.com>
+
* tree-into-ssa.c (enum need_phi_state): Relocate from tree-flow.h.
(dump_decl_set): Move to gimple.c.
* gimple.h: Don't include tree-ssa-operands.h.
diff --git a/gcc/gimple.c b/gcc/gimple.c
index a75604fdad4..26c78c806b5 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -4380,4 +4380,42 @@ dump_decl_set (FILE *file, bitmap set)
fprintf (file, "NIL");
}
+/* Given SSA_NAMEs NAME1 and NAME2, return true if they are candidates for
+ coalescing together, false otherwise.
+
+ This must stay consistent with var_map_base_init in tree-ssa-live.c. */
+
+bool
+gimple_can_coalesce_p (tree name1, tree name2)
+{
+ /* First check the SSA_NAME's associated DECL. We only want to
+ coalesce if they have the same DECL or both have no associated DECL. */
+ tree var1 = SSA_NAME_VAR (name1);
+ tree var2 = SSA_NAME_VAR (name2);
+ var1 = (var1 && (!VAR_P (var1) || !DECL_IGNORED_P (var1))) ? var1 : NULL_TREE;
+ var2 = (var2 && (!VAR_P (var2) || !DECL_IGNORED_P (var2))) ? var2 : NULL_TREE;
+ if (var1 != var2)
+ return false;
+
+ /* Now check the types. If the types are the same, then we should
+ try to coalesce V1 and V2. */
+ tree t1 = TREE_TYPE (name1);
+ tree t2 = TREE_TYPE (name2);
+ if (t1 == t2)
+ return true;
+
+ /* If the types are not the same, check for a canonical type match. This
+ (for example) allows coalescing when the types are fundamentally the
+ same, but just have different names.
+
+ Note pointer types with different address spaces may have the same
+ canonical type. Those are rejected for coalescing by the
+ types_compatible_p check. */
+ if (TYPE_CANONICAL (t1)
+ && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2)
+ && types_compatible_p (t1, t2))
+ return true;
+
+ return false;
+}
#include "gt-gimple.h"
diff --git a/gcc/tree-outof-ssa.h b/gcc/tree-outof-ssa.h
index e44808e9f77..8c37f55ce50 100644
--- a/gcc/tree-outof-ssa.h
+++ b/gcc/tree-outof-ssa.h
@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-live.h"
#include "tree-ssa-ter.h"
+#include "tree-ssa-coalesce.h"
/* This structure (of which only a singleton SA exists) is used to
pass around information between the outof-SSA functions, cfgexpand
diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c
index 087272fe13a..2f5507ca8fc 100644
--- a/gcc/tree-ssa-coalesce.c
+++ b/gcc/tree-ssa-coalesce.c
@@ -29,7 +29,7 @@ along with GCC; see the file COPYING3. If not see
#include "dumpfile.h"
#include "tree-ssa.h"
#include "hash-table.h"
-#include "tree-ssa-live.h"
+#include "tree-outof-ssa.h"
#include "diagnostic-core.h"
@@ -1333,42 +1333,3 @@ coalesce_ssa_name (void)
return map;
}
-
-/* Given SSA_NAMEs NAME1 and NAME2, return true if they are candidates for
- coalescing together, false otherwise.
-
- This must stay consistent with var_map_base_init in tree-ssa-live.c. */
-
-bool
-gimple_can_coalesce_p (tree name1, tree name2)
-{
- /* First check the SSA_NAME's associated DECL. We only want to
- coalesce if they have the same DECL or both have no associated DECL. */
- tree var1 = SSA_NAME_VAR (name1);
- tree var2 = SSA_NAME_VAR (name2);
- var1 = (var1 && (!VAR_P (var1) || !DECL_IGNORED_P (var1))) ? var1 : NULL_TREE;
- var2 = (var2 && (!VAR_P (var2) || !DECL_IGNORED_P (var2))) ? var2 : NULL_TREE;
- if (var1 != var2)
- return false;
-
- /* Now check the types. If the types are the same, then we should
- try to coalesce V1 and V2. */
- tree t1 = TREE_TYPE (name1);
- tree t2 = TREE_TYPE (name2);
- if (t1 == t2)
- return true;
-
- /* If the types are not the same, check for a canonical type match. This
- (for example) allows coalescing when the types are fundamentally the
- same, but just have different names.
-
- Note pointer types with different address spaces may have the same
- canonical type. Those are rejected for coalescing by the
- types_compatible_p check. */
- if (TYPE_CANONICAL (t1)
- && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2)
- && types_compatible_p (t1, t2))
- return true;
-
- return false;
-}
diff --git a/gcc/tree-ssa-coalesce.h b/gcc/tree-ssa-coalesce.h
new file mode 100644
index 00000000000..6b2831fc537
--- /dev/null
+++ b/gcc/tree-ssa-coalesce.h
@@ -0,0 +1,25 @@
+/* Header file for tree-ssa-coalesce.c exports.
+ 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_SSA_COALESCE_H
+#define GCC_TREE_SSA_COALESCE_H
+
+extern var_map coalesce_ssa_name (void);
+
+#endif /* GCC_TREE_SSA_COALESCE_H */
diff --git a/gcc/tree-ssa-live.h b/gcc/tree-ssa-live.h
index 542f6a1944e..5d80d988711 100644
--- a/gcc/tree-ssa-live.h
+++ b/gcc/tree-ssa-live.h
@@ -321,8 +321,4 @@ make_live_on_entry (tree_live_info_p live, basic_block bb , int p)
bitmap_set_bit (live->global, p);
}
-
-/* From tree-ssa-coalesce.c */
-extern var_map coalesce_ssa_name (void);
-
#endif /* _TREE_SSA_LIVE_H */