1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

remove postdom frontiers, because it is dead. Forward dom frontiers are

still used by RegionInfo :(

llvm-svn: 128943
This commit is contained in:
Chris Lattner 2011-04-05 21:57:17 +00:00
parent 74a55198e0
commit a2345ee59d
9 changed files with 3 additions and 904 deletions

View File

@ -14,7 +14,7 @@
#ifndef LLVM_ANALYSIS_POST_DOMINATORS_H
#define LLVM_ANALYSIS_POST_DOMINATORS_H
#include "llvm/Analysis/DominanceFrontier.h"
#include "llvm/Analysis/Dominators.h"
namespace llvm {
@ -101,37 +101,6 @@ template <> struct GraphTraits<PostDominatorTree*>
}
};
/// PostDominanceFrontier Class - Concrete subclass of DominanceFrontier that is
/// used to compute the a post-dominance frontier.
///
struct PostDominanceFrontier : public DominanceFrontierBase {
static char ID;
PostDominanceFrontier()
: DominanceFrontierBase(ID, true) {
initializePostDominanceFrontierPass(*PassRegistry::getPassRegistry());
}
virtual bool runOnFunction(Function &) {
Frontiers.clear();
PostDominatorTree &DT = getAnalysis<PostDominatorTree>();
Roots = DT.getRoots();
if (const DomTreeNode *Root = DT.getRootNode())
calculate(DT, Root);
return false;
}
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<PostDominatorTree>();
}
private:
const DomSetType &calculate(const PostDominatorTree &DT,
const DomTreeNode *Node);
};
FunctionPass* createPostDomFrontier();
} // End llvm namespace
#endif

View File

@ -28,9 +28,10 @@
#define LLVM_ANALYSIS_REGION_INFO_H
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/Analysis/Dominators.h"
#include "llvm/Analysis/DominanceFrontier.h"
#include "llvm/Analysis/PostDominators.h"
#include "llvm/Support/Allocator.h"
#include <map>
namespace llvm {

View File

@ -168,7 +168,6 @@ void initializePostDomOnlyPrinterPass(PassRegistry&);
void initializePostDomOnlyViewerPass(PassRegistry&);
void initializePostDomPrinterPass(PassRegistry&);
void initializePostDomViewerPass(PassRegistry&);
void initializePostDominanceFrontierPass(PassRegistry&);
void initializePostDominatorTreePass(PassRegistry&);
void initializePreAllocSplittingPass(PassRegistry&);
void initializePreVerifierPass(PassRegistry&);

View File

@ -134,7 +134,6 @@ namespace {
(void) llvm::createMemCpyOptPass();
(void) llvm::createLoopDeletionPass();
(void) llvm::createPostDomTree();
(void) llvm::createPostDomFrontier();
(void) llvm::createInstructionNamerPass();
(void) llvm::createFunctionAttrsPass();
(void) llvm::createMergeFunctionsPass();

View File

@ -49,7 +49,6 @@ void llvm::initializeAnalysis(PassRegistry &Registry) {
initializeMemoryDependenceAnalysisPass(Registry);
initializeModuleDebugInfoPrinterPass(Registry);
initializePostDominatorTreePass(Registry);
initializePostDominanceFrontierPass(Registry);
initializeProfileEstimatorPassPass(Registry);
initializeNoProfileInfoPass(Registry);
initializeNoPathProfileInfoPass(Registry);

View File

@ -28,7 +28,6 @@ using namespace llvm;
//===----------------------------------------------------------------------===//
char PostDominatorTree::ID = 0;
char PostDominanceFrontier::ID = 0;
INITIALIZE_PASS(PostDominatorTree, "postdomtree",
"Post-Dominator Tree Construction", true, true)
@ -50,53 +49,3 @@ FunctionPass* llvm::createPostDomTree() {
return new PostDominatorTree();
}
//===----------------------------------------------------------------------===//
// PostDominanceFrontier Implementation
//===----------------------------------------------------------------------===//
INITIALIZE_PASS_BEGIN(PostDominanceFrontier, "postdomfrontier",
"Post-Dominance Frontier Construction", true, true)
INITIALIZE_PASS_DEPENDENCY(PostDominatorTree)
INITIALIZE_PASS_END(PostDominanceFrontier, "postdomfrontier",
"Post-Dominance Frontier Construction", true, true)
const DominanceFrontier::DomSetType &
PostDominanceFrontier::calculate(const PostDominatorTree &DT,
const DomTreeNode *Node) {
// Loop over CFG successors to calculate DFlocal[Node]
BasicBlock *BB = Node->getBlock();
DomSetType &S = Frontiers[BB]; // The new set to fill in...
if (getRoots().empty()) return S;
if (BB)
for (pred_iterator SI = pred_begin(BB), SE = pred_end(BB);
SI != SE; ++SI) {
BasicBlock *P = *SI;
// Does Node immediately dominate this predecessor?
DomTreeNode *SINode = DT[P];
if (SINode && SINode->getIDom() != Node)
S.insert(P);
}
// At this point, S is DFlocal. Now we union in DFup's of our children...
// Loop through and visit the nodes that Node immediately dominates (Node's
// children in the IDomTree)
//
for (DomTreeNode::const_iterator
NI = Node->begin(), NE = Node->end(); NI != NE; ++NI) {
DomTreeNode *IDominee = *NI;
const DomSetType &ChildDF = calculate(DT, IDominee);
DomSetType::const_iterator CDFI = ChildDF.begin(), CDFE = ChildDF.end();
for (; CDFI != CDFE; ++CDFI) {
if (!DT.properlyDominates(Node, DT[*CDFI]))
S.insert(*CDFI);
}
}
return S;
}
FunctionPass* llvm::createPostDomFrontier() {
return new PostDominanceFrontier();
}

View File

@ -1,97 +0,0 @@
; RUN: opt < %s -analyze -postdomfrontier \
; RUN: -disable-verify
; ModuleID = '2006-09-26-PostDominanceFrontier.bc'
target datalayout = "e-p:64:64"
target triple = "alphaev67-unknown-linux-gnu"
%struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [44 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 }
@TOP = external global i64* ; <i64**> [#uses=1]
@BOT = external global i64* ; <i64**> [#uses=1]
@str = external global [2 x i8] ; <[2 x i8]*> [#uses=0]
declare void @fopen()
define void @main(i8** %argv) {
entry:
%netSelect.i507 = alloca i64, align 8 ; <i64*> [#uses=0]
%topStart.i = alloca i64, align 8 ; <i64*> [#uses=0]
%topEnd.i = alloca i64, align 8 ; <i64*> [#uses=0]
%botStart.i = alloca i64, align 8 ; <i64*> [#uses=0]
%botEnd.i = alloca i64, align 8 ; <i64*> [#uses=0]
%c1.i154 = alloca i32, align 4 ; <i32*> [#uses=0]
%b1.i155 = alloca i32, align 4 ; <i32*> [#uses=0]
%t1.i156 = alloca i32, align 4 ; <i32*> [#uses=0]
%c1.i = alloca i32, align 4 ; <i32*> [#uses=0]
%b1.i = alloca i32, align 4 ; <i32*> [#uses=0]
%t1.i = alloca i32, align 4 ; <i32*> [#uses=0]
%netSelect.i5 = alloca i64, align 8 ; <i64*> [#uses=0]
%netSelect.i = alloca i64, align 8 ; <i64*> [#uses=0]
%tmp2.i = getelementptr i8** %argv, i32 1 ; <i8**> [#uses=1]
%tmp3.i4 = load i8** %tmp2.i ; <i8*> [#uses=0]
call void @fopen( )
br i1 false, label %DimensionChannel.exit, label %bb.backedge.i
bb.backedge.i: ; preds = %entry
ret void
DimensionChannel.exit: ; preds = %entry
%tmp13.i137 = malloc i64, i32 0 ; <i64*> [#uses=1]
%tmp610.i = malloc i64, i32 0 ; <i64*> [#uses=1]
br label %cond_true.i143
cond_true.i143: ; preds = %cond_true.i143, %DimensionChannel.exit
%tmp9.i140 = getelementptr i64* %tmp13.i137, i64 0 ; <i64*> [#uses=0]
%tmp12.i = getelementptr i64* %tmp610.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb18.i144, label %cond_true.i143
bb18.i144: ; preds = %cond_true.i143
call void @fopen( )
%tmp76.i105 = malloc i64, i32 0 ; <i64*> [#uses=3]
%tmp674.i = malloc i64, i32 0 ; <i64*> [#uses=2]
%tmp1072.i = malloc i64, i32 0 ; <i64*> [#uses=2]
%tmp1470.i = malloc i64, i32 0 ; <i64*> [#uses=1]
br label %cond_true.i114
cond_true.i114: ; preds = %cond_true.i114, %bb18.i144
%tmp17.i108 = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0]
%tmp20.i = getelementptr i64* %tmp674.i, i64 0 ; <i64*> [#uses=0]
%tmp23.i111 = getelementptr i64* %tmp1470.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %cond_true40.i, label %cond_true.i114
cond_true40.i: ; preds = %cond_true40.i, %cond_true.i114
%tmp33.i115 = getelementptr i64* %tmp1072.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb142.i, label %cond_true40.i
cond_next54.i: ; preds = %cond_true76.i
%tmp57.i = getelementptr i64* %tmp55.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb64.i, label %bb69.i
bb64.i: ; preds = %cond_true76.i, %cond_next54.i
%tmp67.i117 = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb114.i, label %cond_true111.i
bb69.i: ; preds = %cond_next54.i
br i1 false, label %bb79.i, label %cond_true76.i
cond_true76.i: ; preds = %bb142.i, %bb69.i
%tmp48.i = getelementptr i64* %tmp46.i, i64 0 ; <i64*> [#uses=0]
br i1 false, label %bb64.i, label %cond_next54.i
bb79.i: ; preds = %bb69.i
br i1 false, label %bb114.i, label %cond_true111.i
cond_true111.i: ; preds = %bb79.i, %bb64.i
%tmp84.i127 = getelementptr i64* %tmp46.i, i64 0 ; <i64*> [#uses=0]
ret void
bb114.i: ; preds = %bb142.i, %bb79.i, %bb64.i
%tmp117.i = getelementptr i64* %tmp76.i105, i64 0 ; <i64*> [#uses=0]
%tmp132.i131 = getelementptr i64* %tmp674.i, i64 0 ; <i64*> [#uses=0]
%tmp122.i = getelementptr i64* %tmp1072.i, i64 0 ; <i64*> [#uses=0]
ret void
bb142.i: ; preds = %cond_true40.i
%tmp46.i = load i64** @BOT ; <i64*> [#uses=2]
%tmp55.i = load i64** @TOP ; <i64*> [#uses=1]
br i1 false, label %bb114.i, label %cond_true76.i
}

View File

@ -1,692 +0,0 @@
; RUN: opt < %s -postdomfrontier -disable-output
define void @SManager() {
entry:
br label %bb.outer
bb.outer: ; preds = %bb193, %entry
br label %bb.outer156
bb.loopexit: ; preds = %bb442
br label %bb.outer156
bb.outer156: ; preds = %bb.loopexit, %bb.outer
br label %bb
bb: ; preds = %bb.backedge, %bb.outer156
br i1 false, label %cond_true, label %bb.cond_next_crit_edge
bb.cond_next_crit_edge: ; preds = %bb
br label %cond_next
cond_true: ; preds = %bb
br label %cond_next
cond_next: ; preds = %cond_true, %bb.cond_next_crit_edge
br i1 false, label %cond_next.bb.backedge_crit_edge, label %cond_next107
cond_next.bb.backedge_crit_edge: ; preds = %cond_next
br label %bb.backedge
bb.backedge: ; preds = %cond_true112.bb.backedge_crit_edge, %cond_next.bb.backedge_crit_edge
br label %bb
cond_next107: ; preds = %cond_next
br i1 false, label %cond_true112, label %cond_next197
cond_true112: ; preds = %cond_next107
br i1 false, label %cond_true118, label %cond_true112.bb.backedge_crit_edge
cond_true112.bb.backedge_crit_edge: ; preds = %cond_true112
br label %bb.backedge
cond_true118: ; preds = %cond_true112
br i1 false, label %bb123.preheader, label %cond_true118.bb148_crit_edge
cond_true118.bb148_crit_edge: ; preds = %cond_true118
br label %bb148
bb123.preheader: ; preds = %cond_true118
br label %bb123
bb123: ; preds = %bb142.bb123_crit_edge, %bb123.preheader
br i1 false, label %bb123.bb142_crit_edge, label %cond_next.i57
bb123.bb142_crit_edge: ; preds = %bb123
br label %bb142
cond_next.i57: ; preds = %bb123
br i1 false, label %cond_true135, label %cond_next.i57.bb142_crit_edge
cond_next.i57.bb142_crit_edge: ; preds = %cond_next.i57
br label %bb142
cond_true135: ; preds = %cond_next.i57
br label %bb142
bb142: ; preds = %cond_true135, %cond_next.i57.bb142_crit_edge, %bb123.bb142_crit_edge
br i1 false, label %bb148.loopexit, label %bb142.bb123_crit_edge
bb142.bb123_crit_edge: ; preds = %bb142
br label %bb123
bb148.loopexit: ; preds = %bb142
br label %bb148
bb148: ; preds = %bb148.loopexit, %cond_true118.bb148_crit_edge
br i1 false, label %bb151.preheader, label %bb148.bb177_crit_edge
bb148.bb177_crit_edge: ; preds = %bb148
br label %bb177
bb151.preheader: ; preds = %bb148
br label %bb151
bb151: ; preds = %bb171.bb151_crit_edge, %bb151.preheader
br i1 false, label %bb151.bb171_crit_edge, label %cond_next.i49
bb151.bb171_crit_edge: ; preds = %bb151
br label %bb171
cond_next.i49: ; preds = %bb151
br i1 false, label %cond_true164, label %cond_next.i49.bb171_crit_edge
cond_next.i49.bb171_crit_edge: ; preds = %cond_next.i49
br label %bb171
cond_true164: ; preds = %cond_next.i49
br label %bb171
bb171: ; preds = %cond_true164, %cond_next.i49.bb171_crit_edge, %bb151.bb171_crit_edge
br i1 false, label %bb177.loopexit, label %bb171.bb151_crit_edge
bb171.bb151_crit_edge: ; preds = %bb171
br label %bb151
bb177.loopexit: ; preds = %bb171
br label %bb177
bb177: ; preds = %bb177.loopexit, %bb148.bb177_crit_edge
br i1 false, label %bb180.preheader, label %bb177.bb193_crit_edge
bb177.bb193_crit_edge: ; preds = %bb177
br label %bb193
bb180.preheader: ; preds = %bb177
br label %bb180
bb180: ; preds = %bb180.bb180_crit_edge, %bb180.preheader
br i1 false, label %bb193.loopexit, label %bb180.bb180_crit_edge
bb180.bb180_crit_edge: ; preds = %bb180
br label %bb180
bb193.loopexit: ; preds = %bb180
br label %bb193
bb193: ; preds = %bb193.loopexit, %bb177.bb193_crit_edge
br label %bb.outer
cond_next197: ; preds = %cond_next107
br i1 false, label %cond_next210, label %cond_true205
cond_true205: ; preds = %cond_next197
br i1 false, label %cond_true205.bb213_crit_edge, label %cond_true205.bb299_crit_edge
cond_true205.bb299_crit_edge: ; preds = %cond_true205
br label %bb299
cond_true205.bb213_crit_edge: ; preds = %cond_true205
br label %bb213
cond_next210: ; preds = %cond_next197
br label %bb293
bb213: ; preds = %bb293.bb213_crit_edge, %cond_true205.bb213_crit_edge
br i1 false, label %bb213.cond_next290_crit_edge, label %cond_true248
bb213.cond_next290_crit_edge: ; preds = %bb213
br label %cond_next290
cond_true248: ; preds = %bb213
br i1 false, label %cond_true248.cond_next290_crit_edge, label %cond_true255
cond_true248.cond_next290_crit_edge: ; preds = %cond_true248
br label %cond_next290
cond_true255: ; preds = %cond_true248
br i1 false, label %cond_true266, label %cond_true255.cond_next271_crit_edge
cond_true255.cond_next271_crit_edge: ; preds = %cond_true255
br label %cond_next271
cond_true266: ; preds = %cond_true255
br label %cond_next271
cond_next271: ; preds = %cond_true266, %cond_true255.cond_next271_crit_edge
br label %cond_next290
cond_next290: ; preds = %cond_next271, %cond_true248.cond_next290_crit_edge, %bb213.cond_next290_crit_edge
br label %bb293
bb293: ; preds = %cond_next290, %cond_next210
br i1 false, label %bb293.bb213_crit_edge, label %bb293.bb299_crit_edge
bb293.bb299_crit_edge: ; preds = %bb293
br label %bb299
bb293.bb213_crit_edge: ; preds = %bb293
br label %bb213
bb299: ; preds = %bb293.bb299_crit_edge, %cond_true205.bb299_crit_edge
br i1 false, label %bb302.preheader, label %bb299.bb390_crit_edge
bb299.bb390_crit_edge: ; preds = %bb299
br label %bb390
bb302.preheader: ; preds = %bb299
br label %bb302
bb302: ; preds = %bb384.bb302_crit_edge, %bb302.preheader
br i1 false, label %bb302.bb384_crit_edge, label %cond_true339
bb302.bb384_crit_edge: ; preds = %bb302
br label %bb384
cond_true339: ; preds = %bb302
br i1 false, label %cond_true339.bb384_crit_edge, label %cond_true346
cond_true339.bb384_crit_edge: ; preds = %cond_true339
br label %bb384
cond_true346: ; preds = %cond_true339
br i1 false, label %cond_true357, label %cond_true346.cond_next361_crit_edge
cond_true346.cond_next361_crit_edge: ; preds = %cond_true346
br label %cond_next361
cond_true357: ; preds = %cond_true346
br label %cond_next361
cond_next361: ; preds = %cond_true357, %cond_true346.cond_next361_crit_edge
br label %bb384
bb384: ; preds = %cond_next361, %cond_true339.bb384_crit_edge, %bb302.bb384_crit_edge
br i1 false, label %bb390.loopexit, label %bb384.bb302_crit_edge
bb384.bb302_crit_edge: ; preds = %bb384
br label %bb302
bb390.loopexit: ; preds = %bb384
br label %bb390
bb390: ; preds = %bb390.loopexit, %bb299.bb390_crit_edge
br i1 false, label %bb391.preheader, label %bb390.bb442.preheader_crit_edge
bb390.bb442.preheader_crit_edge: ; preds = %bb390
br label %bb442.preheader
bb391.preheader: ; preds = %bb390
br label %bb391
bb391: ; preds = %bb413.bb391_crit_edge, %bb391.preheader
br i1 false, label %bb391.bb413_crit_edge, label %cond_next404
bb391.bb413_crit_edge: ; preds = %bb391
br label %bb413
cond_next404: ; preds = %bb391
br i1 false, label %cond_next404.HWrite.exit_crit_edge, label %cond_next.i13
cond_next404.HWrite.exit_crit_edge: ; preds = %cond_next404
br label %HWrite.exit
cond_next.i13: ; preds = %cond_next404
br i1 false, label %cond_next.i13.cond_next13.i_crit_edge, label %cond_true12.i
cond_next.i13.cond_next13.i_crit_edge: ; preds = %cond_next.i13
br label %cond_next13.i
cond_true12.i: ; preds = %cond_next.i13
br label %cond_next13.i
cond_next13.i: ; preds = %cond_true12.i, %cond_next.i13.cond_next13.i_crit_edge
br i1 false, label %cond_next13.i.bb.i22_crit_edge, label %cond_next43.i
cond_next13.i.bb.i22_crit_edge: ; preds = %cond_next13.i
br label %bb.i22
cond_next43.i: ; preds = %cond_next13.i
br i1 false, label %cond_next43.i.bb.i22_crit_edge, label %bb60.i
cond_next43.i.bb.i22_crit_edge: ; preds = %cond_next43.i
br label %bb.i22
bb.i22: ; preds = %cond_next43.i.bb.i22_crit_edge, %cond_next13.i.bb.i22_crit_edge
br label %bb413
bb60.i: ; preds = %cond_next43.i
br i1 false, label %bb60.i.HWrite.exit_crit_edge, label %cond_true81.i
bb60.i.HWrite.exit_crit_edge: ; preds = %bb60.i
br label %HWrite.exit
cond_true81.i: ; preds = %bb60.i
br label %bb413
HWrite.exit: ; preds = %bb60.i.HWrite.exit_crit_edge, %cond_next404.HWrite.exit_crit_edge
br label %bb413
bb413: ; preds = %HWrite.exit, %cond_true81.i, %bb.i22, %bb391.bb413_crit_edge
br i1 false, label %bb442.preheader.loopexit, label %bb413.bb391_crit_edge
bb413.bb391_crit_edge: ; preds = %bb413
br label %bb391
bb442.preheader.loopexit: ; preds = %bb413
br label %bb442.preheader
bb442.preheader: ; preds = %bb442.preheader.loopexit, %bb390.bb442.preheader_crit_edge
br label %bb442.outer
bb420: ; preds = %bb442
br i1 false, label %bb439.loopexit, label %cond_next433
cond_next433: ; preds = %bb420
br i1 false, label %cond_next433.HRead.exit.loopexit_crit_edge, label %cond_next.i
cond_next433.HRead.exit.loopexit_crit_edge: ; preds = %cond_next433
br label %HRead.exit.loopexit
cond_next.i: ; preds = %cond_next433
br i1 false, label %cond_true9.i, label %cond_false223.i
cond_true9.i: ; preds = %cond_next.i
switch i32 0, label %cond_false.i [
i32 1, label %cond_true9.i.cond_true15.i_crit_edge
i32 5, label %cond_true9.i.cond_true15.i_crit_edge9
]
cond_true9.i.cond_true15.i_crit_edge9: ; preds = %cond_true9.i
br label %cond_true15.i
cond_true9.i.cond_true15.i_crit_edge: ; preds = %cond_true9.i
br label %cond_true15.i
cond_true15.i: ; preds = %cond_true9.i.cond_true15.i_crit_edge, %cond_true9.i.cond_true15.i_crit_edge9
br i1 false, label %cond_true15.i.cond_true44.i_crit_edge, label %cond_true15.i.cond_false49.i_crit_edge
cond_true15.i.cond_false49.i_crit_edge: ; preds = %cond_true15.i
br label %cond_false49.i
cond_true15.i.cond_true44.i_crit_edge: ; preds = %cond_true15.i
br label %cond_true44.i
cond_false.i: ; preds = %cond_true9.i
br i1 false, label %cond_false.i.cond_next39.i_crit_edge, label %cond_true30.i
cond_false.i.cond_next39.i_crit_edge: ; preds = %cond_false.i
br label %cond_next39.i
cond_true30.i: ; preds = %cond_false.i
br label %cond_next39.i
cond_next39.i: ; preds = %cond_true30.i, %cond_false.i.cond_next39.i_crit_edge
br i1 false, label %cond_next39.i.cond_true44.i_crit_edge, label %cond_next39.i.cond_false49.i_crit_edge
cond_next39.i.cond_false49.i_crit_edge: ; preds = %cond_next39.i
br label %cond_false49.i
cond_next39.i.cond_true44.i_crit_edge: ; preds = %cond_next39.i
br label %cond_true44.i
cond_true44.i: ; preds = %cond_next39.i.cond_true44.i_crit_edge, %cond_true15.i.cond_true44.i_crit_edge
br i1 false, label %cond_true44.i.cond_next70.i_crit_edge, label %cond_true44.i.cond_true61.i_crit_edge
cond_true44.i.cond_true61.i_crit_edge: ; preds = %cond_true44.i
br label %cond_true61.i
cond_true44.i.cond_next70.i_crit_edge: ; preds = %cond_true44.i
br label %cond_next70.i
cond_false49.i: ; preds = %cond_next39.i.cond_false49.i_crit_edge, %cond_true15.i.cond_false49.i_crit_edge
br i1 false, label %cond_false49.i.cond_next70.i_crit_edge, label %cond_false49.i.cond_true61.i_crit_edge
cond_false49.i.cond_true61.i_crit_edge: ; preds = %cond_false49.i
br label %cond_true61.i
cond_false49.i.cond_next70.i_crit_edge: ; preds = %cond_false49.i
br label %cond_next70.i
cond_true61.i: ; preds = %cond_false49.i.cond_true61.i_crit_edge, %cond_true44.i.cond_true61.i_crit_edge
br i1 false, label %cond_true61.i.cond_next70.i_crit_edge, label %cond_true67.i
cond_true61.i.cond_next70.i_crit_edge: ; preds = %cond_true61.i
br label %cond_next70.i
cond_true67.i: ; preds = %cond_true61.i
br label %cond_next70.i
cond_next70.i: ; preds = %cond_true67.i, %cond_true61.i.cond_next70.i_crit_edge, %cond_false49.i.cond_next70.i_crit_edge, %cond_true44.i.cond_next70.i_crit_edge
br i1 false, label %cond_true77.i, label %cond_next81.i
cond_true77.i: ; preds = %cond_next70.i
br label %bb442.outer.backedge
cond_next81.i: ; preds = %cond_next70.i
br i1 false, label %cond_true87.i, label %cond_false94.i
cond_true87.i: ; preds = %cond_next81.i
br i1 false, label %cond_true87.i.cond_true130.i_crit_edge, label %cond_true87.i.cond_next135.i_crit_edge
cond_true87.i.cond_next135.i_crit_edge: ; preds = %cond_true87.i
br label %cond_next135.i
cond_true87.i.cond_true130.i_crit_edge: ; preds = %cond_true87.i
br label %cond_true130.i
cond_false94.i: ; preds = %cond_next81.i
switch i32 0, label %cond_false94.i.cond_next125.i_crit_edge [
i32 1, label %cond_false94.i.cond_true100.i_crit_edge
i32 5, label %cond_false94.i.cond_true100.i_crit_edge10
]
cond_false94.i.cond_true100.i_crit_edge10: ; preds = %cond_false94.i
br label %cond_true100.i
cond_false94.i.cond_true100.i_crit_edge: ; preds = %cond_false94.i
br label %cond_true100.i
cond_false94.i.cond_next125.i_crit_edge: ; preds = %cond_false94.i
br label %cond_next125.i
cond_true100.i: ; preds = %cond_false94.i.cond_true100.i_crit_edge, %cond_false94.i.cond_true100.i_crit_edge10
br i1 false, label %cond_true107.i, label %cond_true100.i.cond_next109.i_crit_edge
cond_true100.i.cond_next109.i_crit_edge: ; preds = %cond_true100.i
br label %cond_next109.i
cond_true107.i: ; preds = %cond_true100.i
br label %cond_next109.i
cond_next109.i: ; preds = %cond_true107.i, %cond_true100.i.cond_next109.i_crit_edge
br i1 false, label %cond_next109.i.cond_next125.i_crit_edge, label %cond_true116.i
cond_next109.i.cond_next125.i_crit_edge: ; preds = %cond_next109.i
br label %cond_next125.i
cond_true116.i: ; preds = %cond_next109.i
br label %cond_next125.i
cond_next125.i: ; preds = %cond_true116.i, %cond_next109.i.cond_next125.i_crit_edge, %cond_false94.i.cond_next125.i_crit_edge
br i1 false, label %cond_next125.i.cond_true130.i_crit_edge, label %cond_next125.i.cond_next135.i_crit_edge
cond_next125.i.cond_next135.i_crit_edge: ; preds = %cond_next125.i
br label %cond_next135.i
cond_next125.i.cond_true130.i_crit_edge: ; preds = %cond_next125.i
br label %cond_true130.i
cond_true130.i: ; preds = %cond_next125.i.cond_true130.i_crit_edge, %cond_true87.i.cond_true130.i_crit_edge
br label %cond_next135.i
cond_next135.i: ; preds = %cond_true130.i, %cond_next125.i.cond_next135.i_crit_edge, %cond_true87.i.cond_next135.i_crit_edge
br i1 false, label %cond_true142.i, label %cond_next135.i.cond_next149.i_crit_edge
cond_next135.i.cond_next149.i_crit_edge: ; preds = %cond_next135.i
br label %cond_next149.i
cond_true142.i: ; preds = %cond_next135.i
br label %cond_next149.i
cond_next149.i: ; preds = %cond_true142.i, %cond_next135.i.cond_next149.i_crit_edge
br i1 false, label %cond_true156.i, label %cond_next149.i.cond_next163.i_crit_edge
cond_next149.i.cond_next163.i_crit_edge: ; preds = %cond_next149.i
br label %cond_next163.i
cond_true156.i: ; preds = %cond_next149.i
br label %cond_next163.i
cond_next163.i: ; preds = %cond_true156.i, %cond_next149.i.cond_next163.i_crit_edge
br i1 false, label %cond_true182.i, label %cond_next163.i.cond_next380.i_crit_edge
cond_next163.i.cond_next380.i_crit_edge: ; preds = %cond_next163.i
br label %cond_next380.i
cond_true182.i: ; preds = %cond_next163.i
br i1 false, label %cond_true182.i.cond_next380.i_crit_edge, label %cond_true196.i
cond_true182.i.cond_next380.i_crit_edge: ; preds = %cond_true182.i
br label %cond_next380.i
cond_true196.i: ; preds = %cond_true182.i
br i1 false, label %cond_true210.i, label %cond_true196.i.cond_next380.i_crit_edge
cond_true196.i.cond_next380.i_crit_edge: ; preds = %cond_true196.i
br label %cond_next380.i
cond_true210.i: ; preds = %cond_true196.i
br i1 false, label %cond_true216.i, label %cond_true210.i.cond_next380.i_crit_edge
cond_true210.i.cond_next380.i_crit_edge: ; preds = %cond_true210.i
br label %cond_next380.i
cond_true216.i: ; preds = %cond_true210.i
br label %cond_next380.i
cond_false223.i: ; preds = %cond_next.i
br i1 false, label %cond_true229.i, label %cond_false355.i
cond_true229.i: ; preds = %cond_false223.i
br i1 false, label %cond_true229.i.HRead.exit.loopexit_crit_edge, label %cond_next243.i
cond_true229.i.HRead.exit.loopexit_crit_edge: ; preds = %cond_true229.i
br label %HRead.exit.loopexit
cond_next243.i: ; preds = %cond_true229.i
br i1 false, label %cond_true248.i, label %cond_false255.i
cond_true248.i: ; preds = %cond_next243.i
br label %cond_next260.i
cond_false255.i: ; preds = %cond_next243.i
br label %cond_next260.i
cond_next260.i: ; preds = %cond_false255.i, %cond_true248.i
br i1 false, label %cond_true267.i, label %cond_next273.i
cond_true267.i: ; preds = %cond_next260.i
br label %bb442.backedge
bb442.backedge: ; preds = %bb.i, %cond_true267.i
br label %bb442
cond_next273.i: ; preds = %cond_next260.i
br i1 false, label %cond_true281.i, label %cond_next273.i.cond_next288.i_crit_edge
cond_next273.i.cond_next288.i_crit_edge: ; preds = %cond_next273.i
br label %cond_next288.i
cond_true281.i: ; preds = %cond_next273.i
br label %cond_next288.i
cond_next288.i: ; preds = %cond_true281.i, %cond_next273.i.cond_next288.i_crit_edge
br i1 false, label %cond_true295.i, label %cond_next288.i.cond_next302.i_crit_edge
cond_next288.i.cond_next302.i_crit_edge: ; preds = %cond_next288.i
br label %cond_next302.i
cond_true295.i: ; preds = %cond_next288.i
br label %cond_next302.i
cond_next302.i: ; preds = %cond_true295.i, %cond_next288.i.cond_next302.i_crit_edge
br i1 false, label %cond_next302.i.cond_next380.i_crit_edge, label %cond_true328.i
cond_next302.i.cond_next380.i_crit_edge: ; preds = %cond_next302.i
br label %cond_next380.i
cond_true328.i: ; preds = %cond_next302.i
br i1 false, label %cond_true343.i, label %cond_true328.i.cond_next380.i_crit_edge
cond_true328.i.cond_next380.i_crit_edge: ; preds = %cond_true328.i
br label %cond_next380.i
cond_true343.i: ; preds = %cond_true328.i
br i1 false, label %cond_true349.i, label %cond_true343.i.cond_next380.i_crit_edge
cond_true343.i.cond_next380.i_crit_edge: ; preds = %cond_true343.i
br label %cond_next380.i
cond_true349.i: ; preds = %cond_true343.i
br label %cond_next380.i
cond_false355.i: ; preds = %cond_false223.i
br i1 false, label %cond_false355.i.bb.i_crit_edge, label %cond_next363.i
cond_false355.i.bb.i_crit_edge: ; preds = %cond_false355.i
br label %bb.i
cond_next363.i: ; preds = %cond_false355.i
br i1 false, label %bb377.i, label %cond_next363.i.bb.i_crit_edge
cond_next363.i.bb.i_crit_edge: ; preds = %cond_next363.i
br label %bb.i
bb.i: ; preds = %cond_next363.i.bb.i_crit_edge, %cond_false355.i.bb.i_crit_edge
br label %bb442.backedge
bb377.i: ; preds = %cond_next363.i
br label %cond_next380.i
cond_next380.i: ; preds = %bb377.i, %cond_true349.i, %cond_true343.i.cond_next380.i_crit_edge, %cond_true328.i.cond_next380.i_crit_edge, %cond_next302.i.cond_next380.i_crit_edge, %cond_true216.i, %cond_true210.i.cond_next380.i_crit_edge, %cond_true196.i.cond_next380.i_crit_edge, %cond_true182.i.cond_next380.i_crit_edge, %cond_next163.i.cond_next380.i_crit_edge
br i1 false, label %cond_next380.i.HRead.exit_crit_edge, label %cond_true391.i
cond_next380.i.HRead.exit_crit_edge: ; preds = %cond_next380.i
br label %HRead.exit
cond_true391.i: ; preds = %cond_next380.i
br label %bb442.outer.backedge
bb442.outer.backedge: ; preds = %bb439, %cond_true391.i, %cond_true77.i
br label %bb442.outer
HRead.exit.loopexit: ; preds = %cond_true229.i.HRead.exit.loopexit_crit_edge, %cond_next433.HRead.exit.loopexit_crit_edge
br label %HRead.exit
HRead.exit: ; preds = %HRead.exit.loopexit, %cond_next380.i.HRead.exit_crit_edge
br label %bb439
bb439.loopexit: ; preds = %bb420
br label %bb439
bb439: ; preds = %bb439.loopexit, %HRead.exit
br label %bb442.outer.backedge
bb442.outer: ; preds = %bb442.outer.backedge, %bb442.preheader
br label %bb442
bb442: ; preds = %bb442.outer, %bb442.backedge
br i1 false, label %bb420, label %bb.loopexit
}
define void @Invalidate() {
entry:
br i1 false, label %cond_false, label %cond_true
cond_true: ; preds = %entry
br i1 false, label %cond_true40, label %cond_true.cond_next_crit_edge
cond_true.cond_next_crit_edge: ; preds = %cond_true
br label %cond_next
cond_true40: ; preds = %cond_true
br label %cond_next
cond_next: ; preds = %cond_true40, %cond_true.cond_next_crit_edge
br i1 false, label %cond_true68, label %cond_next.cond_next73_crit_edge
cond_next.cond_next73_crit_edge: ; preds = %cond_next
br label %cond_next73
cond_true68: ; preds = %cond_next
br label %cond_next73
cond_next73: ; preds = %cond_true68, %cond_next.cond_next73_crit_edge
br i1 false, label %cond_true91, label %cond_next73.cond_next96_crit_edge
cond_next73.cond_next96_crit_edge: ; preds = %cond_next73
br label %cond_next96
cond_true91: ; preds = %cond_next73
br label %cond_next96
cond_next96: ; preds = %cond_true91, %cond_next73.cond_next96_crit_edge
br i1 false, label %cond_next96.cond_next112_crit_edge, label %cond_true105
cond_next96.cond_next112_crit_edge: ; preds = %cond_next96
br label %cond_next112
cond_true105: ; preds = %cond_next96
br label %cond_next112
cond_next112: ; preds = %cond_true105, %cond_next96.cond_next112_crit_edge
br i1 false, label %cond_next112.cond_next127_crit_edge, label %cond_true119
cond_next112.cond_next127_crit_edge: ; preds = %cond_next112
br label %cond_next127
cond_true119: ; preds = %cond_next112
br label %cond_next127
cond_next127: ; preds = %cond_true119, %cond_next112.cond_next127_crit_edge
br i1 false, label %cond_next141, label %cond_true134
cond_true134: ; preds = %cond_next127
br i1 false, label %cond_true134.bb161_crit_edge, label %cond_true134.bb_crit_edge
cond_true134.bb_crit_edge: ; preds = %cond_true134
br label %bb
cond_true134.bb161_crit_edge: ; preds = %cond_true134
br label %bb161
cond_next141: ; preds = %cond_next127
br label %bb154
bb: ; preds = %bb154.bb_crit_edge, %cond_true134.bb_crit_edge
br label %bb154
bb154: ; preds = %bb, %cond_next141
br i1 false, label %bb154.bb161_crit_edge, label %bb154.bb_crit_edge
bb154.bb_crit_edge: ; preds = %bb154
br label %bb
bb154.bb161_crit_edge: ; preds = %bb154
br label %bb161
bb161: ; preds = %bb154.bb161_crit_edge, %cond_true134.bb161_crit_edge
br i1 false, label %bb161.cond_next201_crit_edge, label %cond_true198
bb161.cond_next201_crit_edge: ; preds = %bb161
br label %cond_next201
cond_true198: ; preds = %bb161
br label %cond_next201
cond_next201: ; preds = %cond_true198, %bb161.cond_next201_crit_edge
br i1 false, label %cond_next212, label %cond_true206
cond_true206: ; preds = %cond_next201
br label %UnifiedReturnBlock
cond_false: ; preds = %entry
br label %UnifiedReturnBlock
cond_next212: ; preds = %cond_next201
br label %UnifiedReturnBlock
UnifiedReturnBlock: ; preds = %cond_next212, %cond_false, %cond_true206
ret void
}

View File

@ -1,28 +0,0 @@
; RUN: opt < %s -postdomfrontier -disable-output
define void @args_out_of_range() {
entry:
br label %bb
bb: ; preds = %bb, %entry
br label %bb
}
define void @args_out_of_range_3() {
entry:
br label %bb
bb: ; preds = %bb, %entry
br label %bb
}
define void @Feq() {
entry:
br i1 false, label %cond_true, label %cond_next
cond_true: ; preds = %entry
unreachable
cond_next: ; preds = %entry
unreachable
}