From ed1144e0c01c66f92b4da3457300c8672b3d4026 Mon Sep 17 00:00:00 2001 From: foreman Date: Thu, 25 Aug 2016 12:49:33 -0400 Subject: [PATCH] P4 to Git Change 1307198 by lmoriche@lmoriche_opencl_dev on 2016/08/25 12:39:46 SWDEV-1306648 - Add OptimizeLLVMBitcode to the ROCm-OpenCL-Driver. Call the optimizer in roc::HSAILProgram::linkImpl, between linking with the bitcode built-in libraries and code generation. Use the default optimization level, with at a minimum -strip -instcombine -always-inline. Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#13 edit --- rocclr/runtime/device/rocm/rocprogram.cpp | 31 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/rocclr/runtime/device/rocm/rocprogram.cpp b/rocclr/runtime/device/rocm/rocprogram.cpp index 599a72b937..8955c1b21c 100644 --- a/rocclr/runtime/device/rocm/rocprogram.cpp +++ b/rocclr/runtime/device/rocm/rocprogram.cpp @@ -833,8 +833,32 @@ namespace roc { return false; } + // open the optimized output + Data* opt_bc = C->NewBuffer(DT_LLVM_BC); + + if (!opt_bc) { + buildLog_ += "Error: Failed to open the optimized program.\n"; + return false; + } + + std::ostringstream optLevel; + optLevel << "-O" << options->oVariables->OptLevel; + + std::vector optOptions; + optOptions.push_back(optLevel.str()); + optOptions.push_back("-strip"); + optOptions.push_back("-instcombine"); + optOptions.push_back("-always-inline"); + + ret = C->OptimizeLLVMBitcode(linked_bc, opt_bc, optOptions); + buildLog_ += C->Output(); + if (!ret) { + buildLog_ += "Error: Optimizing bitcode failed: linking source & IR libraries.\n"; + return false; + } + inputs.clear(); - inputs.push_back(linked_bc); + inputs.push_back(opt_bc); Buffer* out_exec = C->NewBuffer(DT_EXECUTABLE); if (!out_exec) { @@ -848,9 +872,8 @@ namespace roc { optionsstr.append(" -mcpu="); optionsstr.append(dev().deviceInfo().machineTarget_); - std::ostringstream optLevel; - optLevel << " -O" << options->oVariables->OptLevel; - optionsstr.append(optLevel.str()); + // Set the -O# + optionsstr.append(" ").append(optLevel.str()); // Tokenize the options string into a vector of strings std::istringstream strstr(optionsstr);