On 03/30/2015 07:03 PM, Jan Hubicka wrote:
Hello.
Following patch fixed the issue, where we have to check if function summary
for IPA CP has been already created.
Tested on x86_64-linux-pc w/o any new regression introduced.
Ready for trunk?
Thanks,
Martin
>From c33680093e67328863836a845e847bf1b1b23d0e Mon Sep 17 00:00:00 2001
From: mliska <mli...@suse.cz>
Date: Sun, 29 Mar 2015 20:20:33 +0200
Subject: [PATCH] Fix PR65557.
gcc/ChangeLog:
2015-03-29 Martin Liska <mli...@suse.cz>
PR ipa/65557
* ipa-icf.c (sem_function::equals_wpa): Check if IPA CP
has already filled up function summary.
OK, there is one extra occurence of flag_ipa_cp test, so please update it
consistently.
Honza
Hi.
You are right, there's one more occurrence of the usage.
I'm going to install the patch I've attached.
Thanks,
Martin
>From d27d5c159b28922858a6f99dc81c1a3e64ea8230 Mon Sep 17 00:00:00 2001
From: mliska <mli...@suse.cz>
Date: Sun, 29 Mar 2015 20:20:33 +0200
Subject: [PATCH] Fix PR65557.
gcc/ChangeLog:
2015-03-29 Martin Liska <mli...@suse.cz>
PR ipa/65557
* ipa-icf.c (sem_function::equals_wpa): Check if IPA CP
has already filled up function summary.
(sem_item_optimizer::update_hash_by_addr_refs): Likewise.
gcc/testsuite/ChangeLog:
2015-03-29 Martin Liska <mli...@suse.cz>
* g++.dg/ipa/pr65557.C: New test.
---
gcc/ipa-icf.c | 4 ++--
gcc/testsuite/g++.dg/ipa/pr65557.C | 19 +++++++++++++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
create mode 100644 gcc/testsuite/g++.dg/ipa/pr65557.C
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index ad868e1..8626730 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -534,7 +534,7 @@ sem_function::equals_wpa (sem_item *item,
if (opt_for_fn (decl, flag_devirtualize)
&& (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
|| TREE_CODE (TREE_TYPE (item->decl)) == METHOD_TYPE)
- && (!flag_ipa_cp
+ && (ipa_node_params_sum == NULL
|| ipa_is_param_used (IPA_NODE_REF (dyn_cast <cgraph_node *>(node)),
0))
&& compare_polymorphic_p ())
@@ -2505,7 +2505,7 @@ sem_item_optimizer::update_hash_by_addr_refs ()
&& contains_polymorphic_type_p
(method_class_type (TREE_TYPE (m_items[i]->decl)))
&& (DECL_CXX_CONSTRUCTOR_P (m_items[i]->decl)
- || ((!flag_ipa_cp
+ || ((ipa_node_params_sum == NULL
|| ipa_is_param_used (
IPA_NODE_REF
(dyn_cast <cgraph_node *>(m_items[i]->node)), 0))
diff --git a/gcc/testsuite/g++.dg/ipa/pr65557.C b/gcc/testsuite/g++.dg/ipa/pr65557.C
new file mode 100644
index 0000000..2250bb0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr65557.C
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-icf-details" } */
+
+struct S0
+{
+ S0 ()
+ {
+ }
+};
+
+struct S1
+{
+ S1 ()
+ {
+ }
+};
+
+S0 s0;
+S1 s1;
--
2.1.4