//===----------------------------------------------------------------------===//
#include "llvm/Pass.h"
+#include "llvm/IR/Function.h"
#include "llvm/IR/IRPrintingPasses.h"
+#include "llvm/IR/LegacyPassNameParser.h"
+#include "llvm/IR/LLVMContext.h"
#include "llvm/PassRegistry.h"
#include "llvm/Support/Debug.h"
-#include "llvm/Support/PassNameParser.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
+#define DEBUG_TYPE "ir"
+
//===----------------------------------------------------------------------===//
// Pass Implementation
//
}
bool Pass::mustPreserveAnalysisID(char &AID) const {
- return Resolver->getAnalysisIfAvailable(&AID, true) != 0;
+ return Resolver->getAnalysisIfAvailable(&AID, true) != nullptr;
}
// dumpPassStructure - Implement the -debug-pass=Structure option
}
ImmutablePass *Pass::getAsImmutablePass() {
- return 0;
+ return nullptr;
}
PMDataManager *Pass::getAsPMDataManager() {
- return 0;
+ return nullptr;
}
void Pass::setResolver(AnalysisResolver *AR) {
// dump - call print(cerr);
void Pass::dump() const {
- print(dbgs(), 0);
+ print(dbgs(), nullptr);
}
//===----------------------------------------------------------------------===//
return PMT_FunctionPassManager;
}
+bool FunctionPass::skipOptnoneFunction(const Function &F) const {
+ if (F.hasFnAttribute(Attribute::OptimizeNone)) {
+ DEBUG(dbgs() << "Skipping pass '" << getPassName()
+ << "' on function " << F.getName() << "\n");
+ return true;
+ }
+ return false;
+}
+
//===----------------------------------------------------------------------===//
// BasicBlockPass Implementation
//
return false;
}
+bool BasicBlockPass::skipOptnoneFunction(const BasicBlock &BB) const {
+ const Function *F = BB.getParent();
+ if (F && F->hasFnAttribute(Attribute::OptimizeNone)) {
+ // Report this only once per function.
+ if (&BB == &F->getEntryBlock())
+ DEBUG(dbgs() << "Skipping pass '" << getPassName()
+ << "' on function " << F->getName() << "\n");
+ return true;
+ }
+ return false;
+}
+
PassManagerType BasicBlockPass::getPotentialPassManagerType() const {
return PMT_BasicBlockPassManager;
}
Pass *Pass::createPass(AnalysisID ID) {
const PassInfo *PI = PassRegistry::getPassRegistry()->getPassInfo(ID);
if (!PI)
- return NULL;
+ return nullptr;
return PI->createPass();
}
PassRegistry::getPassRegistry()->enumerateWith(this);
}
+//===----------------------------------------------------------------------===//
+// PassRunListener implementation
+//
+
+// PassRunListener ctor - Add the current object to the list of
+// PassRunListeners...
+PassRunListener::PassRunListener(LLVMContext *C) {
+ C->addRunListener(this);
+}
+
+PassRunListener::~PassRunListener() {}
+
PassNameParser::~PassNameParser() {}
//===----------------------------------------------------------------------===//
VectorType &CFGOnlyList;
GetCFGOnlyPasses(VectorType &L) : CFGOnlyList(L) {}
- void passEnumerate(const PassInfo *P) {
+ void passEnumerate(const PassInfo *P) override {
if (P->isCFGOnlyPass())
CFGOnlyList.push_back(P->getTypeInfo());
}