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:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user