From 09eefb496824421dc440a37205d2bb98e67a5369 Mon Sep 17 00:00:00 2001 From: Patryk Wrobel Date: Thu, 16 Dec 2021 16:15:46 +0000 Subject: [PATCH] Unify used flags in case of IR exclusion Unifies usage of flags in case of IR exclusion from ocloc's output file. When -exclude_ir parameter is active, then internal options passed to IGC contain -exclude-ir-from-zebin to preserve consistency. Moreover, when only -exclude-ir-from-zebin is present, then -exclude_ir is also set. Related-To: NEO-6477 Signed-off-by: Patryk Wrobel --- .../mock/mock_offline_compiler.h | 1 + .../offline_compiler_tests.cpp | 41 +++++++++++++++++-- .../source/offline_compiler.cpp | 12 ++++++ .../source/offline_compiler.h | 1 + .../compiler_options/compiler_options_base.h | 1 + 5 files changed, 52 insertions(+), 4 deletions(-) diff --git a/opencl/test/unit_test/offline_compiler/mock/mock_offline_compiler.h b/opencl/test/unit_test/offline_compiler/mock/mock_offline_compiler.h index a16d9d6d99..7be649eacb 100644 --- a/opencl/test/unit_test/offline_compiler/mock/mock_offline_compiler.h +++ b/opencl/test/unit_test/offline_compiler/mock/mock_offline_compiler.h @@ -18,6 +18,7 @@ class MockOfflineCompiler : public OfflineCompiler { using OfflineCompiler::argHelper; using OfflineCompiler::deviceName; using OfflineCompiler::elfBinary; + using OfflineCompiler::excludeIr; using OfflineCompiler::fclDeviceCtx; using OfflineCompiler::forceStatelessToStatefulOptimization; using OfflineCompiler::genBinary; diff --git a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp index 3f113f4b72..2ec90f1636 100644 --- a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp +++ b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp @@ -536,8 +536,42 @@ TEST_F(OfflineCompilerTests, givenDashGInBiggerOptionStringWhenInitializingThenI EXPECT_THAT(internalOptions, ::testing::Not(::testing::HasSubstr("-cl-kernel-debug-enable"))); } -TEST_F(OfflineCompilerTests, givenExcludeIrArgumentWhenCompilingKernelThenIrShouldBeExcluded) { +TEST_F(OfflineCompilerTests, givenExcludeIrFromZebinInternalOptionWhenInitIsPerformedThenIrExcludeFlagsShouldBeUnified) { + std::vector argv = { + "ocloc", + "-file", + "test_files/copybuffer.cl", + "-internal_options", + "-ze-allow-zebin -ze-exclude-ir-from-zebin", + "-device", + gEnvironment->devicePrefix.c_str()}; + MockOfflineCompiler mockOfflineCompiler{}; + mockOfflineCompiler.initialize(argv.size(), argv); + + EXPECT_TRUE(mockOfflineCompiler.excludeIr); +} + +TEST_F(OfflineCompilerTests, givenExcludeIrArgumentWhenInitIsPerformedThenIrExcludeFlagsShouldBeUnified) { + std::vector argv = { + "ocloc", + "-file", + "test_files/copybuffer.cl", + "-exclude_ir", + "-internal_options", + "-ze-allow-zebin", + "-device", + gEnvironment->devicePrefix.c_str()}; + + MockOfflineCompiler mockOfflineCompiler{}; + mockOfflineCompiler.initialize(argv.size(), argv); + + const auto expectedInternalOption{"-ze-exclude-ir-from-zebin"}; + const auto excludeIrFromZebinEnabled{mockOfflineCompiler.internalOptions.find(expectedInternalOption) != std::string::npos}; + EXPECT_TRUE(excludeIrFromZebinEnabled); +} + +TEST_F(OfflineCompilerTests, givenExcludeIrArgumentWhenCompilingKernelThenIrShouldBeExcluded) { std::vector argv = { "ocloc", "-file", @@ -550,7 +584,7 @@ TEST_F(OfflineCompilerTests, givenExcludeIrArgumentWhenCompilingKernelThenIrShou mockOfflineCompiler.initialize(argv.size(), argv); const auto buildResult{mockOfflineCompiler.build()}; - EXPECT_EQ(OfflineCompiler::SUCCESS, buildResult); + ASSERT_EQ(OfflineCompiler::SUCCESS, buildResult); std::string errorReason{}; std::string warning{}; @@ -563,7 +597,6 @@ TEST_F(OfflineCompilerTests, givenExcludeIrArgumentWhenCompilingKernelThenIrShou } TEST_F(OfflineCompilerTests, givenLackOfExcludeIrArgumentWhenCompilingKernelThenIrShouldBeIncluded) { - std::vector argv = { "ocloc", "-file", @@ -575,7 +608,7 @@ TEST_F(OfflineCompilerTests, givenLackOfExcludeIrArgumentWhenCompilingKernelThen mockOfflineCompiler.initialize(argv.size(), argv); const auto buildResult{mockOfflineCompiler.build()}; - EXPECT_EQ(OfflineCompiler::SUCCESS, buildResult); + ASSERT_EQ(OfflineCompiler::SUCCESS, buildResult); std::string errorReason{}; std::string warning{}; diff --git a/shared/offline_compiler/source/offline_compiler.cpp b/shared/offline_compiler/source/offline_compiler.cpp index 4a2fa01cbf..b760b18c03 100644 --- a/shared/offline_compiler/source/offline_compiler.cpp +++ b/shared/offline_compiler/source/offline_compiler.cpp @@ -710,6 +710,8 @@ int OfflineCompiler::parseCommandLine(size_t numArgs, const std::vector(DebugManager.flags.OverrideRevision.get()); } @@ -737,6 +739,16 @@ int OfflineCompiler::parseCommandLine(size_t numArgs, const std::vector