[llvm] r276449 - [PM] Port BreakCriticalEdges to the new PM.
Sean Silva via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 22 20:31:16 PDT 2016
On Fri, Jul 22, 2016 at 11:04 AM, Wei Mi via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: wmi
> Date: Fri Jul 22 13:04:25 2016
> New Revision: 276449
>
> URL: http://llvm.org/viewvc/llvm-project?rev=276449&view=rev
> Log:
> [PM] Port BreakCriticalEdges to the new PM.
>
> Differential Revision: https://reviews.llvm.org/D22688
>
> Added:
> llvm/trunk/include/llvm/Transforms/Utils/BreakCriticalEdges.h
> Modified:
> llvm/trunk/lib/Passes/PassBuilder.cpp
> llvm/trunk/lib/Passes/PassRegistry.def
> llvm/trunk/lib/Transforms/Utils/BreakCriticalEdges.cpp
> llvm/trunk/test/Analysis/Dominators/2006-10-02-BreakCritEdges.ll
> llvm/trunk/test/Analysis/Dominators/2007-01-14-BreakCritEdges.ll
>
> Added: llvm/trunk/include/llvm/Transforms/Utils/BreakCriticalEdges.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/BreakCriticalEdges.h?rev=276449&view=auto
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Utils/BreakCriticalEdges.h (added)
> +++ llvm/trunk/include/llvm/Transforms/Utils/BreakCriticalEdges.h Fri Jul
> 22 13:04:25 2016
> @@ -0,0 +1,29 @@
> +//===- BreakCriticalEdges.h - Critical Edge Elimination Pass
> --------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +// BreakCriticalEdges pass - Break all of the critical edges in the CFG by
> +// inserting a dummy basic block. This pass may be "required" by passes
> that
> +// cannot deal with critical edges. For this usage, the structure type is
> +// forward declared. This pass obviously invalidates the CFG, but can
> update
> +// dominator trees.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_TRANSFORMS_UTILS_BREAKCRITICALEDGES_H
> +#define LLVM_TRANSFORMS_UTILS_BREAKCRITICALEDGES_H
> +
> +#include "llvm/IR/Function.h"
> +#include "llvm/IR/PassManager.h"
> +
> +namespace llvm {
> +struct BreakCriticalEdgesPass : public
> PassInfoMixin<BreakCriticalEdgesPass> {
> + PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
> +};
> +} // namespace llvm
> +#endif // LLVM_TRANSFORMS_UTILS_BREAKCRITICALEDGES_H
>
> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=276449&r1=276448&r2=276449&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Fri Jul 22 13:04:25 2016
> @@ -113,6 +113,7 @@
> #include "llvm/Transforms/Scalar/Sink.h"
> #include "llvm/Transforms/Scalar/TailRecursionElimination.h"
> #include "llvm/Transforms/Utils/AddDiscriminators.h"
> +#include "llvm/Transforms/Utils/BreakCriticalEdges.h"
> #include "llvm/Transforms/Utils/LCSSA.h"
> #include "llvm/Transforms/Utils/LoopSimplify.h"
> #include "llvm/Transforms/Utils/Mem2Reg.h"
>
> Modified: llvm/trunk/lib/Passes/PassRegistry.def
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassRegistry.def?rev=276449&r1=276448&r2=276449&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassRegistry.def (original)
> +++ llvm/trunk/lib/Passes/PassRegistry.def Fri Jul 22 13:04:25 2016
> @@ -130,6 +130,7 @@ FUNCTION_PASS("adce", ADCEPass())
> FUNCTION_PASS("add-discriminators", AddDiscriminatorsPass())
> FUNCTION_PASS("alignment-from-assumptions",
> AlignmentFromAssumptionsPass())
> FUNCTION_PASS("bdce", BDCEPass())
> +FUNCTION_PASS("break-crit-edges", BreakCriticalEdgesPass())
> FUNCTION_PASS("consthoist", ConstantHoistingPass())
> FUNCTION_PASS("correlated-propagation", CorrelatedValuePropagationPass())
> FUNCTION_PASS("dce", DCEPass())
>
> Modified: llvm/trunk/lib/Transforms/Utils/BreakCriticalEdges.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BreakCriticalEdges.cpp?rev=276449&r1=276448&r2=276449&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/BreakCriticalEdges.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/BreakCriticalEdges.cpp Fri Jul 22
> 13:04:25 2016
> @@ -15,7 +15,7 @@
> //
>
> //===----------------------------------------------------------------------===//
>
> -#include "llvm/Transforms/Scalar.h"
> +#include "llvm/Transforms/Utils/BreakCriticalEdges.h"
> #include "llvm/ADT/SmallVector.h"
> #include "llvm/ADT/Statistic.h"
> #include "llvm/Analysis/AliasAnalysis.h"
> @@ -23,10 +23,10 @@
> #include "llvm/Analysis/LoopInfo.h"
> #include "llvm/IR/CFG.h"
> #include "llvm/IR/Dominators.h"
> -#include "llvm/IR/Function.h"
> #include "llvm/IR/Instructions.h"
> #include "llvm/IR/Type.h"
> #include "llvm/Support/ErrorHandling.h"
> +#include "llvm/Transforms/Scalar.h"
> #include "llvm/Transforms/Utils/BasicBlockUtils.h"
> using namespace llvm;
>
> @@ -72,6 +72,20 @@ FunctionPass *llvm::createBreakCriticalE
> return new BreakCriticalEdges();
> }
>
> +PreservedAnalyses BreakCriticalEdgesPass::run(Function &F,
> + FunctionAnalysisManager
> &AM) {
> + auto *DT = AM.getCachedResult<DominatorTreeAnalysis>(F);
> + auto *LI = AM.getCachedResult<LoopAnalysis>(F);
> + unsigned N = SplitAllCriticalEdges(F, CriticalEdgeSplittingOptions(DT,
> LI));
> + NumBroken += N;
> + if (N == 0)
> + return PreservedAnalyses::all();
> + PreservedAnalyses PA;
> + PA.preserve<DominatorTreeAnalysis>();
> + PA.preserve<LoopAnalysis>();
> + return PA;
> +}
> +
>
> //===----------------------------------------------------------------------===//
> // Implementation of the external critical edge manipulation functions
>
> //===----------------------------------------------------------------------===//
>
> Modified: llvm/trunk/test/Analysis/Dominators/2006-10-02-BreakCritEdges.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Dominators/2006-10-02-BreakCritEdges.ll?rev=276449&r1=276448&r2=276449&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Analysis/Dominators/2006-10-02-BreakCritEdges.ll
> (original)
> +++ llvm/trunk/test/Analysis/Dominators/2006-10-02-BreakCritEdges.ll Fri
> Jul 22 13:04:25 2016
> @@ -1,4 +1,5 @@
> ; RUN: opt < %s -domtree -break-crit-edges -analyze -domtree | FileCheck
> %s
> +; RUN: opt < %s
> -passes='require<domtree>,break-crit-edges,print<domtree>' -disable-output
> 2>&1| FileCheck %s
> ; PR932
>
> ; CHECK: [3] %brtrue {1,2}
>
> Modified: llvm/trunk/test/Analysis/Dominators/2007-01-14-BreakCritEdges.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Dominators/2007-01-14-BreakCritEdges.ll?rev=276449&r1=276448&r2=276449&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Analysis/Dominators/2007-01-14-BreakCritEdges.ll
> (original)
> +++ llvm/trunk/test/Analysis/Dominators/2007-01-14-BreakCritEdges.ll Fri
> Jul 22 13:04:25 2016
> @@ -1,4 +1,5 @@
> ; RUN: opt < %s -domtree -break-crit-edges -domtree -disable-output
> +; RUN: opt < %s
> -passes='require<domtree>,break-crit-edges,require<domtree>' -disable-output
>
I don't think we need `require<domtree>` at the end of this pipeline.
-- Sean Silva
> ; PR1110
>
> %struct.OggVorbis_File = type { i8*, i32, i64, i64,
> %struct.ogg_sync_state, i32, i64*, i64*, i32*, i64*, %struct.vorbis_info*,
> %struct.vorbis_comment*, i64, i32, i32, i32, double, double,
> %struct.ogg_stream_state, %struct.vorbis_dsp_state, %struct.vorbis_block,
> %struct.ov_callbacks }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160722/9d2199ab/attachment.html>
More information about the llvm-commits
mailing list