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.
Thanks,
- Tom
Simplify constraint handling
2015-10-27 Tom de Vries <t...@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