diff options
author | Prathamesh Kulkarni <prathameshk@nvidia.com> | 2024-09-10 21:01:58 +0530 |
---|---|---|
committer | Prathamesh Kulkarni <prathameshk@nvidia.com> | 2024-09-10 21:13:33 +0530 |
commit | e783a4a683762487cb003ae48235f3d44875de1b (patch) | |
tree | 677fabae77d476eef806ec6b2f7e224011e55845 /gcc | |
parent | 747700cdb564ed1c5ef13bc73c2fe48639964c0f (diff) | |
download | gcc-e783a4a683762487cb003ae48235f3d44875de1b.zip gcc-e783a4a683762487cb003ae48235f3d44875de1b.tar.gz gcc-e783a4a683762487cb003ae48235f3d44875de1b.tar.bz2 |
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.
gcc/ChangeLog:
PR target/96265
* common.opt (foffload-abi-host-opts): New option.
* config/aarch64/aarch64.cc (aarch64_offload_options): Pass
-foffload-abi-host-opts.
* config/i386/i386-options.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 <prathameshk@nvidia.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/common.opt | 4 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.cc | 4 | ||||
-rw-r--r-- | gcc/config/gcn/mkoffload.cc | 26 | ||||
-rw-r--r-- | gcc/config/i386/i386-options.cc | 4 | ||||
-rw-r--r-- | gcc/config/nvptx/mkoffload.cc | 25 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.cc | 4 | ||||
-rw-r--r-- | gcc/lto-wrapper.cc | 2 | ||||
-rw-r--r-- | gcc/opts.cc | 7 |
8 files changed, 46 insertions, 30 deletions
diff --git a/gcc/common.opt b/gcc/common.opt index ea39f87..d270e52 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 6a3f1a2..6ccf08d 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 b8d9818..345bbf7 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 f79257c..55e0210 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 503b1ab..df16ee6 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 08579bc..0bf8bae 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 6d847e0..141856c 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 d48a1ac..acd53be 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; |