tree-ssa-live.h (coalesce_ssa_name): Move Prototype to...
* 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. From-SVN: r203069
This commit is contained in:
parent
80560f9521
commit
1df9f5a998
@ -1,3 +1,12 @@
|
||||
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.
|
||||
|
38
gcc/gimple.c
38
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"
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
25
gcc/tree-ssa-coalesce.h
Normal file
25
gcc/tree-ssa-coalesce.h
Normal file
@ -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 */
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user