diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/Transforms/Scalar/SimplifyCFG.h | 11 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp | 52 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/AddDiscriminators.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/Transforms/AddDiscriminators/multiple.ll | 6 | ||||
| -rw-r--r-- | llvm/test/Transforms/AddDiscriminators/oneline.ll | 19 | 
5 files changed, 47 insertions, 47 deletions
diff --git a/llvm/include/llvm/Transforms/Scalar/SimplifyCFG.h b/llvm/include/llvm/Transforms/Scalar/SimplifyCFG.h index 53f427a7d19..96b18a12558 100644 --- a/llvm/include/llvm/Transforms/Scalar/SimplifyCFG.h +++ b/llvm/include/llvm/Transforms/Scalar/SimplifyCFG.h @@ -39,6 +39,17 @@ public:    PreservedAnalyses run(Function &F, AnalysisManager<Function> &AM);  }; +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); +  bool runOnFunction(Function &F) override; + +  void getAnalysisUsage(AnalysisUsage &AU) const override; +};  }  #endif 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) diff --git a/llvm/test/Transforms/AddDiscriminators/multiple.ll b/llvm/test/Transforms/AddDiscriminators/multiple.ll index bacef89756b..c7306dc8f2e 100644 --- a/llvm/test/Transforms/AddDiscriminators/multiple.ll +++ b/llvm/test/Transforms/AddDiscriminators/multiple.ll @@ -21,20 +21,18 @@ entry:  if.then:                                          ; preds = %entry    %1 = load i32, i32* %i.addr, align 4, !dbg !10 -; CHECK:  %1 = load i32, i32* %i.addr, align 4, !dbg ![[THEN:[0-9]+]]    store i32 %1, i32* %x, align 4, !dbg !10 -; CHECK:  store i32 %1, i32* %x, align 4, !dbg ![[THEN]] +; CHECK:  store i32 %1, i32* %x, align 4, !dbg ![[THEN:[0-9]+]]    br label %if.end, !dbg !10  ; CHECK:  br label %if.end, !dbg ![[THEN]]  if.else:                                          ; preds = %entry    %2 = load i32, i32* %i.addr, align 4, !dbg !10 -; CHECK:  %2 = load i32, i32* %i.addr, align 4, !dbg ![[ELSE:[0-9]+]]    %sub = sub nsw i32 0, %2, !dbg !10 -; CHECK:  %sub = sub nsw i32 0, %2, !dbg ![[ELSE]] +; CHECK:  %sub = sub nsw i32 0, %1, !dbg ![[ELSE:[0-9]+]]    store i32 %sub, i32* %x, align 4, !dbg !10  ; CHECK:  store i32 %sub, i32* %x, align 4, !dbg ![[ELSE]] diff --git a/llvm/test/Transforms/AddDiscriminators/oneline.ll b/llvm/test/Transforms/AddDiscriminators/oneline.ll index f07fa09ce0e..f0ac5a8d86d 100644 --- a/llvm/test/Transforms/AddDiscriminators/oneline.ll +++ b/llvm/test/Transforms/AddDiscriminators/oneline.ll @@ -21,27 +21,20 @@ define i32 @_Z3fooi(i32 %i) #0 !dbg !4 {  ; <label>:5                                       ; preds = %0    %6 = load i32, i32* %2, align 4, !dbg !23, !tbaa !13 -; CHECK:  %6 = load i32, i32* %2, align 4, !dbg ![[THEN1:[0-9]+]],{{.*}} -    %7 = icmp eq i32 %6, 5, !dbg !24 -; CHECK:  %7 = icmp eq i32 %6, 5, !dbg ![[THEN2:[0-9]+]] -    br i1 %7, label %8, label %9, !dbg !25 -; CHECK:  br i1 %7, label %8, label %9, !dbg ![[THEN3:[0-9]+]]  ; <label>:8                                       ; preds = %5, %0    store i32 100, i32* %1, align 4, !dbg !26 -; CHECK: store i32 100, i32* %1, align 4, !dbg ![[ELSE:[0-9]+]] +; CHECK: store i32 100, i32* %1, align 4, !dbg ![[THEN:[0-9]+]]    br label %10, !dbg !26 -; CHECK: br label %10, !dbg ![[ELSE]]  ; <label>:9                                       ; preds = %5    store i32 99, i32* %1, align 4, !dbg !27 -; CHECK: store i32 99, i32* %1, align 4, !dbg ![[COMBINE:[0-9]+]] +; CHECK: store i32 99, i32* %1, align 4, !dbg ![[ELSE:[0-9]+]]    br label %10, !dbg !27 -; CHECK: br label %10, !dbg ![[COMBINE]]  ; <label>:10                                      ; preds = %9, %8    %11 = load i32, i32* %1, align 4, !dbg !28 @@ -87,11 +80,7 @@ attributes #1 = { nounwind readnone }  !27 = !DILocation(line: 2, column: 42, scope: !20)  !28 = !DILocation(line: 3, column: 1, scope: !4) -; CHECK: ![[THEN1]] = !DILocation(line: 2, column: 17, scope: ![[THENBLOCK:[0-9]+]]) +; CHECK: ![[THEN]] = !DILocation(line: 2, column: 25, scope: ![[THENBLOCK:[0-9]+]])  ; CHECK: ![[THENBLOCK]] = !DILexicalBlockFile({{.*}} discriminator: 1) -; CHECK: ![[THEN2]] = !DILocation(line: 2, column: 19, scope: ![[THENBLOCK]]) -; CHECK: ![[THEN3]] = !DILocation(line: 2, column: 7, scope: ![[THENBLOCK]]) -; CHECK: ![[ELSE]] = !DILocation(line: 2, column: 25, scope: ![[ELSEBLOCK:[0-9]+]]) +; CHECK: ![[ELSE]] = !DILocation(line: 2, column: 42, scope: ![[ELSEBLOCK:[0-9]+]])  ; CHECK: ![[ELSEBLOCK]] = !DILexicalBlockFile({{.*}} discriminator: 2) -; CHECK: ![[COMBINE]] = !DILocation(line: 2, column: 42, scope: ![[COMBINEBLOCK:[0-9]+]]) -; CHECK: ![[COMBINEBLOCK]] = !DILexicalBlockFile({{.*}} discriminator: 3)  | 

