diff --git a/runtime/program/program.cpp b/runtime/program/program.cpp index 7717eabd7e..b88635ba71 100644 --- a/runtime/program/program.cpp +++ b/runtime/program/program.cpp @@ -74,7 +74,8 @@ Program::Program(ExecutionEnvironment &executionEnvironment, Context *context, b internalOptions += "-m32 "; } - if (DebugManager.flags.DisableStatelessToStatefulOptimization.get()) { + if (pDevice->areSharedSystemAllocationsAllowed() || + DebugManager.flags.DisableStatelessToStatefulOptimization.get()) { internalOptions += "-cl-intel-greater-than-4GB-buffer-required "; } kernelDebugEnabled = pDevice->isSourceLevelDebuggerActive(); diff --git a/unit_tests/program/program_tests.cpp b/unit_tests/program/program_tests.cpp index 264f6b12aa..532c4590ee 100644 --- a/unit_tests/program/program_tests.cpp +++ b/unit_tests/program/program_tests.cpp @@ -1745,7 +1745,7 @@ TEST_F(ProgramTests, ProgramCtorSetsProperInternalOptionsForced20) { TEST_F(ProgramTests, ProgramCtorSetsProperInternalOptionsWhenStatelessToStatefulIsDisabled) { cl_int retVal = CL_DEVICE_NOT_FOUND; - auto defaultSetting = DebugManager.flags.DisableStatelessToStatefulOptimization.get(); + DebugManagerStateRestore restorer; DebugManager.flags.DisableStatelessToStatefulOptimization.set(true); if (pDevice) { @@ -1768,7 +1768,12 @@ TEST_F(ProgramTests, ProgramCtorSetsProperInternalOptionsWhenStatelessToStateful } else { EXPECT_NE(CL_DEVICE_NOT_FOUND, retVal); } - DebugManager.flags.DisableStatelessToStatefulOptimization.set(defaultSetting); +} + +TEST_F(ProgramTests, givenDeviceThatSupportsSharedSystemMemoryAllocationWhenProgramIsCompiledThenItForcesStatelessCompilation) { + pDevice->deviceInfo.sharedSystemMemCapabilities = CL_UNIFIED_SHARED_MEMORY_ACCESS_INTEL | CL_UNIFIED_SHARED_MEMORY_ATOMIC_ACCESS_INTEL | CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ACCESS_INTEL | CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ATOMIC_ACCESS_INTEL; + MockProgram program(*pDevice->getExecutionEnvironment(), pContext, false); + EXPECT_THAT(program.getInternalOptions(), testing::HasSubstr(std::string("-cl-intel-greater-than-4GB-buffer-required"))); } TEST_F(ProgramTests, ProgramCtorSetsProperInternalOptionsWhenForcing32BitAddressess) {