From patchwork Tue Nov 25 11:25:35 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 414633 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 7EEAF140168 for ; Tue, 25 Nov 2014 22:25:52 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; q=dns; s=default; b=hh+KsOuaGHSslguO4 KWdFkYWrTc4+ugfcp8wOelvbeGpiWLxFMYxaPPBmMrq3ZE/iv0e1EpOS7OeGs+B0 uampvH84g0Rt0SPVcQDpk1pCFAvZJ902m2nGStRxpaTeG5rIUHswJZGJL+CIRc1R EqRpqlg9VWE0sglzxazpD+e8aI= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; s=default; bh=/FVyWGhPBGtIT09Vc8ybXDB MMqI=; b=JgllLuD/fgfvj0ci/jzIWVG8KaL1dAtQEdbEgM1PSSE4cDH0fSOt9TD JWIbjsAw3UpXD2GJ8yrk8+0seblSyufsQdomma4McHHKwVGLCFo1g12q5bIX+PS8 e10k4Sj+X8wBi6GHR4v4wOwqqMXBJoMug74ETFtdeSbtEFa1EA7k= Received: (qmail 18619 invoked by alias); 25 Nov 2014 11:25:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 18607 invoked by uid 89); 25 Nov 2014 11:25:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Nov 2014 11:25:43 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-01.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1XtEFY-0004aR-6O from Tom_deVries@mentor.com ; Tue, 25 Nov 2014 03:25:40 -0800 Received: from [127.0.0.1] (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.3.181.6; Tue, 25 Nov 2014 11:25:38 +0000 Message-ID: <5474672F.8000303@mentor.com> Date: Tue, 25 Nov 2014 12:25:35 +0100 From: Tom de Vries User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: GCC Patches CC: Richard Biener , Jakub Jelinek , Thomas Schwinge Subject: Re: [PATCH, 2/8] Add pass_oacc_kernels References: <546743BC.5070804@mentor.com> <54678B66.1000704@mentor.com> In-Reply-To: <54678B66.1000704@mentor.com> On 15-11-14 18:20, Tom de Vries wrote: > On 15-11-14 13:14, Tom de Vries wrote: >> Hi, >> >> I'm submitting a patch series with initial support for the oacc kernels >> directive. >> >> The patch series uses pass_parallelize_loops to implement parallelization of >> loops in the oacc kernels region. >> >> The patch series consists of these 8 patches: >> ... >> 1 Expand oacc kernels after pass_build_ealias >> 2 Add pass_oacc_kernels >> 3 Add pass_ch_oacc_kernels to pass_oacc_kernels >> 4 Add pass_tree_loop_{init,done} to pass_oacc_kernels >> 5 Add pass_loop_im to pass_oacc_kernels >> 6 Add pass_ccp to pass_oacc_kernels >> 7 Add pass_parloops_oacc_kernels to pass_oacc_kernels >> 8 Do simple omp lowering for no address taken var >> ... > > This patch adds a pass group pass_oacc_kernels. > > The rationale is that we want a pass group to run oacc kernels region related > (optimization) passes in. > Updated for moving pass_oacc_kernels down past pass_fre in the pass list. Bootstrapped and reg-tested as before. OK for trunk? Thanks, - Tom [PATCH 2/7] Add pass_oacc_kernels 2014-11-25 Tom de Vries * passes.def: Add pass group pass_oacc_kernels. * tree-pass.h (make_pass_oacc_kernels): Declare. * tree-ssa-loop.c (gate_oacc_kernels): New static function. (pass_data_oacc_kernels): New pass_data. (class pass_oacc_kernels): New pass. (make_pass_oacc_kernels): New function. --- gcc/passes.def | 7 ++++++- gcc/tree-pass.h | 1 + gcc/tree-ssa-loop.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/gcc/passes.def b/gcc/passes.def index bf1cd34..efb3d8c 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -86,7 +86,12 @@ along with GCC; see the file COPYING3. If not see execute TODO_rebuild_alias at this point. */ NEXT_PASS (pass_build_ealias); NEXT_PASS (pass_fre); - NEXT_PASS (pass_expand_omp_ssa); + /* Pass group that runs when there are oacc kernels in the + function. */ + NEXT_PASS (pass_oacc_kernels); + PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels) + NEXT_PASS (pass_expand_omp_ssa); + POP_INSERT_PASSES () NEXT_PASS (pass_merge_phi); NEXT_PASS (pass_cd_dce); NEXT_PASS (pass_early_ipa_sra); diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 75f8aa5..d63ab2b 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -449,6 +449,7 @@ extern gimple_opt_pass *make_pass_strength_reduction (gcc::context *ctxt); extern gimple_opt_pass *make_pass_vtable_verify (gcc::context *ctxt); extern gimple_opt_pass *make_pass_ubsan (gcc::context *ctxt); extern gimple_opt_pass *make_pass_sanopt (gcc::context *ctxt); +extern gimple_opt_pass *make_pass_oacc_kernels (gcc::context *ctxt); /* IPA Passes */ extern simple_ipa_opt_pass *make_pass_ipa_lower_emutls (gcc::context *ctxt); diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c index 758b5fc..c29aa22 100644 --- a/gcc/tree-ssa-loop.c +++ b/gcc/tree-ssa-loop.c @@ -157,6 +157,54 @@ make_pass_tree_loop (gcc::context *ctxt) return new pass_tree_loop (ctxt); } +/* Gate for oacc kernels pass group. */ + +static bool +gate_oacc_kernels (function *fn) +{ + if (!flag_openacc) + return false; + + return fn->contains_oacc_kernels; +} + +/* The oacc kernels superpass. */ + +namespace { + +const pass_data pass_data_oacc_kernels = +{ + GIMPLE_PASS, /* type */ + "oacc_kernels", /* name */ + OPTGROUP_LOOP, /* optinfo_flags */ + TV_TREE_LOOP, /* tv_id */ + PROP_cfg, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + 0, /* todo_flags_finish */ +}; + +class pass_oacc_kernels : public gimple_opt_pass +{ +public: + pass_oacc_kernels (gcc::context *ctxt) + : gimple_opt_pass (pass_data_oacc_kernels, ctxt) + {} + + /* opt_pass methods: */ + virtual bool gate (function *fn) { return gate_oacc_kernels (fn); } + +}; // class pass_oacc_kernels + +} // anon namespace + +gimple_opt_pass * +make_pass_oacc_kernels (gcc::context *ctxt) +{ + return new pass_oacc_kernels (ctxt); +} + /* The no-loop superpass. */ namespace { -- 1.9.1