Hi,
this patch fixes two issues I noticed while proofreading the code.
First is that I have added conditional around setting of nonlocal and
escaped flags (since they may be set from solver) while keeping the
variable in assignment that is confusing.

Second is that we still do not set pt in the case function has no memory
side effects.  In this case the call use is not going to be used since
uses_global_memory is false only if either function is const or modref
determined that all loads are from memory pointed to by parameters.  In
both cases we will disambiguate earlier before asking PTA oracle, but it
is better to avoid stale PTA sets (which shows in -alias dumps etc.)

Most of builtins are not modifying global memory, one option would be to
stick another flag into the fnspecs strings for this property.

Bootstrapped/regtested x86_64-linux, OK?

Honza

gcc/ChangeLog:

        * tree-ssa-structalias.c (compute_points_to_sets): Cleanup.

diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 2e6513bb72a..35971a54e02 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -7550,8 +7550,8 @@ compute_points_to_sets (void)
                     always escaped.  */
                  if (uses_global_memory)
                    {
-                     pt->nonlocal = uses_global_memory;
-                     pt->escaped = uses_global_memory;
+                     pt->nonlocal = 1;
+                     pt->escaped = 1;
                    }
                }
              else if (uses_global_memory)
@@ -7561,6 +7561,8 @@ compute_points_to_sets (void)
                  *pt = cfun->gimple_df->escaped;
                  pt->nonlocal = 1;
                }
+             else
+               memset (pt, 0, sizeof (struct pt_solution));
            }
 
          pt = gimple_call_clobber_set (stmt);
@@ -7582,8 +7584,8 @@ compute_points_to_sets (void)
                     always escaped.  */
                  if (writes_global_memory)
                    {
-                     pt->nonlocal = writes_global_memory;
-                     pt->escaped = writes_global_memory;
+                     pt->nonlocal = 1;
+                     pt->escaped = 1;
                    }
                }
              else if (writes_global_memory)
@@ -7593,6 +7595,8 @@ compute_points_to_sets (void)
                  *pt = cfun->gimple_df->escaped;
                  pt->nonlocal = 1;
                }
+             else
+               memset (pt, 0, sizeof (struct pt_solution));
            }
        }
     }

Reply via email to