diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b45cd01b68cb5ee2f485174dc7273477270610bc..e5d00ec3bead7ac8cad2d8459ac348b996da46a2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-05-23 Jan Hubicka <hubicka@ucw.cz> + + * ipa-fnsummary.c (estimate_node_size_and_time): Do not sanity check + that nonconst implies exec. + 2017-05-23 Jan Hubicka <hubicka@ucw.cz> * ipa-inline-analysis.c (cgraph_2edge_hook_list, cgraph_edge_hook_list, diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c index d9006d1e21893c0467046cec676670859e7fd820..0a5abb54780457c8f764d6487694ad21bdee757d 100644 --- a/gcc/ipa-fnsummary.c +++ b/gcc/ipa-fnsummary.c @@ -2738,11 +2738,14 @@ estimate_node_size_and_time (struct cgraph_node *node, for (i = 0; vec_safe_iterate (info->size_time_table, i, &e); i++) { - bool nonconst = e->nonconst_predicate.evaluate (possible_truths); bool exec = e->exec_predicate.evaluate (nonspec_possible_truths); - gcc_assert (!nonconst || exec); + + /* Because predicates are conservative, it can happen that nonconst is 1 + but exec is 0. */ if (exec) { + bool nonconst = e->nonconst_predicate.evaluate (possible_truths); + gcc_checking_assert (e->time >= 0); gcc_checking_assert (time >= 0);