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);