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 > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)