From d2cbdb4d0b1144dfbc3633eb39d1610cda18a914 Mon Sep 17 00:00:00 2001 From: "Kornev, Nikita" Date: Wed, 12 Aug 2026 21:21:41 +0200 Subject: [PATCH 1/3] [sycl-ls] Enhance sycl-ls Architecture output Fixes https://github.com/intel/llvm/issues/20910 Prints all possible architectures mapped to one ID. --- sycl/tools/sycl-ls/sycl-ls.cpp | 57 +++++++++--- sycl/unittests/Extensions/CMakeLists.txt | 1 + .../Extensions/SyclLsArchitectureName.cpp | 93 +++++++++++++++++++ 3 files changed, 138 insertions(+), 13 deletions(-) create mode 100644 sycl/unittests/Extensions/SyclLsArchitectureName.cpp diff --git a/sycl/tools/sycl-ls/sycl-ls.cpp b/sycl/tools/sycl-ls/sycl-ls.cpp index 499799f43fe9a..b3a9064e2a27f 100644 --- a/sycl/tools/sycl-ls/sycl-ls.cpp +++ b/sycl/tools/sycl-ls/sycl-ls.cpp @@ -19,12 +19,14 @@ #include #include +#include #include #include #include #include #include #include +#include #include #ifdef __linux__ @@ -47,6 +49,45 @@ using namespace sycl; using namespace std::literals; +namespace { + +namespace syclex = sycl::ext::oneapi::experimental; + +struct ArchitectureNameEntry { + syclex::architecture Arch; + std::string_view Name; +}; + +bool isNumericIntelGpuAlias(std::string_view Name) { + constexpr std::string_view Prefix = "intel_gpu_"; + return Name.size() > Prefix.size() && + Name.compare(0, Prefix.size(), Prefix) == 0 && + std::isdigit(static_cast(Name[Prefix.size()])); +} + +std::string getArchitectureName(syclex::architecture Arch) { + static constexpr ArchitectureNameEntry ArchitectureNames[] = { +#define __SYCL_ARCHITECTURE(ARCH, VAL) {syclex::architecture::ARCH, #ARCH}, +#define __SYCL_ARCHITECTURE_ALIAS(ARCH, VAL) {syclex::architecture::VAL, #ARCH}, +#include +#undef __SYCL_ARCHITECTURE +#undef __SYCL_ARCHITECTURE_ALIAS + }; + + std::string Result; + for (const auto &Entry : ArchitectureNames) { + if (Entry.Arch != Arch || isNumericIntelGpuAlias(Entry.Name)) + continue; + if (!Result.empty()) + Result += " / "; + Result += Entry.Name; + } + + return Result.empty() ? "unknown" : Result; +} + +} // namespace + // Controls verbose output vs. concise. bool verbose; @@ -83,19 +124,9 @@ std::string getDeviceTypeName(const device &Device) { } } -const char *getArchName(const device &Device) { - namespace syclex = sycl::ext::oneapi::experimental; - auto arch = Device.get_info(); - switch (arch) { -#define __SYCL_ARCHITECTURE(ARCH, VAL) \ - case syclex::architecture::ARCH: \ - return #ARCH; -#define __SYCL_ARCHITECTURE_ALIAS(ARCH, VAL) -#include -#undef __SYCL_ARCHITECTURE -#undef __SYCL_ARCHITECTURE_ALIAS - } - return "unknown"; +std::string getArchName(const device &Device) { + auto Arch = Device.get_info(); + return getArchitectureName(Arch); } template diff --git a/sycl/unittests/Extensions/CMakeLists.txt b/sycl/unittests/Extensions/CMakeLists.txt index 6d596172a3859..de62f550419c9 100644 --- a/sycl/unittests/Extensions/CMakeLists.txt +++ b/sycl/unittests/Extensions/CMakeLists.txt @@ -23,6 +23,7 @@ add_sycl_unittest(ExtensionsTests OBJECT LaunchQueries.cpp EventMode.cpp DeviceInfo.cpp + SyclLsArchitectureName.cpp RootGroup.cpp USMPrefetch.cpp RegisterHostMemory.cpp diff --git a/sycl/unittests/Extensions/SyclLsArchitectureName.cpp b/sycl/unittests/Extensions/SyclLsArchitectureName.cpp new file mode 100644 index 0000000000000..e874f190095ab --- /dev/null +++ b/sycl/unittests/Extensions/SyclLsArchitectureName.cpp @@ -0,0 +1,93 @@ +//==---------------- SyclLsArchitectureName.cpp ---------------------------==// +// +// 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 + +#include + +#include +#include + +#define main sycl_ls_main +#include "../../tools/sycl-ls/sycl-ls.cpp" +#undef main + +namespace syclex = sycl::ext::oneapi::experimental; + +struct ArchitectureNameCase { + syclex::architecture Arch; + std::string Expected; +}; + +std::vector getArchitectureNameCases() { + return { + {syclex::architecture::intel_gpu_apl, "intel_gpu_apl / intel_gpu_bxt"}, + {syclex::architecture::intel_gpu_bxt, "intel_gpu_apl / intel_gpu_bxt"}, + {syclex::architecture::intel_gpu_icllp, + "intel_gpu_icllp / intel_gpu_icl"}, + {syclex::architecture::intel_gpu_icl, + "intel_gpu_icllp / intel_gpu_icl"}, + {syclex::architecture::intel_gpu_ehl, "intel_gpu_ehl / intel_gpu_jsl"}, + {syclex::architecture::intel_gpu_jsl, "intel_gpu_ehl / intel_gpu_jsl"}, + {syclex::architecture::intel_gpu_tgllp, + "intel_gpu_tgllp / intel_gpu_tgl"}, + {syclex::architecture::intel_gpu_tgl, + "intel_gpu_tgllp / intel_gpu_tgl"}, + {syclex::architecture::intel_gpu_adl_s, + "intel_gpu_adl_s / intel_gpu_rpl_s"}, + {syclex::architecture::intel_gpu_rpl_s, + "intel_gpu_adl_s / intel_gpu_rpl_s"}, + {syclex::architecture::intel_gpu_acm_g10, + "intel_gpu_acm_g10 / intel_gpu_dg2_g10"}, + {syclex::architecture::intel_gpu_dg2_g10, + "intel_gpu_acm_g10 / intel_gpu_dg2_g10"}, + {syclex::architecture::intel_gpu_acm_g11, + "intel_gpu_acm_g11 / intel_gpu_dg2_g11"}, + {syclex::architecture::intel_gpu_dg2_g11, + "intel_gpu_acm_g11 / intel_gpu_dg2_g11"}, + {syclex::architecture::intel_gpu_acm_g12, + "intel_gpu_acm_g12 / intel_gpu_dg2_g12"}, + {syclex::architecture::intel_gpu_dg2_g12, + "intel_gpu_acm_g12 / intel_gpu_dg2_g12"}, + {syclex::architecture::intel_gpu_mtl_u, + "intel_gpu_mtl_u / intel_gpu_mtl_s / intel_gpu_arl_u / " + "intel_gpu_arl_s"}, + {syclex::architecture::intel_gpu_mtl_s, + "intel_gpu_mtl_u / intel_gpu_mtl_s / intel_gpu_arl_u / " + "intel_gpu_arl_s"}, + {syclex::architecture::intel_gpu_arl_u, + "intel_gpu_mtl_u / intel_gpu_mtl_s / intel_gpu_arl_u / " + "intel_gpu_arl_s"}, + {syclex::architecture::intel_gpu_arl_s, + "intel_gpu_mtl_u / intel_gpu_mtl_s / intel_gpu_arl_u / " + "intel_gpu_arl_s"}, + {syclex::architecture::intel_gpu_nvl_s, + "intel_gpu_nvl_s / intel_gpu_nvl_hx / intel_gpu_nvl_ul"}, + {syclex::architecture::intel_gpu_nvl_hx, + "intel_gpu_nvl_s / intel_gpu_nvl_hx / intel_gpu_nvl_ul"}, + {syclex::architecture::intel_gpu_nvl_ul, + "intel_gpu_nvl_s / intel_gpu_nvl_hx / intel_gpu_nvl_ul"}, + {syclex::architecture::intel_gpu_nvl_u, + "intel_gpu_nvl_u / intel_gpu_nvl_h"}, + {syclex::architecture::intel_gpu_nvl_h, + "intel_gpu_nvl_u / intel_gpu_nvl_h"}, + }; +} + +TEST(SyclLsArchitectureNameTest, PrintsAllAliases) { + for (const auto &Case : getArchitectureNameCases()) + EXPECT_EQ(getArchitectureName(Case.Arch), Case.Expected); +} + +TEST(SyclLsArchitectureNameTest, HidesNumericAliasesFromOutput) { + EXPECT_EQ(getArchitectureName(syclex::architecture::intel_gpu_mtl_u), + "intel_gpu_mtl_u / intel_gpu_mtl_s / intel_gpu_arl_u / " + "intel_gpu_arl_s"); + EXPECT_EQ(getArchitectureName(syclex::architecture::intel_gpu_bmg_g21), + "intel_gpu_bmg_g21"); +} \ No newline at end of file From da33eb1290ddb5cee8d3cdec9c04d3a2d512d18e Mon Sep 17 00:00:00 2001 From: "Kornev, Nikita" Date: Thu, 13 Aug 2026 13:58:48 +0200 Subject: [PATCH 2/3] Suppress image aspect warning in sycl-ls unit test --- sycl/unittests/Extensions/SyclLsArchitectureName.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sycl/unittests/Extensions/SyclLsArchitectureName.cpp b/sycl/unittests/Extensions/SyclLsArchitectureName.cpp index e874f190095ab..260d966c40964 100644 --- a/sycl/unittests/Extensions/SyclLsArchitectureName.cpp +++ b/sycl/unittests/Extensions/SyclLsArchitectureName.cpp @@ -13,6 +13,8 @@ #include #include +// sycl-ls.cpp uses aspect::image; suppress the deprecation warning. +#define SYCL_DISABLE_IMAGE_ASPECT_WARNING #define main sycl_ls_main #include "../../tools/sycl-ls/sycl-ls.cpp" #undef main From 92635016f32200e78ada2dd8dd111be9ef1aa621 Mon Sep 17 00:00:00 2001 From: "Kornev, Nikita" Date: Thu, 13 Aug 2026 19:22:32 +0200 Subject: [PATCH 3/3] format --- sycl/unittests/Extensions/SyclLsArchitectureName.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sycl/unittests/Extensions/SyclLsArchitectureName.cpp b/sycl/unittests/Extensions/SyclLsArchitectureName.cpp index 260d966c40964..5bb9cee7482e2 100644 --- a/sycl/unittests/Extensions/SyclLsArchitectureName.cpp +++ b/sycl/unittests/Extensions/SyclLsArchitectureName.cpp @@ -32,14 +32,12 @@ std::vector getArchitectureNameCases() { {syclex::architecture::intel_gpu_bxt, "intel_gpu_apl / intel_gpu_bxt"}, {syclex::architecture::intel_gpu_icllp, "intel_gpu_icllp / intel_gpu_icl"}, - {syclex::architecture::intel_gpu_icl, - "intel_gpu_icllp / intel_gpu_icl"}, + {syclex::architecture::intel_gpu_icl, "intel_gpu_icllp / intel_gpu_icl"}, {syclex::architecture::intel_gpu_ehl, "intel_gpu_ehl / intel_gpu_jsl"}, {syclex::architecture::intel_gpu_jsl, "intel_gpu_ehl / intel_gpu_jsl"}, {syclex::architecture::intel_gpu_tgllp, "intel_gpu_tgllp / intel_gpu_tgl"}, - {syclex::architecture::intel_gpu_tgl, - "intel_gpu_tgllp / intel_gpu_tgl"}, + {syclex::architecture::intel_gpu_tgl, "intel_gpu_tgllp / intel_gpu_tgl"}, {syclex::architecture::intel_gpu_adl_s, "intel_gpu_adl_s / intel_gpu_rpl_s"}, {syclex::architecture::intel_gpu_rpl_s,