Author: Nick Sarnie Date: 2025-04-09T15:41:53Z New Revision: 68ee56d15020b4fa7f3c5443b4be6504481957d4
URL: https://github.com/llvm/llvm-project/commit/68ee56d15020b4fa7f3c5443b4be6504481957d4 DIFF: https://github.com/llvm/llvm-project/commit/68ee56d15020b4fa7f3c5443b4be6504481957d4.diff LOG: [clang][OpenMP][SPIR-V] Fix addrspace of global constants (#134399) SPIR-V has strict address space rules, constant globals cannot be in the default address space. The OMPIRBuilder change was required for lit tests to pass, we were missing an addrspacecast. --------- Signed-off-by: Sarnie, Nick <nick.sar...@intel.com> Added: Modified: clang/lib/Basic/Targets/SPIR.h llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp Removed: ################################################################################ diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 78505d66d6f2f..3b67e8ca55ae7 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -374,6 +374,20 @@ class LLVM_LIBRARY_VISIBILITY SPIRV64TargetInfo : public BaseSPIRVTargetInfo { const llvm::omp::GV &getGridValue() const override { return llvm::omp::SPIRVGridValues; } + + std::optional<LangAS> getConstantAddressSpace() const override { + return ConstantAS; + } + void adjust(DiagnosticsEngine &Diags, LangOptions &Opts) override { + BaseSPIRVTargetInfo::adjust(Diags, Opts); + // opencl_constant will map to UniformConstant in SPIR-V + if (Opts.OpenCL) + ConstantAS = LangAS::opencl_constant; + } + +private: + // opencl_global will map to CrossWorkgroup in SPIR-V + LangAS ConstantAS = LangAS::opencl_global; }; class LLVM_LIBRARY_VISIBILITY SPIRV64AMDGCNTargetInfo final diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp index 4b3f9c614514e..13b727d226738 100644 --- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -6360,6 +6360,12 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createTargetInit( : ConstantExpr::getAddrSpaceCast(KernelEnvironmentGV, KernelEnvironmentPtr); Value *KernelLaunchEnvironment = DebugKernelWrapper->getArg(0); + Type *KernelLaunchEnvParamTy = Fn->getFunctionType()->getParamType(1); + KernelLaunchEnvironment = + KernelLaunchEnvironment->getType() == KernelLaunchEnvParamTy + ? KernelLaunchEnvironment + : Builder.CreateAddrSpaceCast(KernelLaunchEnvironment, + KernelLaunchEnvParamTy); CallInst *ThreadKind = Builder.CreateCall(Fn, {KernelEnvironment, KernelLaunchEnvironment}); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits