From b33adc24e10614ce325692acc9b59c6a06f856bf Mon Sep 17 00:00:00 2001
From: foreman
Date: Tue, 14 Mar 2017 13:53:50 -0400
Subject: [PATCH] P4 to Git Change 1385483 by smekhano@stas-mwamba-rocm on
2017/03/14 13:44:00
SWDEV-115974 - ROCm OCL RT: pass OpenCL relaxation options to clang
Testing: smoke, precheckin, MLOpen/LC
Reviewed by Evgeny Mankov
Affected files ...
... //depot/stg/opencl/drivers/opencl/compiler/lib/utils/options.cpp#39 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprogram.cpp#36 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#58 edit
---
rocclr/compiler/lib/utils/options.cpp | 25 +++++++++++++++++++++++
rocclr/runtime/device/pal/palprogram.cpp | 6 ++++++
rocclr/runtime/device/rocm/rocprogram.cpp | 6 ++++++
3 files changed, 37 insertions(+)
diff --git a/rocclr/compiler/lib/utils/options.cpp b/rocclr/compiler/lib/utils/options.cpp
index d587faf017..74b33fac63 100644
--- a/rocclr/compiler/lib/utils/options.cpp
+++ b/rocclr/compiler/lib/utils/options.cpp
@@ -745,12 +745,14 @@ processOption(int OptDescTableIx, Options& Opts, const std::string& Value,
Opts.setFlag(OID_FiniteMathOnly, 1);
tod = &OptDescTable[OID_FiniteMathOnly];
(void)setOptionVariable (tod, ovars, (int64_t)1, NULL);
+ Opts.clangOptions.push_back("-cl-finite-math-only");
break;
case OID_NoSignedZeros:
Opts.setFlag(OID_NoSignedZeros, 1);
tod = &OptDescTable[OID_NoSignedZeros];
(void)setOptionVariable (tod, ovars, (int64_t)1, NULL);
+ Opts.clangOptions.push_back("-cl-no-signed-zeros");
break;
case OID_FastRelaxedMath:
@@ -767,6 +769,7 @@ processOption(int OptDescTableIx, Options& Opts, const std::string& Value,
Opts.clcOptions.append(" -D__FAST_RELAXED_MATH__=1");
Opts.clangOptions.push_back("-D__FAST_RELAXED_MATH__=1");
+ Opts.clangOptions.push_back("-cl-fast-relaxed-math");
// fall-through to handle UnsafeMathOpt
case OID_UnsafeMathOpt:
@@ -780,6 +783,28 @@ processOption(int OptDescTableIx, Options& Opts, const std::string& Value,
Opts.setFlag(OID_MadEnable, 1);
tod = &OptDescTable[OID_MadEnable];
(void)setOptionVariable (tod, ovars, (int64_t)1, NULL);
+ Opts.clangOptions.push_back("-cl-unsafe-math-optimizations");
+ break;
+
+ case OID_DenormsAreZero:
+ Opts.setFlag(OID_DenormsAreZero, 1);
+ tod = &OptDescTable[OID_DenormsAreZero];
+ (void)setOptionVariable (tod, ovars, (int64_t)1, NULL);
+ Opts.clangOptions.push_back("-cl-denorms-are-zero");
+ break;
+
+ case OID_StricAliasing:
+ Opts.setFlag(OID_StricAliasing, 1);
+ tod = &OptDescTable[OID_StricAliasing];
+ (void)setOptionVariable (tod, ovars, (int64_t)1, NULL);
+ Opts.clangOptions.push_back("-cl-strict-aliasing");
+ break;
+
+ case OID_MadEnable:
+ Opts.setFlag(OID_MadEnable, 1);
+ tod = &OptDescTable[OID_MadEnable];
+ (void)setOptionVariable (tod, ovars, (int64_t)1, NULL);
+ Opts.clangOptions.push_back("-cl-mad-enable");
break;
case OID_EnableDebug:
diff --git a/rocclr/runtime/device/pal/palprogram.cpp b/rocclr/runtime/device/pal/palprogram.cpp
index c839d6c43c..cab99f97e9 100644
--- a/rocclr/runtime/device/pal/palprogram.cpp
+++ b/rocclr/runtime/device/pal/palprogram.cpp
@@ -1504,6 +1504,12 @@ LightningProgram::linkImpl(amd::option::Options *options)
optLevel << "-O" << options->oVariables->OptLevel;
codegenOptions.append(" ").append(optLevel.str());
+ // Pass clang options
+ std::ostringstream ostrstr;
+ std::copy(options->clangOptions.begin(), options->clangOptions.end(),
+ std::ostream_iterator(ostrstr, " "));
+ codegenOptions.append(" ").append(ostrstr.str());
+
// Set whole program mode
codegenOptions.append(" -mllvm -amdgpu-internalize-symbols");
diff --git a/rocclr/runtime/device/rocm/rocprogram.cpp b/rocclr/runtime/device/rocm/rocprogram.cpp
index 39e0d4c406..c37b24eb5a 100644
--- a/rocclr/runtime/device/rocm/rocprogram.cpp
+++ b/rocclr/runtime/device/rocm/rocprogram.cpp
@@ -813,6 +813,12 @@ HSAILProgram::linkImpl_LC(amd::option::Options *options)
optLevel << "-O" << options->oVariables->OptLevel;
codegenOptions.append(" ").append(optLevel.str());
+ // Pass clang options
+ std::ostringstream ostrstr;
+ std::copy(options->clangOptions.begin(), options->clangOptions.end(),
+ std::ostream_iterator(ostrstr, " "));
+ codegenOptions.append(" ").append(ostrstr.str());
+
// Set whole program mode
codegenOptions.append(" -mllvm -amdgpu-internalize-symbols");