about summary refs log tree commit diff homepage
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Core/Executor.cpp2
-rw-r--r--lib/Core/GetElementPtrTypeIterator.h154
-rw-r--r--lib/Core/Memory.cpp1
-rw-r--r--lib/Core/MergeHandler.h4
-rw-r--r--lib/Expr/ArrayExprOptimizer.cpp2
-rw-r--r--lib/Expr/ArrayExprRewriter.cpp2
-rw-r--r--lib/Expr/ExprPPrinter.cpp2
-rw-r--r--lib/Solver/ConstantDivision.cpp2
-rw-r--r--lib/Solver/STPBuilder.cpp2
-rw-r--r--lib/Solver/Z3Builder.cpp4
10 files changed, 165 insertions, 10 deletions
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index 693ac006..0664e606 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -13,6 +13,7 @@
 #include "CoreStats.h"
 #include "ExecutionState.h"
 #include "ExternalDispatcher.h"
+#include "GetElementPtrTypeIterator.h"
 #include "ImpliedValue.h"
 #include "Memory.h"
 #include "MemoryManager.h"
@@ -49,7 +50,6 @@
 #include "klee/System/MemoryUsage.h"
 #include "klee/System/Time.h"
 #include "klee/TimerStatIncrementer.h"
-#include "klee/util/GetElementPtrTypeIterator.h"
 
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/StringExtras.h"
diff --git a/lib/Core/GetElementPtrTypeIterator.h b/lib/Core/GetElementPtrTypeIterator.h
new file mode 100644
index 00000000..cdbc36bc
--- /dev/null
+++ b/lib/Core/GetElementPtrTypeIterator.h
@@ -0,0 +1,154 @@
+//===-- GetElementPtrTypeIterator.h -----------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements an iterator for walking through the types indexed by
+// getelementptr, insertvalue and extractvalue instructions.
+//
+// It is an enhanced version of llvm::gep_type_iterator which only handles
+// getelementptr.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef KLEE_GETELEMENTPTRTYPEITERATOR_H
+#define KLEE_GETELEMENTPTRTYPEITERATOR_H
+
+#include "llvm/IR/User.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Constants.h"
+
+#include "klee/Config/Version.h"
+
+namespace klee {
+template <typename ItTy = llvm::User::const_op_iterator>
+class generic_gep_type_iterator
+    : public std::iterator<std::forward_iterator_tag, llvm::Type *, ptrdiff_t> {
+  typedef std::iterator<std::forward_iterator_tag, llvm::Type *, ptrdiff_t>
+      super;
+
+    ItTy OpIt;
+    llvm::Type *CurTy;
+    generic_gep_type_iterator() {}
+
+    llvm::Value *asValue(llvm::Value *V) const { return V; }
+    llvm::Value *asValue(unsigned U) const {
+      return llvm::ConstantInt::get(CurTy->getContext(), llvm::APInt(32, U));
+    }
+
+  public:
+    static generic_gep_type_iterator begin(llvm::Type *Ty, ItTy It) {
+      generic_gep_type_iterator I;
+      I.CurTy = Ty;
+      I.OpIt = It;
+      return I;
+    }
+    static generic_gep_type_iterator end(ItTy It) {
+      generic_gep_type_iterator I;
+      I.CurTy = 0;
+      I.OpIt = It;
+      return I;
+    }
+
+    bool operator==(const generic_gep_type_iterator& x) const {
+      return OpIt == x.OpIt;
+    }
+    bool operator!=(const generic_gep_type_iterator& x) const {
+      return !operator==(x);
+    }
+
+    llvm::Type *operator*() const { return CurTy; }
+
+    llvm::Type *getIndexedType() const {
+      llvm::CompositeType *CT = cast<llvm::CompositeType>(CurTy);
+      return CT->getTypeAtIndex(getOperand());
+    }
+
+    // This is a non-standard operator->.  It allows you to call methods on the
+    // current type directly.
+    llvm::Type *operator->() const { return operator*(); }
+
+    llvm::Value *getOperand() const { return asValue(*OpIt); }
+
+    generic_gep_type_iterator& operator++() {   // Preincrement
+      if (llvm::CompositeType *CT = dyn_cast<llvm::CompositeType>(CurTy)) {
+        CurTy = CT->getTypeAtIndex(getOperand());
+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
+      } else if (auto ptr = dyn_cast<llvm::PointerType>(CurTy)) {
+        CurTy = ptr->getElementType();
+#endif
+      } else {
+        CurTy = 0;
+      }
+      ++OpIt;
+      return *this;
+    }
+
+    generic_gep_type_iterator operator++(int) { // Postincrement
+      generic_gep_type_iterator tmp = *this; ++*this; return tmp;
+    }
+  };
+
+  typedef generic_gep_type_iterator<> gep_type_iterator;
+  typedef generic_gep_type_iterator<llvm::ExtractValueInst::idx_iterator> ev_type_iterator;
+  typedef generic_gep_type_iterator<llvm::InsertValueInst::idx_iterator> iv_type_iterator;
+  typedef generic_gep_type_iterator<llvm::SmallVector<unsigned, 4>::const_iterator> vce_type_iterator;
+
+  inline gep_type_iterator gep_type_begin(const llvm::User *GEP) {
+    return gep_type_iterator::begin(GEP->getOperand(0)->getType(),
+                                    GEP->op_begin()+1);
+  }
+  inline gep_type_iterator gep_type_end(const llvm::User *GEP) {
+    return gep_type_iterator::end(GEP->op_end());
+  }
+  inline gep_type_iterator gep_type_begin(const llvm::User &GEP) {
+    return gep_type_iterator::begin(GEP.getOperand(0)->getType(),
+                                    GEP.op_begin()+1);
+  }
+  inline gep_type_iterator gep_type_end(const llvm::User &GEP) {
+    return gep_type_iterator::end(GEP.op_end());
+  }
+
+  inline ev_type_iterator ev_type_begin(const llvm::ExtractValueInst *EV) {
+    return ev_type_iterator::begin(EV->getOperand(0)->getType(),
+                                   EV->idx_begin());
+  }
+  inline ev_type_iterator ev_type_end(const llvm::ExtractValueInst *EV) {
+    return ev_type_iterator::end(EV->idx_end());
+  }
+
+  inline iv_type_iterator iv_type_begin(const llvm::InsertValueInst *IV) {
+    return iv_type_iterator::begin(IV->getType(),
+                                   IV->idx_begin());
+  }
+  inline iv_type_iterator iv_type_end(const llvm::InsertValueInst *IV) {
+    return iv_type_iterator::end(IV->idx_end());
+  }
+
+  inline vce_type_iterator vce_type_begin(const llvm::ConstantExpr *CE) {
+    return vce_type_iterator::begin(CE->getOperand(0)->getType(),
+                                    CE->getIndices().begin());
+  }
+  inline vce_type_iterator vce_type_end(const llvm::ConstantExpr *CE) {
+    return vce_type_iterator::end(CE->getIndices().end());
+  }
+
+  template <typename ItTy>
+  inline generic_gep_type_iterator<ItTy> gep_type_begin(llvm::Type *Op0, ItTy I,
+                                                        ItTy E) {
+    return generic_gep_type_iterator<ItTy>::begin(Op0, I);
+  }
+
+  template <typename ItTy>
+  inline generic_gep_type_iterator<ItTy> gep_type_end(llvm::Type *Op0, ItTy I,
+                                                      ItTy E) {
+    return generic_gep_type_iterator<ItTy>::end(E);
+  }
+} // end namespace klee
+
+#endif /* KLEE_GETELEMENTPTRTYPEITERATOR_H */
diff --git a/lib/Core/Memory.cpp b/lib/Core/Memory.cpp
index b93373b8..35b09011 100644
--- a/lib/Core/Memory.cpp
+++ b/lib/Core/Memory.cpp
@@ -18,7 +18,6 @@
 #include "klee/OptionCategories.h"
 #include "klee/Solver/Solver.h"
 #include "klee/Support/ErrorHandling.h"
-#include "klee/util/BitArray.h"
 
 #include "llvm/IR/Function.h"
 #include "llvm/IR/Instruction.h"
diff --git a/lib/Core/MergeHandler.h b/lib/Core/MergeHandler.h
index 48b67467..f7380415 100644
--- a/lib/Core/MergeHandler.h
+++ b/lib/Core/MergeHandler.h
@@ -69,8 +69,10 @@
 #ifndef KLEE_MERGEHANDLER_H
 #define KLEE_MERGEHANDLER_H
 
-#include "klee/util/Ref.h"
+#include "klee/ADT/Ref.h"
+
 #include "llvm/Support/CommandLine.h"
+
 #include <map>
 #include <stdint.h>
 #include <vector>
diff --git a/lib/Expr/ArrayExprOptimizer.cpp b/lib/Expr/ArrayExprOptimizer.cpp
index 6e10461f..bb949fac 100644
--- a/lib/Expr/ArrayExprOptimizer.cpp
+++ b/lib/Expr/ArrayExprOptimizer.cpp
@@ -9,6 +9,7 @@
 
 #include "klee/Expr/ArrayExprOptimizer.h"
 
+#include "klee/ADT/BitArray.h"
 #include "klee/Config/Version.h"
 #include "klee/Expr/ArrayExprRewriter.h"
 #include "klee/Expr/ArrayExprVisitor.h"
@@ -17,7 +18,6 @@
 #include "klee/Expr/ExprBuilder.h"
 #include "klee/OptionCategories.h"
 #include "klee/Support/ErrorHandling.h"
-#include "klee/util/BitArray.h"
 
 #include <llvm/ADT/APInt.h>
 #include <llvm/Support/Casting.h>
diff --git a/lib/Expr/ArrayExprRewriter.cpp b/lib/Expr/ArrayExprRewriter.cpp
index 32851679..4de76d43 100644
--- a/lib/Expr/ArrayExprRewriter.cpp
+++ b/lib/Expr/ArrayExprRewriter.cpp
@@ -9,8 +9,8 @@
 
 #include "klee/Expr/ArrayExprRewriter.h"
 
+#include "klee/ADT/BitArray.h"
 #include "klee/Expr/ArrayExprVisitor.h"
-#include "klee/util/BitArray.h"
 
 #include <llvm/ADT/APInt.h>
 #include <llvm/Support/Casting.h>
diff --git a/lib/Expr/ExprPPrinter.cpp b/lib/Expr/ExprPPrinter.cpp
index 9d34e356..50a61cfd 100644
--- a/lib/Expr/ExprPPrinter.cpp
+++ b/lib/Expr/ExprPPrinter.cpp
@@ -11,7 +11,7 @@
 
 #include "klee/Expr/Constraints.h"
 #include "klee/OptionCategories.h"
-#include "klee/util/PrintContext.h"
+#include "klee/Support/PrintContext.h"
 
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/raw_ostream.h"
diff --git a/lib/Solver/ConstantDivision.cpp b/lib/Solver/ConstantDivision.cpp
index 8ebf39ad..d822de1a 100644
--- a/lib/Solver/ConstantDivision.cpp
+++ b/lib/Solver/ConstantDivision.cpp
@@ -9,7 +9,7 @@
 
 #include "ConstantDivision.h"
 
-#include "klee/util/Bits.h"
+#include "klee/ADT/Bits.h"
 
 #include <algorithm>
 #include <cassert>
diff --git a/lib/Solver/STPBuilder.cpp b/lib/Solver/STPBuilder.cpp
index 5857e6f0..9fd9dc8e 100644
--- a/lib/Solver/STPBuilder.cpp
+++ b/lib/Solver/STPBuilder.cpp
@@ -10,10 +10,10 @@
 #ifdef ENABLE_STP
 #include "STPBuilder.h"
 
+#include "klee/ADT/Bits.h"
 #include "klee/Expr/Expr.h"
 #include "klee/Solver/Solver.h"
 #include "klee/Solver/SolverStats.h"
-#include "klee/util/Bits.h"
 
 #include "ConstantDivision.h"
 
diff --git a/lib/Solver/Z3Builder.cpp b/lib/Solver/Z3Builder.cpp
index 7db377eb..ce584175 100644
--- a/lib/Solver/Z3Builder.cpp
+++ b/lib/Solver/Z3Builder.cpp
@@ -10,11 +10,11 @@
 #ifdef ENABLE_Z3
 #include "Z3Builder.h"
 
+#include "klee/ADT/Bits.h"
 #include "klee/Expr/Expr.h"
-#include "klee/Support/ErrorHandling.h"
 #include "klee/Solver/Solver.h"
 #include "klee/Solver/SolverStats.h"
-#include "klee/util/Bits.h"
+#include "klee/Support/ErrorHandling.h"
 
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/CommandLine.h"