|
@@ -16,6 +16,7 @@
|
|
|
#include "llvm/Analysis/CallGraphSCCPass.h"
|
|
|
#include "llvm/Analysis/LazyCallGraph.h"
|
|
|
#include "llvm/Analysis/LoopInfo.h"
|
|
|
+#include "llvm/Analysis/RegionInfo.h"
|
|
|
#include "llvm/IR/Module.h"
|
|
|
#include "llvm/IR/OptBisect.h"
|
|
|
#include "llvm/Pass.h"
|
|
@@ -53,13 +54,20 @@ static std::string getDescription(const BasicBlock &BB) {
|
|
|
}
|
|
|
|
|
|
static std::string getDescription(const Loop &L) {
|
|
|
- // FIXME: I'd like to be able to provide a better description here, but
|
|
|
- // calling L->getHeader() would introduce a new dependency on the
|
|
|
- // LLVMCore library.
|
|
|
+ // FIXME: Move into LoopInfo so we can get a better description
|
|
|
+ // (and avoid a circular dependency between IR and Analysis).
|
|
|
return "loop";
|
|
|
}
|
|
|
|
|
|
+static std::string getDescription(const Region &R) {
|
|
|
+ // FIXME: Move into RegionInfo so we can get a better description
|
|
|
+ // (and avoid a circular dependency between IR and Analysis).
|
|
|
+ return "region";
|
|
|
+}
|
|
|
+
|
|
|
static std::string getDescription(const CallGraphSCC &SCC) {
|
|
|
+ // FIXME: Move into CallGraphSCCPass to avoid circular dependency between
|
|
|
+ // IR and Analysis.
|
|
|
std::string Desc = "SCC (";
|
|
|
bool First = true;
|
|
|
for (CallGraphNode *CGN : SCC) {
|
|
@@ -83,6 +91,7 @@ template bool OptBisect::shouldRunPass(const Pass *, const Function &);
|
|
|
template bool OptBisect::shouldRunPass(const Pass *, const BasicBlock &);
|
|
|
template bool OptBisect::shouldRunPass(const Pass *, const Loop &);
|
|
|
template bool OptBisect::shouldRunPass(const Pass *, const CallGraphSCC &);
|
|
|
+template bool OptBisect::shouldRunPass(const Pass *, const Region &);
|
|
|
|
|
|
template <class UnitT>
|
|
|
bool OptBisect::shouldRunPass(const Pass *P, const UnitT &U) {
|