diff mbox series

cleanup RTL loop insns accounting

Message ID 20171116103733.GD69347@kam.mff.cuni.cz
State New
Headers show
Series cleanup RTL loop insns accounting | expand

Commit Message

Jan Hubicka Nov. 16, 2017, 10:37 a.m. UTC
Hi,
this patch removes frequencies from RTL loop accounting.

Honza

	* cfgloopanal.c: Include sreal.h
	(average_num_loop_insns): Use counts and sreal for accounting.
diff mbox series

Patch

Index: cfgloopanal.c
===================================================================
--- cfgloopanal.c	(revision 254767)
+++ cfgloopanal.c	(working copy)
@@ -31,6 +31,7 @@  along with GCC; see the file COPYING3.
 #include "expr.h"
 #include "graphds.h"
 #include "params.h"
+#include "sreal.h"
 
 struct target_cfgloop default_target_cfgloop;
 #if SWITCHABLE_TARGET
@@ -199,7 +200,8 @@  int
 average_num_loop_insns (const struct loop *loop)
 {
   basic_block *bbs, bb;
-  unsigned i, binsns, ninsns, ratio;
+  unsigned i, binsns;
+  sreal ninsns;
   rtx_insn *insn;
 
   ninsns = 0;
@@ -213,19 +215,18 @@  average_num_loop_insns (const struct loo
 	if (NONDEBUG_INSN_P (insn))
 	  binsns++;
 
-      ratio = loop->header->count.to_frequency (cfun) == 0
-	      ? BB_FREQ_MAX
-	      : (bb->count.to_frequency (cfun) * BB_FREQ_MAX)
-		 / loop->header->count.to_frequency (cfun);
-      ninsns += binsns * ratio;
+      ninsns += (sreal)binsns * bb->count.to_sreal_scale (loop->header->count);
+      /* Avoid overflows.   */
+      if (ninsns > 1000000)
+	return 100000;
     }
   free (bbs);
 
-  ninsns /= BB_FREQ_MAX;
-  if (!ninsns)
-    ninsns = 1; /* To avoid division by zero.  */
+  int64_t ret = ninsns.to_int ();
+  if (!ret)
+    ret = 1; /* To avoid division by zero.  */
 
-  return ninsns;
+  return ret;
 }
 
 /* Returns expected number of iterations of LOOP, according to