Message ID | 562E1BF2.7060304@mentor.com |
---|---|
State | New |
Headers | show |
On Mon, Oct 26, 2015 at 1:26 PM, Tom de Vries <Tom_deVries@mentor.com> wrote: > Hi, > > After spending some time looking at ealias/pta dumps, I realized that > they're hard to understand because we use varinfo names to identify > varinfos, while those names are not necessarily unique. > > F.i., for a function f: > ... > void > f (int *__restrict__ a, int *__restrict__ b) > { > *a = 1; > *b = 2; > } > ... > > we have at ealias the constraints: > ... > a = &PARM_NOALIAS > PARM_NOALIAS = NONLOCAL > b = &PARM_NOALIAS > PARM_NOALIAS = NONLOCAL > derefaddrtmp = &NONLOCAL > *a = derefaddrtmp > derefaddrtmp = &NONLOCAL > *b = derefaddrtmp > ... > F.i. PARM_NOALIAS occurs several times, and it's not clear if there are one > or two varinfos with that name. > > Using attached patch, it's clearer what varinfos the constraints relate to: > ... > a(8) = &PARM_NOALIAS(9) > PARM_NOALIAS(9) = NONLOCAL(5) > b(10) = &PARM_NOALIAS(11) > PARM_NOALIAS(11) = NONLOCAL(5) > derefaddrtmp(12) = &NONLOCAL(5) > *a(8) = derefaddrtmp(12) > derefaddrtmp(13) = &NONLOCAL(5) > *b(10) = derefaddrtmp(13) > ... > > It this a good idea, f.i. guarded by (dump_flags & TDF_DETAILS) not to > disturb scans of current tests? > > Or, do we f.i. want to fix the names themselves to be unique? I think so, on most cases the (n) adds clutter without extra info. Richard. > > Thanks, > - Tom
Improve alias dump accuracy diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 3510683..4ea1f43 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -660,7 +660,7 @@ dump_constraint (FILE *file, constraint_t c) fprintf (file, "&"); else if (c->lhs.type == DEREF) fprintf (file, "*"); - fprintf (file, "%s", get_varinfo (c->lhs.var)->name); + fprintf (file, "%s(%u)", get_varinfo (c->lhs.var)->name, c->lhs.var); if (c->lhs.offset == UNKNOWN_OFFSET) fprintf (file, " + UNKNOWN"); else if (c->lhs.offset != 0) @@ -670,7 +670,7 @@ dump_constraint (FILE *file, constraint_t c) fprintf (file, "&"); else if (c->rhs.type == DEREF) fprintf (file, "*"); - fprintf (file, "%s", get_varinfo (c->rhs.var)->name); + fprintf (file, "%s(%u)", get_varinfo (c->rhs.var)->name, c->rhs.var); if (c->rhs.offset == UNKNOWN_OFFSET) fprintf (file, " + UNKNOWN"); else if (c->rhs.offset != 0) @@ -5823,10 +5823,10 @@ dump_solution_for_var (FILE *file, unsigned int var) /* Dump the solution for unified vars anyway, this avoids difficulties in scanning dumps in the testsuite. */ - fprintf (file, "%s = { ", vi->name); + fprintf (file, "%s(%u) = { ", vi->name, vi->id); vi = get_varinfo (find (var)); EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi) - fprintf (file, "%s ", get_varinfo (i)->name); + fprintf (file, "%s(%u) ", get_varinfo (i)->name, i); fprintf (file, "}"); /* But note when the variable was unified. */