Message ID | 562F711F.80900@mentor.com |
---|---|
State | New |
Headers | show |
On Tue, 27 Oct 2015, Tom de Vries wrote: > On 27/10/15 13:24, Tom de Vries wrote: > > Thinking it over a bit more, I realized the constraint handling started > > to be messy. I've reworked the patch series to simplify that first. > > > > 1 Simplify constraint handling > > 2 Rename make_restrict_var_constraints to make_param_constraints > > 3 Add recursion to make_param_constraints > > 4 Add handle_param parameter to create_variable_info_for_1 > > 5 Handle recursive restrict pointer in create_variable_info_for_1 > > 6 Handle restrict struct fields recursively > > > > Currently doing bootstrap and regtest on x86_64. > > > > I'll repost the patch series in reply to this message. > > This patch gets rid of this bit of code in intra_create_variable_infos: > ... > if (restrict_pointer_p) > make_constraint_from_global_restrict (p, "PARM_RESTRICT"); > else > .. > > I already proposed to remove it here ( > https://gcc.gnu.org/ml/gcc-patches/2015-10/msg02426.html ) but there is a > problem with that approach: It can happen that restrict_pointer_p is true, but > p->only_restrict_pointers is false. This happens with fipa-pta, when > create_function_info_for created a varinfo for the parameter before > intra_create_variable_infos was called. > > The patch handles that case now by setting p->only_restrict_pointers. Hmm, but ... restrict only has an effect in non-IPA mode. That we use intra_create_variable_infos in IPA mode is only done for correctness (to set up incoming NONLOCAL) for functions we do not see all callers of. Maybe we should fix that (in intra_create_variable_infos properly add constraints from NONLOCAL for all such functions). Richard. > Thanks, > - Tom >
Simplify constraint handling 2015-10-27 Tom de Vries <tom@codesourcery.com> * tree-ssa-structalias.c (intra_create_variable_infos): Simplify constraint handling. --- gcc/tree-ssa-structalias.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 5e070bc..4610914 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -5884,6 +5884,8 @@ intra_create_variable_infos (struct function *fn) p = create_variable_info_for_1 (t, alias_get_name (t)); insert_vi_for_tree (t, p); } + else if (restrict_pointer_p) + p->only_restrict_pointers = 1; /* For restrict qualified pointers build a representative for the pointed-to object. Note that this ends up handling @@ -5902,17 +5904,12 @@ intra_create_variable_infos (struct function *fn) continue; } - if (restrict_pointer_p) - make_constraint_from_global_restrict (p, "PARM_RESTRICT"); - else + for (; p; p = vi_next (p)) { - for (; p; p = vi_next (p)) - { - if (p->only_restrict_pointers) - make_constraint_from_global_restrict (p, "PARM_RESTRICT"); - else if (p->may_have_pointers) - make_constraint_from (p, nonlocal_id); - } + if (p->only_restrict_pointers) + make_constraint_from_global_restrict (p, "PARM_RESTRICT"); + else if (p->may_have_pointers) + make_constraint_from (p, nonlocal_id); } } -- 1.9.1