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");