https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119677
Bug ID: 119677 Summary: [OpenMP][6.1] Support omp_default_device / Cleanup modify_call_for_omp_dispatch via GOMP_DEVICE_DEFAULT_OMP_61 Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: openmp Severity: normal Priority: P3 Component: libgomp Assignee: unassigned at gcc dot gnu.org Reporter: burnus at gcc dot gnu.org CC: jakub at gcc dot gnu.org Target Milestone: --- Created attachment 61034 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61034&action=edit Patch that updates modify_call_for_omp_dispatch (+ testcase changes) but no full libgomp/target.c update OpenMP 5.2 added omp_initial_device and omp_invalid_device; OpenMP 6.1/TR14 will add 'omp_default_device'. Since r15-8654-g99e2906ae255fc, GCC already uses GOMP_DEVICE_DEFAULT_OMP_61 internally. EXPECTED: (1) Use GOMP_DEVICE_DEFAULT_OMP_61 internally to avoid 'omp_get_default_device' call in modify_call_for_omp_dispatch -> See attached patch. (2) Consider whether it makes sense also with other compiler-generated lib calls (3) API routines in libgomp/target.c have special code to handle: if (device_num == omp_initial_device || device_num == gomp_get_num_devices ()) which needs to also handle device_num := omp_default_device to avoids invalid code. For instance, it could be replaced by: if (is_intial_device (&device_num)) with static inline bool is_initial_device (int &device_num) { if (*device_num == GOMP_DEVICE_DEFAULT_OMP_61) { struct gomp_task_icv *icv = gomp_icv (false); *device_num = icv->default_device_var; } return (*device_num == omp_initial_device || *device_num == omp_get_initial_device ()); } BTW: Note that omp_set_default_device() ignores omp_default_device (according to the spec and as implemented). Otherwise, call it would make it impossible to recover a 'real' device number. (4) Add omp_default_device to omp.h / omp_lib. + add some testcases + consider updating the documentation for it, cf. PR119676.