mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC
Differential Revision: http://reviews.llvm.org/D17571 llvm-svn: 261884
This commit is contained in:
parent
10a5a19fa0
commit
4a56a70d94
@ -47,6 +47,11 @@
|
|||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
|
// FIXME: Replace this brittle forward declaration with the include of the new
|
||||||
|
// PassManager.h when doing so doesn't break the PassManagerBuilder.
|
||||||
|
template <typename IRUnitT> class AnalysisManager;
|
||||||
|
class PreservedAnalyses;
|
||||||
|
|
||||||
// Class to be specialized for different users of RegionInfo
|
// Class to be specialized for different users of RegionInfo
|
||||||
// (i.e. BasicBlocks or MachineBasicBlocks). This is only to avoid needing to
|
// (i.e. BasicBlocks or MachineBasicBlocks). This is only to avoid needing to
|
||||||
// pass around an unreasonable number of template parameters.
|
// pass around an unreasonable number of template parameters.
|
||||||
@ -676,6 +681,22 @@ class RegionInfoBase {
|
|||||||
RegionInfoBase(const RegionInfoBase &) = delete;
|
RegionInfoBase(const RegionInfoBase &) = delete;
|
||||||
const RegionInfoBase &operator=(const RegionInfoBase &) = delete;
|
const RegionInfoBase &operator=(const RegionInfoBase &) = delete;
|
||||||
|
|
||||||
|
RegionInfoBase(RegionInfoBase &&Arg)
|
||||||
|
: DT(std::move(Arg.DT)), PDT(std::move(Arg.PDT)), DF(std::move(Arg.DF)),
|
||||||
|
TopLevelRegion(std::move(Arg.TopLevelRegion)),
|
||||||
|
BBtoRegion(std::move(Arg.BBtoRegion)) {
|
||||||
|
Arg.wipe();
|
||||||
|
}
|
||||||
|
RegionInfoBase &operator=(RegionInfoBase &&RHS) {
|
||||||
|
DT = std::move(RHS.DT);
|
||||||
|
PDT = std::move(RHS.PDT);
|
||||||
|
DF = std::move(RHS.DF);
|
||||||
|
TopLevelRegion = std::move(RHS.TopLevelRegion);
|
||||||
|
BBtoRegion = std::move(RHS.BBtoRegion);
|
||||||
|
RHS.wipe();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
DomTreeT *DT;
|
DomTreeT *DT;
|
||||||
PostDomTreeT *PDT;
|
PostDomTreeT *PDT;
|
||||||
DomFrontierT *DF;
|
DomFrontierT *DF;
|
||||||
@ -687,6 +708,18 @@ private:
|
|||||||
/// Map every BB to the smallest region, that contains BB.
|
/// Map every BB to the smallest region, that contains BB.
|
||||||
BBtoRegionMap BBtoRegion;
|
BBtoRegionMap BBtoRegion;
|
||||||
|
|
||||||
|
/// \brief Wipe this region tree's state without releasing any resources.
|
||||||
|
///
|
||||||
|
/// This is essentially a post-move helper only. It leaves the object in an
|
||||||
|
/// assignable and destroyable state, but otherwise invalid.
|
||||||
|
void wipe() {
|
||||||
|
DT = nullptr;
|
||||||
|
PDT = nullptr;
|
||||||
|
DF = nullptr;
|
||||||
|
TopLevelRegion = nullptr;
|
||||||
|
BBtoRegion.clear();
|
||||||
|
}
|
||||||
|
|
||||||
// Check whether the entries of BBtoRegion for the BBs of region
|
// Check whether the entries of BBtoRegion for the BBs of region
|
||||||
// SR are correct. Triggers an assertion if not. Calls itself recursively for
|
// SR are correct. Triggers an assertion if not. Calls itself recursively for
|
||||||
// subregions.
|
// subregions.
|
||||||
@ -836,10 +869,19 @@ public:
|
|||||||
|
|
||||||
class RegionInfo : public RegionInfoBase<RegionTraits<Function>> {
|
class RegionInfo : public RegionInfoBase<RegionTraits<Function>> {
|
||||||
public:
|
public:
|
||||||
|
typedef RegionInfoBase<RegionTraits<Function>> Base;
|
||||||
|
|
||||||
explicit RegionInfo();
|
explicit RegionInfo();
|
||||||
|
|
||||||
~RegionInfo() override;
|
~RegionInfo() override;
|
||||||
|
|
||||||
|
RegionInfo(RegionInfo &&Arg)
|
||||||
|
: Base(std::move(static_cast<Base &>(Arg))) {}
|
||||||
|
RegionInfo &operator=(RegionInfo &&RHS) {
|
||||||
|
Base::operator=(std::move(static_cast<Base &>(RHS)));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
// updateStatistics - Update statistic about created regions.
|
// updateStatistics - Update statistic about created regions.
|
||||||
void updateStatistics(Region *R) final;
|
void updateStatistics(Region *R) final;
|
||||||
|
|
||||||
@ -884,6 +926,40 @@ public:
|
|||||||
//@}
|
//@}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// \brief Analysis pass that exposes the \c RegionInfo for a function.
|
||||||
|
class RegionInfoAnalysis {
|
||||||
|
static char PassID;
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef RegionInfo Result;
|
||||||
|
|
||||||
|
/// \brief Opaque, unique identifier for this analysis pass.
|
||||||
|
static void *ID() { return (void *)&PassID; }
|
||||||
|
|
||||||
|
/// \brief Provide a name for the analysis for debugging and logging.
|
||||||
|
static StringRef name() { return "RegionInfoAnalysis"; }
|
||||||
|
|
||||||
|
RegionInfo run(Function &F, AnalysisManager<Function> *AM);
|
||||||
|
};
|
||||||
|
|
||||||
|
/// \brief Printer pass for the \c RegionInfo.
|
||||||
|
class RegionInfoPrinterPass {
|
||||||
|
raw_ostream &OS;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit RegionInfoPrinterPass(raw_ostream &OS);
|
||||||
|
PreservedAnalyses run(Function &F, AnalysisManager<Function> *AM);
|
||||||
|
|
||||||
|
static StringRef name() { return "RegionInfoPrinterPass"; }
|
||||||
|
};
|
||||||
|
|
||||||
|
/// \brief Verifier pass for the \c RegionInfo.
|
||||||
|
struct RegionInfoVerifierPass {
|
||||||
|
PreservedAnalyses run(Function &F, AnalysisManager<Function> *AM);
|
||||||
|
|
||||||
|
static StringRef name() { return "RegionInfoVerifierPass"; }
|
||||||
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
template <>
|
template <>
|
||||||
inline BasicBlock *
|
inline BasicBlock *
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "llvm/Analysis/LoopInfo.h"
|
#include "llvm/Analysis/LoopInfo.h"
|
||||||
#include "llvm/Analysis/RegionInfoImpl.h"
|
#include "llvm/Analysis/RegionInfoImpl.h"
|
||||||
#include "llvm/Analysis/RegionIterator.h"
|
#include "llvm/Analysis/RegionIterator.h"
|
||||||
|
#include "llvm/IR/PassManager.h"
|
||||||
#include "llvm/Support/CommandLine.h"
|
#include "llvm/Support/CommandLine.h"
|
||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
@ -180,3 +181,36 @@ namespace llvm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// RegionInfoAnalysis implementation
|
||||||
|
//
|
||||||
|
|
||||||
|
char RegionInfoAnalysis::PassID;
|
||||||
|
|
||||||
|
RegionInfo RegionInfoAnalysis::run(Function &F, AnalysisManager<Function> *AM) {
|
||||||
|
RegionInfo RI;
|
||||||
|
auto *DT = &AM->getResult<DominatorTreeAnalysis>(F);
|
||||||
|
auto *PDT = &AM->getResult<PostDominatorTreeAnalysis>(F);
|
||||||
|
auto *DF = &AM->getResult<DominanceFrontierAnalysis>(F);
|
||||||
|
|
||||||
|
RI.recalculate(F, DT, PDT, DF);
|
||||||
|
return RI;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInfoPrinterPass::RegionInfoPrinterPass(raw_ostream &OS)
|
||||||
|
: OS(OS) {}
|
||||||
|
|
||||||
|
PreservedAnalyses
|
||||||
|
RegionInfoPrinterPass::run(Function &F, FunctionAnalysisManager *AM) {
|
||||||
|
OS << "Region Tree for function: " << F.getName() << "\n";
|
||||||
|
AM->getResult<RegionInfoAnalysis>(F).print(OS);
|
||||||
|
|
||||||
|
return PreservedAnalyses::all();
|
||||||
|
}
|
||||||
|
|
||||||
|
PreservedAnalyses RegionInfoVerifierPass::run(Function &F,
|
||||||
|
AnalysisManager<Function> *AM) {
|
||||||
|
AM->getResult<RegionInfoAnalysis>(F).verifyAnalysis();
|
||||||
|
|
||||||
|
return PreservedAnalyses::all();
|
||||||
|
}
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "llvm/Analysis/LazyCallGraph.h"
|
#include "llvm/Analysis/LazyCallGraph.h"
|
||||||
#include "llvm/Analysis/LoopInfo.h"
|
#include "llvm/Analysis/LoopInfo.h"
|
||||||
#include "llvm/Analysis/PostDominators.h"
|
#include "llvm/Analysis/PostDominators.h"
|
||||||
|
#include "llvm/Analysis/RegionInfo.h"
|
||||||
#include "llvm/Analysis/ScalarEvolution.h"
|
#include "llvm/Analysis/ScalarEvolution.h"
|
||||||
#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
|
#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
|
||||||
#include "llvm/Analysis/ScopedNoAliasAA.h"
|
#include "llvm/Analysis/ScopedNoAliasAA.h"
|
||||||
|
@ -60,6 +60,7 @@ FUNCTION_ANALYSIS("domtree", DominatorTreeAnalysis())
|
|||||||
FUNCTION_ANALYSIS("postdomtree", PostDominatorTreeAnalysis())
|
FUNCTION_ANALYSIS("postdomtree", PostDominatorTreeAnalysis())
|
||||||
FUNCTION_ANALYSIS("domfrontier", DominanceFrontierAnalysis())
|
FUNCTION_ANALYSIS("domfrontier", DominanceFrontierAnalysis())
|
||||||
FUNCTION_ANALYSIS("loops", LoopAnalysis())
|
FUNCTION_ANALYSIS("loops", LoopAnalysis())
|
||||||
|
FUNCTION_ANALYSIS("regions", RegionInfoAnalysis())
|
||||||
FUNCTION_ANALYSIS("no-op-function", NoOpFunctionAnalysis())
|
FUNCTION_ANALYSIS("no-op-function", NoOpFunctionAnalysis())
|
||||||
FUNCTION_ANALYSIS("scalar-evolution", ScalarEvolutionAnalysis())
|
FUNCTION_ANALYSIS("scalar-evolution", ScalarEvolutionAnalysis())
|
||||||
FUNCTION_ANALYSIS("targetlibinfo", TargetLibraryAnalysis())
|
FUNCTION_ANALYSIS("targetlibinfo", TargetLibraryAnalysis())
|
||||||
@ -94,11 +95,13 @@ FUNCTION_PASS("print<domtree>", DominatorTreePrinterPass(dbgs()))
|
|||||||
FUNCTION_PASS("print<postdomtree>", PostDominatorTreePrinterPass(dbgs()))
|
FUNCTION_PASS("print<postdomtree>", PostDominatorTreePrinterPass(dbgs()))
|
||||||
FUNCTION_PASS("print<domfrontier>", DominanceFrontierPrinterPass(dbgs()))
|
FUNCTION_PASS("print<domfrontier>", DominanceFrontierPrinterPass(dbgs()))
|
||||||
FUNCTION_PASS("print<loops>", LoopPrinterPass(dbgs()))
|
FUNCTION_PASS("print<loops>", LoopPrinterPass(dbgs()))
|
||||||
|
FUNCTION_PASS("print<regions>", RegionInfoPrinterPass(dbgs()))
|
||||||
FUNCTION_PASS("print<scalar-evolution>", ScalarEvolutionPrinterPass(dbgs()))
|
FUNCTION_PASS("print<scalar-evolution>", ScalarEvolutionPrinterPass(dbgs()))
|
||||||
FUNCTION_PASS("simplify-cfg", SimplifyCFGPass())
|
FUNCTION_PASS("simplify-cfg", SimplifyCFGPass())
|
||||||
FUNCTION_PASS("sroa", SROA())
|
FUNCTION_PASS("sroa", SROA())
|
||||||
FUNCTION_PASS("verify", VerifierPass())
|
FUNCTION_PASS("verify", VerifierPass())
|
||||||
FUNCTION_PASS("verify<domtree>", DominatorTreeVerifierPass())
|
FUNCTION_PASS("verify<domtree>", DominatorTreeVerifierPass())
|
||||||
|
FUNCTION_PASS("verify<regions>", RegionInfoVerifierPass())
|
||||||
#undef FUNCTION_PASS
|
#undef FUNCTION_PASS
|
||||||
|
|
||||||
#ifndef LOOP_ANALYSIS
|
#ifndef LOOP_ANALYSIS
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
; RUN: opt -regions < %s
|
; RUN: opt -regions < %s
|
||||||
|
; RUN: opt < %s -passes='print<regions>'
|
||||||
|
|
||||||
define i32 @main() nounwind {
|
define i32 @main() nounwind {
|
||||||
entry:
|
entry:
|
||||||
br label %for.cond
|
br label %for.cond
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @BZ2_blockSort() nounwind {
|
define void @BZ2_blockSort() nounwind {
|
||||||
start:
|
start:
|
||||||
br label %while
|
br label %while
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @normal_condition() nounwind {
|
define void @normal_condition() nounwind {
|
||||||
5:
|
5:
|
||||||
br label %"0"
|
br label %"0"
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
||||||
end165:
|
end165:
|
||||||
br i1 1, label %false239, label %true181
|
br i1 1, label %false239, label %true181
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define internal fastcc void @compress() nounwind {
|
define internal fastcc void @compress() nounwind {
|
||||||
end33:
|
end33:
|
||||||
br i1 1, label %end124, label %lor.lhs.false95
|
br i1 1, label %end124, label %lor.lhs.false95
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @normal_condition() nounwind {
|
define void @normal_condition() nounwind {
|
||||||
0:
|
0:
|
||||||
br label %"1"
|
br label %"1"
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @normal_condition() nounwind {
|
define void @normal_condition() nounwind {
|
||||||
0:
|
0:
|
||||||
br i1 1, label %"1", label %"4"
|
br i1 1, label %"1", label %"4"
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @normal_condition() nounwind {
|
define void @normal_condition() nounwind {
|
||||||
0:
|
0:
|
||||||
br label %"1"
|
br label %"1"
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
||||||
entry:
|
entry:
|
||||||
br label %outer
|
br label %outer
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @normal_condition() nounwind {
|
define void @normal_condition() nounwind {
|
||||||
0:
|
0:
|
||||||
br label %"1"
|
br label %"1"
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define internal fastcc zeroext i8 @loops_1() nounwind {
|
define internal fastcc zeroext i8 @loops_1() nounwind {
|
||||||
entry:
|
entry:
|
||||||
br i1 1, label %outer , label %a
|
br i1 1, label %outer , label %a
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @meread_() nounwind {
|
define void @meread_() nounwind {
|
||||||
entry:
|
entry:
|
||||||
br label %bb23
|
br label %bb23
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @a_linear_impl_fig_1() nounwind {
|
define void @a_linear_impl_fig_1() nounwind {
|
||||||
0:
|
0:
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
||||||
entry:
|
entry:
|
||||||
br label %outer
|
br label %outer
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @MAIN__() nounwind {
|
define void @MAIN__() nounwind {
|
||||||
entry:
|
entry:
|
||||||
br label %__label_002001.outer
|
br label %__label_002001.outer
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define void @a_linear_impl_fig_1() nounwind {
|
define void @a_linear_impl_fig_1() nounwind {
|
||||||
0:
|
0:
|
||||||
br label %"1"
|
br label %"1"
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
; RUN: opt -regions -print-region-style=bb -analyze < %s 2>&1 | FileCheck -check-prefix=BBIT %s
|
||||||
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
; RUN: opt -regions -print-region-style=rn -analyze < %s 2>&1 | FileCheck -check-prefix=RNIT %s
|
||||||
|
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
define internal fastcc zeroext i8 @handle_compress() nounwind {
|
||||||
entry:
|
entry:
|
||||||
br label %outer
|
br label %outer
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
; RUN: opt -regions -analyze < %s | FileCheck %s
|
; RUN: opt -regions -analyze < %s | FileCheck %s
|
||||||
|
; RUN: opt < %s -passes='print<regions>' 2>&1 | FileCheck %s
|
||||||
|
|
||||||
; We should not crash if there are some bbs that are not reachable.
|
; We should not crash if there are some bbs that are not reachable.
|
||||||
define void @f() {
|
define void @f() {
|
||||||
|
Loading…
Reference in New Issue
Block a user