Add ze-opt-level support

Related-To: LOCI-2315
Signed-off-by: Young Jin Yoon <young.jin.yoon@intel.com>
This commit is contained in:
Young Jin Yoon
2021-07-06 03:45:59 -07:00
committed by Compute-Runtime-Automation
parent 3625344d37
commit 4ba64d2530
4 changed files with 39 additions and 2 deletions

View File

@ -35,6 +35,7 @@ namespace L0 {
namespace BuildOptions {
NEO::ConstStringRef optDisable = "-ze-opt-disable";
NEO::ConstStringRef optLevel = "-ze-opt-level";
NEO::ConstStringRef greaterThan4GbRequired = "-ze-opt-greater-than-4GB-buffer-required";
NEO::ConstStringRef hasBufferOffsetArg = "-ze-intel-has-buffer-offset-arg";
NEO::ConstStringRef debugKernelEnable = "-ze-kernel-debug-enable";
@ -422,6 +423,7 @@ void ModuleImp::createBuildOptions(const char *pBuildFlags, std::string &apiOpti
apiOptions = pBuildFlags;
moveBuildOption(apiOptions, apiOptions, NEO::CompilerOptions::optDisable, BuildOptions::optDisable);
moveBuildOption(apiOptions, apiOptions, NEO::CompilerOptions::optLevel, BuildOptions::optLevel);
moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::greaterThan4gbBuffersRequired, BuildOptions::greaterThan4GbRequired);
moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::allowZebin, NEO::CompilerOptions::allowZebin);
@ -698,13 +700,25 @@ ze_result_t ModuleImp::performDynamicLink(uint32_t numModules,
}
bool moveBuildOption(std::string &dstOptionsSet, std::string &srcOptionSet, NEO::ConstStringRef dstOptionName, NEO::ConstStringRef srcOptionName) {
const char optDelim = ' ';
const char valDelim = '=';
auto optInSrcPos = srcOptionSet.find(srcOptionName.begin());
if (std::string::npos == optInSrcPos) {
return false;
}
srcOptionSet.erase(optInSrcPos, srcOptionName.length());
NEO::CompilerOptions::concatenateAppend(dstOptionsSet, dstOptionName);
std::string dstOptionStr(dstOptionName);
auto optInSrcEndPos = srcOptionSet.find(optDelim, optInSrcPos);
if (srcOptionName == BuildOptions::optLevel) {
auto valInSrcPos = srcOptionSet.find(valDelim, optInSrcPos);
if (std::string::npos == valInSrcPos) {
return false;
}
dstOptionStr += srcOptionSet.substr(valInSrcPos + 1, optInSrcEndPos);
}
srcOptionSet.erase(optInSrcPos, (optInSrcEndPos - optInSrcPos));
NEO::CompilerOptions::concatenateAppend(dstOptionsSet, dstOptionStr);
return true;
}

View File

@ -24,6 +24,7 @@ namespace L0 {
namespace BuildOptions {
extern NEO::ConstStringRef optDisable;
extern NEO::ConstStringRef optLevel;
extern NEO::ConstStringRef greaterThan4GbRequired;
extern NEO::ConstStringRef hasBufferOffsetArg;
extern NEO::ConstStringRef debugKernelEnable;

View File

@ -1230,6 +1230,27 @@ TEST(BuildOptions, givenSrcOptionNameInSrcNamesWhenMovingBuildOptionsThenOptionI
EXPECT_EQ(std::string::npos, srcNames.find(NEO::CompilerOptions::optDisable.str()));
}
TEST(BuildOptions, givenSrcOptLevelInSrcNamesWhenMovingBuildOptionsThenOptionIsRemovedFromSrcNamesAndTranslatedOptionsStoredInDstNames) {
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::optLevel);
srcNames += "=2";
std::string dstNames;
auto result = moveBuildOption(dstNames, srcNames, NEO::CompilerOptions::optLevel, BuildOptions::optLevel);
EXPECT_TRUE(result);
EXPECT_EQ(NEO::CompilerOptions::optLevel.str() + std::string("2"), dstNames);
EXPECT_EQ(std::string::npos, srcNames.find(BuildOptions::optLevel.str()));
EXPECT_EQ(std::string::npos, srcNames.find(std::string("=2")));
}
TEST(BuildOptions, givenSrcOptLevelWithoutLevelIntegerInSrcNamesWhenMovingBuildOptionsThenFalseIsReturned) {
std::string srcNames = NEO::CompilerOptions::concatenate(NEO::CompilerOptions::fastRelaxedMath, BuildOptions::optLevel);
std::string dstNames;
auto result = moveBuildOption(dstNames, srcNames, NEO::CompilerOptions::optLevel, BuildOptions::optLevel);
EXPECT_FALSE(result);
}
TEST_F(ModuleTest, givenInternalOptionsWhenBindlessEnabledThenBindlesOptionsPassed) {
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessMode.set(1);

View File

@ -32,6 +32,7 @@ static constexpr ConstStringRef forceEmuInt32DivRem = "-cl-intel-force-emu-int32
static constexpr ConstStringRef forceEmuInt32DivRemSP = "-cl-intel-force-emu-sp-int32divrem";
static constexpr ConstStringRef allowZebin = "-allow-zebin";
static constexpr ConstStringRef enableImageSupport = "-D__IMAGE_SUPPORT__=1";
static constexpr ConstStringRef optLevel = "-ze-opt-level=O";
constexpr size_t nullterminateSize = 1U;
constexpr size_t spaceSeparatorSize = 1U;