llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-codegen Author: Justin Cai (jzc) <details> <summary>Changes</summary> Following #<!-- -->137070, this PR adds an initial set of Intel `OffloadArch` values with corresponding predicates that will be used in SYCL offloading. More Intel architectures will be added in a future PR. --- Full diff: https://github.com/llvm/llvm-project/pull/138158.diff 6 Files Affected: - (modified) clang/include/clang/Basic/OffloadArch.h (+19) - (modified) clang/lib/Basic/OffloadArch.cpp (+4) - (modified) clang/lib/Basic/Targets/NVPTX.cpp (+2) - (modified) clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp (+2) - (modified) clang/unittests/Basic/CMakeLists.txt (+1) - (added) clang/unittests/Basic/OffloadArchTest.cpp (+36) ``````````diff diff --git a/clang/include/clang/Basic/OffloadArch.h b/clang/include/clang/Basic/OffloadArch.h index c5ccd17e7a8be..c681f99f2e146 100644 --- a/clang/include/clang/Basic/OffloadArch.h +++ b/clang/include/clang/Basic/OffloadArch.h @@ -101,6 +101,13 @@ enum class OffloadArch { AMDGCNSPIRV, Generic, // A processor model named 'generic' if the target backend defines a // public one. + // Note: this is an initial list of Intel GPU and GPU offloading + // architectures. The list will be expanded later as support for more + // architectures is added. + // Intel CPUs + GRANITERAPIDS, + // Intel GPUs + BMG_G21, LAST, CudaDefault = OffloadArch::SM_52, @@ -116,6 +123,18 @@ static inline bool IsAMDOffloadArch(OffloadArch A) { return A >= OffloadArch::GFX600 && A < OffloadArch::Generic; } +static inline bool IsIntelCPUOffloadArch(OffloadArch Arch) { + return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21; +} + +static inline bool IsIntelGPUOffloadArch(OffloadArch Arch) { + return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST; +} + +static inline bool IsIntelOffloadArch(OffloadArch Arch) { + return IsIntelCPUOffloadArch(Arch) || IsIntelGPUOffloadArch(Arch); +} + const char *OffloadArchToString(OffloadArch A); const char *OffloadArchToVirtualArchString(OffloadArch A); diff --git a/clang/lib/Basic/OffloadArch.cpp b/clang/lib/Basic/OffloadArch.cpp index 5e29742478b99..a019f0ac18c84 100644 --- a/clang/lib/Basic/OffloadArch.cpp +++ b/clang/lib/Basic/OffloadArch.cpp @@ -87,6 +87,10 @@ static const OffloadArchToStringMap ArchNames[] = { GFX(1200), // gfx1200 GFX(1201), // gfx1201 {OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"}, + // Intel CPUs + {OffloadArch::GRANITERAPIDS, "graniterapids", ""}, + // Intel GPUS + {OffloadArch::BMG_G21, "bmg_g21", ""}, {OffloadArch::Generic, "generic", ""}, // clang-format on }; diff --git a/clang/lib/Basic/Targets/NVPTX.cpp b/clang/lib/Basic/Targets/NVPTX.cpp index 08c8460045c6a..42b66d3559f6a 100644 --- a/clang/lib/Basic/Targets/NVPTX.cpp +++ b/clang/lib/Basic/Targets/NVPTX.cpp @@ -241,6 +241,8 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts, case OffloadArch::GFX1201: case OffloadArch::AMDGCNSPIRV: case OffloadArch::Generic: + case OffloadArch::GRANITERAPIDS: + case OffloadArch::BMG_G21: case OffloadArch::LAST: break; case OffloadArch::UNKNOWN: diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp index 59a5f7b914ce5..aa97422d54ede 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp @@ -2334,6 +2334,8 @@ void CGOpenMPRuntimeGPU::processRequiresDirective(const OMPRequiresDecl *D) { case OffloadArch::GFX1201: case OffloadArch::AMDGCNSPIRV: case OffloadArch::Generic: + case OffloadArch::GRANITERAPIDS: + case OffloadArch::BMG_G21: case OffloadArch::UNUSED: case OffloadArch::UNKNOWN: break; diff --git a/clang/unittests/Basic/CMakeLists.txt b/clang/unittests/Basic/CMakeLists.txt index b0e0a97168757..8c8baa57b64e7 100644 --- a/clang/unittests/Basic/CMakeLists.txt +++ b/clang/unittests/Basic/CMakeLists.txt @@ -7,6 +7,7 @@ add_distinct_clang_unittest(BasicTests FileEntryTest.cpp FileManagerTest.cpp LineOffsetMappingTest.cpp + OffloadArchTest.cpp SanitizersTest.cpp SarifTest.cpp SourceManagerTest.cpp diff --git a/clang/unittests/Basic/OffloadArchTest.cpp b/clang/unittests/Basic/OffloadArchTest.cpp new file mode 100644 index 0000000000000..c19ad0043d774 --- /dev/null +++ b/clang/unittests/Basic/OffloadArchTest.cpp @@ -0,0 +1,36 @@ +//===- unittests/Basic/OffloadArchTest.cpp - Test OffloadArch -------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "clang/Basic/OffloadArch.h" +#include "gtest/gtest.h" + +using namespace clang; + +TEST(OffloadArchTest, basic) { + EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_20)); + EXPECT_TRUE(IsNVIDIAOffloadArch(OffloadArch::SM_120a)); + EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::GFX600)); + + EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::SM_120a)); + EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX600)); + EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX1201)); + EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::GFX12_GENERIC)); + EXPECT_TRUE(IsAMDOffloadArch(OffloadArch::AMDGCNSPIRV)); + EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::GRANITERAPIDS)); + + EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::GRANITERAPIDS)); + EXPECT_TRUE(IsIntelCPUOffloadArch(OffloadArch::GRANITERAPIDS)); + EXPECT_FALSE(IsIntelGPUOffloadArch(OffloadArch::GRANITERAPIDS)); + EXPECT_TRUE(IsIntelOffloadArch(OffloadArch::BMG_G21)); + EXPECT_FALSE(IsIntelCPUOffloadArch(OffloadArch::BMG_G21)); + EXPECT_TRUE(IsIntelGPUOffloadArch(OffloadArch::BMG_G21)); + + EXPECT_FALSE(IsNVIDIAOffloadArch(OffloadArch::Generic)); + EXPECT_FALSE(IsAMDOffloadArch(OffloadArch::Generic)); + EXPECT_FALSE(IsIntelOffloadArch(OffloadArch::Generic)); +} `````````` </details> https://github.com/llvm/llvm-project/pull/138158 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits