diff mbox series

Accumulate time in sreals consistently in ipa-fnsummary

Message ID 20171116165655.GF76038@kam.mff.cuni.cz
State New
Headers show
Series Accumulate time in sreals consistently in ipa-fnsummary | expand

Commit Message

Jan Hubicka Nov. 16, 2017, 4:56 p.m. UTC
Hi,
this patch drops use of integer bb frequencies in ipa-fnsummary.  This avoids
capping to 100 for frequency and makes it consistent with edge accounting.

ipcp-2.c needs updating becuase the cumulated time is now more realistic.
There is loop iterating 32*32 times and we accounted it as loop iteraitng 100
times.

Bootstrapped/regtested x86_64-linux. Comitted.

Honza

	* ipa-fnsummary.c (analyze_function_body): Accumulate time consistently
	in sreal.
	* gcc.dg/ipa/ipcp-2.c: Lower threshold.
diff mbox series

Patch

Index: ipa-fnsummary.c
===================================================================
--- ipa-fnsummary.c	(revision 254812)
+++ ipa-fnsummary.c	(working copy)
@@ -1986,7 +1986,7 @@  analyze_function_body (struct cgraph_nod
      <0,2>.  */
   basic_block bb;
   struct function *my_function = DECL_STRUCT_FUNCTION (node->decl);
-  int freq;
+  sreal freq;
   struct ipa_fn_summary *info = ipa_fn_summaries->get (node);
   predicate bb_predicate;
   struct ipa_func_body_info fbi;
@@ -2052,7 +2052,7 @@  analyze_function_body (struct cgraph_nod
   for (n = 0; n < nblocks; n++)
     {
       bb = BASIC_BLOCK_FOR_FN (cfun, order[n]);
-      freq = compute_call_stmt_bb_frequency (node->decl, bb);
+      freq = bb->count.to_sreal_scale (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count);
       if (clobber_only_eh_bb_p (bb))
 	{
 	  if (dump_file && (dump_flags & TDF_DETAILS))
@@ -2127,7 +2127,7 @@  analyze_function_body (struct cgraph_nod
 	      fprintf (dump_file, "  ");
 	      print_gimple_stmt (dump_file, stmt, 0);
 	      fprintf (dump_file, "\t\tfreq:%3.2f size:%3i time:%3i\n",
-		       ((double) freq) / CGRAPH_FREQ_BASE, this_size,
+		       freq.to_double (), this_size,
 		       this_time);
 	    }
 
@@ -2201,7 +2201,7 @@  analyze_function_body (struct cgraph_nod
 	    will_be_nonconstant = true;
 	  if (this_time || this_size)
 	    {
-	      this_time *= freq;
+	      sreal final_time = (sreal)this_time * freq;
 
 	      prob = eliminated_by_inlining_prob (stmt);
 	      if (prob == 1 && dump_file && (dump_flags & TDF_DETAILS))
@@ -2218,7 +2218,7 @@  analyze_function_body (struct cgraph_nod
 
 	      if (*(is_gimple_call (stmt) ? &bb_predicate : &p) != false)
 		{
-		  time += this_time;
+		  time += final_time;
 		  size += this_size;
 		}
 
@@ -2231,14 +2231,12 @@  analyze_function_body (struct cgraph_nod
 		    {
 		      predicate ip = bb_predicate & predicate::not_inlined ();
 		      info->account_size_time (this_size * prob,
-					       (sreal)(this_time * prob)
-					       / (CGRAPH_FREQ_BASE * 2), ip,
+					       (this_time * prob) / 2, ip,
 					       p);
 		    }
 		  if (prob != 2)
 		    info->account_size_time (this_size * (2 - prob),
-					     (sreal)(this_time * (2 - prob))
-					      / (CGRAPH_FREQ_BASE * 2),
+					     (this_time * (2 - prob) / 2),
 					     bb_predicate,
 					     p);
 		}
@@ -2256,7 +2254,6 @@  analyze_function_body (struct cgraph_nod
 	}
     }
   set_hint_predicate (&ipa_fn_summaries->get (node)->array_index, array_index);
-  time = time / CGRAPH_FREQ_BASE;
   free (order);
 
   if (nonconstant_names.exists () && !early)
Index: testsuite/gcc.dg/ipa/ipcp-2.c
===================================================================
--- testsuite/gcc.dg/ipa/ipcp-2.c	(revision 254812)
+++ testsuite/gcc.dg/ipa/ipcp-2.c	(working copy)
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining --param ipa-cp-eval-threshold=100"  } */
+/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining --param ipa-cp-eval-threshold=80"  } */
 /* { dg-add-options bind_pic_locally } */
 
 extern int get_stuff (int);