Commit 3ecf9d13 by Jan Hubicka Committed by Jan Hubicka

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
parent c7b70a3c
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> 2015-05-08 Michael Matz <matz@suse.de>
* tree-vectorizer.h (struct _stmt_vec_info): Rename stride_load_p * tree-vectorizer.h (struct _stmt_vec_info): Rename stride_load_p
......
...@@ -213,6 +213,19 @@ static int write_dependence_p (const_rtx, ...@@ -213,6 +213,19 @@ static int write_dependence_p (const_rtx,
static void memory_modified_1 (rtx, const_rtx, void *); 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. */ /* Set up all info needed to perform alias analysis on memory references. */
/* Returns the size in bytes of the mode of X. */ /* 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) ...@@ -471,13 +484,20 @@ alias_sets_conflict_p (alias_set_type set1, alias_set_type set2)
ase = get_alias_set_entry (set1); ase = get_alias_set_entry (set1);
if (ase != 0 if (ase != 0
&& ase->children->get (set2)) && ase->children->get (set2))
return 1; {
++alias_stats.num_dag;
return 1;
}
/* Now do the same, but with the alias sets reversed. */ /* Now do the same, but with the alias sets reversed. */
ase = get_alias_set_entry (set2); ase = get_alias_set_entry (set2);
if (ase != 0 if (ase != 0
&& ase->children->get (set1)) && 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 /* The two alias sets are distinct and neither one is the
child of the other. Therefore, they cannot conflict. */ child of the other. Therefore, they cannot conflict. */
...@@ -489,8 +509,16 @@ alias_sets_conflict_p (alias_set_type set1, alias_set_type set2) ...@@ -489,8 +509,16 @@ alias_sets_conflict_p (alias_set_type set1, alias_set_type set2)
int int
alias_sets_must_conflict_p (alias_set_type set1, alias_set_type set2) alias_sets_must_conflict_p (alias_set_type set1, alias_set_type set2)
{ {
if (set1 == 0 || set2 == 0 || set1 == set2) if (set1 == 0 || set2 == 0)
return 1; {
++alias_stats.num_alias_zero;
return 1;
}
if (set1 == set2)
{
++alias_stats.num_same_alias_set;
return 1;
}
return 0; return 0;
} }
...@@ -512,10 +540,17 @@ objects_must_conflict_p (tree t1, tree t2) ...@@ -512,10 +540,17 @@ objects_must_conflict_p (tree t1, tree t2)
return 0; return 0;
/* If they are the same type, they must conflict. */ /* If they are the same type, they must conflict. */
if (t1 == t2 if (t1 == t2)
/* Likewise if both are volatile. */ {
|| (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2))) ++alias_stats.num_same_objects;
return 1; 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; set1 = t1 ? get_alias_set (t1) : 0;
set2 = t2 ? get_alias_set (t2) : 0; set2 = t2 ? get_alias_set (t2) : 0;
...@@ -3043,4 +3078,21 @@ end_alias_analysis (void) ...@@ -3043,4 +3078,21 @@ end_alias_analysis (void)
sbitmap_free (reg_known_equiv_p); 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" #include "gt-alias.h"
...@@ -41,6 +41,7 @@ extern int alias_sets_conflict_p (alias_set_type, alias_set_type); ...@@ -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 alias_sets_must_conflict_p (alias_set_type, alias_set_type);
extern int objects_must_conflict_p (tree, tree); extern int objects_must_conflict_p (tree, tree);
extern int nonoverlapping_memrefs_p (const_rtx, const_rtx, bool); 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); tree reference_alias_ptr_type (tree);
bool alias_ptr_types_compatible_p (tree, tree); bool alias_ptr_types_compatible_p (tree, tree);
......
...@@ -163,6 +163,7 @@ dump_alias_stats (FILE *s) ...@@ -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_no_alias alias_stats.call_may_clobber_ref_p_no_alias
+ alias_stats.call_may_clobber_ref_p_may_alias); + alias_stats.call_may_clobber_ref_p_may_alias);
dump_alias_stats_in_alias_c (s);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment