https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/170308
>From bab99b54ec0364cce91e470d5d1b9fd8bd21f5fb Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Tue, 2 Dec 2025 07:06:54 -0500 Subject: [PATCH] clang/AMDGPU: Enable opencl 2.0 features for unknown target Assume amdhsa triples support flat addressing, which matches the backend logic for the default target. This fixes the rocm device-libs build. --- clang/lib/Basic/Targets/AMDGPU.h | 14 +++++++++++++- clang/test/CodeGenOpenCL/address-spaces.cl | 5 +++-- clang/test/CodeGenOpenCL/builtins-alloca.cl | 4 ++-- clang/test/Misc/amdgcn.languageOptsOpenCL.cl | 3 +++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 1d8f27ab915e2..8dcf1d1c9561a 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -84,6 +84,18 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return TT.getArch() == llvm::Triple::r600; } + bool hasFlatSupport() const { + if (GPUKind >= llvm::AMDGPU::GK_GFX700) + return true; + + // Dummy target is assumed to be gfx700+ for amdhsa. + if (GPUKind == llvm::AMDGPU::GK_NONE && + getTriple().getOS() == llvm::Triple::AMDHSA) + return true; + + return false; + } + public: AMDGPUTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts); @@ -325,7 +337,7 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { Opts["__opencl_c_atomic_order_seq_cst"] = true; Opts["__opencl_c_atomic_scope_all_devices"] = true; - if (GPUKind >= llvm::AMDGPU::GK_GFX700) { + if (hasFlatSupport()) { Opts["__opencl_c_generic_address_space"] = true; Opts["__opencl_c_device_enqueue"] = true; } diff --git a/clang/test/CodeGenOpenCL/address-spaces.cl b/clang/test/CodeGenOpenCL/address-spaces.cl index 5b2a95c6ac16a..b9f01069fa26c 100644 --- a/clang/test/CodeGenOpenCL/address-spaces.cl +++ b/clang/test/CodeGenOpenCL/address-spaces.cl @@ -2,9 +2,10 @@ // RUN: %clang_cc1 %s -O0 -cl-std=CL3.0 -cl-ext=-all -ffake-address-space-map -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,SPIR // RUN: %clang_cc1 %s -O0 -cl-std=clc++2021 -cl-ext=-all -ffake-address-space-map -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,SPIR // RUN: %clang_cc1 %s -O0 -DCL20 -cl-std=CL2.0 -ffake-address-space-map -emit-llvm -o - | FileCheck %s --check-prefixes=CL20,CL20SPIR -// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -emit-llvm -o - | FileCheck --check-prefixes=CHECK,AMDGCN %s -// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL3.0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,AMDGCN %s +// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-mesa3d -emit-llvm -o - | FileCheck --check-prefixes=CHECK,AMDGCN %s +// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-mesa3d -cl-std=CL3.0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,AMDGCN %s // RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -DCL20 -cl-std=CL2.0 -emit-llvm -o - | FileCheck %s --check-prefixes=CL20,CL20AMDGCN +// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -DCL20 -cl-std=CL3.0 -emit-llvm -o - | FileCheck %s --check-prefixes=CL20,CL20AMDGCN // RUN: %clang_cc1 %s -O0 -triple amdgcn-mesa-mesa3d -emit-llvm -o - | FileCheck --check-prefixes=CHECK,AMDGCN %s // RUN: %clang_cc1 %s -O0 -triple amdgcn-mesa-mesa3d -cl-std=CL3.0 -emit-llvm -o - | FileCheck --check-prefixes=CHECK,AMDGCN %s // RUN: %clang_cc1 %s -O0 -triple r600-- -emit-llvm -o - | FileCheck --check-prefixes=CHECK,AMDGCN %s diff --git a/clang/test/CodeGenOpenCL/builtins-alloca.cl b/clang/test/CodeGenOpenCL/builtins-alloca.cl index ce7da3aba9e45..51da8e3b3badb 100644 --- a/clang/test/CodeGenOpenCL/builtins-alloca.cl +++ b/clang/test/CodeGenOpenCL/builtins-alloca.cl @@ -3,9 +3,9 @@ // RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL12 %s // RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL2.0 \ // RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL20 %s -// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL3.0 \ +// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-mesa3d -target-cpu gfx600 -cl-std=CL3.0 \ // RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL30 %s -// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL3.0 -cl-ext=+__opencl_c_generic_address_space \ +// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL3.0 \ // RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL30GAS %s // OPENCL-LABEL: define dso_local void @test1_builtin_alloca( diff --git a/clang/test/Misc/amdgcn.languageOptsOpenCL.cl b/clang/test/Misc/amdgcn.languageOptsOpenCL.cl index 57ea891b3eb29..08715fc5a1f4a 100644 --- a/clang/test/Misc/amdgcn.languageOptsOpenCL.cl +++ b/clang/test/Misc/amdgcn.languageOptsOpenCL.cl @@ -11,6 +11,9 @@ // RUN: %clang_cc1 -x cl -cl-std=CL3.0 %s -verify -triple amdgcn-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES // RUN: %clang_cc1 -x cl -cl-std=CL3.0 %s -verify -triple amdgcn-unknown-unknown -target-cpu gfx700 -Wpedantic-core-features -DTEST_CORE_FEATURES -DFLAT_SUPPORT +// Test none target with amdhsa triple, which implies >= gfx700 +// RUN: %clang_cc1 -x cl -cl-std=CL3.0 %s -verify -triple amdgcn-unknown-amdhsa -Wpedantic-core-features -DTEST_CORE_FEATURES -DFLAT_SUPPORT + // Extensions in all versions #ifndef cl_clang_storage_class_specifiers #error "Missing cl_clang_storage_class_specifiers define" _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
