aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/Module
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-03-14 05:08:59 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-03-14 05:08:59 +0000
commitc70345caa213288aa748070f7a03c84fbdf89b5c (patch)
tree75252446281ec8c9c0a750461b8751fdd73566a8 /lib/Module
parent5099d8124393dcd577c2dd091834a17fe2d9fcdb (diff)
downloadklee-c70345caa213288aa748070f7a03c84fbdf89b5c.tar.gz
Update for 2.7.
git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@98467 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Module')
-rw-r--r--lib/Module/Checks.cpp3
-rw-r--r--lib/Module/InstructionInfoTable.cpp54
-rw-r--r--lib/Module/IntrinsicCleaner.cpp5
-rw-r--r--lib/Module/KModule.cpp7
-rw-r--r--lib/Module/LowerSwitch.cpp3
-rw-r--r--lib/Module/Optimize.cpp6
-rw-r--r--lib/Module/RaiseAsm.cpp3
7 files changed, 68 insertions, 13 deletions
diff --git a/lib/Module/Checks.cpp b/lib/Module/Checks.cpp
index ee7029c7..2edcf940 100644
--- a/lib/Module/Checks.cpp
+++ b/lib/Module/Checks.cpp
@@ -16,6 +16,9 @@
#include "llvm/Instruction.h"
#include "llvm/Instructions.h"
#include "llvm/IntrinsicInst.h"
+#if !(LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+#include "llvm/LLVMContext.h"
+#endif
#include "llvm/Module.h"
#include "llvm/Pass.h"
#include "llvm/Type.h"
diff --git a/lib/Module/InstructionInfoTable.cpp b/lib/Module/InstructionInfoTable.cpp
index 196d9dc7..2efe981b 100644
--- a/lib/Module/InstructionInfoTable.cpp
+++ b/lib/Module/InstructionInfoTable.cpp
@@ -7,6 +7,7 @@
//
//===----------------------------------------------------------------------===//
+#include "klee/Config/config.h"
#include "klee/Internal/Module/InstructionInfoTable.h"
#include "llvm/Function.h"
@@ -18,6 +19,9 @@
#include "llvm/Support/CFG.h"
#include "llvm/Support/InstIterator.h"
#include "llvm/Support/raw_ostream.h"
+#if !(LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+#include "llvm/Analysis/DebugInfo.h"
+#endif
#include "llvm/Analysis/ValueTracking.h"
#include <map>
@@ -59,7 +63,8 @@ static void buildInstructionToLineMap(Module *m,
}
}
-static std::string getDSPIPath(DbgStopPointInst *dspi) {
+#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+static std::string getDSPIPath(const DbgStopPointInst *dspi) {
std::string dir, file;
bool res = GetConstantStringInfo(dspi->getDirectory(), dir);
assert(res && "GetConstantStringInfo failed");
@@ -73,6 +78,40 @@ static std::string getDSPIPath(DbgStopPointInst *dspi) {
return dir + "/" + file;
}
}
+#else
+static std::string getDSPIPath(DILocation Loc) {
+ std::string dir = Loc.getDirectory();
+ std::string file = Loc.getFilename();
+ if (dir.empty()) {
+ return file;
+ } else if (*dir.rbegin() == '/') {
+ return dir + file;
+ } else {
+ return dir + "/" + file;
+ }
+}
+#endif
+
+bool InstructionInfoTable::getInstructionDebugInfo(const llvm::Instruction *I,
+ const std::string *&File,
+ unsigned &Line) {
+#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+ if (const DbgStopPointInst *dspi = dyn_cast<DbgStopPointInst>(I)) {
+ File = internString(getDSPIPath(dspi));
+ Line = dspi->getLine();
+ return true;
+ }
+#else
+ if (MDNode *N = I->getMetadata("dbg")) {
+ DILocation Loc(N);
+ File = internString(getDSPIPath(Loc));
+ Line = Loc.getLineNumber();
+ return true;
+ }
+#endif
+
+ return false;
+}
InstructionInfoTable::InstructionInfoTable(Module *m)
: dummyString(""), dummyInfo(0, dummyString, 0, 0) {
@@ -89,13 +128,9 @@ InstructionInfoTable::InstructionInfoTable(Module *m)
// following the CFG, but it is not clear that it ever matters in
// practice.
for (inst_iterator it = inst_begin(fnIt), ie = inst_end(fnIt);
- it != ie; ++it) {
- if (DbgStopPointInst *dspi = dyn_cast<DbgStopPointInst>(&*it)) {
- initialFile = internString(getDSPIPath(dspi));
- initialLine = dspi->getLine();
+ it != ie; ++it)
+ if (getInstructionDebugInfo(&*it, initialFile, initialLine))
break;
- }
- }
typedef std::map<BasicBlock*, std::pair<const std::string*,unsigned> >
sourceinfo_ty;
@@ -129,10 +164,7 @@ InstructionInfoTable::InstructionInfoTable(Module *m)
lineTable.find(instr);
if (ltit!=lineTable.end())
assemblyLine = ltit->second;
- if (DbgStopPointInst *dspi = dyn_cast<DbgStopPointInst>(instr)) {
- file = internString(getDSPIPath(dspi));
- line = dspi->getLine();
- }
+ getInstructionDebugInfo(instr, file, line);
infos.insert(std::make_pair(instr,
InstructionInfo(id++,
*file,
diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
index a73d8ca6..4d44f800 100644
--- a/lib/Module/IntrinsicCleaner.cpp
+++ b/lib/Module/IntrinsicCleaner.cpp
@@ -16,6 +16,9 @@
#include "llvm/Instruction.h"
#include "llvm/Instructions.h"
#include "llvm/IntrinsicInst.h"
+#if !(LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+#include "llvm/LLVMContext.h"
+#endif
#include "llvm/Module.h"
#include "llvm/Pass.h"
#include "llvm/Type.h"
@@ -85,6 +88,7 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b) {
break;
}
+#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
case Intrinsic::dbg_stoppoint: {
// We can remove this stoppoint if the next instruction is
// sure to be another stoppoint. This is nice for cleanliness
@@ -117,6 +121,7 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b) {
case Intrinsic::dbg_region_start:
case Intrinsic::dbg_region_end:
case Intrinsic::dbg_func_start:
+#endif
case Intrinsic::dbg_declare:
// Remove these regardless of lower intrinsics flag. This can
// be removed once IntrinsicLowering is fixed to not have bad
diff --git a/lib/Module/KModule.cpp b/lib/Module/KModule.cpp
index 108adabd..76291cdc 100644
--- a/lib/Module/KModule.cpp
+++ b/lib/Module/KModule.cpp
@@ -22,12 +22,15 @@
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Instructions.h"
+#if !(LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+#include "llvm/LLVMContext.h"
+#endif
#include "llvm/Module.h"
#include "llvm/PassManager.h"
#include "llvm/ValueSymbolTable.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
-#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR == 6)
+#if !(LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
#include "llvm/Support/raw_os_ostream.h"
#endif
#include "llvm/System/Path.h"
@@ -329,7 +332,7 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
std::ostream *os = ih->openOutputFile("assembly.ll");
assert(os && os->good() && "unable to open source output");
-#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR == 6)
+#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 6)
// We have an option for this in case the user wants a .ll they
// can compile.
if (NoTruncateSourceLines) {
diff --git a/lib/Module/LowerSwitch.cpp b/lib/Module/LowerSwitch.cpp
index 381ebd29..7d6920be 100644
--- a/lib/Module/LowerSwitch.cpp
+++ b/lib/Module/LowerSwitch.cpp
@@ -15,6 +15,9 @@
//===----------------------------------------------------------------------===//
#include "Passes.h"
+#if !(LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+#include "llvm/LLVMContext.h"
+#endif
#include <algorithm>
using namespace llvm;
diff --git a/lib/Module/Optimize.cpp b/lib/Module/Optimize.cpp
index 83e67292..affe9392 100644
--- a/lib/Module/Optimize.cpp
+++ b/lib/Module/Optimize.cpp
@@ -94,7 +94,9 @@ static void AddStandardCompilePasses(PassManager &PM) {
if (DisableOptimizations) return;
+#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
addPass(PM, createRaiseAllocationsPass()); // call %malloc -> malloc inst
+#endif
addPass(PM, createCFGSimplificationPass()); // Clean up disgusting code
addPass(PM, createPromoteMemoryToRegisterPass());// Kill useless allocas
addPass(PM, createGlobalOptimizerPass()); // Optimize out global vars
@@ -117,7 +119,9 @@ static void AddStandardCompilePasses(PassManager &PM) {
addPass(PM, createCFGSimplificationPass()); // Merge & remove BBs
addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
+#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
addPass(PM, createCondPropagationPass()); // Propagate conditionals
+#endif
addPass(PM, createTailCallEliminationPass()); // Eliminate tail calls
addPass(PM, createCFGSimplificationPass()); // Merge & remove BBs
@@ -139,7 +143,9 @@ static void AddStandardCompilePasses(PassManager &PM) {
// Run instcombine after redundancy elimination to exploit opportunities
// opened up by them.
addPass(PM, createInstructionCombiningPass());
+#if (LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
addPass(PM, createCondPropagationPass()); // Propagate conditionals
+#endif
addPass(PM, createDeadStoreEliminationPass()); // Delete dead stores
addPass(PM, createAggressiveDCEPass()); // Delete dead instructions
diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp
index b62338a6..42940fda 100644
--- a/lib/Module/RaiseAsm.cpp
+++ b/lib/Module/RaiseAsm.cpp
@@ -10,6 +10,9 @@
#include "Passes.h"
#include "llvm/InlineAsm.h"
+#if !(LLVM_VERSION_MAJOR == 2 && LLVM_VERSION_MINOR < 7)
+#include "llvm/LLVMContext.h"
+#endif
using namespace llvm;
using namespace klee;