IPA ICF: handle correctly indirect_calls.
authorMartin Liska <mliska@suse.cz>
Mon, 12 Jan 2015 09:59:39 +0000 (10:59 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Mon, 12 Jan 2015 09:59:39 +0000 (09:59 +0000)
* ipa-icf.c (sem_function::equals_wpa): Add indirect_calls as indication
that a function is not leaf.
(sem_function::compare_polymorphic_p): Likewise.

From-SVN: r219456

gcc/ChangeLog
gcc/ipa-icf.c

index 6c820cdd2409272dd10237a27ab5913b598a9ff9..3205cec4a95e3ffe9356bc1e0a3fb9c852cf64d6 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-12  Martin Liska  <mliska@suse.cz>
+
+       * ipa-icf.c (sem_function::equals_wpa): Add indirect_calls as indication
+       that a function is not leaf.
+       (sem_function::compare_polymorphic_p): Likewise.
+
 2015-01-12  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
 
        * config/visium/visium.c: Add includes hashtab.h, hash-set.h,
index 4ccaf8cb90f46460754fd2f619dc1dadbb59a273..9e2dea5397d6c5031b971428e0280b97548cdab3 100644 (file)
@@ -340,7 +340,8 @@ sem_function::equals_wpa (sem_item *item,
        return return_false_with_msg ("NULL argument type");
 
       /* Polymorphic comparison is executed just for non-leaf functions.  */
-      bool is_not_leaf = get_node ()->callees != NULL;
+      bool is_not_leaf = get_node ()->callees != NULL
+                        || get_node ()->indirect_calls != NULL;
 
       if (!func_checker::compatible_types_p (arg_types[i],
                                             m_compared_func->arg_types[i],
@@ -884,7 +885,9 @@ bool
 sem_function::compare_polymorphic_p (void)
 {
   return get_node ()->callees != NULL
-        || m_compared_func->get_node ()->callees != NULL;
+        || get_node ()->indirect_calls != NULL
+        || m_compared_func->get_node ()->callees != NULL
+        || m_compared_func->get_node ()->indirect_calls != NULL;
 }
 
 /* For a given call graph NODE, the function constructs new