aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2010-01-04 19:18:54 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2010-01-04 19:18:54 +0100
commit438789ffe3864516f7b30b532894b2e64f016165 (patch)
treef5165a7f5cc72d4605f0b8c609a2d76f7cac6b73 /gcc
parent7710285472acd5ade9589ef6d34cafa3306e9277 (diff)
downloadgcc-438789ffe3864516f7b30b532894b2e64f016165.zip
gcc-438789ffe3864516f7b30b532894b2e64f016165.tar.gz
gcc-438789ffe3864516f7b30b532894b2e64f016165.tar.bz2
re PR tree-optimization/42366 (ICE in ipa_write_node_info, at ipa-prop.c:2023)
2010-01-04 Martin Jambor <mjambor@suse.cz> PR tree-optimization/42366 * ipa-cp.c (ipcp_init_stage): Always call ipa_compute_jump_functions on edges with variable number of parameters. * ipa-prop.c (ipa_write_node_info): Stream out uses_analysis_done flag instead of asserting it. (ipa_read_node_info): Read uses_analysis_done flag. From-SVN: r155630
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/ipa-cp.c11
-rw-r--r--gcc/ipa-prop.c3
3 files changed, 13 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ad67466..a3ada17 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2010-01-04 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/42366
+ * ipa-cp.c (ipcp_init_stage): Always call ipa_compute_jump_functions on
+ edges with variable number of parameters.
+ * ipa-prop.c (ipa_write_node_info): Stream out uses_analysis_done
+ flag instead of asserting it.
+ (ipa_read_node_info): Read uses_analysis_done flag.
+
2010-01-04 Richard Guenther <rguenther@suse.de>
* tree-ssa-sccvn.c (vn_reference_op_compute_hash): Use
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index b6e4712..66de8db 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -633,15 +633,8 @@ ipcp_init_stage (void)
ipa_count_arguments (cs);
if (ipa_get_cs_argument_count (IPA_EDGE_REF (cs))
!= ipa_get_param_count (IPA_NODE_REF (cs->callee)))
- {
- /* Handle cases of functions with
- a variable number of parameters. */
- ipa_set_called_with_variable_arg (IPA_NODE_REF (cs->callee));
- if (flag_indirect_inlining)
- ipa_compute_jump_functions (cs);
- }
- else
- ipa_compute_jump_functions (cs);
+ ipa_set_called_with_variable_arg (IPA_NODE_REF (cs->callee));
+ ipa_compute_jump_functions (cs);
}
}
}
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 9387f0e..9fbd9d8 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -2018,9 +2018,9 @@ ipa_write_node_info (struct output_block *ob, struct cgraph_node *node)
bp = bitpack_create ();
bp_pack_value (bp, info->called_with_var_arguments, 1);
+ bp_pack_value (bp, info->uses_analysis_done, 1);
gcc_assert (info->modification_analysis_done
|| ipa_get_param_count (info) == 0);
- gcc_assert (info->uses_analysis_done || ipa_get_param_count (info) == 0);
gcc_assert (!info->node_enqueued);
gcc_assert (!info->ipcp_orig_node);
for (j = 0; j < ipa_get_param_count (info); j++)
@@ -2063,6 +2063,7 @@ ipa_read_node_info (struct lto_input_block *ib, struct cgraph_node *node,
bp = lto_input_bitpack (ib);
info->called_with_var_arguments = bp_unpack_value (bp, 1);
+ info->uses_analysis_done = bp_unpack_value (bp, 1);
if (ipa_get_param_count (info) != 0)
{
info->modification_analysis_done = true;