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

            Bug ID: 109819
           Summary: [OpenMP][OpenACC] -fno-lto effectively disables
                    offloading
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Keywords: openacc, openmp
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
                CC: jakub at gcc dot gnu.org
  Target Milestone: ---

In terms of LTO, the idea is for the link time:
If there is -flto → we know that we should do LTO and, hence, need to check
whether there is some. Without -flto, it might be that there is LTO and with
slim LTO, we may have to handle it.

For that reason, we have the following code in collect2.cc:

#ifdef ENABLE_LTO
static enum lto_mode_d lto_mode = LTO_MODE_WHOPR;
#else
static enum lto_mode_d lto_mode = LTO_MODE_NONE;
#endif
...
        else if (startswith (argv[i], "-fno-lto"))
          lto_mode = LTO_MODE_NONE;
...
    if (use_plugin)
      lto_mode = LTO_MODE_NONE;
    if (no_partition && lto_mode == LTO_MODE_WHOPR)
      lto_mode = LTO_MODE_LTO;


However, this has the unintended side effect that "-fno-lto" also disables
handling the device side of offloading.

* * *

The question is how to handle this. Maybe something along the lines of the
following:


 if (ENABLE_OFFLOADING && lto_mode == LTO_MODE_NONE
     && (-fopenmp || -fopenacc) && !-foffload=disable)
   lto_mode = LTO_MODE_WHOPR;

Reply via email to