diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2015-05-21 17:51:59 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2015-05-21 15:51:59 +0000 |
commit | 3ecf9d13a14e1ec6a383c668ce0f1c36e63bf587 (patch) | |
tree | c621772114f4a1e02dcd18ded6f7627816ae66e1 /gcc | |
parent | c7b70a3cba495e95f0d4457e6f003ca3d451d971 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/alias.c | 68 | ||||
-rw-r--r-- | gcc/alias.h | 1 | ||||
-rw-r--r-- | gcc/tree-ssa-alias.c | 1 |
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); } |