From patchwork Tue Jan 14 15:10:04 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 310760 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 35CC12C0082 for ; Wed, 15 Jan 2014 02:10:59 +1100 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; q=dns; s=default; b=e6AmCuQj0GpYa/uq tmP42kq7AFXqVylln4cbJlJtS0HfHZgF1G60xDkM7uXe87v6rP8kW/tqdJVnpkZN TL0u7yDbo5zkNdhOQywxMDklDjtqzZMjKz6NILTLjBwZ+Kzqt8h8FFky1luX/yBw TarK50AH3OjkGRTtrfevq1d2ZkQ= 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:from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=default; bh=zL8WHIVqp9/67YljsYDRhv Sc+8k=; b=XyJHh39aRr3DE7090LT6NA0ZWdD4SfKtzH7Ut9w+yy+bCFgVduljQr +IE6obbydWBLZsQ1bluq8Ng7dwtUWPwqyAqwbDq1r0WXVHmxvk3GHYiG3A9vMYJm bbqAyEuwWSsmPd/3/9EIxQEk6b1vodk7cLtklnQ8un9s5yHLS0SUE= Received: (qmail 11122 invoked by alias); 14 Jan 2014 15:10:25 -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 10972 invoked by uid 89); 14 Jan 2014 15:10:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL, BAYES_00 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, 14 Jan 2014 15:10:21 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1W35dC-0002Fq-6x from Thomas_Schwinge@mentor.com ; Tue, 14 Jan 2014 07:10:18 -0800 Received: from SVR-ORW-FEM-02.mgc.mentorg.com ([147.34.96.206]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 14 Jan 2014 07:10:18 -0800 Received: from build5-lucid-cs (147.34.91.1) by svr-orw-fem-02.mgc.mentorg.com (147.34.96.168) with Microsoft SMTP Server id 14.2.247.3; Tue, 14 Jan 2014 07:10:16 -0800 Received: by build5-lucid-cs (Postfix, from userid 49978) id BD61A321830; Tue, 14 Jan 2014 07:10:16 -0800 (PST) From: To: , CC: Thomas Schwinge Subject: [gomp4 2/6] Prepare for extending omp_clause_map_kind. Date: Tue, 14 Jan 2014 16:10:04 +0100 Message-ID: <1389712208-416-2-git-send-email-thomas@codesourcery.com> In-Reply-To: <1389712208-416-1-git-send-email-thomas@codesourcery.com> References: <87ppnuvbv6.fsf@schwinge.name> <1389712208-416-1-git-send-email-thomas@codesourcery.com> MIME-Version: 1.0 From: Thomas Schwinge gcc/ * tree-core.h (omp_clause_map_kind): Make the identifiers' bit patterns more obvious. Add comments. * omp-low.c (lower_oacc_parallel, lower_omp_target): Test for omp_clause_map_kind flags set instead of for values. --- gcc/omp-low.c | 22 ++++++++++++++-------- gcc/tree-core.h | 16 +++++++++++----- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git gcc/omp-low.c gcc/omp-low.c index eb755c3..899e970 100644 --- gcc/omp-low.c +++ gcc/omp-low.c @@ -8855,13 +8855,16 @@ lower_oacc_parallel (gimple_stmt_iterator *gsi_p, omp_context *ctx) { tree avar = create_tmp_var (TREE_TYPE (var), NULL); mark_addressable (avar); - if (OMP_CLAUSE_MAP_KIND (c) != OMP_CLAUSE_MAP_ALLOC - && OMP_CLAUSE_MAP_KIND (c) != OMP_CLAUSE_MAP_FROM) + enum omp_clause_map_kind map_kind + = OMP_CLAUSE_MAP_KIND (c); + if ((!(map_kind & OMP_CLAUSE_MAP_SPECIAL) + && (map_kind & OMP_CLAUSE_MAP_TO)) + || map_kind == OMP_CLAUSE_MAP_POINTER) gimplify_assign (avar, var, &ilist); avar = build_fold_addr_expr (avar); gimplify_assign (x, avar, &ilist); - if ((OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_FROM - || OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_TOFROM) + if ((!(map_kind & OMP_CLAUSE_MAP_SPECIAL) + && (map_kind & OMP_CLAUSE_MAP_FROM)) && !TYPE_READONLY (TREE_TYPE (var))) { x = build_sender_ref (ovar, ctx); @@ -10331,13 +10334,16 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx) gcc_assert (kind == GF_OMP_TARGET_KIND_REGION); tree avar = create_tmp_var (TREE_TYPE (var), NULL); mark_addressable (avar); - if (OMP_CLAUSE_MAP_KIND (c) != OMP_CLAUSE_MAP_ALLOC - && OMP_CLAUSE_MAP_KIND (c) != OMP_CLAUSE_MAP_FROM) + enum omp_clause_map_kind map_kind + = OMP_CLAUSE_MAP_KIND (c); + if ((!(map_kind & OMP_CLAUSE_MAP_SPECIAL) + && (map_kind & OMP_CLAUSE_MAP_TO)) + || map_kind == OMP_CLAUSE_MAP_POINTER) gimplify_assign (avar, var, &ilist); avar = build_fold_addr_expr (avar); gimplify_assign (x, avar, &ilist); - if ((OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_FROM - || OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_TOFROM) + if ((!(map_kind & OMP_CLAUSE_MAP_SPECIAL) + && (map_kind & OMP_CLAUSE_MAP_FROM)) && !TYPE_READONLY (TREE_TYPE (var))) { x = build_sender_ref (ovar, ctx); diff --git gcc/tree-core.h gcc/tree-core.h index e2750e0..3602b5f 100644 --- gcc/tree-core.h +++ gcc/tree-core.h @@ -1112,14 +1112,20 @@ enum omp_clause_depend_kind enum omp_clause_map_kind { - OMP_CLAUSE_MAP_ALLOC, - OMP_CLAUSE_MAP_TO, - OMP_CLAUSE_MAP_FROM, - OMP_CLAUSE_MAP_TOFROM, + /* If not already present, allocate. */ + OMP_CLAUSE_MAP_ALLOC = 0, + /* ..., and copy to device. */ + OMP_CLAUSE_MAP_TO = 1 << 0, + /* ..., and copy from device. */ + OMP_CLAUSE_MAP_FROM = 1 << 1, + /* ..., and copy to and from device. */ + OMP_CLAUSE_MAP_TOFROM = OMP_CLAUSE_MAP_TO | OMP_CLAUSE_MAP_FROM, + /* Special map kinds. */ + OMP_CLAUSE_MAP_SPECIAL = 1 << 2, /* The following kind is an internal only map kind, used for pointer based array sections. OMP_CLAUSE_SIZE for these is not the pointer size, which is implicitly POINTER_SIZE / BITS_PER_UNIT, but the bias. */ - OMP_CLAUSE_MAP_POINTER + OMP_CLAUSE_MAP_POINTER = OMP_CLAUSE_MAP_SPECIAL }; enum omp_clause_proc_bind_kind