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