https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95583

            Bug ID: 95583
           Summary: [OpenMP] Offloading – Missed optimization / before LTO
                    stream out, do more IPA optimizations affecting
                    host←→target ABI
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: missed-optimization, openmp
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
        Depends on: 95551
  Target Milestone: ---

Follow up to PR 95551 + PR 94848 and some other PRs.

Currently, the flow is:

1. ipa_passes (); → calls output_offload_tables, writes LTO for target lto1
   (with -flto, stop here and continue with host lto1).
On host compiler or host lto1 compiler – and on target lto1 compiler, do:
2. execute_ipa_pass_list (g->get_passes ()->all_late_ipa_passes);
3. omp_finish_file()

As all_late_ipa_passes runs after writing the output_offload_tables, function
arguments (→ PR92029), inlining, global variable elimination etc. cannot happen
if they affect the host←→target ABI. And adding libgomp calls (e.g. for global
variable mapping) hamper optimizations which could be done otherwise.

Hence, optimizations influencing the host←→target ABI need to be handled before
output_offload_tables.

An example is the test case of PR 95551, where -O3 eliminates the static,
read-only array variable created for a Fortran array constructor but one still
needs to keep it as it is referenced in the output_offload_tables. And as it is
referenced in a complicated way, the local-only variable cannot be eliminated
anymore on the device side either.

Another example is PR90591 where value propagation could be done (and mapping
could be optimized to avoid pointless copyin/copyout or ...).


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95551
[Bug 95551] [OpenMP, OpenACC] -fopenmp/-fopenacc also with -foffload=disable
fails with: (.gnu.offload_vars+0x0): undefined reference to `A.10.2'

Reply via email to