aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ipa-fnsummary.c7
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b45cd01..e5d00ec 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
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,
inline_edge_removal_hook, inline_edge_duplication_hook): Remove.
(inline_edge_summary_vec): Turn into ...
diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c
index d9006d1..0a5abb5 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);