summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunyan He <junyan.he@linux.intel.com>2014-09-05 16:54:27 +0800
committerZhigang Gong <zhigang.gong@intel.com>2014-09-05 17:16:04 +0800
commitba21f080b15728bf4a742aa16aac5a341521ce33 (patch)
treee24eb9dff03e9fb91446202d098f33e2ef06859e
parent594a9104a4194b1e0cc224c0c772fe4606d3894a (diff)
Add uncompatible PCH Options to avoid compiling failure.
Signed-off-by: Junyan He <junyan.he@linux.intel.com> Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
-rw-r--r--backend/src/backend/program.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
index 98e8a34..8c41d5e 100644
--- a/backend/src/backend/program.cpp
+++ b/backend/src/backend/program.cpp
@@ -628,6 +628,7 @@ namespace gbe {
std::istringstream idirs(dirs);
std::string pchFileName;
bool findPCH = false;
+ bool invalidPCH = false;
size_t start = 0, end = 0;
std::string hdirs = OCL_HEADER_FILE_DIR;
@@ -652,6 +653,10 @@ namespace gbe {
std::string optionStr(str);
const std::string unsupportedOptions("-cl-denorms-are-zero, -cl-strict-aliasing, -cl-opt-disable,"
"-cl-no-signed-zeros, -cl-fp32-correctly-rounded-divide-sqrt");
+
+ const std::string uncompatiblePCHOptions = ("-cl-single-precision-constant, -cl-fast-relaxed-math");
+ const std::string fastMathOption = ("-cl-fast-relaxed-math");
+
while (end != std::string::npos) {
end = optionStr.find(' ', start);
std::string str = optionStr.substr(start, end - start);
@@ -662,6 +667,14 @@ namespace gbe {
if(unsupportedOptions.find(str) != std::string::npos)
continue;
+ if (uncompatiblePCHOptions.find(str) != std::string::npos)
+ invalidPCH = true;
+
+ if (fastMathOption.find(str) != std::string::npos) {
+ clOpt.push_back("-D");
+ clOpt.push_back("__FAST_RELAXED_MATH__=1");
+ }
+
clOpt.push_back(str);
}
free(str);
@@ -687,7 +700,7 @@ namespace gbe {
FILE *clFile = fdopen(clFd, "w");
FATAL_IF(clFile == NULL, "Failed to open temporary file");
- if (!findPCH) {
+ if (!findPCH || invalidPCH) {
clOpt.push_back("-include");
clOpt.push_back("ocl.h");
} else {