Hi! On 2022-07-01T15:06:05+0200, Tobias Burnus <tob...@codesourcery.com> wrote: > OpenMP: Move omp requires checks to libgomp
This became commit r13-1458-g683f11843974f0bdf42f79cdcbb0c2b43c7b81b0 "OpenMP: Move omp requires checks to libgomp". As of this, when I need to debug an offloading-compilation ICE, for example, and start with 'gcc -save-temps -v', I can no longer just re-run the offloading-compilation's 'lto1' invocation, because: $ [...]/gcc/lto1 [...] -foffload-abi=lp64 -fopenmp [...] [...] lto1: fatal error: GCC_OFFLOAD_OMP_REQUIRES_FILE unset compilation terminated. That's because I missed setting the environment variable: GCC_OFFLOAD_OMP_REQUIRES_FILE=./declare-variant-1.xnvptx-none.mkoffload.omp_requires ..., which appears a number of lines earlier in the '-v' log. Couldn't we easily overcome this issue by turning the environment variable 'GCC_OFFLOAD_OMP_REQUIRES_FILE' into some new internal-use command-line flag, like '-foffload-abi'? That is, communication mechanics via '[...].mkoffload.omp_requires' files would stay the same, just how we communicate the file name changes: command-line flag instead of environment variable. For reference: > --- a/gcc/config/gcn/mkoffload.cc > +++ b/gcc/config/gcn/mkoffload.cc > @@ -1077,9 +1080,27 @@ main (int argc, char **argv) > unsetenv ("COMPILER_PATH"); > unsetenv ("LIBRARY_PATH"); > > + char *omp_requires_file; > + if (save_temps) > + omp_requires_file = concat (dumppfx, ".mkoffload.omp_requires", NULL); > + else > + omp_requires_file = make_temp_file (".mkoffload.omp_requires"); > + > /* Run the compiler pass. */ > + xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, > NULL)); > fork_execute (cc_argv[0], CONST_CAST (char **, cc_argv), true, > ".gcc_args"); > obstack_free (&cc_argv_obstack, NULL); > + unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE"); > + > + in = fopen (omp_requires_file, "rb"); > + if (!in) > + fatal_error (input_location, "cannot open omp_requires file %qs", > + omp_requires_file); > + uint32_t omp_requires; > + if (fread (&omp_requires, sizeof (omp_requires), 1, in) != 1) > + fatal_error (input_location, "cannot read omp_requires file %qs", > + omp_requires_file); > + fclose (in); > --- a/gcc/config/nvptx/mkoffload.cc > +++ b/gcc/config/nvptx/mkoffload.cc > @@ -583,19 +586,37 @@ main (int argc, char **argv) > unsetenv ("COMPILER_PATH"); > unsetenv ("LIBRARY_PATH"); > > + char *omp_requires_file; > + if (save_temps) > + omp_requires_file = concat (dumppfx, ".mkoffload.omp_requires", NULL); > + else > + omp_requires_file = make_temp_file (".mkoffload.omp_requires"); > + > + xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, > NULL)); > fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true, > ".gcc_args"); > obstack_free (&argv_obstack, NULL); > + unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE"); > > xputenv (concat ("GCC_EXEC_PREFIX=", execpath, NULL)); > xputenv (concat ("COMPILER_PATH=", cpath, NULL)); > xputenv (concat ("LIBRARY_PATH=", lpath, NULL)); > > + in = fopen (omp_requires_file, "rb"); > + if (!in) > + fatal_error (input_location, "cannot open omp_requires file %qs", > + omp_requires_file); > + uint32_t omp_requires; > + if (fread (&omp_requires, sizeof (omp_requires), 1, in) != 1) > + fatal_error (input_location, "cannot read omp_requires file %qs", > + omp_requires_file); > + fclose (in); > --- a/gcc/lto-cgraph.cc > +++ b/gcc/lto-cgraph.cc > @@ -1821,6 +1906,18 @@ input_offload_tables (bool do_force_output) > lto_destroy_simple_input_block (file_data, LTO_section_offload_table, > ib, data, len); > } > +#ifdef ACCEL_COMPILER > + char *omp_requires_file = getenv ("GCC_OFFLOAD_OMP_REQUIRES_FILE"); > + if (omp_requires_file == NULL || omp_requires_file[0] == '\0') > + fatal_error (input_location, "GCC_OFFLOAD_OMP_REQUIRES_FILE unset"); > + FILE *f = fopen (omp_requires_file, "wb"); > + if (!f) > + fatal_error (input_location, "Cannot open omp_requires file %qs", > + omp_requires_file); > + uint32_t req_mask = omp_requires_mask & ~OMP_REQUIRES_TARGET_USED; > + fwrite (&req_mask, sizeof (req_mask), 1, f); > + fclose (f); > +#endif > } Grüße Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955