From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 70297386FC19 for ; Mon, 28 Jun 2021 15:51:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 70297386FC19 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: eGPMth+r40+xmc/8ZA5ARN/px2Pc3fejW0weexM6B3OR1Lkie55TYtmJYFZVoxbgpYFz/WAsVB gq1/nL7imXbTuv99XDu/JvDsABOP32QDODKv+XdmT+6KscsKJAr/n1CihNLKKMorm9G57JwXQD f3o3UzqapUYIM/TCKYnwrKGCNa4q7bHUwyysXCKHOxc9eOjtL8RQCoWEvsUjrc2IKqv+qxVV/a fs1IdKdkqCMhG7UUUuimUijSJWAiMsB9Mc0evbdazf2Z9ANa6U8L0C0+SUoLWt7ULYoSiZd6uY yIM= X-IronPort-AV: E=Sophos;i="5.83,306,1616486400"; d="diff'?scan'208";a="63088980" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 28 Jun 2021 07:51:37 -0800 IronPort-SDR: ZN83tq32yFHtuZBMaO6E0Ltqj7wc+iDrSUg77iIm4t+IHf2o+2plA+Bwyhbuz5fJxJf388OMF+ GAY9wAXGFxPc1wNl6jqQYQ99a+hxck+KMwfH4Lzm0yB4nFl23HQ4+xnL3F6X20mf2AfwEqotYV MIY4geEZlRUU5i4UnLaMv0pP8JmKGRL4QVej4cQVoUiGg/0lNCGpk+HGnQe8d0lGazBlahViuf 1VlVf/+wzmKhFtlzcdJkKqqw9TzG1dWFmDFw56dJ1WiwKPGbcKENa84YQNnVWR58IhUZ3CCeqX q4M= Subject: Re: [Patch] Add 'default' to -foffload=; document that flag [PR67300] From: Tobias Burnus To: Sandra Loosemore , Jakub Jelinek CC: Richard Biener , gcc-patches , Thomas Schwinge References: <1587c151-b99f-2f44-3044-7b01c296b9ad@codesourcery.com> <20210617122737.GE7746@tucnak> <20210617175054.GI7746@tucnak> <07d9e298-55d0-0e80-84f5-5d5d75c9e341@codesourcery.com> <20210617194010.GJ7746@tucnak> <7e4ad7a0-e601-b97f-9caa-9f10befbe84e@codesourcery.com> <81177be7-97bd-5c1e-2649-5ebe8eeb47b4@mentor.com> <89a1a17b-2e2d-238e-856c-b38c9aacc7ef@codesourcery.com> Message-ID: <4af01e92-c1e7-8cfc-d635-45aba3a48232@codesourcery.com> Date: Mon, 28 Jun 2021 17:51:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <89a1a17b-2e2d-238e-856c-b38c9aacc7ef@codesourcery.com> Content-Type: multipart/mixed; boundary="------------43ECF06B6310A795B681446C" Content-Language: en-US X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-09.mgc.mentorg.com (139.181.222.9) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Jun 2021 15:51:42 -0000 --------------43ECF06B6310A795B681446C Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: quoted-printable I managed to delete the libgomp part before posting the patch, hence, reposted. (The change from -foffload=3D to -foffload-options=3D ensures that also other configured compilers such as GCN are used, an issue that Thomas found. The original -foffload=3Dnvptx-none=3D-latomic was added because as otherwise the GCN part caused build issues for Richard.) Thus, this patch is like v3, except for the invoke.texi fixes suggested by Sandra (thanks!) + adding a ChangeLog and like v4, except the lost libgomp changes has been re-added (+ ChangeLog update). I hope it now is fine. Tobias ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 M=C3=BCnchen R= egistergericht M=C3=BCnchen HRB 106955, Gesch=C3=A4ftsf=C3=BChrer: Thomas H= eurung, Frank Th=C3=BCrauf --------------43ECF06B6310A795B681446C Content-Type: text/x-patch; charset="UTF-8"; name="offload-v5.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="offload-v5.diff" Add 'default' to -foffload=; document that flag [PR67300] As -foffload={options,targets,targets=options} is very convoluted, it has been split into -foffload=targets (supporting the old syntax for backward compatibilty) and -foffload-options={options,target=options}. Only the new syntax is documented. Additionally, -foffload=default is supported, which can reset the devices after -foffload=disable / -foffload=targets to the default, if needed. gcc/ChangeLog: * common.opt (-foffload=): Update description. (-foffload-options=): New. * doc/invoke.texi (C Language Options): Sort options alphabetical in optlist and also the description itself. (-foffload, -foffload-options): New. * gcc.c (check_offload_target_name): New, split off from handle_foffload_option. (check_foffload_target_names): New. (handle_foffload_option): Handle -foffload=default. (driver_handle_option): Update for -foffload-options. * lto-opts.c (lto_write_options): Use -foffload-options instead of -foffload. * lto-wrapper.c (merge_and_complain, append_offload_options): Likewise. * opts.c (common_handle_option): Likewise. libgomp/ChangeLog: * testsuite/libgomp.c-c++-common/reduction-16.c: Replace -foffload=nvptx-none= by -foffload-options=nvptx-none= to avoid disabling other offload targets. * testsuite/libgomp.c-c++-common/reduction-5.c: Likewise. * testsuite/libgomp.c-c++-common/reduction-6.c: Likewise. * testsuite/libgomp.c/target-44.c: Likewise. gcc/common.opt | 10 +- gcc/doc/invoke.texi | 281 ++++++++++++--------- gcc/gcc.c | 100 ++++++-- gcc/lto-opts.c | 3 +- gcc/lto-wrapper.c | 10 +- gcc/opts.c | 2 +- .../testsuite/libgomp.c-c++-common/reduction-16.c | 2 +- .../testsuite/libgomp.c-c++-common/reduction-5.c | 2 +- .../testsuite/libgomp.c-c++-common/reduction-6.c | 2 +- libgomp/testsuite/libgomp.c/target-44.c | 2 +- 10 files changed, 254 insertions(+), 160 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index a1353e06bdc..a695a8c5964 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2095,9 +2095,15 @@ fnon-call-exceptions Common Var(flag_non_call_exceptions) Optimization Support synchronous non-call exceptions. +; -foffload= is documented +; -foffload== is supported for backward compatibility foffload= -Common Driver Joined MissingArgError(options or targets missing after %qs) --foffload== Specify offloading targets and options for them. +Driver Joined MissingArgError(targets missing after %qs) +-foffload= Specify offloading targets + +foffload-options= +Common Driver Joined MissingArgError(options or targets=options missing after %qs) +-foffload== Specify options for the offloading targets foffload-abi= Common Joined RejectNegative Enum(offload_abi) Var(flag_offload_abi) Init(OFFLOAD_ABI_UNSET) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index af2ce189fae..f8e41d41801 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -197,17 +197,17 @@ in the following sections. @item C Language Options @xref{C Dialect Options,,Options Controlling C Dialect}. -@gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol --fpermitted-flt-eval-methods=@var{standard} @gol --aux-info @var{filename} -fallow-parameterless-variadic-functions @gol --fno-asm -fno-builtin -fno-builtin-@var{function} -fgimple@gol --fhosted -ffreestanding @gol +@gccoptlist{-ansi -std=@var{standard} -aux-info @var{filename} @gol +-fallow-parameterless-variadic-functions -fno-asm @gol +-fno-builtin -fno-builtin-@var{function} -fcond-mismatch @gol +-ffreestanding -fgimple -fgnu-tm -fgnu89-inline -fhosted @gol +-flax-vector-conversions -fms-extensions @gol -fopenacc -fopenacc-dim=@var{geom} @gol +-foffload=@var{arg} -foffload-options=@var{arg} @gol -fopenmp -fopenmp-simd @gol --fms-extensions -fplan9-extensions -fsso-struct=@var{endianness} @gol --fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol --fsigned-bitfields -fsigned-char @gol --funsigned-bitfields -funsigned-char} +-fpermitted-flt-eval-methods=@var{standard} @gol +-fplan9-extensions -fsigned-bitfields -funsigned-bitfields @gol +-fsigned-char -funsigned-char -fsso-struct=@var{endianness}} @item C++ Language Options @xref{C++ Dialect Options,,Options Controlling C++ Dialect}. @@ -2448,50 +2448,6 @@ and will almost certainly change in incompatible ways in future releases. @end table -@item -fgnu89-inline -@opindex fgnu89-inline -The option @option{-fgnu89-inline} tells GCC to use the traditional -GNU semantics for @code{inline} functions when in C99 mode. -@xref{Inline,,An Inline Function is As Fast As a Macro}. -Using this option is roughly equivalent to adding the -@code{gnu_inline} function attribute to all inline functions -(@pxref{Function Attributes}). - -The option @option{-fno-gnu89-inline} explicitly tells GCC to use the -C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it -specifies the default behavior). -This option is not supported in @option{-std=c90} or -@option{-std=gnu90} mode. - -The preprocessor macros @code{__GNUC_GNU_INLINE__} and -@code{__GNUC_STDC_INLINE__} may be used to check which semantics are -in effect for @code{inline} functions. @xref{Common Predefined -Macros,,,cpp,The C Preprocessor}. - -@item -fpermitted-flt-eval-methods=@var{style} -@opindex fpermitted-flt-eval-methods -@opindex fpermitted-flt-eval-methods=c11 -@opindex fpermitted-flt-eval-methods=ts-18661-3 -ISO/IEC TS 18661-3 defines new permissible values for -@code{FLT_EVAL_METHOD} that indicate that operations and constants with -a semantic type that is an interchange or extended format should be -evaluated to the precision and range of that type. These new values are -a superset of those permitted under C99/C11, which does not specify the -meaning of other positive values of @code{FLT_EVAL_METHOD}. As such, code -conforming to C11 may not have been written expecting the possibility of -the new values. - -@option{-fpermitted-flt-eval-methods} specifies whether the compiler -should allow only the values of @code{FLT_EVAL_METHOD} specified in C99/C11, -or the extended set of values specified in ISO/IEC TS 18661-3. - -@var{style} is either @code{c11} or @code{ts-18661-3} as appropriate. - -The default when in a standards compliant mode (@option{-std=c11} or similar) -is @option{-fpermitted-flt-eval-methods=c11}. The default when in a GNU -dialect (@option{-std=gnu11} or similar) is -@option{-fpermitted-flt-eval-methods=ts-18661-3}. - @item -aux-info @var{filename} @opindex aux-info Output to the given filename prototyped declarations for all functions @@ -2572,6 +2528,25 @@ built-in functions selectively when using @option{-fno-builtin} or #define strcpy(d, s) __builtin_strcpy ((d), (s)) @end smallexample +@item -fcond-mismatch +@opindex fcond-mismatch +Allow conditional expressions with mismatched types in the second and +third arguments. The value of such an expression is void. This option +is not supported for C++. + +@item -ffreestanding +@opindex ffreestanding +@cindex hosted environment + +Assert that compilation targets a freestanding environment. This +implies @option{-fno-builtin}. A freestanding environment +is one in which the standard library may not exist, and program startup may +not necessarily be at @code{main}. The most obvious example is an OS kernel. +This is equivalent to @option{-fno-hosted}. + +@xref{Standards,,Language Standards Supported by GCC}, for details of +freestanding and hosted environments. + @item -fgimple @opindex fgimple @@ -2579,6 +2554,42 @@ Enable parsing of function definitions marked with @code{__GIMPLE}. This is an experimental feature that allows unit testing of GIMPLE passes. +@item -fgnu-tm +@opindex fgnu-tm +When the option @option{-fgnu-tm} is specified, the compiler +generates code for the Linux variant of Intel's current Transactional +Memory ABI specification document (Revision 1.1, May 6 2009). This is +an experimental feature whose interface may change in future versions +of GCC, as the official specification changes. Please note that not +all architectures are supported for this feature. + +For more information on GCC's support for transactional memory, +@xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU +Transactional Memory Library}. + +Note that the transactional memory feature is not supported with +non-call exceptions (@option{-fnon-call-exceptions}). + +@item -fgnu89-inline +@opindex fgnu89-inline +The option @option{-fgnu89-inline} tells GCC to use the traditional +GNU semantics for @code{inline} functions when in C99 mode. +@xref{Inline,,An Inline Function is As Fast As a Macro}. +Using this option is roughly equivalent to adding the +@code{gnu_inline} function attribute to all inline functions +(@pxref{Function Attributes}). + +The option @option{-fno-gnu89-inline} explicitly tells GCC to use the +C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it +specifies the default behavior). +This option is not supported in @option{-std=c90} or +@option{-std=gnu90} mode. + +The preprocessor macros @code{__GNUC_GNU_INLINE__} and +@code{__GNUC_STDC_INLINE__} may be used to check which semantics are +in effect for @code{inline} functions. @xref{Common Predefined +Macros,,,cpp,The C Preprocessor}. + @item -fhosted @opindex fhosted @cindex hosted environment @@ -2589,18 +2600,32 @@ entire standard library is available, and in which @code{main} has a return type of @code{int}. Examples are nearly everything except a kernel. This is equivalent to @option{-fno-freestanding}. -@item -ffreestanding -@opindex ffreestanding -@cindex hosted environment +@item -flax-vector-conversions +@opindex flax-vector-conversions +Allow implicit conversions between vectors with differing numbers of +elements and/or incompatible element types. This option should not be +used for new code. -Assert that compilation targets a freestanding environment. This -implies @option{-fno-builtin}. A freestanding environment -is one in which the standard library may not exist, and program startup may -not necessarily be at @code{main}. The most obvious example is an OS kernel. -This is equivalent to @option{-fno-hosted}. +@item -fms-extensions +@opindex fms-extensions +Accept some non-standard constructs used in Microsoft header files. -@xref{Standards,,Language Standards Supported by GCC}, for details of -freestanding and hosted environments. +In C++ code, this allows member names in structures to be similar +to previous types declarations. + +@smallexample +typedef int UOW; +struct ABC @{ + UOW UOW; +@}; +@end smallexample + +Some cases of unnamed fields in structures and unions are only +accepted with this option. @xref{Unnamed Fields,,Unnamed struct/union +fields within structs/unions}, for details. + +Note that this option is o?f for all targets except for x86 +targets using ms-abi. @item -fopenacc @opindex fopenacc @@ -2639,42 +2664,58 @@ Enable handling of OpenMP's SIMD directives with @code{#pragma omp} in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives are ignored. -@item -fgnu-tm -@opindex fgnu-tm -When the option @option{-fgnu-tm} is specified, the compiler -generates code for the Linux variant of Intel's current Transactional -Memory ABI specification document (Revision 1.1, May 6 2009). This is -an experimental feature whose interface may change in future versions -of GCC, as the official specification changes. Please note that not -all architectures are supported for this feature. - -For more information on GCC's support for transactional memory, -@xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU -Transactional Memory Library}. - -Note that the transactional memory feature is not supported with -non-call exceptions (@option{-fnon-call-exceptions}). - -@item -fms-extensions -@opindex fms-extensions -Accept some non-standard constructs used in Microsoft header files. - -In C++ code, this allows member names in structures to be similar -to previous types declarations. +@item -foffload=disable +@itemx -foffload=default +@itemx -foffload=@var{target-list} +@opindex foffload +@cindex Offloading targets +@cindex OpenACC offloading targets +@cindex OpenMP offloading targets +Specify for which OpenMP and OpenACC offload targets code should be generated. +The default behavior, equivalent to @option{-foffload=default}, is to generate +code for all supported offload targets. The @option{-foffload=disable} form +generates code only for the host fallback, while +@option{-foffload=@var{target-list}} generates code only for the specified +comma-separated list of offload targets. + +Offload targets are specified in GCC's internal target-triplet format. You can +run the compiler with @option{-v} to show the list of configured offload targets +under @code{OFFLOAD_TARGET_NAMES}. + +@item -foffload-options=@var{options} +@itemx -foffload-options=@var{target-triplet-list}=@var{options} +@opindex foffload +@cindex Offloading options +@cindex OpenACC offloading options +@cindex OpenMP offloading options + +With @option{-foffload-options=@var{options}}, GCC passes the specified +@var{options} to the compilers for all enabled offloading targets. You can +specify options that apply only to a specific target or targets by using +the @option{-foffload-options=@var{target-list}=@var{options}} form. The +@var{target-list} is a comma-separated list in the same format as for the +@option{-foffload=} option. + +Typical command lines are @smallexample -typedef int UOW; -struct ABC @{ - UOW UOW; -@}; +-foffload-options=-lgfortran -foffload-options=-lm +-foffload-options="-lgfortran -lm" -foffload-options=nvptx-none=-latomic +-foffload-options=amdgcn-amdhsa=-march=gfx906 -foffload-options=-lm @end smallexample -Some cases of unnamed fields in structures and unions are only -accepted with this option. @xref{Unnamed Fields,,Unnamed struct/union -fields within structs/unions}, for details. - -Note that this option is off for all targets except for x86 -targets using ms-abi. +@item -fpermitted-flt-eval-methods=@var{style} +@opindex fpermitted-flt-eval-methods +@opindex fpermitted-flt-eval-methods=c11 +@opindex fpermitted-flt-eval-methods=ts-18661-3 +ISO/IEC TS 18661-3 defines new permissible values for +@code{FLT_EVAL_METHOD} that indicate that operations and constants with +a semantic type that is an interchange or extended format should be +evaluated to the precision and range of that type. These new values are +a superset of those permitted under C99/C11, which does not specify the +meaning of other positive values of @code{FLT_EVAL_METHOD}. As such, code +conforming to C11 may not have been written expecting the possibility of +the new values. @item -fplan9-extensions @opindex fplan9-extensions @@ -2687,17 +2728,26 @@ fields declared using a typedef. @xref{Unnamed Fields,,Unnamed struct/union fields within structs/unions}, for details. This is only supported for C, not C++. -@item -fcond-mismatch -@opindex fcond-mismatch -Allow conditional expressions with mismatched types in the second and -third arguments. The value of such an expression is void. This option -is not supported for C++. +@item -fsigned-bitfields +@itemx -funsigned-bitfields +@itemx -fno-signed-bitfields +@itemx -fno-unsigned-bitfields +@opindex fsigned-bitfields +@opindex funsigned-bitfields +@opindex fno-signed-bitfields +@opindex fno-unsigned-bitfields +These options control whether a bit-field is signed or unsigned, when the +declaration does not use either @code{signed} or @code{unsigned}. By +default, such a bit-field is signed, because this is consistent: the +basic integer types such as @code{int} are signed types. -@item -flax-vector-conversions -@opindex flax-vector-conversions -Allow implicit conversions between vectors with differing numbers of -elements and/or incompatible element types. This option should not be -used for new code. +@item -fsigned-char +@opindex fsigned-char +Let the type @code{char} be signed, like @code{signed char}. + +Note that this is equivalent to @option{-fno-unsigned-char}, which is +the negative form of @option{-funsigned-char}. Likewise, the option +@option{-fno-signed-char} is equivalent to @option{-funsigned-char}. @item -funsigned-char @opindex funsigned-char @@ -2718,27 +2768,6 @@ The type @code{char} is always a distinct type from each of @code{signed char} or @code{unsigned char}, even though its behavior is always just like one of those two. -@item -fsigned-char -@opindex fsigned-char -Let the type @code{char} be signed, like @code{signed char}. - -Note that this is equivalent to @option{-fno-unsigned-char}, which is -the negative form of @option{-funsigned-char}. Likewise, the option -@option{-fno-signed-char} is equivalent to @option{-funsigned-char}. - -@item -fsigned-bitfields -@itemx -funsigned-bitfields -@itemx -fno-signed-bitfields -@itemx -fno-unsigned-bitfields -@opindex fsigned-bitfields -@opindex funsigned-bitfields -@opindex fno-signed-bitfields -@opindex fno-unsigned-bitfields -These options control whether a bit-field is signed or unsigned, when the -declaration does not use either @code{signed} or @code{unsigned}. By -default, such a bit-field is signed, because this is consistent: the -basic integer types such as @code{int} are signed types. - @item -fsso-struct=@var{endianness} @opindex fsso-struct Set the default scalar storage order of structures and unions to the diff --git a/gcc/gcc.c b/gcc/gcc.c index af286400a4a..203e6e5f8ed 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -3977,6 +3977,68 @@ driver_wrong_lang_callback (const struct cl_decoded_option *decoded, static const char *spec_lang = 0; static int last_language_n_infiles; + +/* Check that GCC is configured to support the offload target. */ + +static void +check_offload_target_name (const char *target, ptrdiff_t len) +{ + const char *n, *c = OFFLOAD_TARGETS; + char *target2 = NULL; + while (c) + { + n = strchr (c, ','); + if (n == NULL) + n = strchr (c, '\0'); + if (len == n - c && strncmp (target, c, n - c) == 0) + break; + c = *n ? n + 1 : NULL; + } + if (!c) + { + if (target[len] != '\0') + { + target2 = XNEWVEC (char, len + 1); + memcpy (target2, target, len); + target2[len] = '\0'; + } + fatal_error (input_location, + "GCC is not configured to support %qs as offload target", + target2 ? target2 : target); + XDELETEVEC (target2); + } +} + +/* Sanity check for -foffload-options. */ + +static void +check_foffload_target_names (const char *arg) +{ + const char *cur, *next, *end; + /* If option argument starts with '-' then no target is specified and we + do not need to parse it. */ + if (arg[0] == '-') + return; + end = strchr (arg, '='); + if (end == NULL) + { + error ("%<=options%> missing after %<-foffload-options=target%>"); + return; + } + + cur = arg; + while (cur < end) + { + next = strchr (cur, ','); + if (next == NULL) + next = end; + next = (next > end) ? end : next; + + check_offload_target_name (cur, next - cur); + cur = next + 1; + } +} + /* Parse -foffload option argument. */ static void @@ -4006,33 +4068,25 @@ handle_foffload_option (const char *arg) memcpy (target, cur, next - cur); target[next - cur] = '\0'; - /* If 'disable' is passed to the option, stop parsing the option and clean - the list of offload targets. */ + /* If 'disable' is passed to the option, clean the list of + offload targets and return, even if more targets follow. */ if (strcmp (target, "disable") == 0) { free (offload_targets); offload_targets = xstrdup (""); - break; + return; } - /* Check that GCC is configured to support the offload target. */ - c = OFFLOAD_TARGETS; - while (c) + /* Reset offloading list and continue. */ + if (strcmp (target, "default") == 0) { - n = strchr (c, ','); - if (n == NULL) - n = strchr (c, '\0'); - - if (next - cur == n - c && strncmp (target, c, n - c) == 0) - break; - - c = *n ? n + 1 : NULL; + free (offload_targets); + offload_targets = NULL; + goto next_item; } - if (!c) - fatal_error (input_location, - "GCC is not configured to support %s as offload target", - target); + /* Check that GCC is configured to support the offload target. */ + check_offload_target_name (target, next - cur); if (!offload_targets) { @@ -4067,7 +4121,7 @@ handle_foffload_option (const char *arg) memcpy (offload_targets + offload_targets_len, target, next - cur + 1); } } - +next_item: cur = next + 1; XDELETEVEC (target); } @@ -4499,8 +4553,16 @@ driver_handle_option (struct gcc_options *opts, flag_wpa = ""; break; + case OPT_foffload_options_: + check_foffload_target_names (arg); + break; + case OPT_foffload_: handle_foffload_option (arg); + if (arg[0] == '-' || NULL != strchr (arg, '=')) + save_switch (concat ("-foffload-options=", arg, NULL), + 0, NULL, validated, true); + do_save = false; break; default: diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c index 6dd55b68072..9496b3c8e0b 100644 --- a/gcc/lto-opts.c +++ b/gcc/lto-opts.c @@ -174,7 +174,8 @@ lto_write_options (void) We do not need those. The only exception is -foffload option, if we write it in offload_lto section. Also drop all diagnostic options. */ if ((cl_options[option->opt_index].flags & (CL_DRIVER|CL_WARNING)) - && (!lto_stream_offload_p || option->opt_index != OPT_foffload_)) + && (!lto_stream_offload_p + || option->opt_index != OPT_foffload_options_)) continue; for (j = 0; j < option->canonical_option_num_elements; ++j) diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 1c2643984f9..aae48aff100 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -453,7 +453,7 @@ merge_and_complain (vec decoded_options, break; - case OPT_foffload_: + case OPT_foffload_options_: decoded_options.safe_push (*foption); break; @@ -833,7 +833,7 @@ append_offload_options (obstack *argv_obstack, const char *target, unsigned argc; cl_decoded_option *option = &options[i]; - if (option->opt_index != OPT_foffload_) + if (option->opt_index != OPT_foffload_options_) continue; /* If option argument starts with '-' then no target is specified. That @@ -844,11 +844,7 @@ append_offload_options (obstack *argv_obstack, const char *target, else { opts = strchr (option->arg, '='); - /* If there are offload targets specified, but no actual options, - there is nothing to do here. */ - if (!opts) - continue; - + gcc_assert (opts); cur = option->arg; while (cur < opts) diff --git a/gcc/opts.c b/gcc/opts.c index 52e9e3a9df9..3a43dd43398 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -2706,7 +2706,7 @@ common_handle_option (struct gcc_options *opts, /* Deferred. */ break; - case OPT_foffload_: + case OPT_foffload_options_: /* Deferred. */ break; diff --git a/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c b/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c index 0eea73b144b..4bf62c3828f 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c +++ b/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-additional-options "-foffload=nvptx-none=-latomic" { target offload_target_nvptx } } */ +/* { dg-additional-options "-foffload-options=nvptx-none=-latomic" { target offload_target_nvptx } } */ #include diff --git a/libgomp/testsuite/libgomp.c-c++-common/reduction-5.c b/libgomp/testsuite/libgomp.c-c++-common/reduction-5.c index 31fa2670312..52f23e35b9a 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/reduction-5.c +++ b/libgomp/testsuite/libgomp.c-c++-common/reduction-5.c @@ -1,4 +1,4 @@ -/* { dg-additional-options "-foffload=nvptx-none=-latomic" { target { offload_target_nvptx } } } */ +/* { dg-additional-options "-foffload-options=nvptx-none=-latomic" { target { offload_target_nvptx } } } */ /* C / C++'s logical AND and OR operators take any scalar argument which compares (un)equal to 0 - the result 1 or 0 and of type int. diff --git a/libgomp/testsuite/libgomp.c-c++-common/reduction-6.c b/libgomp/testsuite/libgomp.c-c++-common/reduction-6.c index 727e11e4edf..62e81506bdd 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/reduction-6.c +++ b/libgomp/testsuite/libgomp.c-c++-common/reduction-6.c @@ -1,4 +1,4 @@ -/* { dg-additional-options "-foffload=nvptx-none=-latomic" { target { offload_target_nvptx } } } */ +/* { dg-additional-options "-foffload-options=nvptx-none=-latomic" { target { offload_target_nvptx } } } */ /* C / C++'s logical AND and OR operators take any scalar argument which compares (un)equal to 0 - the result 1 or 0 and of type int. diff --git a/libgomp/testsuite/libgomp.c/target-44.c b/libgomp/testsuite/libgomp.c/target-44.c index b95e807a114..a5da81d7e23 100644 --- a/libgomp/testsuite/libgomp.c/target-44.c +++ b/libgomp/testsuite/libgomp.c/target-44.c @@ -1,4 +1,4 @@ -/* { dg-additional-options "-foffload=nvptx-none=-latomic" { target { offload_target_nvptx } } } */ +/* { dg-additional-options "-foffload-options=nvptx-none=-latomic" { target { offload_target_nvptx } } } */ #include --------------43ECF06B6310A795B681446C--