Optimize streaming in inline summaries
diff mbox series

Message ID 20191103160100.floeihhlggpnkkb5@kam.mff.cuni.cz
State New
Headers show
Series
  • Optimize streaming in inline summaries
Related show

Commit Message

Jan Hubicka Nov. 3, 2019, 4:01 p.m. UTC
Hi,
this patch makes inline_read_sections to allocate vector in proper size
saving bit of register scaling overhead.

Bootstrapped/regtested x86_64-linux, comitted.

	* ipa-fnsummary.c (inline_read_section): Set vector size
	ahead of time.

Patch
diff mbox series

Index: ipa-fnsummary.c
===================================================================
--- ipa-fnsummary.c	(revision 277754)
+++ ipa-fnsummary.c	(working copy)
@@ -3614,6 +3614,8 @@  inline_read_section (struct lto_file_dec
 
       count2 = streamer_read_uhwi (&ib);
       gcc_assert (!info || !info->conds);
+      if (info)
+        vec_safe_reserve_exact (info->conds, count2);
       for (j = 0; j < count2; j++)
 	{
 	  struct condition c;
@@ -3627,8 +3629,10 @@  inline_read_section (struct lto_file_dec
 	  c.by_ref = bp_unpack_value (&bp, 1);
 	  if (c.agg_contents)
 	    c.offset = streamer_read_uhwi (&ib);
-	  c.param_ops = NULL;
 	  count3 = streamer_read_uhwi (&ib);
+	  c.param_ops = NULL;
+	  if (info)
+	    vec_safe_reserve_exact (c.param_ops, count3);
 	  for (k = 0; k < count3; k++)
 	    {
 	      struct expr_eval_op op;
@@ -3658,13 +3662,16 @@  inline_read_section (struct lto_file_dec
 		  fatal_error (UNKNOWN_LOCATION,
 			       "invalid fnsummary in LTO stream");
 		}
-	      vec_safe_push (c.param_ops, op);
+	      if (info)
+	        c.param_ops->quick_push (op);
 	    }
 	  if (info)
-	    vec_safe_push (info->conds, c);
+	    info->conds->quick_push (c);
 	}
       count2 = streamer_read_uhwi (&ib);
       gcc_assert (!info || !info->size_time_table);
+      if (info && count2)
+        vec_safe_reserve_exact (info->size_time_table, count2);
       for (j = 0; j < count2; j++)
 	{
 	  class size_time_entry e;
@@ -3675,7 +3682,7 @@  inline_read_section (struct lto_file_dec
 	  e.nonconst_predicate.stream_in (&ib);
 
 	  if (info)
-	    vec_safe_push (info->size_time_table, e);
+	    info->size_time_table->quick_push (e);
 	}
 
       p.stream_in (&ib);