On Tue, 2005-11-29 at 22:08 +0100, Richard Guenther wrote: > The patch below teaches points-to analysis about restrict qualifiers > of incoming parameters. It is modeled after the special handling > of malloc result type pointers, namely creating fake variables we > point to and thus trigger creation of NMTs. Unfortunately it doesn't > exactly work, as for the testcase > > double foo(double * __restrict__ x, double * __restrict__ y) > { > double res; > res = *y + *(y+1); > res += *x + *(x+1); > return res; > } > > we generate the constraints (ok) > > RESTRICT.4 = &ANYTHING > x = &RESTRICT.4 > RESTRICT.5 = &ANYTHING > y = &RESTRICT.5 > D.1282_3 = y + 64 > D.1285_8 = x + 64 > > just like we do for the malloc case, but end up with an extra > TMT that causes
It either decides to use a TMT, or an NMT, in a loop that looks through things, partially here: /* Collect the list of pointers with a non-empty points to set. */ for (i = 1; i < num_ssa_names; i++) { tree ptr = ssa_name (i); struct ptr_info_def *pi; if (!ptr || !POINTER_TYPE_P (TREE_TYPE (ptr)) || !SSA_NAME_PTR_INFO (ptr)) continue; pi = SSA_NAME_PTR_INFO (ptr); if (pi->pt_anything || !pi->is_dereferenced) { /* No name tags for pointers that have not been dereferenced or point to an arbitrary location. */ pi->name_mem_tag = NULL_TREE; continue; } and partially in set_pt_anything (which will reset the name tag as well). I'd take a look and see what improved-aliasing does with it, and try to debug the problem there. I plan on starting to merge the improved aliasing stuff early next week. --Dan