public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <rguenther@suse.de>
To: Tom de Vries <Tom_deVries@mentor.com>
Cc: Richard Biener <richard.guenther@gmail.com>,
	    "gcc-patches@gnu.org" <gcc-patches@gnu.org>
Subject: Re: [PATCH, 1/6] Simplify constraint handling
Date: Thu, 29 Oct 2015 11:16:00 -0000	[thread overview]
Message-ID: <alpine.LSU.2.11.1510291207260.10078@zhemvz.fhfr.qr> (raw)
In-Reply-To: <5630F242.7040806@mentor.com>

On Wed, 28 Oct 2015, Tom de Vries wrote:

> On 28/10/15 16:35, Richard Biener wrote:
> > 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.
> 
> Indeed, I also realized that by now.
> 
> I wrote attached patch to make that explicit and simplify fipa-pta.
> 
> OK for trunk if bootstrap and reg-test succeeds?

I don't see the patch simplifies anything but only removes spurious
settings by adding IMHO redundant checks.

> > 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.
> > 
> 
> Right.
> 
> > Maybe we should fix that (in intra_create_variable_infos properly
> > add constraints from NONLOCAL for all such functions).
> > 
> 
> Aren't we are adding those constraints currently in
> intra_create_variable_infos? Maybe you meant 'in ipa_pta_execute'?

I meant create_function_info_for.  Include all the effects of

      /* For externally visible or attribute used annotated functions use
         local constraints for their arguments.
         For local functions we see all callers and thus do not need 
initial
         constraints for parameters.  */
      if (node->used_from_other_partition
          || node->externally_visible
          || node->force_output
          || node->address_taken)
        {
          intra_create_variable_infos (func);

          /* We also need to make function return values escape.  Nothing
             escapes by returning from main though.  */
          if (!MAIN_NAME_P (DECL_NAME (node->decl)))
            {
              varinfo_t fi, rvi;
              fi = lookup_vi_for_tree (node->decl);
              rvi = first_vi_for_offset (fi, fi_result);
              if (rvi && rvi->offset == fi_result)
                {
                  struct constraint_expr includes;
                  struct constraint_expr var;
                  includes.var = escaped_id;
                  includes.offset = 0;
                  includes.type = SCALAR;
                  var.var = rvi->id;
                  var.offset = 0;
                  var.type = SCALAR;
                  process_constraint (new_constraint (includes, var));
                }
            }
        }

in it (just pass it a flag on whether the function is non-local).
The effect of intra_create_variable_infos above was supposed to
add a constraint from NONLOCAL on all vars (but the return value
which instead needs to escape as done above).

Richard.

> Thanks,
> - Tom
> 
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)

  parent reply	other threads:[~2015-10-29 11:13 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-26 11:23 [PATCH, 1/2] Add handle_param parameter to create_variable_info_for_1 Tom de Vries
2015-10-26 13:46 ` Richard Biener
2015-10-26 16:26   ` Tom de Vries
2015-10-27  7:59     ` [PATCH, PR67742] Handle restrict struct fields recursively Tom de Vries
2015-10-27 12:26       ` Tom de Vries
2015-10-27 12:49         ` [PATCH, 1/6] Simplify constraint handling Tom de Vries
2015-10-28 15:38           ` Richard Biener
2015-10-28 16:06             ` Tom de Vries
2015-10-28 21:32               ` Tom de Vries
2015-10-29 11:16               ` Richard Biener [this message]
2015-10-29 12:31                 ` Tom de Vries
2015-10-29 13:15                   ` Richard Biener
2015-10-29 16:10                     ` Tom de Vries
2015-10-30  9:44                       ` Richard Biener
2015-10-31  8:24                         ` Tom de Vries
2015-10-31  9:44                           ` [committed, trivial] Don't expect existing varinfo for arguments in intra_create_variable_infos Tom de Vries
2015-10-27 12:50         ` [PATCH, 2/6] Rename make_restrict_var_constraints to make_param_constraints Tom de Vries
2015-10-28 15:45           ` Richard Biener
2015-10-28 21:56             ` Tom de Vries
2015-10-27 13:04         ` [PATCH, 3/6] Add recursion " Tom de Vries
2015-11-01 18:04           ` Tom de Vries
2015-11-01 18:13             ` Tom de Vries
2015-11-02 15:25               ` Richard Biener
2015-11-02 23:29                 ` Tom de Vries
2015-11-01 18:20             ` [PATCH, 2/2] Handle recursive restrict in function parameter Tom de Vries
2015-11-03 13:47               ` Tom de Vries
2015-11-03 13:59                 ` [gomp4,committed] " Tom de Vries
2015-11-04 17:01                   ` Tom de Vries
2015-11-03 15:08                 ` [PATCH, 2/2] " Richard Biener
2015-11-03 16:44                   ` Tom de Vries
2015-11-04  9:28                     ` Richard Biener
2015-11-04 14:25                       ` [committed] " Tom de Vries
2015-10-27 13:06         ` [PATCH, 4/6] Add handle_param parameter to create_variable_info_for_1 Tom de Vries
2015-10-27 13:12         ` [PATCH, 5/6] Handle recursive restrict pointer in create_variable_info_for_1 Tom de Vries
2015-10-27 13:17         ` [PATCH, 6/6] Handle restrict struct fields recursively Tom de Vries

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LSU.2.11.1510291207260.10078@zhemvz.fhfr.qr \
    --to=rguenther@suse.de \
    --cc=Tom_deVries@mentor.com \
    --cc=gcc-patches@gnu.org \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).