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
This commit is contained in:
foreman
2014-10-14 15:09:17 -04:00
parent 41d7aee04a
commit 19a31b5fe9
+27 -31
View File
@@ -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<llvm::Module*> &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<llvm::Module*> &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<llvm::Module*> &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);