From patchwork Wed Nov 6 19:42:22 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 289000 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)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 99D752C00C8 for ; Thu, 7 Nov 2013 07:03:33 +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=cxLuvuUKJ8tRZiK0 3Jjpsn+tVh2fDo5IpST5giNCCDwA9hc75mMw1qk0UJ25hDZI7pFh6biSEG25+KLK TAjPC0f1EexO7AdJBc5iw8DunT+ovQhenSxs39i4DeTpxwGedzKiUym5naZfSge6 tvbMYrhmlMUYoIl/BN6jZD/9mao= 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=Z2GrrgkCL39pQFgUEPCbGQ IuOtQ=; b=V8Vyu6p0zU0bEQyIQkn6qT4qpzYdGAKCsouSTX5rY1WtsmrsIxHUZu 19MoKaH8C+vnK5KsIap5PglMR1g0mk9N3METVC8jJbMDWKft2Fvwhp18YGf1LluX QhOzLd+KGP0OfjlcOKYbYY3ZXmobUT2tyxjcJBYL/6M6CiZzfh9XQ= Received: (qmail 2611 invoked by alias); 6 Nov 2013 20:02:09 -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 2590 invoked by uid 89); 6 Nov 2013 20:02:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.3 required=5.0 tests=AWL, BAYES_50, RDNS_NONE, URIBL_BLOCKED autolearn=no version=3.3.2 X-HELO: eggs.gnu.org Received: from Unknown (HELO eggs.gnu.org) (208.118.235.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Wed, 06 Nov 2013 20:01:33 +0000 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ve8zy-0005of-AI for gcc-patches@gcc.gnu.org; Wed, 06 Nov 2013 14:42:53 -0500 Received: from relay1.mentorg.com ([192.94.38.131]:60287) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ve8zy-0005oX-47 for gcc-patches@gcc.gnu.org; Wed, 06 Nov 2013 14:42:42 -0500 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1Ve8zx-0000U7-If from Thomas_Schwinge@mentor.com for gcc-patches@gcc.gnu.org; Wed, 06 Nov 2013 11:42:41 -0800 Received: from SVR-ORW-FEM-03.mgc.mentorg.com ([147.34.97.39]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 6 Nov 2013 11:42:41 -0800 Received: from build5-lucid-cs (147.34.91.1) by svr-orw-fem-03.mgc.mentorg.com (147.34.97.39) with Microsoft SMTP Server id 14.2.247.3; Wed, 6 Nov 2013 11:42:40 -0800 Received: by build5-lucid-cs (Postfix, from userid 49978) id 9E5A332680A; Wed, 6 Nov 2013 11:42:37 -0800 (PST) From: To: CC: Thomas Schwinge Subject: [gomp4 8/9] OpenACC: Basic support for #pragma acc in the C front end. Date: Wed, 6 Nov 2013 20:42:22 +0100 Message-ID: <1383766943-8863-8-git-send-email-thomas@codesourcery.com> In-Reply-To: <1383766943-8863-7-git-send-email-thomas@codesourcery.com> References: <878ux1jp2s.fsf@schwinge.name> <1383766943-8863-1-git-send-email-thomas@codesourcery.com> <1383766943-8863-2-git-send-email-thomas@codesourcery.com> <1383766943-8863-3-git-send-email-thomas@codesourcery.com> <1383766943-8863-4-git-send-email-thomas@codesourcery.com> <1383766943-8863-5-git-send-email-thomas@codesourcery.com> <1383766943-8863-6-git-send-email-thomas@codesourcery.com> <1383766943-8863-7-git-send-email-thomas@codesourcery.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Windows NT kernel [generic] [fuzzy] X-Received-From: 192.94.38.131 From: Thomas Schwinge gcc/c-family/ * c-pragma.c (oacc_pragmas): New array. (c_pp_lookup_pragma, init_pragma): Handle it. gcc/ * doc/invoke.texi (-fopenacc): Update. gcc/c/ * c-parser.c (c_parser_omp_all_clauses): Make a parser error message suitable for OpenACC, too. gcc/cp/ * parser.c (cp_parser_omp_all_clauses): Make a parser error message suitable for OpenACC, too. --- gcc/c-family/c-pragma.c | 22 ++++++++++++++++++++++ gcc/c/c-parser.c | 2 +- gcc/cp/parser.c | 2 +- gcc/doc/invoke.texi | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git gcc/c-family/c-pragma.c gcc/c-family/c-pragma.c index 3ce77a2..98f98d0 100644 --- gcc/c-family/c-pragma.c +++ gcc/c-family/c-pragma.c @@ -1164,6 +1164,8 @@ typedef struct static vec registered_pp_pragmas; struct omp_pragma_def { const char *name; unsigned int id; }; +static const struct omp_pragma_def oacc_pragmas[] = { +}; static const struct omp_pragma_def omp_pragmas[] = { { "atomic", PRAGMA_OMP_ATOMIC }, { "barrier", PRAGMA_OMP_BARRIER }, @@ -1194,9 +1196,18 @@ static const struct omp_pragma_def omp_pragmas[] = { void c_pp_lookup_pragma (unsigned int id, const char **space, const char **name) { + const int n_oacc_pragmas = sizeof (oacc_pragmas) / sizeof (*oacc_pragmas); const int n_omp_pragmas = sizeof (omp_pragmas) / sizeof (*omp_pragmas); int i; + for (i = 0; i < n_oacc_pragmas; ++i) + if (oacc_pragmas[i].id == id) + { + *space = "acc"; + *name = oacc_pragmas[i].name; + return; + } + for (i = 0; i < n_omp_pragmas; ++i) if (omp_pragmas[i].id == id) { @@ -1348,6 +1359,17 @@ c_invoke_pragma_handler (unsigned int id) void init_pragma (void) { + if (flag_openacc) + { + const int n_oacc_pragmas + = sizeof (oacc_pragmas) / sizeof (*oacc_pragmas); + int i; + + for (i = 0; i < n_oacc_pragmas; ++i) + cpp_register_deferred_pragma (parse_in, "acc", oacc_pragmas[i].name, + oacc_pragmas[i].id, true, true); + } + if (flag_openmp) { const int n_omp_pragmas = sizeof (omp_pragmas) / sizeof (*omp_pragmas); diff --git gcc/c/c-parser.c gcc/c/c-parser.c index a8f4774..8a1e988 100644 --- gcc/c/c-parser.c +++ gcc/c/c-parser.c @@ -10730,7 +10730,7 @@ c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask, c_name = "simdlen"; break; default: - c_parser_error (parser, "expected %<#pragma omp%> clause"); + c_parser_error (parser, "expected clause"); goto saw_error; } diff --git gcc/cp/parser.c gcc/cp/parser.c index bbc8e75..c3345ee 100644 --- gcc/cp/parser.c +++ gcc/cp/parser.c @@ -27911,7 +27911,7 @@ cp_parser_omp_all_clauses (cp_parser *parser, omp_clause_mask mask, c_name = "simdlen"; break; default: - cp_parser_error (parser, "expected %<#pragma omp%> clause"); + cp_parser_error (parser, "expected clause"); goto saw_error; } diff --git gcc/doc/invoke.texi gcc/doc/invoke.texi index af8973a..cc4a6da 100644 --- gcc/doc/invoke.texi +++ gcc/doc/invoke.texi @@ -1835,7 +1835,7 @@ freestanding and hosted environments. @item -fopenacc @opindex fopenacc @cindex OpenACC accelerator programming -Enable handling of OpenACC. +Enable handling of OpenACC directives @code{#pragma acc} in C. When @option{-fopenacc} is specified, the compiler generates accelerated code according to the OpenACC Application Programming Interface v2.0 @w{@uref{http://www.openacc.org/}}. This option