aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@gcc.gnu.org>2013-09-06 10:36:44 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2013-09-06 10:36:44 +0000
commit9e401b63cdc1e9b6c4ea47309e1ebdf5652164b5 (patch)
treea1ddfe75690ca0907c186d72de5de2d335a7e132 /gcc/tree-sra.c
parentc1d49770cb83fe768d4dac9cedaa31d59bc0ae28 (diff)
downloadgcc-9e401b63cdc1e9b6c4ea47309e1ebdf5652164b5.zip
gcc-9e401b63cdc1e9b6c4ea47309e1ebdf5652164b5.tar.gz
gcc-9e401b63cdc1e9b6c4ea47309e1ebdf5652164b5.tar.bz2
Makefile.in (tree-sra.o): Update dependencies.
* Makefile.in (tree-sra.o): Update dependencies. * tree-sra.c: Include ipa-utils.h (scan_function): Use recursive_call_p. (has_caller_p): New function. (cgraph_for_node_and_aliases): Count also callers of aliases. From-SVN: r202319
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 8e3bb81..7ed1668 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -91,6 +91,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-inline.h"
#include "gimple-pretty-print.h"
#include "ipa-inline.h"
+#include "ipa-utils.h"
/* Enumeration of all aggregate reductions we can do. */
enum sra_mode { SRA_MODE_EARLY_IPA, /* early call regularization */
@@ -1256,8 +1257,7 @@ scan_function (void)
if (DECL_BUILT_IN_CLASS (dest) == BUILT_IN_NORMAL
&& DECL_FUNCTION_CODE (dest) == BUILT_IN_APPLY_ARGS)
encountered_apply_args = true;
- if (cgraph_get_node (dest)
- == cgraph_get_node (current_function_decl))
+ if (recursive_call_p (current_function_decl, dest))
{
encountered_recursive_call = true;
if (!callsite_has_enough_arguments_p (stmt))
@@ -4906,6 +4906,16 @@ modify_function (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments)
return cfg_changed;
}
+/* If NODE has a caller, return true. */
+
+static bool
+has_caller_p (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED)
+{
+ if (node->callers)
+ return true;
+ return false;
+}
+
/* Return false the function is apparently unsuitable for IPA-SRA based on it's
attributes, return true otherwise. NODE is the cgraph node of the current
function. */
@@ -4949,7 +4959,7 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node)
return false;
}
- if (!node->callers)
+ if (!cgraph_for_node_and_aliases (node, has_caller_p, NULL, true))
{
if (dump_file)
fprintf (dump_file,