diff options
author | Tom Gall <tom.gall@linaro.org> | 2015-01-26 12:54:14 -0600 |
---|---|---|
committer | Tom Gall <tom.gall@linaro.org> | 2015-01-26 12:54:14 -0600 |
commit | 5df3805db7eb99a5834d363fd073f36a9f8c79e2 (patch) | |
tree | 0fd20c408e665489c1620770d252361c0d7f35f9 | |
parent | 7000f0e9b2580fd3b5974cc6f401df4d17bd5af4 (diff) |
WIP fixes for llvm-3.6.llvm_3_6-tg
Things seem to break down into one of two categories, either
changes to the c++ implementation or the LLVM class library.
-rw-r--r-- | src/core/compiler.cpp | 9 | ||||
-rw-r--r-- | src/core/compiler.h | 3 | ||||
-rw-r--r-- | src/core/kernel.cpp | 6 | ||||
-rw-r--r-- | src/core/program.cpp | 26 |
4 files changed, 25 insertions, 19 deletions
diff --git a/src/core/compiler.cpp b/src/core/compiler.cpp index eb121cb..1c90203 100644 --- a/src/core/compiler.cpp +++ b/src/core/compiler.cpp @@ -56,7 +56,7 @@ std::string get_ocl_dsp(); using namespace Coal; Compiler::Compiler(DeviceInterface *device) -: p_device(device), p_module(0), p_optimize(true), p_log_stream(p_log), +: p_device(device), p_optimize(true), p_log_stream(p_log), p_log_printer(0) { } @@ -264,10 +264,9 @@ int Compiler::compile(const std::string &options, const llvm::StringRef s_data(source->getBuffer()); const llvm::StringRef s_name("<source>"); - llvm::MemoryBuffer *buffer = - llvm::MemoryBuffer::getMemBuffer(s_data, s_name); + std::unique_ptr<llvm::MemoryBuffer> buffer = llvm::MemoryBuffer::getMemBuffer(s_data, s_name); - prep_opts.addRemappedFile("program.cl", buffer); + prep_opts.addRemappedFile("program.cl", buffer->getBuffer()); #endif //timespec t0, t1; @@ -337,7 +336,7 @@ bool Compiler::optimize() const llvm::Module *Compiler::module() const { - return p_module; + return &(*p_module); } void Compiler::appendLog(const std::string &log) diff --git a/src/core/compiler.h b/src/core/compiler.h index 58788e6..a0899ec 100644 --- a/src/core/compiler.h +++ b/src/core/compiler.h @@ -121,7 +121,8 @@ class Compiler private: DeviceInterface *p_device; clang::CompilerInstance p_compiler; - llvm::Module *p_module; + // llvm::Module *p_module; + std::unique_ptr<llvm::Module> p_module; bool p_optimize; std::string p_log, p_options; diff --git a/src/core/kernel.cpp b/src/core/kernel.cpp index 76c7ab8..046e69f 100644 --- a/src/core/kernel.cpp +++ b/src/core/kernel.cpp @@ -46,6 +46,9 @@ #include <boost/tuple/tuple.hpp> #include <llvm/Support/Casting.h> +#include <llvm/IR/Metadata.h> +#include <llvm/IR/Value.h> +#include <llvm/Support/Casting.h> #include <llvm/IR/Module.h> #include <llvm/IR/Type.h> #include <llvm/IR/DerivedTypes.h> @@ -459,7 +462,8 @@ boost::tuple<uint,uint,uint> Kernel::reqdWorkGroupSize(llvm::Module *module) con /*--------------------------------------------------------------------- * Each node has only one operand : a llvm::Function *--------------------------------------------------------------------*/ - llvm::Value *value = node->getOperand(0); + // future DEBUG point, we're not sure this works. + llvm::Value *value = dyn_cast<llvm::ValueAsMetadata>(node->getOperand(0))->getValue(); /*--------------------------------------------------------------------- * Bug somewhere, don't crash diff --git a/src/core/program.cpp b/src/core/program.cpp index 32b1b75..050d78e 100644 --- a/src/core/program.cpp +++ b/src/core/program.cpp @@ -177,7 +177,10 @@ std::vector<llvm::Function *> Program::kernelFunctions(DeviceDependent &dep) /*--------------------------------------------------------------------- * Each node has only one operand : a llvm::Function *--------------------------------------------------------------------*/ - llvm::Value *value = node->getOperand(0); + //llvm::Value *value =(llvm::Value *) node->getOperand(0); + // future debug? + + llvm::Value *value = dyn_cast<llvm::ValueAsMetadata>(node->getOperand(0))->getValue(); /*--------------------------------------------------------------------- * Bug somewhere, don't crash @@ -459,14 +462,14 @@ cl_int Program::loadBinaries(const unsigned char **data, const size_t *lengths, const llvm::StringRef s_data(bitcode); const llvm::StringRef s_name("<binary>"); - llvm::MemoryBuffer *buffer = llvm::MemoryBuffer::getMemBuffer( + std::unique_ptr<llvm::MemoryBuffer> buffer = llvm::MemoryBuffer::getMemBuffer( s_data, s_name, false); if (!buffer) return CL_OUT_OF_HOST_MEMORY; // Make a module of it - ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(buffer, + ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(buffer->getMemBufferRef(), llvm::getGlobalContext()); if (ModuleOrErr) { dep.linked_module = ModuleOrErr.get(); @@ -517,11 +520,11 @@ cl_int Program::build(const char *options, const llvm::StringRef s_data(p_source); const llvm::StringRef s_name("<source>"); - llvm::MemoryBuffer *buffer = llvm::MemoryBuffer::getMemBuffer( + std::unique_ptr<llvm::MemoryBuffer> buffer = llvm::MemoryBuffer::getMemBuffer( s_data, s_name); // Compile - int compile_result = dep.compiler->compile(options ? options : std::string(), buffer); + int compile_result = dep.compiler->compile(options ? options : std::string(), &(*buffer)); if (compile_result) //if (! dep.compiler->compile(options ? options : std::string(), // buffer) ) @@ -551,14 +554,14 @@ cl_int Program::build(const char *options, const llvm::StringRef s_name("stdlib.bc"); std::string errMsg; - llvm::MemoryBuffer *buffer = llvm::MemoryBuffer::getMemBuffer( + std::unique_ptr<llvm::MemoryBuffer> buffer = llvm::MemoryBuffer::getMemBuffer( s_data, s_name, false); if (!buffer) return CL_OUT_OF_HOST_MEMORY; ErrorOr<Module *> ModuleOrErr = - parseBitcodeFile(buffer, llvm::getGlobalContext()); + parseBitcodeFile(buffer->getMemBufferRef(), llvm::getGlobalContext()); Module *stdlib = NULL; if (ModuleOrErr) { stdlib = ModuleOrErr.get(); @@ -569,12 +572,11 @@ cl_int Program::build(const char *options, } // Link - if (!stdlib || - llvm::Linker::LinkModules(dep.linked_module, stdlib, - llvm::Linker::DestroySource, &errMsg)) + if (!stdlib || + llvm::Linker::LinkModules(dep.linked_module, stdlib ) ) { dep.compiler->appendLog("link error: "); - dep.compiler->appendLog(errMsg); + //dep.compiler->appendLog(errMsg); dep.compiler->appendLog("\n"); // DEBUG @@ -584,7 +586,7 @@ cl_int Program::build(const char *options, pfn_notify((cl_program)this, user_data); return CL_BUILD_PROGRAM_FAILURE; - } + } } if (! dep.is_native_binary) |