domada created this revision. domada added reviewers: jsjodin, ronlieb, dpalermo, JonChesterfield, agozillon, gregrodgers, skatrak, raghavendhra, RogerV-AMD, saiislam. domada added projects: OpenMP, AMDGPU. Herald added subscribers: sunshaoce, kosarev, guansong, hiraditya, tpr, dstuttard, yaxunl, kzhuravl. Herald added a project: All. domada requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, jplehr, sstefan1, wdng. Herald added a reviewer: jdoerfert. Herald added projects: clang, LLVM.
Work group size attribute was set in Clang specific class. That's why we cannot reuse this code in Flang. If we move setting of this attribute to OpenMPIRBuilder, then we can reuse this code in Flang and Clang. Function `createOffloadEntry` from OpenMPIRBuilder is already used by Clang (via `OpenMPIRBuilder::createOffloadEntriesAndInfoMetadata` function). Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D148525 Files: clang/lib/CodeGen/TargetInfo.cpp llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp Index: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp =================================================================== --- llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -4892,6 +4892,8 @@ // Add a function attribute for the kernel. Fn->addFnAttr(Attribute::get(Ctx, "kernel")); + if (Triple(M.getTargetTriple()).isAMDGCN()) + Fn->addFnAttr("uniform-work-group-size", "true"); } // We only generate metadata for function that contain target regions. Index: clang/lib/CodeGen/TargetInfo.cpp =================================================================== --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -9588,12 +9588,9 @@ const bool IsHIPKernel = M.getLangOpts().HIP && FD && FD->hasAttr<CUDAGlobalAttr>(); - const bool IsOpenMPkernel = - M.getLangOpts().OpenMPIsDevice && - (F->getCallingConv() == llvm::CallingConv::AMDGPU_KERNEL); // TODO: This should be moved to language specific attributes instead. - if (IsHIPKernel || IsOpenMPkernel) + if (IsHIPKernel) F->addFnAttr("uniform-work-group-size", "true"); if (M.getContext().getTargetInfo().allowAMDGPUUnsafeFPAtomics())
Index: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp =================================================================== --- llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -4892,6 +4892,8 @@ // Add a function attribute for the kernel. Fn->addFnAttr(Attribute::get(Ctx, "kernel")); + if (Triple(M.getTargetTriple()).isAMDGCN()) + Fn->addFnAttr("uniform-work-group-size", "true"); } // We only generate metadata for function that contain target regions. Index: clang/lib/CodeGen/TargetInfo.cpp =================================================================== --- clang/lib/CodeGen/TargetInfo.cpp +++ clang/lib/CodeGen/TargetInfo.cpp @@ -9588,12 +9588,9 @@ const bool IsHIPKernel = M.getLangOpts().HIP && FD && FD->hasAttr<CUDAGlobalAttr>(); - const bool IsOpenMPkernel = - M.getLangOpts().OpenMPIsDevice && - (F->getCallingConv() == llvm::CallingConv::AMDGPU_KERNEL); // TODO: This should be moved to language specific attributes instead. - if (IsHIPKernel || IsOpenMPkernel) + if (IsHIPKernel) F->addFnAttr("uniform-work-group-size", "true"); if (M.getContext().getTargetInfo().allowAMDGPUUnsafeFPAtomics())
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits