> -----Original Message-----
> From: Thomas Schwinge <[email protected]>
> Sent: Tuesday, September 10, 2024 8:19 PM
> To: Prathamesh Kulkarni <[email protected]>; Richard Biener
> <[email protected]>
> Cc: Andrew Pinski <[email protected]>; [email protected]; Jakub
> Jelinek <[email protected]>
> Subject: RE: [nvptx] Pass -m32/-m64 to host_compiler if it has
> multilib support
>
> External email: Use caution opening links or attachments
>
>
> Hi Prathamesh!
>
> On 2024-09-10T13:22:10+0000, Prathamesh Kulkarni
> <[email protected]> wrote:
> >> -----Original Message-----
> >> From: Thomas Schwinge <[email protected]>
> >> Sent: Monday, September 9, 2024 8:50 PM
>
> >> > Could you please test the patch for gcn backend ?
>
> I've successfully tested x86_64 host with GCN as well as nvptx
> offloading, and also ppc64le host with nvptx offloading.
Thanks for the thorough testing!
>
> I just realized two more minor things:
>
> > [nvptx] Pass host specific ABI opts from mkoffload.
> >
> > The patch adds an option -foffload-abi-host-opts, which is set by
> host
> > in TARGET_OFFLOAD_OPTIONS, and mkoffload then passes its value to
> > host_compiler.
> >
>
> Please add here " PR target/96265".
>
> > gcc/ChangeLog:
> > * common.opt (foffload-abi-host-opts): New option.
> > * config/aarch64/aarch64.cc (aarch64_offload_options): Pass
> > -foffload-abi-host-opts.
> > * config/i386/i386-opts.cc (ix86_offload_options): Likewise.
> > * config/rs6000/rs6000.cc (rs6000_offload_options): Likewise.
> > * config/nvptx/mkoffload.cc (offload_abi_host_opts): Define.
> > (compile_native): Append offload_abi_host_opts to
> argv_obstack.
> > (main): Handle option -foffload-abi-host-opts.
> > * config/gcn/mkoffload.cc (offload_abi_host_opts): Define.
> > (compile_native): Append offload_abi_host_opts to
> argv_obstack.
> > (main): Handle option -foffload-abi-host-opts.
> > * lto-wrapper.cc (merge_and_complain): Handle
> > -foffload-abi-host-opts.
> > (append_compiler_options): Likewise.
> > * opts.cc (common_handle_option): Likewise.
> >
> > Signed-off-by: Prathamesh Kulkarni <[email protected]>
>
> Given that we're adding a new option to 'gcc/common.opt', do we need
> to update (regenerate?) 'gcc/common.opt.urls'? (I've not yet had the
> need myself, and therefore not yet looked up how to do that.) Or
> maybe not, given that '-foffload-abi-host-opts=[...]' isn't
> documented?
I checked common.opt.urls doesn't seem to have entry for -foffload-abi,
so I guess it's probably not necessary for -foffload-abi-host-opts either ?
Or should we do it for both the options ?
>
> Otherwise looks good to me; OK to push (with these minor items
> addressed, as necessary), thanks!
Thanks, I have committed the patch to trunk in:
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=e783a4a683762487cb003ae48235f3d44875de1b
Will post a follow up patch to regenerate common.opt.urls for -foffload-abi and
-foffload-abi-host-opts if required.
Thanks,
Prathamesh
>
>
> Grüße
> Thomas
>
>
> > diff --git a/gcc/common.opt b/gcc/common.opt index
> > ea39f87ae71..d270e524ff4 100644
> > --- a/gcc/common.opt
> > +++ b/gcc/common.opt
> > @@ -2361,6 +2361,10 @@ Enum(offload_abi) String(ilp32)
> > Value(OFFLOAD_ABI_ILP32) EnumValue
> > Enum(offload_abi) String(lp64) Value(OFFLOAD_ABI_LP64)
> >
> > +foffload-abi-host-opts=
> > +Common Joined MissingArgError(option missing after %qs)
> > +-foffload-abi-host-opts=<options> Specify host ABI options.
> > +
> > fomit-frame-pointer
> > Common Var(flag_omit_frame_pointer) Optimization When possible do
> > not generate stack frames.
> > diff --git a/gcc/config/aarch64/aarch64.cc
> > b/gcc/config/aarch64/aarch64.cc index 6a3f1a23a9f..6ccf08d1cc0
> 100644
> > --- a/gcc/config/aarch64/aarch64.cc
> > +++ b/gcc/config/aarch64/aarch64.cc
> > @@ -19000,9 +19000,9 @@ static char *
> > aarch64_offload_options (void)
> > {
> > if (TARGET_ILP32)
> > - return xstrdup ("-foffload-abi=ilp32");
> > + return xstrdup ("-foffload-abi=ilp32
> > + -foffload-abi-host-opts=-mabi=ilp32");
> > else
> > - return xstrdup ("-foffload-abi=lp64");
> > + return xstrdup ("-foffload-abi=lp64
> > + -foffload-abi-host-opts=-mabi=lp64");
> > }
> >
> > static struct machine_function *
> > diff --git a/gcc/config/gcn/mkoffload.cc
> b/gcc/config/gcn/mkoffload.cc
> > index b8d981878ed..345bbf7709c 100644
> > --- a/gcc/config/gcn/mkoffload.cc
> > +++ b/gcc/config/gcn/mkoffload.cc
> > @@ -133,6 +133,8 @@ static const char *gcn_dumpbase; static struct
> > obstack files_to_cleanup;
> >
> > enum offload_abi offload_abi = OFFLOAD_ABI_UNSET;
> > +const char *offload_abi_host_opts = NULL;
> > +
> > uint32_t elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX900; // Default GPU
> architecture.
> > uint32_t elf_flags = EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4;
> >
> > @@ -819,17 +821,10 @@ compile_native (const char *infile, const char
> *outfile, const char *compiler,
> > obstack_ptr_grow (&argv_obstack, gcn_dumpbase);
> > obstack_ptr_grow (&argv_obstack, "-dumpbase-ext");
> > obstack_ptr_grow (&argv_obstack, ".c");
> > - switch (offload_abi)
> > - {
> > - case OFFLOAD_ABI_LP64:
> > - obstack_ptr_grow (&argv_obstack, "-m64");
> > - break;
> > - case OFFLOAD_ABI_ILP32:
> > - obstack_ptr_grow (&argv_obstack, "-m32");
> > - break;
> > - default:
> > - gcc_unreachable ();
> > - }
> > + if (!offload_abi_host_opts)
> > + fatal_error (input_location,
> > + "%<-foffload-abi-host-opts%> not specified.");
> > + obstack_ptr_grow (&argv_obstack, offload_abi_host_opts);
> > obstack_ptr_grow (&argv_obstack, infile);
> > obstack_ptr_grow (&argv_obstack, "-c");
> > obstack_ptr_grow (&argv_obstack, "-o"); @@ -998,6 +993,15 @@ main
> > (int argc, char **argv)
> > "unrecognizable argument of option %<" STR
> "%>");
> > }
> > #undef STR
> > + else if (startswith (argv[i], "-foffload-abi-host-opts="))
> > + {
> > + if (offload_abi_host_opts)
> > + fatal_error (input_location,
> > + "%<-foffload-abi-host-opts%> specified "
> > + "multiple times");
> > + offload_abi_host_opts
> > + = argv[i] + strlen ("-foffload-abi-host-opts=");
> > + }
> > else if (strcmp (argv[i], "-fopenmp") == 0)
> > fopenmp = true;
> > else if (strcmp (argv[i], "-fopenacc") == 0) diff --git
> > a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
> > index f79257cc764..55e0210260f 100644
> > --- a/gcc/config/i386/i386-options.cc
> > +++ b/gcc/config/i386/i386-options.cc
> > @@ -3680,8 +3680,8 @@ char *
> > ix86_offload_options (void)
> > {
> > if (TARGET_LP64)
> > - return xstrdup ("-foffload-abi=lp64");
> > - return xstrdup ("-foffload-abi=ilp32");
> > + return xstrdup ("-foffload-abi=lp64
> > + -foffload-abi-host-opts=-m64"); return xstrdup
> > + ("-foffload-abi=ilp32 -foffload-abi-host-opts=-m32");
> > }
> >
> > /* Handle "cdecl", "stdcall", "fastcall", "regparm", "thiscall",
> diff
> > --git a/gcc/config/nvptx/mkoffload.cc
> b/gcc/config/nvptx/mkoffload.cc
> > index 503b1abcefd..df16ee64736 100644
> > --- a/gcc/config/nvptx/mkoffload.cc
> > +++ b/gcc/config/nvptx/mkoffload.cc
> > @@ -61,6 +61,7 @@ static const char *omp_requires_file; static
> const
> > char *ptx_dumpbase;
> >
> > enum offload_abi offload_abi = OFFLOAD_ABI_UNSET;
> > +const char *offload_abi_host_opts = NULL;
> >
> > /* Delete tempfiles. */
> >
> > @@ -607,17 +608,10 @@ compile_native (const char *infile, const char
> *outfile, const char *compiler,
> > obstack_ptr_grow (&argv_obstack, ptx_dumpbase);
> > obstack_ptr_grow (&argv_obstack, "-dumpbase-ext");
> > obstack_ptr_grow (&argv_obstack, ".c");
> > - switch (offload_abi)
> > - {
> > - case OFFLOAD_ABI_LP64:
> > - obstack_ptr_grow (&argv_obstack, "-m64");
> > - break;
> > - case OFFLOAD_ABI_ILP32:
> > - obstack_ptr_grow (&argv_obstack, "-m32");
> > - break;
> > - default:
> > - gcc_unreachable ();
> > - }
> > + if (!offload_abi_host_opts)
> > + fatal_error (input_location,
> > + "%<-foffload-abi-host-opts%> not specified.");
> > + obstack_ptr_grow (&argv_obstack, offload_abi_host_opts);
> > obstack_ptr_grow (&argv_obstack, infile);
> > obstack_ptr_grow (&argv_obstack, "-c");
> > obstack_ptr_grow (&argv_obstack, "-o"); @@ -721,6 +715,15 @@ main
> > (int argc, char **argv)
> > "unrecognizable argument of option " STR);
> > }
> > #undef STR
> > + else if (startswith (argv[i], "-foffload-abi-host-opts="))
> > + {
> > + if (offload_abi_host_opts)
> > + fatal_error (input_location,
> > + "%<-foffload-abi-host-opts%> specified "
> > + "multiple times");
> > + offload_abi_host_opts
> > + = argv[i] + strlen ("-foffload-abi-host-opts=");
> > + }
> > else if (strcmp (argv[i], "-fopenmp") == 0)
> > fopenmp = true;
> > else if (strcmp (argv[i], "-fopenacc") == 0) diff --git
> > a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index
> > 08579bc83e6..0bf8bae27f5 100644
> > --- a/gcc/config/rs6000/rs6000.cc
> > +++ b/gcc/config/rs6000/rs6000.cc
> > @@ -17330,9 +17330,9 @@ static char *
> > rs6000_offload_options (void)
> > {
> > if (TARGET_64BIT)
> > - return xstrdup ("-foffload-abi=lp64");
> > + return xstrdup ("-foffload-abi=lp64
> > + -foffload-abi-host-opts=-m64");
> > else
> > - return xstrdup ("-foffload-abi=ilp32");
> > + return xstrdup ("-foffload-abi=ilp32
> > + -foffload-abi-host-opts=-m32");
> > }
> >
> >
> > diff --git a/gcc/lto-wrapper.cc b/gcc/lto-wrapper.cc index
> > c07765b37a2..7de045da9b9 100644
> > --- a/gcc/lto-wrapper.cc
> > +++ b/gcc/lto-wrapper.cc
> > @@ -484,6 +484,7 @@ merge_and_complain (vec<cl_decoded_option>
> > &decoded_options,
> >
> >
> > case OPT_foffload_abi_:
> > + case OPT_foffload_abi_host_opts_:
> > if (existing_opt == -1)
> > decoded_options.safe_push (*foption);
> > else if (foption->value !=
> > decoded_options[existing_opt].value)
> > @@ -745,6 +746,7 @@ append_compiler_options (obstack *argv_obstack,
> vec<cl_decoded_option> opts)
> > case OPT_fopenacc:
> > case OPT_fopenacc_dim_:
> > case OPT_foffload_abi_:
> > + case OPT_foffload_abi_host_opts_:
> > case OPT_fcf_protection_:
> > case OPT_fasynchronous_unwind_tables:
> > case OPT_funwind_tables:
> > diff --git a/gcc/opts.cc b/gcc/opts.cc index
> fc6abf6f582..a78f73e57e3
> > 100644
> > --- a/gcc/opts.cc
> > +++ b/gcc/opts.cc
> > @@ -3070,11 +3070,14 @@ common_handle_option (struct gcc_options
> *opts,
> > break;
> >
> > case OPT_foffload_abi_:
> > + case OPT_foffload_abi_host_opts_:
> > #ifdef ACCEL_COMPILER
> > /* Handled in the 'mkoffload's. */ #else
> > - error_at (loc, "%<-foffload-abi%> option can be specified
> only for "
> > - "offload compiler");
> > + error_at (loc,
> > + "%qs option can be specified only for offload
> compiler",
> > + (code == OPT_foffload_abi_) ? "-foffload-abi"
> > + :
> > + "-foffload-abi-host-opts");
> > #endif
> > break;
> >