P4 to Git Change 1142726 by emankov@em-hsa-amd on 2015/04/21 07:12:16

ECR #333753 - Compiler Lib/ORCA RT: JIT refactoring

	Purpose: Make JIT work with different LLVMs - LLVM 3.6 pre-merge task.

	Synopsis: After splitting of Compiler Lib, JIT appeared to be apart from Compiler Lib's infrastructure and without any wrapping, hence working only with statically linked LLVM from amdocl library (HSAIL), which is unacceptable in the light of 2 LLVMs after upcoming LLVM 3.6 merge. CPU should work on LLVM 3.2.

	Finally JIT folder is totally removed from the Compiler Lib sources and make system as unneeded laterally from the Compiler Lib’s infrastructure solution.

	Testing: pre check-in, smoke, ocl_conformance 1.2 CPU (selectively)

	Reviewers: Stanislav Mekhanoshin, Brian Sumner, Jan Sjodin, Artem Tamazov, Daniil Fukalov

Affected files ...

... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/build/Makefile.api#109 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/Makefile#33 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/api/v0_8/acl.cpp#29 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/api/v0_8/aclLoaders.cpp#12 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/Disassembler.cpp#1 move/add
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/Disassembler.h#1 move/add
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/build/Makefile.common#29 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/codegen.cpp#61 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/codegen.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/v0_8/if_acl.cpp#66 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/v0_8/if_acl.h#3 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/cpu/x86_be.cpp#29 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/build/Makefile.complib#80 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/acl.h#9 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/aclFunctors.h#5 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/aclStructs.h#16 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/include/v0_8/aclTypes.h#6 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/Makefile#2 delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/include/jit.h#3 delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/Disassembler.cpp#4 move/delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/Disassembler.h#2 move/delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/Makefile#2 delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/build/Makefile#2 delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/build/Makefile.src#5 delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/jit.cpp#15 delete
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/jit.hpp#3 delete
... //depot/stg/opencl/drivers/opencl/compiler/llvm/linux/include/llvm/Config/config.h#27 edit
... //depot/stg/opencl/drivers/opencl/compiler/llvm32/linux/include/llvm/Config/config.h#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpubinary.cpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpuprogram.cpp#64 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpuprogram.hpp#12 edit
... //depot/stg/opencl/drivers/opencl/tests/ocltst/module/complib/CLAssumptionCheck.cpp#41 edit
This commit is contained in:
foreman
2015-04-21 07:20:43 -04:00
parent a69c6e8be5
commit b607f5194c
13 changed files with 1289 additions and 49 deletions
+70 -23
View File
@@ -26,9 +26,6 @@
#include "amdrt.inc"
#endif
#include "acl.h"
#include "jit.h"
//CLC_IN_PROCESS_CHANGE
extern int openclFrontEnd(const char* cmdline, std::string*, std::string* typInfo = NULL);
@@ -416,9 +413,11 @@ setSymbolsCallbackCStr(const char* symbol, const void* value, void* data) {
struct DisasData {
public:
DisasData(std::stringstream *stream,
aclJITObjectImage im) : asmstream(stream), image(im) {};
aclJITObjectImage im, aclCompiler* cmpl)
: asmstream(stream), image(im), compiler(cmpl) {};
std::stringstream *asmstream;
aclJITObjectImage image;
aclCompiler* compiler;
};
#if defined(LEGACY_COMPLIB)
@@ -428,6 +427,7 @@ disasSymbolsCallback(std::string symbol, const void* value, void* data)
DisasData* disasData = (DisasData*) data;
std::stringstream &asmstream = *(disasData->asmstream);
aclJITObjectImage image = disasData->image;
aclCompiler* compiler = disasData->compiler;
const char __OpenCL_[] = "__OpenCL_";
const char _stub[] = "_stub";
const char _kernel[] = "_kernel";
@@ -445,8 +445,13 @@ disasSymbolsCallback(std::string symbol, const void* value, void* data)
if ((symbol.compare(suffixPos, sizeof(_stub) - 1, _stub) == 0) ||
(symbol.compare(suffixPos, sizeof(_kernel) - 1, _kernel) == 0)) {
acl_error err = ACL_SUCCESS;
char* kernelDisas =
aclJITObjectImageDisassembleKernel(image, symbol.c_str());
aclJITObjectImageDisassembleKernel(compiler, image, symbol.c_str(), &err);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageDisassembleKernel failed");
return false;
}
asmstream << kernelDisas;
free(kernelDisas);
}
@@ -471,9 +476,9 @@ Program::compileBinaryToISA(amd::option::Options* options)
std::string tempName = amd::Os::getTempFileName();
dllFileName_ = tempName + "." IF(IS_WINDOWS, "dll", "so");
acl_error err;
acl_error err = ACL_SUCCESS;
aclTargetInfo aclinfo = info(has_avx ?
/*has_fma4 ? "Bulldozer" :*/
/*has_fma4 ? "Bulldozer" :*/
"Corei7_AVX" :
"Athlon64");
@@ -554,8 +559,18 @@ Program::compileBinaryToISA(amd::option::Options* options)
if (options->oVariables->UseJIT) {
// printf("Using the jit!\n");
aclJITObjectImage objectImage = aclJITObjectImageCreate(isa, len, bin);
aclJITObjectImageFinalize(objectImage);
aclJITObjectImage objectImage = aclJITObjectImageCreate(compiler(), isa, len, bin, &err);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageCreate failed");
aclBinaryFini(bin);
return false;
}
err = aclJITObjectImageFinalize(compiler(), objectImage);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageFinalize failed");
aclBinaryFini(bin);
return false;
}
setJITBinary(objectImage);
aclBinaryFini(bin);
@@ -568,10 +583,14 @@ Program::compileBinaryToISA(amd::option::Options* options)
#if 0
// Debug stuff. Try and disassemble all kernels and stubs
std::stringstream asmtext;
DisasData disasData(&asmtext, objectImage);
aclJITObjectImageIterateSymbols(objectImage,
DisasData disasData(&asmtext, objectImage, compiler());
err = aclJITObjectImageIterateSymbols(compiler(), objectImage,
disasSymbolsCallbackCStr,
&disasData);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageIterateSymbols failed");
return false;
}
printf("DisasSize: %d\nDisas: %s\n", (int)asmtext.str().size(),
asmtext.str().c_str());
@@ -696,7 +715,7 @@ Program::compileImpl(
f.close();
}
acl_error err;
acl_error err = ACL_SUCCESS;
aclTargetInfo aclinfo = info();
aclBinaryOptions binOpts = {0};
@@ -830,12 +849,26 @@ bool
Program::loadDllCode(amd::option::Options* options, bool addElfSymbols)
{
if(options->oVariables->UseJIT) {
acl_error err = ACL_SUCCESS;
aclJITObjectImage objectImage = getJITBinary();
aclJITObjectImageIterateSymbols(objectImage, setKernelInfoCallbackCStr,
this);
aclJITObjectImageIterateSymbols(objectImage, setSymbolsCallbackCStr,
clBinary());
setGlobalVariableTotalSize(aclJITObjectImageGetGlobalsSize(objectImage));
err = aclJITObjectImageIterateSymbols(compiler(), objectImage,
setKernelInfoCallbackCStr, this);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageIterateSymbols failed");
return false;
}
err = aclJITObjectImageIterateSymbols(compiler(), objectImage,
setSymbolsCallbackCStr, clBinary());
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageIterateSymbols failed");
return false;
}
size_t size = aclJITObjectImageGetGlobalsSize(compiler(), objectImage, &err);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageGetGlobalsSize failed");
return false;
}
setGlobalVariableTotalSize(size);
return true;
}
// Check if we have a URI
@@ -888,10 +921,24 @@ Program::linkImpl(amd::option::Options* options)
return false;
} else if (hasJITBinary) {
aclJITObjectImage objectImage = getJITBinary();
aclJITObjectImageIterateSymbols(objectImage, setKernelInfoCallbackCStr, this);
aclJITObjectImageIterateSymbols(objectImage, setSymbolsCallbackCStr, clBinary());
setGlobalVariableTotalSize(aclJITObjectImageGetGlobalsSize(objectImage));
acl_error err = aclJITObjectImageIterateSymbols(compiler(), objectImage,
setKernelInfoCallbackCStr, this);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageIterateSymbols failed");
return false;
}
err = aclJITObjectImageIterateSymbols(compiler(), objectImage,
setSymbolsCallbackCStr, clBinary());
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageIterateSymbols failed");
return false;
}
size_t size = aclJITObjectImageGetGlobalsSize(compiler(), objectImage, &err);
if (err != ACL_SUCCESS) {
LogWarning("aclJITObjectImageGetGlobalsSize failed");
return false;
}
setGlobalVariableTotalSize(size);
return true;
}
// Fall-through to recompile
@@ -1184,7 +1231,7 @@ Program::createBinary(amd::option::Options* options)
const aclTargetInfo &
Program::info(const char * str) {
acl_error err;
acl_error err = ACL_SUCCESS;
info_ = aclGetTargetInfo(LP64_SWITCH("x86", "x86-64"), ( str && str[0] == '\0' ? "Generic" : str ), &err);
if (err != ACL_SUCCESS) {
LogWarning("aclGetTargetInfo failed");
@@ -1195,7 +1242,7 @@ Program::info(const char * str) {
Program::~Program()
{
if(getJITBinary() != NULL) {
aclJITObjectImageDestroy(getJITBinary());
aclJITObjectImageDestroy(compiler(), getJITBinary());
}
if (!sourceFileName_.empty()) {