aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gall <tom.gall@linaro.org>2015-01-26 12:54:14 -0600
committerTom Gall <tom.gall@linaro.org>2015-01-26 12:54:14 -0600
commit5df3805db7eb99a5834d363fd073f36a9f8c79e2 (patch)
tree0fd20c408e665489c1620770d252361c0d7f35f9
parent7000f0e9b2580fd3b5974cc6f401df4d17bd5af4 (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.cpp9
-rw-r--r--src/core/compiler.h3
-rw-r--r--src/core/kernel.cpp6
-rw-r--r--src/core/program.cpp26
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)