Skip to content

Commit 7a58611

Browse files
Don't program implicit args for builtin kernels
Related-To: HSD-18023305082 Signed-off-by: Mateusz Jablonski <[email protected]>
1 parent 18adbed commit 7a58611

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

level_zero/core/source/module/module_imp.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,12 @@ bool ModuleImp::linkBinary() {
882882
return LinkingStatus::LinkedPartially == linkStatus;
883883
} else if (type != ModuleType::Builtin) {
884884
copyPatchedSegments(isaSegmentsForPatching);
885+
} else {
886+
for (auto &kernelDescriptor : kernelDescriptors) {
887+
kernelDescriptor->kernelAttributes.flags.requiresImplicitArgs = false;
888+
}
885889
}
890+
886891
DBG_LOG(PrintRelocations, NEO::constructRelocationsDebugMessage(this->symbols));
887892
isFullyLinked = true;
888893
for (auto kernelId = 0u; kernelId < kernelImmDatas.size(); kernelId++) {

level_zero/core/test/unit_tests/mocks/mock_module.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ struct WhiteBox<::L0::Module> : public ::L0::ModuleImp {
2828
using BaseClass::importedSymbolAllocations;
2929
using BaseClass::isFullyLinked;
3030
using BaseClass::kernelImmDatas;
31+
using BaseClass::maxGroupSize;
3132
using BaseClass::symbols;
3233
using BaseClass::translationUnit;
3334
using BaseClass::type;

level_zero/core/test/unit_tests/sources/module/test_module.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2868,6 +2868,46 @@ TEST_F(ModuleTests, givenConstDataStringSectionWhenLinkingModuleThenSegmentIsPat
28682868
EXPECT_EQ(static_cast<size_t>(stringsAddr), *reinterpret_cast<size_t *>(patchAddr));
28692869
}
28702870

2871+
TEST_F(ModuleTests, givenImplicitArgsRelocationAndStackCallsWhenLinkingBuiltinModuleThenSegmentIsNotPatchedAndImplicitArgsAreNotRequired) {
2872+
auto pModule = std::make_unique<WhiteBox<Module>>(device, nullptr, ModuleType::Builtin);
2873+
2874+
pModule->maxGroupSize = 32;
2875+
2876+
char data[64]{};
2877+
auto kernelInfo = new KernelInfo();
2878+
kernelInfo->heapInfo.KernelHeapSize = 64;
2879+
kernelInfo->heapInfo.pKernelHeap = data;
2880+
2881+
std::unique_ptr<WhiteBox<::L0::KernelImmutableData>> kernelImmData{new WhiteBox<::L0::KernelImmutableData>(this->device)};
2882+
kernelImmData->initialize(kernelInfo, device, 0, nullptr, nullptr, true);
2883+
2884+
kernelImmData->kernelDescriptor->kernelAttributes.flags.useStackCalls = true;
2885+
auto isaCpuPtr = reinterpret_cast<char *>(kernelImmData->isaGraphicsAllocation->getUnderlyingBuffer());
2886+
pModule->kernelImmDatas.push_back(std::move(kernelImmData));
2887+
pModule->translationUnit->programInfo.kernelInfos.push_back(kernelInfo);
2888+
auto linkerInput = std::make_unique<::WhiteBox<NEO::LinkerInput>>();
2889+
linkerInput->traits.requiresPatchingOfInstructionSegments = true;
2890+
linkerInput->textRelocations.push_back({{implicitArgsRelocationSymbolName, 0x8, LinkerInput::RelocationInfo::Type::AddressLow, SegmentType::Instructions}});
2891+
pModule->translationUnit->programInfo.linkerInput = std::move(linkerInput);
2892+
2893+
EXPECT_FALSE(kernelInfo->kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs);
2894+
auto status = pModule->linkBinary();
2895+
EXPECT_TRUE(status);
2896+
EXPECT_FALSE(kernelInfo->kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs);
2897+
2898+
ze_kernel_handle_t kernelHandle;
2899+
2900+
ze_kernel_desc_t kernelDesc = {};
2901+
kernelDesc.pKernelName = kernelInfo->kernelDescriptor.kernelMetadata.kernelName.c_str();
2902+
2903+
ze_result_t res = pModule->createKernel(&kernelDesc, &kernelHandle);
2904+
2905+
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
2906+
2907+
EXPECT_EQ(0u, *reinterpret_cast<uint32_t *>(ptrOffset(isaCpuPtr, 0x8)));
2908+
Kernel::fromHandle(kernelHandle)->destroy();
2909+
}
2910+
28712911
TEST_F(ModuleTests, givenImplicitArgsRelocationAndStackCallsWhenLinkingModuleThenSegmentIsPatchedAndImplicitArgsAreRequired) {
28722912
auto pModule = std::make_unique<Module>(device, nullptr, ModuleType::User);
28732913

0 commit comments

Comments
 (0)