Ups to quick/wrong patch file. I had found an issue related to 'noclone' (duplicated entries, dg-scan-dump issues with OpenACC) – but ended up to attach the wrong file... Changes: omp-low.cc and gcc/testsuite/*/goacc/. The rest is the same. Tobias On 21.07.22 12:55, Tobias Burnus wrote: > This patch does three things: > > (a) It removes a 'sorry' for 'device(ancestor:1)' and passes > GOMP_DEVICE_HOST_FALLBACK as device number. > > This is sufficient for full "reverse" offload support with > ENABLE_OFFLOADING > being false - and -foffload=disable. And for simple hello-world cases. > > > On the libgomp side, the 'requires reverse_offload' currently implies > that > the initial device is the only device. While that's all fine, this change > is insufficient if offloading devices are enabled during compilation as: > > > (b.1) The offload-device lto1 should not see the content of the > ancestor:1 target > region and all the calls it does. If it does, there will be link > errors for > functions not available and it also would pointlessly increase the > code size. > > Thus, the second part is to create an empty function for devices and a > full > version for the host. > > The general idea is: The device version can be used as lookup pointer > in the > offload_funcs table; thus, we both need a function on the device and a > call to > GOMP_target_ext. > > It turned out to be quite difficult as late in the processing changing a > FUNCTION_DECL is not that easy – nor removing it after all analysis > has been > done. I hope the current version is not too hackish – and maybe > someone has > an idea how to best not to assembly the 'nonhost' version on the host. > (Not critical as it is small (having an empty body) - but still it > would be > nicer not to write it to .s file.) > > > (b.2) The omp-offload.cc assert showed that cloning and inlining happened > for the included libgomp example. While inlining should be okay (of > 'subroutine m2_tg_fn' (and for C/C++ 'tg_fn')) - cloning will break > the offload_func table lookup - and, hence, had to be excluded → > "noclone". > I think it could also affect non-anchestor:1 code - but did not try to > create an example. > > > (c) Prepare for actual reverse offloading > While (b) already does some prep work for real offloading, at least > one more > step is needed: In order to allow that the function pointer can be > used for > offload_func table lookup, it has to be passed to libgomp. > > Currently, the 'fn' argument is nullified in on-device calls to > GOMP_target_ext. > The third part of this patch nullifies it now only for non-reverse > offloads. > > OK for mainline? > > * * * > > Next steps: Implement reverse offloading for devices. In theory, this > only > requires libgomp work, but let's see what else will be required. > > Tobias ----------------- 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