diff options
author | Kugan Vivekanandarajah <kuganv@linaro.org> | 2016-10-17 23:35:48 +0000 |
---|---|---|
committer | Kugan Vivekanandarajah <kugan@gcc.gnu.org> | 2016-10-17 23:35:48 +0000 |
commit | 735b8f9fc4b14384b246b39dfccbf529402b7791 (patch) | |
tree | 79b96808abe9a9f3a2571e69510e046068caad46 /gcc/tree-ssa-structalias.c | |
parent | 86f980870a28bc9022cc57362b5031ede43ecff9 (diff) | |
download | gcc-735b8f9fc4b14384b246b39dfccbf529402b7791.zip gcc-735b8f9fc4b14384b246b39dfccbf529402b7791.tar.gz gcc-735b8f9fc4b14384b246b39dfccbf529402b7791.tar.bz2 |
Set nonnull attribute to ptr_info_def based on VRP
Set nonnull attribute to ptr_info_def based on VRP
gcc/ChangeLog:
2016-10-18 Kugan Vivekanandarajah <kuganv@linaro.org>
* tree-ssa-alias.h (pt_solution_singleton_or_null_p): Renamed from
pt_solution_singleton_p.
* tree-ssa-ccp.c (fold_builtin_alloca_with_align): Use renamed
pt_solution_singleton_or_null_p from pt_solution_singleton_p.
* tree-ssa-structalias.c (find_what_p_points_to): Preserve
pointer nonnull computed by VRP.
Also Conservatively set pt.null to 1.
(pt_solution_reset): Conservatively set pt.null to 1.
(pt_solution_singleton_or_null_p): Renamed from
pt_solution_singleton_p.
* tree-ssanames.h (set_ptr_nonnull): Declare.
(get_ptr_nonnull): Likewise.
* tree-ssanames.c (set_ptr_nonnull): New.
(get_ptr_nonnull): Likewise.
* tree-vrp.c (vrp_finalize): Set ptr that are nonnull.
(evrp_dom_walker::before_dom_children): Likewise.
gcc/testsuite/ChangeLog:
2016-10-18 Kugan Vivekanandarajah <kuganv@linaro.org>
* gcc.dg/torture/pr39074-2.c: Adjust testcase.
* gcc.dg/torture/pr39074.c: Likewise.
From-SVN: r241287
Diffstat (limited to 'gcc/tree-ssa-structalias.c')
-rw-r--r-- | gcc/tree-ssa-structalias.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 2a4ab2f..78f4533 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -6451,6 +6451,7 @@ find_what_p_points_to (tree fndecl, tree p) struct ptr_info_def *pi; tree lookup_p = p; varinfo_t vi; + bool nonnull = get_ptr_nonnull (p); /* For parameters, get at the points-to set for the actual parm decl. */ @@ -6466,6 +6467,12 @@ find_what_p_points_to (tree fndecl, tree p) pi = get_ptr_info (p); pi->pt = find_what_var_points_to (fndecl, vi); + /* Conservatively set to NULL from PTA (to true). */ + pi->pt.null = 1; + /* Preserve pointer nonnull computed by VRP. See get_ptr_nonnull + in gcc/tree-ssaname.c for more information. */ + if (nonnull) + set_ptr_nonnull (p); } @@ -6505,6 +6512,7 @@ pt_solution_reset (struct pt_solution *pt) { memset (pt, 0, sizeof (struct pt_solution)); pt->anything = true; + pt->null = true; } /* Set the points-to solution *PT to point only to the variables @@ -6599,10 +6607,10 @@ pt_solution_empty_p (struct pt_solution *pt) return the var uid in *UID. */ bool -pt_solution_singleton_p (struct pt_solution *pt, unsigned *uid) +pt_solution_singleton_or_null_p (struct pt_solution *pt, unsigned *uid) { if (pt->anything || pt->nonlocal || pt->escaped || pt->ipa_escaped - || pt->null || pt->vars == NULL + || pt->vars == NULL || !bitmap_single_bit_set_p (pt->vars)) return false; |