aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2015-05-21 17:51:59 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2015-05-21 15:51:59 +0000
commit3ecf9d13a14e1ec6a383c668ce0f1c36e63bf587 (patch)
treec621772114f4a1e02dcd18ded6f7627816ae66e1 /gcc
parentc7b70a3cba495e95f0d4457e6f003ca3d451d971 (diff)
downloadgcc-3ecf9d13a14e1ec6a383c668ce0f1c36e63bf587.zip
gcc-3ecf9d13a14e1ec6a383c668ce0f1c36e63bf587.tar.gz
gcc-3ecf9d13a14e1ec6a383c668ce0f1c36e63bf587.tar.bz2
alias.c (alias_stats): New static var.
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/alias.c68
-rw-r--r--gcc/alias.h1
-rw-r--r--gcc/tree-ssa-alias.c1
4 files changed, 70 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2474aa1..3ec7255 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/alias.c b/gcc/alias.c
index 215ad63..aa7dc21 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -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"
diff --git a/gcc/alias.h b/gcc/alias.h
index 58fbcc5..04427b0 100644
--- a/gcc/alias.h
+++ b/gcc/alias.h
@@ -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);
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index fa6caef..9184242a 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -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);
}