feature: Enabling support for redirecting FCL to IGC for OCLOC

This allows for invoking IGC as OCL C translator in OCLOC paths

Accepted debug env :
NEO_OCLOC_UseIgcAsFcl=1 ; forces IGC
NEO_OCLOC_UseIgcAsFcl=2 ; forces FCL
NEO_OCLOC_UseIgcAsFcl=0 ; use defaults

Related-To: NEO-14473
Signed-off-by: Chodor, Jaroslaw <jaroslaw.chodor@intel.com>
This commit is contained in:
Chodor, Jaroslaw
2025-04-08 14:43:25 +00:00
committed by Compute-Runtime-Automation
parent 5bf8b66498
commit 2ce694c52b
9 changed files with 233 additions and 23 deletions

View File

@@ -76,6 +76,7 @@ class MockOfflineCompiler : public OfflineCompiler {
using OfflineCompiler::storeBinary;
using OfflineCompiler::updateBuildLog;
using OfflineCompiler::useGenFile;
using OfflineCompiler::useIgcAsFcl;
using OfflineCompiler::useOptionsSuffix;
MockOfflineCompiler();

View File

@@ -5649,4 +5649,90 @@ TEST(OclocApiSpecificConfigTests, givenOclocThenDebugKeysAreAllowedOnlyInDebug)
EXPECT_FALSE(NEO::isDebugKeysReadEnabled());
}
TEST_F(OfflineCompilerTests, GivenFclRedirectionEnvSetToForceIgcWhenInitializingOclocThenIgcIsBeingUsedAsFclFacade) {
DebugManagerStateRestore dbgRestore;
debugManager.flags.UseIgcAsFcl.set(1);
std::vector<std::string> argv = {
"ocloc",
"-file",
clCopybufferFilename.c_str(),
"-device",
gEnvironment->devicePrefix.c_str(),
"-spv_only"};
char bin[1] = {7};
auto oldIgcDebugVars = getIgcDebugVars();
auto currIgcDebugVars = oldIgcDebugVars;
currIgcDebugVars.binaryToReturn = bin;
currIgcDebugVars.binaryToReturnSize = 1;
currIgcDebugVars.forceBuildFailure = false;
setIgcDebugVars(currIgcDebugVars);
auto oldFclDebugVars = getFclDebugVars();
auto currFclDebugVars = oldFclDebugVars;
currFclDebugVars.forceBuildFailure = true;
setFclDebugVars(currFclDebugVars);
std::unique_ptr<OfflineCompiler> pOfflineCompiler(OfflineCompiler::create(argv.size(), argv, true, retVal, oclocArgHelperWithoutInput.get()));
ASSERT_NE(nullptr, pOfflineCompiler);
auto ret = pOfflineCompiler->build();
EXPECT_EQ(OCLOC_SUCCESS, ret);
currIgcDebugVars.forceBuildFailure = true;
ret = pOfflineCompiler->build();
EXPECT_EQ(OCLOC_SUCCESS, ret);
setFclDebugVars(oldFclDebugVars);
setIgcDebugVars(oldIgcDebugVars);
}
TEST_F(OfflineCompilerTests, GivenFclRedirectionEnvSetToForceFclWhenInitializingOclocThenFclIsBeingUsedAsFclFacade) {
DebugManagerStateRestore dbgRestore;
debugManager.flags.UseIgcAsFcl.set(2);
std::vector<std::string> argv = {
"ocloc",
"-file",
clCopybufferFilename.c_str(),
"-device",
gEnvironment->devicePrefix.c_str(),
"-spv_only"};
char bin[1] = {7};
auto oldIgcDebugVars = getIgcDebugVars();
auto currIgcDebugVars = oldIgcDebugVars;
currIgcDebugVars.forceBuildFailure = true;
setIgcDebugVars(currIgcDebugVars);
auto oldFclDebugVars = getFclDebugVars();
auto currFclDebugVars = oldFclDebugVars;
currFclDebugVars.binaryToReturn = bin;
currFclDebugVars.binaryToReturnSize = 1;
currFclDebugVars.forceBuildFailure = false;
setFclDebugVars(currFclDebugVars);
std::unique_ptr<OfflineCompiler> pOfflineCompiler(OfflineCompiler::create(argv.size(), argv, true, retVal, oclocArgHelperWithoutInput.get()));
ASSERT_NE(nullptr, pOfflineCompiler);
auto ret = pOfflineCompiler->build();
EXPECT_EQ(OCLOC_SUCCESS, ret);
currFclDebugVars.forceBuildFailure = true;
ret = pOfflineCompiler->build();
setFclDebugVars(oldFclDebugVars);
setIgcDebugVars(oldIgcDebugVars);
}
TEST_F(OfflineCompilerTests, GivenFclRedirectionDefaultSettingWhenCompilingToIrThenUseCompilerProductHelperDefaults) {
std::vector<std::string> argv = {
"ocloc",
"-file",
clCopybufferFilename.c_str(),
"-device",
gEnvironment->devicePrefix.c_str()};
MockOfflineCompiler mockOfflineCompiler{};
mockOfflineCompiler.initialize(argv.size(), argv);
EXPECT_EQ(mockOfflineCompiler.compilerProductHelper->useIgcAsFcl(), mockOfflineCompiler.useIgcAsFcl());
mockOfflineCompiler.compilerProductHelper.reset();
EXPECT_EQ(false, mockOfflineCompiler.useIgcAsFcl());
}
} // namespace NEO