alias.c (alias_stats): New static var.
authorJan Hubicka <hubicka@ucw.cz>
Thu, 21 May 2015 15:51:59 +0000 (17:51 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 21 May 2015 15:51:59 +0000 (15:51 +0000)
* alias.c (alias_stats): New static var.
(alias_sets_conflict_p, alias_sets_must_conflict_p): Update stats.
(dump_alias_stats_in_alias_c): New function.
* alias.h (dump_alias_stats_in_alias_c): Declare.
* tree-ssa-alias.c (dump_alias_stats): Call it.

From-SVN: r223491

gcc/ChangeLog
gcc/alias.c
gcc/alias.h
gcc/tree-ssa-alias.c

index 2474aa10ab000ca133d251269022b4d800917cc3..3ec725535a36baa6a11596230c31d63c09bf86a5 100644 (file)
@@ -1,3 +1,11 @@
+2015-05-08  Jan Hubicka  <hubicka@ucw.cz>
+
+       * alias.c (alias_stats): New static var.        
+       (alias_sets_conflict_p, alias_sets_must_conflict_p): Update stats.
+       (dump_alias_stats_in_alias_c): New function.
+       * alias.h (dump_alias_stats_in_alias_c): Declare.
+       * tree-ssa-alias.c (dump_alias_stats): Call it.
+
 2015-05-08  Michael Matz  <matz@suse.de>
 
        * tree-vectorizer.h (struct _stmt_vec_info): Rename stride_load_p
index 215ad63f6960ca5688121843049f67a85bf93a84..aa7dc21db8377be6e4f811e4098889ba73201b37 100644 (file)
@@ -213,6 +213,19 @@ static int write_dependence_p (const_rtx,
 
 static void memory_modified_1 (rtx, const_rtx, void *);
 
+/* Query statistics for the different low-level disambiguators.
+   A high-level query may trigger multiple of them.  */
+
+static struct {
+  unsigned long long num_alias_zero;
+  unsigned long long num_same_alias_set;
+  unsigned long long num_same_objects;
+  unsigned long long num_volatile;
+  unsigned long long num_dag;
+  unsigned long long num_disambiguated;
+} alias_stats;
+
+
 /* Set up all info needed to perform alias analysis on memory references.  */
 
 /* Returns the size in bytes of the mode of X.  */
@@ -471,13 +484,20 @@ alias_sets_conflict_p (alias_set_type set1, alias_set_type set2)
   ase = get_alias_set_entry (set1);
   if (ase != 0
       && ase->children->get (set2))
-    return 1;
+    {
+      ++alias_stats.num_dag;
+      return 1;
+    }
 
   /* Now do the same, but with the alias sets reversed.  */
   ase = get_alias_set_entry (set2);
   if (ase != 0
       && ase->children->get (set1))
-    return 1;
+    {
+      ++alias_stats.num_dag;
+      return 1;
+    }
+  ++alias_stats.num_disambiguated;
 
   /* The two alias sets are distinct and neither one is the
      child of the other.  Therefore, they cannot conflict.  */
@@ -489,8 +509,16 @@ alias_sets_conflict_p (alias_set_type set1, alias_set_type set2)
 int
 alias_sets_must_conflict_p (alias_set_type set1, alias_set_type set2)
 {
-  if (set1 == 0 || set2 == 0 || set1 == set2)
-    return 1;
+  if (set1 == 0 || set2 == 0)
+    {
+      ++alias_stats.num_alias_zero;
+      return 1;
+    }
+  if (set1 == set2)
+    {
+      ++alias_stats.num_same_alias_set;
+      return 1;
+    }
 
   return 0;
 }
@@ -512,10 +540,17 @@ objects_must_conflict_p (tree t1, tree t2)
     return 0;
 
   /* If they are the same type, they must conflict.  */
-  if (t1 == t2
-      /* Likewise if both are volatile.  */
-      || (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2)))
-    return 1;
+  if (t1 == t2)
+    {
+      ++alias_stats.num_same_objects;
+      return 1;
+    }
+  /* Likewise if both are volatile.  */
+  if (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2))
+    {
+      ++alias_stats.num_volatile;
+      return 1;
+    }
 
   set1 = t1 ? get_alias_set (t1) : 0;
   set2 = t2 ? get_alias_set (t2) : 0;
@@ -3043,4 +3078,21 @@ end_alias_analysis (void)
   sbitmap_free (reg_known_equiv_p);
 }
 
+void
+dump_alias_stats_in_alias_c (FILE *s)
+{
+  fprintf (s, "  TBAA oracle: %llu disambiguations %llu queries\n"
+             "               %llu are in alias set 0\n"
+             "               %llu queries asked about the same object\n"
+             "               %llu queries asked about the same alias set\n"
+             "               %llu access volatile\n"
+             "               %llu are dependent in the DAG\n",
+          alias_stats.num_disambiguated,
+          alias_stats.num_alias_zero + alias_stats.num_same_alias_set
+          + alias_stats.num_same_objects + alias_stats.num_volatile
+          + alias_stats.num_dag,
+          alias_stats.num_alias_zero, alias_stats.num_same_alias_set,
+          + alias_stats.num_same_objects, alias_stats.num_volatile,
+          + alias_stats.num_dag);
+}
 #include "gt-alias.h"
index 58fbcc518243cc5bedf940c7b40ec3ffcde882bd..04427b073f246d79d89634c76482bb4efc8651d5 100644 (file)
@@ -41,6 +41,7 @@ extern int alias_sets_conflict_p (alias_set_type, alias_set_type);
 extern int alias_sets_must_conflict_p (alias_set_type, alias_set_type);
 extern int objects_must_conflict_p (tree, tree);
 extern int nonoverlapping_memrefs_p (const_rtx, const_rtx, bool);
+extern void dump_alias_stats_in_alias_c (FILE *s);
 tree reference_alias_ptr_type (tree);
 bool alias_ptr_types_compatible_p (tree, tree);
 
index fa6caef21e185cac61cdbea24394a62ed21c0524..9184242a7ee6e6e157ce561252cd20c98d0c2eff 100644 (file)
@@ -163,6 +163,7 @@ dump_alias_stats (FILE *s)
           alias_stats.call_may_clobber_ref_p_no_alias,
           alias_stats.call_may_clobber_ref_p_no_alias
           + alias_stats.call_may_clobber_ref_p_may_alias);
+  dump_alias_stats_in_alias_c (s);
 }