77
88#include " shared/source/built_ins/built_ins.h"
99#include " shared/source/execution_environment/root_device_environment.h"
10+ #include " shared/test/unit_test/helpers/debug_manager_state_restore.h"
1011#include " shared/test/unit_test/mocks/mock_compiler_interface.h"
1112
1213#include " test.h"
1314
1415#include " level_zero/core/source/builtin/builtin_functions_lib_impl.h"
1516#include " level_zero/core/source/device/device_imp.h"
1617#include " level_zero/core/source/module/module.h"
18+ #include " level_zero/core/source/module/module_imp.h"
1719#include " level_zero/core/test/unit_tests/fixtures/device_fixture.h"
1820
1921#include " gtest/gtest.h"
@@ -41,7 +43,7 @@ class TestBuiltinFunctionsLibImpl : public DeviceFixture, public testing::Test {
4143 std::unique_ptr<MockBuiltinFunctionsLibImpl> mockBuiltinFunctionsLibImpl;
4244};
4345
44- HWTEST_F (TestBuiltinFunctionsLibImpl, givenInitImageFunctionWhenImageBultinsTableConstainNullptrsAndImageSupportedThenBuiltinsImageFunctionsAreLoaded ) {
46+ HWTEST_F (TestBuiltinFunctionsLibImpl, givenInitImageFunctionWhenImageBultinsTableContainNullptrsAndImageSupportedThenBuiltinsImageFunctionsAreLoaded ) {
4547 for (uint32_t builtId = 0 ; builtId < static_cast <uint32_t >(ImageBuiltin::COUNT); builtId++) {
4648 EXPECT_EQ (nullptr , mockBuiltinFunctionsLibImpl->imageBuiltins [builtId]);
4749 }
@@ -54,7 +56,7 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenInitImageFunctionWhenImageBultinsTabl
5456 }
5557}
5658
57- HWTEST_F (TestBuiltinFunctionsLibImpl, givenInitFunctionWhenBultinsTableConstainNullptrsThenBuiltinsFunctionsAreLoaded ) {
59+ HWTEST_F (TestBuiltinFunctionsLibImpl, givenInitFunctionWhenBultinsTableContainNullptrsThenBuiltinsFunctionsAreLoaded ) {
5860 for (uint32_t builtId = 0 ; builtId < static_cast <uint32_t >(Builtin::COUNT); builtId++) {
5961 EXPECT_EQ (nullptr , mockBuiltinFunctionsLibImpl->builtins [builtId]);
6062 }
@@ -84,5 +86,78 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenCompilerInterfaceWhenCreateDeviceThen
8486 EXPECT_NE (nullptr , testDevice->getBuiltinFunctionsLib ()->getFunction (static_cast <L0::Builtin>(builtId)));
8587 }
8688}
89+
90+ HWTEST_F (TestBuiltinFunctionsLibImpl, givenRebuildPrecompiledKernelsDebugFlagWhenInitFuctionsThenIntermediateCodeForBuiltinsIsRequested) {
91+ struct MockDeviceForRebuildBuilins : public Mock <DeviceImp> {
92+ struct MockModuleForRebuildBuiltins : public ModuleImp {
93+ MockModuleForRebuildBuiltins (Device *device) : ModuleImp(device, nullptr ) {}
94+
95+ ze_result_t createKernel (const ze_kernel_desc_t *desc,
96+ ze_kernel_handle_t *phFunction) override {
97+ *phFunction = nullptr ;
98+ return ZE_RESULT_SUCCESS;
99+ }
100+ };
101+
102+ MockDeviceForRebuildBuilins (L0::Device *device) : Mock(device->getNEODevice (), static_cast<NEO::ExecutionEnvironment *>(device->getExecEnvironment ())) {
103+ driverHandle = device->getDriverHandle ();
104+ builtins = BuiltinFunctionsLib::create (this , neoDevice->getBuiltIns ());
105+ }
106+
107+ ze_result_t createModule (const ze_module_desc_t *desc,
108+ ze_module_handle_t *module ,
109+ ze_module_build_log_handle_t *buildLog) override {
110+ EXPECT_EQ (desc->format , ZE_MODULE_FORMAT_IL_SPIRV);
111+ EXPECT_GT (desc->inputSize , 0u );
112+ EXPECT_NE (desc->pInputModule , nullptr );
113+ wasCreatedModuleCalled = true ;
114+
115+ *module = new MockModuleForRebuildBuiltins (this );
116+
117+ return ZE_RESULT_SUCCESS;
118+ }
119+
120+ bool wasCreatedModuleCalled = false ;
121+ };
122+
123+ DebugManagerStateRestore dgbRestorer;
124+ NEO::DebugManager.flags.RebuildPrecompiledKernels.set(true );
125+ MockDeviceForRebuildBuilins testDevice (device);
126+
127+ testDevice.getBuiltinFunctionsLib()->initFunctions ();
128+
129+ EXPECT_TRUE (testDevice.wasCreatedModuleCalled);
130+ }
131+
132+ HWTEST_F (TestBuiltinFunctionsLibImpl, givenNotToRebuildPrecompiledKernelsDebugFlagWhenInitFuctionsThenNativeCodeForBuiltinsIsRequested) {
133+ struct MockDeviceForRebuildBuilins : public Mock <DeviceImp> {
134+ MockDeviceForRebuildBuilins (L0::Device *device) : Mock(device->getNEODevice (), static_cast<NEO::ExecutionEnvironment *>(device->getExecEnvironment ())) {
135+ driverHandle = device->getDriverHandle ();
136+ builtins = BuiltinFunctionsLib::create (this , neoDevice->getBuiltIns ());
137+ }
138+
139+ ze_result_t createModule (const ze_module_desc_t *desc,
140+ ze_module_handle_t *module ,
141+ ze_module_build_log_handle_t *buildLog) override {
142+ EXPECT_EQ (desc->format , ZE_MODULE_FORMAT_NATIVE);
143+ EXPECT_GT (desc->inputSize , 0u );
144+ EXPECT_NE (desc->pInputModule , nullptr );
145+ wasCreatedModuleCalled = true ;
146+
147+ return DeviceImp::createModule (desc, module , buildLog);
148+ }
149+
150+ bool wasCreatedModuleCalled = false ;
151+ };
152+
153+ DebugManagerStateRestore dgbRestorer;
154+ NEO::DebugManager.flags.RebuildPrecompiledKernels.set(false );
155+ MockDeviceForRebuildBuilins testDevice (device);
156+
157+ testDevice.getBuiltinFunctionsLib()->initFunctions ();
158+
159+ EXPECT_TRUE (testDevice.wasCreatedModuleCalled);
160+ }
161+
87162} // namespace ult
88163} // namespace L0
0 commit comments