#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Module.h"
-#include "llvm/PassSupport.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Regex.h"
#include <algorithm>
using namespace llvm;
-/// Notify that we finished running a pass.
-void LLVMContextImpl::notifyPassRun(LLVMContext *C, Pass *P, Module *M,
- Function *F, BasicBlock *BB) {
- for (auto const &L : RunListeners)
- L->passRun(C, P, M, F, BB);
-}
-/// Register the given PassRunListener to receive notifyPassRun()
-/// callbacks whenever a pass ran.
-void LLVMContextImpl::addRunListener(PassRunListener *L) {
- RunListeners.push_back(L);
-}
-/// Unregister a PassRunListener so that it no longer receives
-/// notifyPassRun() callbacks.
-void LLVMContextImpl::removeRunListener(PassRunListener *L) {
- auto I = std::find(RunListeners.begin(), RunListeners.end(), L);
- assert(I != RunListeners.end() && "RunListener not registered!");
- delete *I;
- RunListeners.erase(I);
-}
-
LLVMContextImpl::LLVMContextImpl(LLVMContext &C)
: TheTrueVal(nullptr), TheFalseVal(nullptr),
VoidTy(C, Type::VoidTyID),
// Destroy MDStrings.
DeleteContainerSeconds(MDStringCache);
-
- // Destroy all run listeners.
- for (auto &L : RunListeners)
- delete L;
- RunListeners.clear();
}
// ConstantsContext anchors