jhuber6 created this revision. jhuber6 added reviewers: jdoerfert, JonChesterfield, tianshilei1992, ABataev, ronlieb, doru1004, RaviNarayanaswamy. Herald added subscribers: guansong, yaxunl. Herald added a project: All. jhuber6 requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, sstefan1. Herald added projects: clang, LLVM.
Currently, every module containing OpenMP offloading code uses a global constructor to register its flags from the `omp requires` clause. This is not ideal as it creates several entry points into `libomptarget` that requires the runtime to be initialized first. This makes it difficult for us to transition to a scheme where the lifetime of `libomptarget` is explicitly manages by the uses of the `__tgt_[un]register_lib` calls. Instead, this patch changes the method to create global values similar to how offloading entries are registered. The linker will create a `__start/__stop` pointer for these values which we can then iterate through in the runtime. This requires widening the `__tgt_bin_desc` struct which is an ABI break as old programs will attempt to read invalid memory and the old interface will be removed. This will be acceptable if we go through with the plans in D133277 <https://reviews.llvm.org/D133277> and remove the backwards compatibility in `libomptarget`. If we do not wish to add a new field to `__tgt_bin_desc` we could instead add it to the exiting `__tgt_offload_entry` and filter it out. But this would require using the `Size` field or something similar to hold the value and updating all the plugins. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D133539 Files: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGOpenMPRuntime.h clang/lib/CodeGen/CodeGenModule.cpp clang/test/Driver/linker-wrapper-image.c clang/test/OpenMP/distribute_codegen.cpp clang/test/OpenMP/distribute_firstprivate_codegen.cpp clang/test/OpenMP/distribute_lastprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_codegen.cpp clang/test/OpenMP/distribute_parallel_for_firstprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_if_codegen.cpp clang/test/OpenMP/distribute_parallel_for_lastprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_num_threads_codegen.cpp clang/test/OpenMP/distribute_parallel_for_private_codegen.cpp clang/test/OpenMP/distribute_parallel_for_proc_bind_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_if_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_num_threads_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_private_codegen.cpp clang/test/OpenMP/distribute_parallel_for_simd_proc_bind_codegen.cpp clang/test/OpenMP/distribute_private_codegen.cpp clang/test/OpenMP/distribute_simd_codegen.cpp clang/test/OpenMP/distribute_simd_firstprivate_codegen.cpp clang/test/OpenMP/distribute_simd_lastprivate_codegen.cpp clang/test/OpenMP/distribute_simd_private_codegen.cpp clang/test/OpenMP/distribute_simd_reduction_codegen.cpp clang/test/OpenMP/openmp_offload_registration.cpp clang/test/OpenMP/reduction_implicit_map.cpp clang/test/OpenMP/target_codegen.cpp clang/test/OpenMP/target_codegen_global_capture.cpp clang/test/OpenMP/target_codegen_registration.cpp clang/test/OpenMP/target_depend_codegen.cpp clang/test/OpenMP/target_map_codegen_03.cpp clang/test/OpenMP/target_offload_mandatory_codegen.cpp clang/test/OpenMP/target_parallel_codegen.cpp clang/test/OpenMP/target_parallel_codegen_registration.cpp clang/test/OpenMP/target_parallel_depend_codegen.cpp clang/test/OpenMP/target_parallel_for_codegen.cpp clang/test/OpenMP/target_parallel_for_codegen_registration.cpp clang/test/OpenMP/target_parallel_for_depend_codegen.cpp clang/test/OpenMP/target_parallel_for_simd_codegen.cpp clang/test/OpenMP/target_parallel_for_simd_codegen_registration.cpp clang/test/OpenMP/target_parallel_for_simd_depend_codegen.cpp clang/test/OpenMP/target_parallel_if_codegen.cpp clang/test/OpenMP/target_parallel_num_threads_codegen.cpp clang/test/OpenMP/target_simd_codegen.cpp clang/test/OpenMP/target_simd_codegen_registration.cpp clang/test/OpenMP/target_simd_depend_codegen.cpp clang/test/OpenMP/target_teams_codegen.cpp clang/test/OpenMP/target_teams_codegen_registration.cpp clang/test/OpenMP/target_teams_depend_codegen.cpp clang/test/OpenMP/target_teams_distribute_codegen.cpp clang/test/OpenMP/target_teams_distribute_codegen_registration.cpp clang/test/OpenMP/target_teams_distribute_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_depend_codegen.cpp clang/test/OpenMP/target_teams_distribute_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_depend_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_if_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_private_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_proc_bind_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_reduction_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_codegen_registration.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_depend_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_if_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_private_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_proc_bind_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_reduction_codegen.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_private_codegen.cpp clang/test/OpenMP/target_teams_distribute_reduction_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_codegen_registration.cpp clang/test/OpenMP/target_teams_distribute_simd_collapse_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_depend_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_dist_schedule_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_firstprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_lastprivate_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_private_codegen.cpp clang/test/OpenMP/target_teams_distribute_simd_reduction_codegen.cpp clang/test/OpenMP/target_teams_map_codegen.cpp clang/test/OpenMP/target_teams_num_teams_codegen.cpp clang/test/OpenMP/target_teams_thread_limit_codegen.cpp clang/test/OpenMP/teams_codegen.cpp clang/test/OpenMP/teams_distribute_codegen.cpp clang/test/OpenMP/teams_distribute_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_copyin_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_if_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_num_threads_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_private_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_proc_bind_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_reduction_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_if_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_num_threads_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_private_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_proc_bind_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_codegen.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_private_codegen.cpp clang/test/OpenMP/teams_distribute_reduction_codegen.cpp clang/test/OpenMP/teams_distribute_simd_codegen.cpp clang/test/OpenMP/teams_distribute_simd_collapse_codegen.cpp clang/test/OpenMP/teams_distribute_simd_dist_schedule_codegen.cpp clang/test/OpenMP/teams_distribute_simd_firstprivate_codegen.cpp clang/test/OpenMP/teams_distribute_simd_lastprivate_codegen.cpp clang/test/OpenMP/teams_distribute_simd_private_codegen.cpp clang/test/OpenMP/teams_distribute_simd_reduction_codegen.cpp clang/test/OpenMP/teams_firstprivate_codegen.cpp clang/test/OpenMP/teams_private_codegen.cpp clang/tools/clang-linker-wrapper/OffloadWrapper.cpp llvm/include/llvm/Frontend/OpenMP/OMPKinds.def _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits