2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-24 13:31:22 +08:00

ipa-cp: Avoid ICEs when looking at expanded thunks and unoptimized functions

2019-11-29  Martin Jambor  <mjambor@suse.cz>

	PR ipa/92476
	* ipa-cp.c (set_single_call_flag): Set node_calling_single_call in
	the summary only if the summary exists.
	(find_more_scalar_values_for_callers_subset): Check node_dead in
	the summary only if the summary exists.
	(ipcp_store_bits_results): Ignore nodes without lattices.
	(ipcp_store_vr_results): Likewise.
	* cgraphclones.c: Include ipa-fnsummary.h and ipa-prop.h and the
	header files required by them.
	(cgraph_node::expand_all_artificial_thunks): Analyze expanded thunks.

From-SVN: r278841
This commit is contained in:
Martin Jambor 2019-11-29 14:29:35 +01:00 committed by Martin Jambor
parent 3edaed3958
commit 68188fff88
3 changed files with 28 additions and 2 deletions

@ -1,3 +1,16 @@
2019-11-29 Martin Jambor <mjambor@suse.cz>
PR ipa/92476
* ipa-cp.c (set_single_call_flag): Set node_calling_single_call in
the summary only if the summary exists.
(find_more_scalar_values_for_callers_subset): Check node_dead in
the summary only if the summary exists.
(ipcp_store_bits_results): Ignore nodes without lattices.
(ipcp_store_vr_results): Likewise.
* cgraphclones.c: Include ipa-fnsummary.h and ipa-prop.h and the
header files required by them.
(cgraph_node::expand_all_artificial_thunks): Analyze expanded thunks.
2019-11-29 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/92710

@ -80,6 +80,11 @@ along with GCC; see the file COPYING3. If not see
#include "tree-inline.h"
#include "dumpfile.h"
#include "gimple-pretty-print.h"
#include "alloc-pool.h"
#include "symbol-summary.h"
#include "tree-vrp.h"
#include "ipa-prop.h"
#include "ipa-fnsummary.h"
/* Create clone of edge in the node N represented by CALL_EXPR
the callgraph. */
@ -268,6 +273,8 @@ cgraph_node::expand_all_artificial_thunks ()
{
thunk->thunk.thunk_p = false;
thunk->analyze ();
ipa_analyze_node (thunk);
inline_analyze_function (thunk);
}
thunk->expand_all_artificial_thunks ();
}

@ -1165,7 +1165,7 @@ set_single_call_flag (cgraph_node *node, void *)
/* Local thunks can be handled transparently, skip them. */
while (cs && cs->caller->thunk.thunk_p && cs->caller->local)
cs = cs->next_caller;
if (cs)
if (cs && IPA_NODE_REF (cs->caller))
{
IPA_NODE_REF (cs->caller)->node_calling_single_call = true;
return true;
@ -4417,7 +4417,7 @@ find_more_scalar_values_for_callers_subset (struct cgraph_node *node,
struct ipa_jump_func *jump_func;
tree t;
if (IPA_NODE_REF (cs->caller)->node_dead)
if (IPA_NODE_REF (cs->caller) && IPA_NODE_REF (cs->caller)->node_dead)
continue;
if (!IPA_EDGE_REF (cs)
@ -5422,6 +5422,9 @@ ipcp_store_bits_results (void)
if (info->ipcp_orig_node)
info = IPA_NODE_REF (info->ipcp_orig_node);
if (!info->lattices)
/* Newly expanded artificial thunks do not have lattices. */
continue;
unsigned count = ipa_get_param_count (info);
for (unsigned i = 0; i < count; i++)
@ -5495,6 +5498,9 @@ ipcp_store_vr_results (void)
if (info->ipcp_orig_node)
info = IPA_NODE_REF (info->ipcp_orig_node);
if (!info->lattices)
/* Newly expanded artificial thunks do not have lattices. */
continue;
unsigned count = ipa_get_param_count (info);
for (unsigned i = 0; i < count; i++)