aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/Module/KModule.cpp
diff options
context:
space:
mode:
authorCristian Cadar <c.cadar@imperial.ac.uk>2013-09-21 03:53:42 -0700
committerCristian Cadar <c.cadar@imperial.ac.uk>2013-09-21 03:53:42 -0700
commit95521073b1a6c0eec2719a4c355c83506b325693 (patch)
tree55d77a515985663189acfa1094e4ae1e62013c0b /lib/Module/KModule.cpp
parentb913be09fa192d587e3006d83ad2f5d0e69f7e20 (diff)
parente9b814eda7a590af35959cd11ceeb7bef7496789 (diff)
downloadklee-95521073b1a6c0eec2719a4c355c83506b325693.tar.gz
Merge pull request #17 from MartinNowack/LLVM33
Make KLEE compile with LLVM 2.3.
Diffstat (limited to 'lib/Module/KModule.cpp')
-rw-r--r--lib/Module/KModule.cpp36
1 files changed, 26 insertions, 10 deletions
diff --git a/lib/Module/KModule.cpp b/lib/Module/KModule.cpp
index 1629bb79..0d0244dd 100644
--- a/lib/Module/KModule.cpp
+++ b/lib/Module/KModule.cpp
@@ -22,13 +22,28 @@
#include "klee/Internal/Support/ModuleUtil.h"
#include "llvm/Bitcode/ReaderWriter.h"
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 3)
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/IR/DataLayout.h"
+#else
#include "llvm/Instructions.h"
#if LLVM_VERSION_CODE >= LLVM_VERSION(2, 7)
#include "llvm/LLVMContext.h"
#endif
#include "llvm/Module.h"
-#include "llvm/PassManager.h"
#include "llvm/ValueSymbolTable.h"
+#if LLVM_VERSION_CODE <= LLVM_VERSION(3, 1)
+#include "llvm/Target/TargetData.h"
+#else
+#include "llvm/DataLayout.h"
+#endif
+
+#endif
+
+#include "llvm/PassManager.h"
#include "llvm/Support/CallSite.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
@@ -40,11 +55,6 @@
#else
#include "llvm/Support/Path.h"
#endif
-#if LLVM_VERSION_CODE <= LLVM_VERSION(3, 1)
-#include "llvm/Target/TargetData.h"
-#else
-#include "llvm/DataLayout.h"
-#endif
#include "llvm/Transforms/Scalar.h"
#include <sstream>
@@ -189,6 +199,7 @@ static void injectStaticConstructorsAndDestructors(Module *m) {
}
}
+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 3)
static void forceImport(Module *m, const char *name, LLVM_TYPE_Q Type *retType,
...) {
// If module lacks an externally visible symbol for the name then we
@@ -211,6 +222,7 @@ static void forceImport(Module *m, const char *name, LLVM_TYPE_Q Type *retType,
m->getOrInsertFunction(name, FunctionType::get(retType, argTypes, false));
}
}
+#endif
void KModule::prepare(const Interpreter::ModuleOptions &opts,
InterpreterHandler *ih) {
@@ -281,7 +293,7 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
if (opts.Optimize)
Optimize(module);
-
+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 3)
// Force importing functions required by intrinsic lowering. Kind of
// unfortunate clutter when we don't need them but we won't know
// that until after all linking and intrinsic lowering is
@@ -302,14 +314,18 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
PointerType::getUnqual(i8Ty),
Type::getInt32Ty(getGlobalContext()),
targetData->getIntPtrType(getGlobalContext()), (Type*) 0);
-
+#endif
// FIXME: Missing force import for various math functions.
// FIXME: Find a way that we can test programs without requiring
// this to be linked in, it makes low level debugging much more
// annoying.
llvm::sys::Path path(opts.LibraryDir);
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 3)
+ path.appendComponent("kleeRuntimeIntrinsic.bc");
+#else
path.appendComponent("libkleeRuntimeIntrinsic.bca");
+#endif
module = linkWithLibrary(module, path.c_str());
// Needs to happen after linking (since ctors/dtors can be modified)
@@ -332,7 +348,7 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
pm3.add(new IntrinsicCleanerPass(*targetData));
pm3.add(new PhiCleanerPass());
pm3.run(*module);
-
+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 3)
// For cleanliness see if we can discard any of the functions we
// forced to import.
Function *f;
@@ -342,7 +358,7 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
if (f && f->use_empty()) f->eraseFromParent();
f = module->getFunction("memset");
if (f && f->use_empty()) f->eraseFromParent();
-
+#endif
// Write out the .ll assembly file. We truncate long lines to work
// around a kcachegrind parsing bug (it puts them on new lines), so