/* * Copyright (C) 2022-2023 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "addressing_mode_helper.h" #include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/execution_environment/root_device_environment.h" #include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/program/kernel_info.h" namespace NEO::AddressingModeHelper { bool failBuildProgramWithStatefulAccess(const RootDeviceEnvironment &rootDeviceEnvironment) { const auto &compilerProductHelper = rootDeviceEnvironment.getHelper(); auto failBuildProgram = compilerProductHelper.failBuildProgramWithStatefulAccessPreference(); if (NEO::DebugManager.flags.FailBuildProgramWithStatefulAccess.get() != -1) { failBuildProgram = static_cast(NEO::DebugManager.flags.FailBuildProgramWithStatefulAccess.get()); } auto forceToStatelessRequired = compilerProductHelper.isForceToStatelessRequired(); return failBuildProgram && forceToStatelessRequired; } bool containsStatefulAccess(const std::vector &kernelInfos, bool skipLastExplicitArg) { for (const auto &kernelInfo : kernelInfos) { auto size = static_cast(kernelInfo->kernelDescriptor.payloadMappings.explicitArgs.size()); if (skipLastExplicitArg) { size--; } for (auto i = 0; i < size; i++) { auto &arg = kernelInfo->kernelDescriptor.payloadMappings.explicitArgs[i]; auto isStatefulAccess = arg.is() && (NEO::isValidOffset(arg.as().bindless) || NEO::isValidOffset(arg.as().bindful)); if (isStatefulAccess) { return true; } } } return false; } } // namespace NEO::AddressingModeHelper