From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 126831 invoked by alias); 29 Oct 2015 11:13:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 126807 invoked by uid 89); 29 Oct 2015 11:13:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.0 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: fencepost.gnu.org Received: from fencepost.gnu.org (HELO fencepost.gnu.org) (208.118.235.10) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 29 Oct 2015 11:13:41 +0000 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39357) by fencepost.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1Zrl9G-0005oo-O7 for gcc-patches@gnu.org; Thu, 29 Oct 2015 07:13:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zrl9D-00086q-63 for gcc-patches@gnu.org; Thu, 29 Oct 2015 07:13:38 -0400 Received: from mx2.suse.de ([195.135.220.15]:54015) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zrl9C-00085k-S3 for gcc-patches@gnu.org; Thu, 29 Oct 2015 07:13:35 -0400 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 7211BAC09; Thu, 29 Oct 2015 11:14:05 +0000 (UTC) Date: Thu, 29 Oct 2015 11:16:00 -0000 From: Richard Biener To: Tom de Vries cc: Richard Biener , "gcc-patches@gnu.org" Subject: Re: [PATCH, 1/6] Simplify constraint handling In-Reply-To: <5630F242.7040806@mentor.com> Message-ID: References: <562E0CF5.8000606@mentor.com> <562E5381.5@mentor.com> <562F26E2.40906@mentor.com> <562F6D1A.4010001@mentor.com> <562F711F.80900@mentor.com> <5630F242.7040806@mentor.com> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] X-Received-From: 195.135.220.15 X-SW-Source: 2015-10/txt/msg03145.txt.bz2 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 SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)