From 678e2d66e921a7cec50079f4d3cdfc8a183b7e24 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Wed, 17 Sep 2025 15:19:31 +0000 Subject: [PATCH] feature: propagate hasPrintfCalls info from zeinfo to kernel descriptor Related-To: NEO-15211 Signed-off-by: Mateusz Jablonski --- .../zebin/zeinfo_decoder.cpp | 1 + shared/source/kernel/kernel_descriptor.h | 3 ++- .../zebin_decoder_tests.cpp | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp index 4fa09b48ae..73bf6ae66a 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp @@ -736,6 +736,7 @@ void populateKernelExecutionEnvironment(KernelDescriptor &dst, const KernelExecu dst.kernelAttributes.flags.hasSample = execEnv.hasSample; dst.kernelAttributes.flags.requiresImplicitArgs = execEnv.requireImplicitArgBuffer; dst.kernelAttributes.flags.hasIndirectCalls = execEnv.hasIndirectCalls; + dst.kernelAttributes.flags.hasPrintfCalls = execEnv.hasPrintfCalls; dst.kernelAttributes.barrierCount = execEnv.barrierCount; dst.kernelAttributes.bufferAddressingMode = (execEnv.has4GBBuffers) ? KernelDescriptor::Stateless : KernelDescriptor::BindfulAndStateless; dst.kernelAttributes.inlineDataPayloadSize = static_cast(execEnv.inlineDataPayloadSize); diff --git a/shared/source/kernel/kernel_descriptor.h b/shared/source/kernel/kernel_descriptor.h index 68f9861e60..6bd100ee9a 100644 --- a/shared/source/kernel/kernel_descriptor.h +++ b/shared/source/kernel/kernel_descriptor.h @@ -144,7 +144,8 @@ struct KernelDescriptor : NEO::NonCopyableAndNonMovableClass { bool usesAssert : 1; // 3 bool usesRegionGroupBarrier : 1; - bool reserved : 7; + bool hasPrintfCalls : 1; + bool reserved : 6; }; std::array packed; } flags = {}; diff --git a/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp b/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp index 937b23984d..a9d49e171a 100644 --- a/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp +++ b/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp @@ -3916,6 +3916,8 @@ TEST_F(decodeZeInfoKernelEntryTest, GivenMinimalExecutionEnvThenPopulateKernelDe EXPECT_EQ(kernelDescriptor.kernelAttributes.flags.usesSystolicPipelineSelectMode, Defaults::hasDpas); EXPECT_EQ(kernelDescriptor.kernelAttributes.flags.hasSample, Defaults::hasSample); EXPECT_EQ(kernelDescriptor.kernelAttributes.flags.usesStatelessWrites, (false == Defaults::hasNoStatelessWrite)); + EXPECT_EQ(kernelDescriptor.kernelAttributes.flags.hasIndirectCalls, Defaults::hasIndirectCalls); + EXPECT_EQ(kernelDescriptor.kernelAttributes.flags.hasPrintfCalls, Defaults::hasPrintfCalls); EXPECT_EQ(kernelDescriptor.kernelAttributes.barrierCount, static_cast(Defaults::barrierCount)); EXPECT_EQ(kernelDescriptor.kernelAttributes.binaryFormat, DeviceBinaryFormat::zebin); EXPECT_EQ(kernelDescriptor.kernelAttributes.bufferAddressingMode, (Defaults::has4GBBuffers) ? KernelDescriptor::Stateless : KernelDescriptor::BindfulAndStateless); @@ -7465,6 +7467,21 @@ kernels: EXPECT_TRUE(kernelDescriptor->kernelAttributes.flags.hasIndirectCalls); } +TEST_F(decodeZeInfoKernelEntryTest, GivenKernelWithPrintfCallsWhenPopulatingKernelDescriptorThenHasPrintfCallsIsSet) { + ConstStringRef zeinfo = R"===( +kernels: + - name : some_kernel + execution_env: + simd_size: 8 + has_printf_calls: true +... +)==="; + auto err = decodeZeInfoKernelEntry(zeinfo); + EXPECT_EQ(NEO::DecodeError::success, err); + + EXPECT_TRUE(kernelDescriptor->kernelAttributes.flags.hasPrintfCalls); +} + TEST(PopulateInlineSamplers, GivenInvalidSamplerIndexThenPopulateInlineSamplersFails) { NEO::KernelDescriptor kd; std::string errors, warnings;