summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/OptBisect.cpp
diff options
context:
space:
mode:
authorRichard Trieu <rtrieu@google.com>2019-02-28 04:00:55 +0000
committerRichard Trieu <rtrieu@google.com>2019-02-28 04:00:55 +0000
commitb37a70f40e1229d44b967c339f65f4acfd56b0ce (patch)
tree77aca85d12ab502d09cec645c3e871d8b1fefb5b /llvm/lib/IR/OptBisect.cpp
parent14d58f598691b8c27d8b4a4cf6181178f1a8c295 (diff)
downloadbcm5719-llvm-b37a70f40e1229d44b967c339f65f4acfd56b0ce.tar.gz
bcm5719-llvm-b37a70f40e1229d44b967c339f65f4acfd56b0ce.zip
Fix IR/Analysis layering issue with OptBisect
OptBisect is in IR due to LLVMContext using it. However, it uses IR units from Analysis as well. This change moves getDescription functions from OptBisect to their respective IR units. Generating names for IR units will now be up to the callers, keeping the Analysis IR units in Analysis. To prevent unnecessary string generation, isEnabled function is added so that callers know when the description needs to be generated. Differential Revision: https://reviews.llvm.org/D58406 llvm-svn: 355068
Diffstat (limited to 'llvm/lib/IR/OptBisect.cpp')
-rw-r--r--llvm/lib/IR/OptBisect.cpp76
1 files changed, 3 insertions, 73 deletions
diff --git a/llvm/lib/IR/OptBisect.cpp b/llvm/lib/IR/OptBisect.cpp
index 6f4d954d822..3104b90f307 100644
--- a/llvm/lib/IR/OptBisect.cpp
+++ b/llvm/lib/IR/OptBisect.cpp
@@ -14,13 +14,6 @@
#include "llvm/IR/OptBisect.h"
#include "llvm/ADT/StringRef.h"
-#include "llvm/Analysis/CallGraph.h"
-#include "llvm/Analysis/CallGraphSCCPass.h"
-#include "llvm/Analysis/LoopInfo.h"
-#include "llvm/Analysis/RegionInfo.h"
-#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/Function.h"
-#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
@@ -46,73 +39,10 @@ static void printPassMessage(const StringRef &Name, int PassNum,
<< "(" << PassNum << ") " << Name << " on " << TargetDesc << "\n";
}
-static std::string getDescription(const Module &M) {
- return "module (" + M.getName().str() + ")";
-}
-
-static std::string getDescription(const Function &F) {
- return "function (" + F.getName().str() + ")";
-}
-
-static std::string getDescription(const BasicBlock &BB) {
- return "basic block (" + BB.getName().str() + ") in function (" +
- BB.getParent()->getName().str() + ")";
-}
-
-static std::string getDescription(const Loop &L) {
- // 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) {
- if (First)
- First = false;
- else
- Desc += ", ";
- Function *F = CGN->getFunction();
- if (F)
- Desc += F->getName();
- else
- Desc += "<<null function>>";
- }
- Desc += ")";
- return Desc;
-}
-
-bool OptBisect::shouldRunPass(const Pass *P, const Module &U) {
- return !BisectEnabled || checkPass(P->getPassName(), getDescription(U));
-}
-
-bool OptBisect::shouldRunPass(const Pass *P, const Function &U) {
- return !BisectEnabled || checkPass(P->getPassName(), getDescription(U));
-}
-
-bool OptBisect::shouldRunPass(const Pass *P, const BasicBlock &U) {
- return !BisectEnabled || checkPass(P->getPassName(), getDescription(U));
-}
-
-bool OptBisect::shouldRunPass(const Pass *P, const Region &U) {
- return !BisectEnabled || checkPass(P->getPassName(), getDescription(U));
-}
-
-bool OptBisect::shouldRunPass(const Pass *P, const Loop &U) {
- return !BisectEnabled || checkPass(P->getPassName(), getDescription(U));
-}
+bool OptBisect::shouldRunPass(const Pass *P, StringRef IRDescription) {
+ assert(BisectEnabled);
-bool OptBisect::shouldRunPass(const Pass *P, const CallGraphSCC &U) {
- return !BisectEnabled || checkPass(P->getPassName(), getDescription(U));
+ return checkPass(P->getPassName(), IRDescription);
}
bool OptBisect::checkPass(const StringRef PassName,
OpenPOWER on IntegriCloud