From 095b73ae6f632c52e0f544850cc6dc4eef515b79 Mon Sep 17 00:00:00 2001
From: foreman
Date: Tue, 3 Nov 2015 11:01:56 -0500
Subject: [PATCH] P4 to Git Change 1206897 by emankov@em-hsa-amd on 2015/11/03
10:43:40
SWDEV-77584 - ORCA RT: Preparations for enabling HSAIL on OpenCL 1.2 by default. Fix error (by CL 1205606) in parsing option algorithm.
Compile/link options should be parsed once with additional options specified by AMD_OCL_BUILD(LINK)_OPTIONS(_APPEND) in case of optionChangable or without them, but once.
One static method for parsing all options in ORCA RT is created:
static bool ParseAllOptions(const std::string& options,
option::Options& parsedOptions,
bool optionChangable = true,
bool linkOptsOnly = false)
[Testing] Pre-checkin
[Reviewers] German Andryeyev, Nikolay Haustov
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/platform/program.cpp#75 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/program.hpp#37 edit
---
rocclr/runtime/platform/program.cpp | 71 ++++++++++++-----------------
rocclr/runtime/platform/program.hpp | 7 +--
2 files changed, 34 insertions(+), 44 deletions(-)
diff --git a/rocclr/runtime/platform/program.cpp b/rocclr/runtime/platform/program.cpp
index 40f27f383d..8a8dffabdd 100644
--- a/rocclr/runtime/platform/program.cpp
+++ b/rocclr/runtime/platform/program.cpp
@@ -143,13 +143,11 @@ Program::compile(
}
}
option::Options parsedOptions;
- if ((optionChangable && !ParseAMDOCLBUILDOptions(parsedOptions)) ||
- !option::parseAllOptions(cppstr, parsedOptions)) {
+ if (!ParseAllOptions(cppstr, parsedOptions, optionChangable)) {
programLog_ = parsedOptions.optionsLog();
LogError("Parsing compile options failed.");
return CL_INVALID_COMPILER_OPTIONS;
}
- programLog_ = parsedOptions.optionsLog();
std::vector headers(numHeaders);
for (size_t i = 0; i < numHeaders; ++i) {
@@ -241,13 +239,11 @@ Program::link(
}
}
option::Options parsedOptions;
- if ((optionChangable && !ParseAMDOCLLINKOptions(parsedOptions)) ||
- !option::parseLinkOptions(cppstr, parsedOptions)) {
+ if (!ParseAllOptions(cppstr, parsedOptions, optionChangable, true)) {
programLog_ = parsedOptions.optionsLog();
LogError("Parsing link options failed.");
return CL_INVALID_LINKER_OPTIONS;
}
- programLog_ = parsedOptions.optionsLog();
// Link the program programs associated with the given devices.
std::vector::const_iterator it;
@@ -383,13 +379,11 @@ Program::build(
}
}
option::Options parsedOptions;
- if ((optionChangable && !ParseAMDOCLBUILDOptions(parsedOptions)) ||
- !option::parseAllOptions(cppstr, parsedOptions)) {
+ if (!ParseAllOptions(cppstr, parsedOptions, optionChangable)) {
programLog_ = parsedOptions.optionsLog();
LogError("Parsing compile options failed.");
return CL_INVALID_COMPILER_OPTIONS;
}
- programLog_ = parsedOptions.optionsLog();
// Build the program programs associated with the given devices.
std::vector::const_iterator it;
@@ -502,39 +496,34 @@ Program::GetOclCVersion(const char* clVer) {
}
bool
-Program::ParseAMDOCLBUILDOptions(option::Options& options) {
- std::string opts;
- if (AMD_OCL_BUILD_OPTIONS != NULL) {
- opts = AMD_OCL_BUILD_OPTIONS;
+Program::ParseAllOptions(const std::string& options, option::Options& parsedOptions, bool optionChangable, bool linkOptsOnly) {
+ std::string allOpts = options;
+ if (optionChangable) {
+ if (linkOptsOnly) {
+ if (AMD_OCL_LINK_OPTIONS != NULL) {
+ allOpts.append(" ");
+ allOpts.append(AMD_OCL_LINK_OPTIONS);
+ }
+ if (AMD_OCL_LINK_OPTIONS_APPEND != NULL) {
+ allOpts.append(" ");
+ allOpts.append(AMD_OCL_LINK_OPTIONS_APPEND);
+ }
+ } else {
+ if (AMD_OCL_BUILD_OPTIONS != NULL) {
+ allOpts.append(" ");
+ allOpts.append(AMD_OCL_BUILD_OPTIONS);
+ }
+ if (!Device::appProfile()->GetBuildOptsAppend().empty()) {
+ allOpts.append(" ");
+ allOpts.append(Device::appProfile()->GetBuildOptsAppend());
+ }
+ if (AMD_OCL_BUILD_OPTIONS_APPEND != NULL) {
+ allOpts.append(" ");
+ allOpts.append(AMD_OCL_BUILD_OPTIONS_APPEND);
+ }
+ }
}
- if (!Device::appProfile()->GetBuildOptsAppend().empty()) {
- opts.append(" ");
- opts.append(Device::appProfile()->GetBuildOptsAppend());
- }
- if (AMD_OCL_BUILD_OPTIONS_APPEND != NULL) {
- opts.append(" ");
- opts.append(AMD_OCL_BUILD_OPTIONS_APPEND);
- }
- if (!amd::option::parseAllOptions(opts, options)) {
- return false;
- }
- return true;
-}
-
-bool
-Program::ParseAMDOCLLINKOptions(option::Options& options) {
- std::string opts;
- if (AMD_OCL_LINK_OPTIONS != NULL) {
- opts = AMD_OCL_LINK_OPTIONS;
- }
- if (AMD_OCL_LINK_OPTIONS_APPEND != NULL) {
- opts.append(" ");
- opts.append(AMD_OCL_LINK_OPTIONS_APPEND);
- }
- if (!amd::option::parseLinkOptions(opts, options)) {
- return false;
- }
- return true;
+ return amd::option::parseAllOptions(allOpts, parsedOptions, linkOptsOnly);
}
bool
diff --git a/rocclr/runtime/platform/program.hpp b/rocclr/runtime/platform/program.hpp
index 2402d218e0..4a9d3ded77 100644
--- a/rocclr/runtime/platform/program.hpp
+++ b/rocclr/runtime/platform/program.hpp
@@ -189,9 +189,10 @@ public:
static int GetOclCVersion(const char* clVer);
- static bool ParseAMDOCLBUILDOptions(option::Options& options);
-
- static bool ParseAMDOCLLINKOptions(option::Options& options);
+ static bool ParseAllOptions(const std::string& options,
+ option::Options& parsedOptions,
+ bool optionChangable = true,
+ bool linkOptsOnly = false);
};
/*! @}