From 19a31b5fe94fde38e6609198fd4f0f4018a0bbbc Mon Sep 17 00:00:00 2001
From: foreman
Date: Tue, 14 Oct 2014 15:09:17 -0400
Subject: [PATCH] P4 to Git Change 1087364 by mbareghe@mbareghe_staging_win30
on 2014/10/14 14:49:19
ECR #304775 - clp re-implementation - Refactored SPIR loader and Added replaceTrivialConversionFunc to linker and offline linker. clp Moved to prelinker.
Affected files ...
... //depot/stg/opencl/drivers/opencl/compiler/clc/clpSrc/Makefile#2 delete
... //depot/stg/opencl/drivers/opencl/compiler/clc/clpSrc/build/Makefile#3 delete
... //depot/stg/opencl/drivers/opencl/compiler/clc/clpSrc/clpMain.cpp#4 delete
... //depot/stg/opencl/drivers/opencl/compiler/clc/clpSrc/clpVectorExpansion.cpp#28 delete
... //depot/stg/opencl/drivers/opencl/compiler/clc/src/build/Makefile.clc#14 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/linker.cpp#115 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/include/llvm/AMDPrelinkOpt.h#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Linker/AMDPrelinkOpt.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Linker/clpVectorExpansion.cpp#1 add
... //depot/stg/opencl/drivers/opencl/compiler/llvm/lib/Transforms/SPIR/AMDSPIRLoader.cpp#87 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm/tools/llvm-link/llvm-link.cpp#49 edit
... //depot/stg/opencl/drivers/opencl/library/common/src/commonConversions.cl#17 edit
... //depot/stg/opencl/drivers/opencl/library/common/src/commonVectorExpansions.cl#22 edit
... //depot/stg/opencl/drivers/opencl/library/hsa/hsail/build/Makefile.hsail#36 edit
---
.../compiler/lib/backends/common/linker.cpp | 58 +++++++++----------
1 file changed, 27 insertions(+), 31 deletions(-)
diff --git a/rocclr/compiler/lib/backends/common/linker.cpp b/rocclr/compiler/lib/backends/common/linker.cpp
index 1a0ce91253..670d8cf9a7 100644
--- a/rocclr/compiler/lib/backends/common/linker.cpp
+++ b/rocclr/compiler/lib/backends/common/linker.cpp
@@ -97,8 +97,10 @@
#define DEBUG_TYPE "ocl_linker"
static const char* OptionMaskFName = "__option_mask";
-extern llvm::Module*
-clpVectorExpansion(llvm::Module *srcModules[], std::string &errorMsg, bool IsGPUTarget);
+
+namespace AMDSpir {
+ extern void replaceTrivialConversionFunc(llvm::Module& M);
+}
namespace amd {
namespace {
@@ -900,6 +902,8 @@ amdcl::OCLLinker::link(llvm::Module* input, std::vector &libs)
#endif
+ AMDSpir::replaceTrivialConversionFunc(*LLVMBinary());
+
if (!llvm::fixupKernelModule(LLVMBinary(), LibTargetTriple, LibDataLayout))
return 1;
@@ -909,36 +913,19 @@ amdcl::OCLLinker::link(llvm::Module* input, std::vector &libs)
Options()->oVariables->FP32RoundDivideSqrt);
// Before doing anything else, quickly optimize Module
- if (Options()->oVariables->OptLevel) {
- if (Options()->oVariables->EnableBuildTiming) {
- time_prelinkopt = amd::Os::timeNanos();
- }
-
- AMDPrelinkOpt(LLVMBinary(), true /*Whole*/,
- !Options()->oVariables->OptSimplifyLibCall,
- Options()->oVariables->UnsafeMathOpt,
- Options()->oVariables->OptUseNative,
- LowerToPreciseFunctions);
-
- if (Options()->oVariables->EnableBuildTiming) {
- time_prelinkopt = amd::Os::timeNanos() - time_prelinkopt;
- }
- }
- // Now, do linking by extracting from the builtins library only those
- // functions that are used in the kernel(s).
if (Options()->oVariables->EnableBuildTiming) {
- time_link = amd::Os::timeNanos();
+ time_prelinkopt = amd::Os::timeNanos();
}
-
- std::string ErrorMessage;
-
- // CL pre-link processing
- llvm::Module *clp_inputs[2];
- clp_inputs[0] = LLVMBinary();
- clp_inputs[1] = NULL;
std::string clp_errmsg;
- llvm::Module *OnFlyLib = clpVectorExpansion (clp_inputs, clp_errmsg, IsGPUTarget);
- if (clp_errmsg.empty() == false) {
+ llvm::Module *OnFlyLib = AMDPrelinkOpt(LLVMBinary(), true /*Whole*/,
+ !Options()->oVariables->OptSimplifyLibCall,
+ Options()->oVariables->UnsafeMathOpt,
+ Options()->oVariables->OptUseNative,
+ Options()->oVariables->OptLevel,
+ LowerToPreciseFunctions,
+ IsGPUTarget, clp_errmsg);
+
+ if (!clp_errmsg.empty()) {
delete LLVMBinary();
for (unsigned int i = 0; i < LibMs.size(); ++ i) {
delete LibMs[i];
@@ -949,13 +936,22 @@ amdcl::OCLLinker::link(llvm::Module* input, std::vector &libs)
return 1;
}
- unsigned int offset = (unsigned int)LibMs.size();
-
if (OnFlyLib) {
// OnFlyLib must be the last!
LibMs.push_back(OnFlyLib);
}
+ if (Options()->oVariables->EnableBuildTiming) {
+ time_prelinkopt = amd::Os::timeNanos() - time_prelinkopt;
+ }
+ // Now, do linking by extracting from the builtins library only those
+ // functions that are used in the kernel(s).
+ if (Options()->oVariables->EnableBuildTiming) {
+ time_link = amd::Os::timeNanos();
+ }
+
+ std::string ErrorMessage;
+
// build the reference map
llvm::ReferenceMapBuilder RefMapBuilder(LLVMBinary(), LibMs);