diff options
| author | Dehao Chen <dehao@google.com> | 2016-05-05 20:18:49 +0000 |
|---|---|---|
| committer | Dehao Chen <dehao@google.com> | 2016-05-05 20:18:49 +0000 |
| commit | e48b4ee98c42422f959f3e904c5e25e5d80cbb4d (patch) | |
| tree | ed610f42c87dba5327d4d0cf887eb852395e02ea /llvm/lib/Transforms | |
| parent | 17d2e87e9f6ebf1519ad24c4a94c0cdc816fc843 (diff) | |
| download | bcm5719-llvm-e48b4ee98c42422f959f3e904c5e25e5d80cbb4d.tar.gz bcm5719-llvm-e48b4ee98c42422f959f3e904c5e25e5d80cbb4d.zip | |
Simplify CFG before assigning discriminator.
Summary: We need to clean up CFG before assigning discriminator to minimize the impact of optimization on debug info.
Reviewers: davidxl, dblaikie, dnovillo
Subscribers: dnovillo, danielcdh, llvm-commits
Differential Revision: http://reviews.llvm.org/D19926
llvm-svn: 268675
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp | 52 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/AddDiscriminators.cpp | 6 |
2 files changed, 30 insertions, 28 deletions
diff --git a/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp b/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp index e6933336947..97c5f183dcb 100644 --- a/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp +++ b/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp @@ -196,35 +196,31 @@ PreservedAnalyses SimplifyCFGPass::run(Function &F, return PreservedAnalyses::all(); } -namespace { -struct CFGSimplifyPass : public FunctionPass { - static char ID; // Pass identification, replacement for typeid - unsigned BonusInstThreshold; - std::function<bool(const Function &)> PredicateFtor; - - CFGSimplifyPass(int T = -1, - std::function<bool(const Function &)> Ftor = nullptr) - : FunctionPass(ID), PredicateFtor(Ftor) { - BonusInstThreshold = (T == -1) ? UserBonusInstThreshold : unsigned(T); - initializeCFGSimplifyPassPass(*PassRegistry::getPassRegistry()); - } - bool runOnFunction(Function &F) override { - if (skipFunction(F) || (PredicateFtor && !PredicateFtor(F))) - return false; - - AssumptionCache *AC = - &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F); - const TargetTransformInfo &TTI = - getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F); - return simplifyFunctionCFG(F, TTI, AC, BonusInstThreshold); - } +CFGSimplifyPass::CFGSimplifyPass(int T, + std::function<bool(const Function &)> Ftor) + : FunctionPass(ID), PredicateFtor(Ftor) { + BonusInstThreshold = (T == -1) ? UserBonusInstThreshold : unsigned(T); + initializeCFGSimplifyPassPass(*PassRegistry::getPassRegistry()); +} - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.addRequired<AssumptionCacheTracker>(); - AU.addRequired<TargetTransformInfoWrapperPass>(); - AU.addPreserved<GlobalsAAWrapperPass>(); - } -}; +bool CFGSimplifyPass::runOnFunction(Function &F) { + if (PredicateFtor && !PredicateFtor(F)) + return false; + + if (skipFunction(F)) + return false; + + AssumptionCache *AC = + &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F); + const TargetTransformInfo &TTI = + getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F); + return simplifyFunctionCFG(F, TTI, AC, BonusInstThreshold); +} + +void CFGSimplifyPass::getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired<AssumptionCacheTracker>(); + AU.addRequired<TargetTransformInfoWrapperPass>(); + AU.addPreserved<GlobalsAAWrapperPass>(); } char CFGSimplifyPass::ID = 0; diff --git a/llvm/lib/Transforms/Utils/AddDiscriminators.cpp b/llvm/lib/Transforms/Utils/AddDiscriminators.cpp index 2a6b6eb1b0b..6c4db99efe3 100644 --- a/llvm/lib/Transforms/Utils/AddDiscriminators.cpp +++ b/llvm/lib/Transforms/Utils/AddDiscriminators.cpp @@ -67,6 +67,7 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/Scalar/SimplifyCFG.h" using namespace llvm; @@ -79,6 +80,10 @@ struct AddDiscriminators : public FunctionPass { initializeAddDiscriminatorsPass(*PassRegistry::getPassRegistry()); } + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.addRequired<CFGSimplifyPass>(); + } + bool runOnFunction(Function &F) override; }; } // end anonymous namespace @@ -86,6 +91,7 @@ struct AddDiscriminators : public FunctionPass { char AddDiscriminators::ID = 0; INITIALIZE_PASS_BEGIN(AddDiscriminators, "add-discriminators", "Add DWARF path discriminators", false, false) +INITIALIZE_PASS_DEPENDENCY(CFGSimplifyPass) INITIALIZE_PASS_END(AddDiscriminators, "add-discriminators", "Add DWARF path discriminators", false, false) |

