From patchwork Wed Nov 6 19:42:17 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 288994 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 4C3EE2C008F for ; Thu, 7 Nov 2013 06:46:02 +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=O2+RNISFCCFvVr1+ MCeQpbTaOzh9lykAzMRTCRj28Uk7oBpRN3CaM892J83SXBoFzHMo50fqhZZPFODZ ZSnaOOqLyMB+v1XEdPknTLr4GBKbJMnUokiV/QXywLQkK61p9vBrNdnXCrMgw79K wMONopSrVniWVJAfr9cA2LCwF1M= 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=pqvtrbFtaOVfFtLgBfoV7p dx7wQ=; b=NuaURJpSBQYp6HfjugsjpPB2f2ISUu7bqMkMzfYwPdExtgTioetA/f Z2Gr7/MPr0uo/JDy6AM6BogDvyPIbxahxGzCsPGBSXmEHYrZW/O56xhtvau2P9vt BfmbiB9munPbm3Ppkg6+hj2Pggp7moysnoJsDb7up9Ysp37hwlJ3E= Received: (qmail 4118 invoked by alias); 6 Nov 2013 19:44:53 -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 4095 invoked by uid 89); 6 Nov 2013 19:44:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.1 required=5.0 tests=AWL, BAYES_50, RDNS_NONE, T_FRT_FREE autolearn=no version=3.3.2 X-HELO: relay1.mentorg.com Received: from Unknown (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 06 Nov 2013 19:42:54 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1Ve8zv-0000Tl-5N from Thomas_Schwinge@mentor.com for gcc-patches@gcc.gnu.org; Wed, 06 Nov 2013 11:42:39 -0800 Received: from SVR-ORW-FEM-03.mgc.mentorg.com ([147.34.97.39]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Wed, 6 Nov 2013 11:42:38 -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:37 -0800 Received: by build5-lucid-cs (Postfix, from userid 49978) id 85F2B321385; Wed, 6 Nov 2013 11:42:37 -0800 (PST) From: To: CC: Thomas Schwinge Subject: [gomp4 3/9] OpenACC: Recognize -fopenacc. Date: Wed, 6 Nov 2013 20:42:17 +0100 Message-ID: <1383766943-8863-3-git-send-email-thomas@codesourcery.com> In-Reply-To: <1383766943-8863-2-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> MIME-Version: 1.0 From: Thomas Schwinge gcc/c-family/ * c.opt (fopenacc): New option. gcc/fortran/ * lang.opt (fopenacc): New option. * invoke.texi (-fopenacc): Document it. * gfortran.h (gfc_option_t): New member. * options.c (gfc_init_options, gfc_handle_option): Handle it. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_fopenacc): New procedure. gcc/ * doc/invoke.texi (-fopenacc): Document it. * doc/sourcebuild.texi (fopenacc): Document it. gcc/testsuite/ * c-c++-common/cpp/openacc-define-1.c: New file. * c-c++-common/cpp/openacc-define-2.c: Likewise. * c-c++-common/cpp/openacc-define-3.c: Likewise. * gfortran.dg/openacc-define-1.f90: Likewise. * gfortran.dg/openacc-define-2.f90: Likewise. * gfortran.dg/openacc-define-3.f90: Likewise. --- gcc/c-family/c.opt | 4 ++++ gcc/doc/invoke.texi | 11 ++++++++++- gcc/doc/sourcebuild.texi | 3 +++ gcc/fortran/gfortran.h | 1 + gcc/fortran/invoke.texi | 7 ++++++- gcc/fortran/lang.opt | 4 ++++ gcc/fortran/options.c | 5 +++++ gcc/testsuite/c-c++-common/cpp/openacc-define-1.c | 2 ++ gcc/testsuite/c-c++-common/cpp/openacc-define-2.c | 3 +++ gcc/testsuite/c-c++-common/cpp/openacc-define-3.c | 3 +++ gcc/testsuite/gfortran.dg/openacc-define-1.f90 | 3 +++ gcc/testsuite/gfortran.dg/openacc-define-2.f90 | 3 +++ gcc/testsuite/gfortran.dg/openacc-define-3.f90 | 3 +++ gcc/testsuite/lib/target-supports.exp | 9 +++++++++ 14 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/cpp/openacc-define-1.c create mode 100644 gcc/testsuite/c-c++-common/cpp/openacc-define-2.c create mode 100644 gcc/testsuite/c-c++-common/cpp/openacc-define-3.c create mode 100644 gcc/testsuite/gfortran.dg/openacc-define-1.f90 create mode 100644 gcc/testsuite/gfortran.dg/openacc-define-2.f90 create mode 100644 gcc/testsuite/gfortran.dg/openacc-define-3.f90 diff --git gcc/c-family/c.opt gcc/c-family/c.opt index b862eb9..d86d79b 100644 --- gcc/c-family/c.opt +++ gcc/c-family/c.opt @@ -1065,6 +1065,10 @@ fobjc-std=objc1 ObjC ObjC++ Var(flag_objc1_only) Conform to the Objective-C 1.0 language as implemented in GCC 4.0 +fopenacc +C ObjC C++ ObjC++ Var(flag_openacc) +Enable OpenACC + fopenmp C ObjC C++ ObjC++ Var(flag_openmp) Enable OpenMP (implies -frecursive in Fortran) diff --git gcc/doc/invoke.texi gcc/doc/invoke.texi index e84bca3..e393139 100644 --- gcc/doc/invoke.texi +++ gcc/doc/invoke.texi @@ -168,7 +168,8 @@ in the following sections. @gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol -aux-info @var{filename} -fallow-parameterless-variadic-functions @gol -fno-asm -fno-builtin -fno-builtin-@var{function} @gol --fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions @gol +-fhosted -ffreestanding -fopenacc -fopenmp -fms-extensions @gol +-fplan9-extensions @gol -trigraphs -traditional -traditional-cpp @gol -fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol -fsigned-bitfields -fsigned-char @gol @@ -1831,6 +1832,14 @@ This is equivalent to @option{-fno-hosted}. @xref{Standards,,Language Standards Supported by GCC}, for details of freestanding and hosted environments. +@item -fopenacc +@opindex fopenacc +@cindex OpenACC accelerator programming +Enable handling of OpenACC. +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/}}. + @item -fopenmp @opindex fopenmp @cindex OpenMP parallel diff --git gcc/doc/sourcebuild.texi gcc/doc/sourcebuild.texi index 1a70916..8b0031c 100644 --- gcc/doc/sourcebuild.texi +++ gcc/doc/sourcebuild.texi @@ -1787,6 +1787,9 @@ Target supports Graphite optimizations. @item fixed_point Target supports fixed-point extension to C. +@item fopenacc +Target supports OpenACC via @option{-fopenacc}. + @item fopenmp Target supports OpenMP via @option{-fopenmp}. diff --git gcc/fortran/gfortran.h gcc/fortran/gfortran.h index b28edd8..5089691 100644 --- gcc/fortran/gfortran.h +++ gcc/fortran/gfortran.h @@ -2285,6 +2285,7 @@ typedef struct int blas_matmul_limit; int flag_cray_pointer; int flag_d_lines; + int gfc_flag_openacc; int gfc_flag_openmp; int flag_sign_zero; int flag_stack_arrays; diff --git gcc/fortran/invoke.texi gcc/fortran/invoke.texi index eb678d1..46fca59 100644 --- gcc/fortran/invoke.texi +++ gcc/fortran/invoke.texi @@ -120,7 +120,7 @@ by type. Explanations are in the following sections. -ffixed-line-length-none -ffree-form -ffree-line-length-@var{n} @gol -ffree-line-length-none -fimplicit-none -finteger-4-integer-8 @gol -fmax-identifier-length -fmodule-private -fno-fixed-form -fno-range-check @gol --fopenmp -freal-4-real-10 -freal-4-real-16 -freal-4-real-8 @gol +-fopenacc -fopenmp -freal-4-real-10 -freal-4-real-16 -freal-4-real-8 @gol -freal-8-real-10 -freal-8-real-16 -freal-8-real-4 -std=@var{std} } @@ -336,6 +336,11 @@ representation of the translated Fortran code, produced by Enable the Cray pointer extension, which provides C-like pointer functionality. +@item -fopenacc +@opindex @code{fopenacc} +@cindex OpenACC +Enable the OpenACC extensions. + @item -fopenmp @opindex @code{fopenmp} @cindex OpenMP diff --git gcc/fortran/lang.opt gcc/fortran/lang.opt index 4f79934..201159b 100644 --- gcc/fortran/lang.opt +++ gcc/fortran/lang.opt @@ -513,6 +513,10 @@ fmodule-private Fortran Set default accessibility of module entities to PRIVATE. +fopenacc +Fortran +; Documented in C + fopenmp Fortran ; Documented in C diff --git gcc/fortran/options.c gcc/fortran/options.c index 6e4e7c1..2298bba 100644 --- gcc/fortran/options.c +++ gcc/fortran/options.c @@ -146,6 +146,7 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.blas_matmul_limit = 30; gfc_option.flag_cray_pointer = 0; gfc_option.flag_d_lines = -1; + gfc_option.gfc_flag_openacc = 0; gfc_option.gfc_flag_openmp = 0; gfc_option.flag_sign_zero = 1; gfc_option.flag_recursive = 0; @@ -832,6 +833,10 @@ gfc_handle_option (size_t scode, const char *arg, int value, gfc_option.source_form = FORM_FREE; break; + case OPT_fopenacc: + gfc_option.gfc_flag_openacc = value; + break; + case OPT_fopenmp: gfc_option.gfc_flag_openmp = value; break; diff --git gcc/testsuite/c-c++-common/cpp/openacc-define-1.c gcc/testsuite/c-c++-common/cpp/openacc-define-1.c new file mode 100644 index 0000000..feaf778 --- /dev/null +++ gcc/testsuite/c-c++-common/cpp/openacc-define-1.c @@ -0,0 +1,2 @@ +/* { dg-do preprocess } */ +/* { dg-require-effective-target fopenacc } */ diff --git gcc/testsuite/c-c++-common/cpp/openacc-define-2.c gcc/testsuite/c-c++-common/cpp/openacc-define-2.c new file mode 100644 index 0000000..a2f3e28 --- /dev/null +++ gcc/testsuite/c-c++-common/cpp/openacc-define-2.c @@ -0,0 +1,3 @@ +/* { dg-options "-fno-openacc" } */ +/* { dg-do preprocess } */ +/* { dg-require-effective-target fopenacc } */ diff --git gcc/testsuite/c-c++-common/cpp/openacc-define-3.c gcc/testsuite/c-c++-common/cpp/openacc-define-3.c new file mode 100644 index 0000000..ce270c3 --- /dev/null +++ gcc/testsuite/c-c++-common/cpp/openacc-define-3.c @@ -0,0 +1,3 @@ +/* { dg-options "-fopenacc" } */ +/* { dg-do preprocess } */ +/* { dg-require-effective-target fopenacc } */ diff --git gcc/testsuite/gfortran.dg/openacc-define-1.f90 gcc/testsuite/gfortran.dg/openacc-define-1.f90 new file mode 100644 index 0000000..b961468 --- /dev/null +++ gcc/testsuite/gfortran.dg/openacc-define-1.f90 @@ -0,0 +1,3 @@ +! { dg-options "-cpp" } +! { dg-do preprocess } +! { dg-require-effective-target fopenacc } diff --git gcc/testsuite/gfortran.dg/openacc-define-2.f90 gcc/testsuite/gfortran.dg/openacc-define-2.f90 new file mode 100644 index 0000000..49b714d --- /dev/null +++ gcc/testsuite/gfortran.dg/openacc-define-2.f90 @@ -0,0 +1,3 @@ +! { dg-options "-cpp -fno-openacc" } +! { dg-do preprocess } +! { dg-require-effective-target fopenacc } diff --git gcc/testsuite/gfortran.dg/openacc-define-3.f90 gcc/testsuite/gfortran.dg/openacc-define-3.f90 new file mode 100644 index 0000000..8018d5c --- /dev/null +++ gcc/testsuite/gfortran.dg/openacc-define-3.f90 @@ -0,0 +1,3 @@ +! { dg-options "-cpp -fopenacc" } +! { dg-do preprocess } +! { dg-require-effective-target fopenacc } diff --git gcc/testsuite/lib/target-supports.exp gcc/testsuite/lib/target-supports.exp index 5ca0b76..b611708 100644 --- gcc/testsuite/lib/target-supports.exp +++ gcc/testsuite/lib/target-supports.exp @@ -718,6 +718,15 @@ proc check_effective_target_fgraphite {} { } "-O1 -fgraphite"] } +# Return 1 if compilation with -fopenacc is error-free for trivial +# code, 0 otherwise. + +proc check_effective_target_fopenacc {} { + return [check_no_compiler_messages fopenacc object { + void foo (void) { } + } "-fopenacc"] +} + # Return 1 if compilation with -fopenmp is error-free for trivial # code, 0 otherwise.