mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 23:18:58 +00:00
SSI construction should just go ahead and ignore instructions in unreachable
blocks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79132 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bf230bf5cc
commit
071d84e109
@ -39,7 +39,7 @@ STATISTIC(NumPhiInserted, "Number of phi functions inserted");
|
||||
void SSI::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired<DominanceFrontier>();
|
||||
AU.addRequired<DominatorTree>();
|
||||
AU.setPreservesAll();
|
||||
AU.setPreservesCFG();
|
||||
}
|
||||
|
||||
bool SSI::runOnFunction(Function &F) {
|
||||
@ -121,7 +121,7 @@ void SSI::insertPhiFunctions(SmallVectorImpl<Instruction *> &value) {
|
||||
// Test if there were any sigmas for this variable
|
||||
if (needConstruction[i]) {
|
||||
|
||||
SmallPtrSet<BasicBlock *, 1> BB_visited;
|
||||
SmallPtrSet<BasicBlock *, 16> BB_visited;
|
||||
|
||||
// Insert phi functions if there is any sigma function
|
||||
while (!defsites[i].empty()) {
|
||||
@ -131,6 +131,10 @@ void SSI::insertPhiFunctions(SmallVectorImpl<Instruction *> &value) {
|
||||
defsites[i].pop_back();
|
||||
DominanceFrontier::iterator DF_BB = DF->find(BB);
|
||||
|
||||
// The BB is unreachable. Skip it.
|
||||
if (DF_BB == DF->end())
|
||||
continue;
|
||||
|
||||
// Iterates through all the dominance frontier of BB
|
||||
for (std::set<BasicBlock *>::iterator DF_BB_begin =
|
||||
DF_BB->second.begin(), DF_BB_end = DF_BB->second.end();
|
||||
|
19
test/Transforms/SSI/2009-08-15-UnreachableBB.ll
Normal file
19
test/Transforms/SSI/2009-08-15-UnreachableBB.ll
Normal file
@ -0,0 +1,19 @@
|
||||
; RUN: llvm-as < %s | opt -ssi-everything -disable-output
|
||||
|
||||
declare fastcc i32 @ras_Empty(i8** nocapture) nounwind readonly
|
||||
|
||||
define i32 @cc_Tautology() nounwind {
|
||||
entry:
|
||||
unreachable
|
||||
|
||||
cc_InitData.exit: ; No predecessors!
|
||||
%0 = call fastcc i32 @ras_Empty(i8** undef) nounwind ; <i32> [#uses=1]
|
||||
%1 = icmp eq i32 %0, 0 ; <i1> [#uses=1]
|
||||
br i1 %1, label %bb2, label %bb6
|
||||
|
||||
bb2: ; preds = %cc_InitData.exit
|
||||
unreachable
|
||||
|
||||
bb6: ; preds = %cc_InitData.exit
|
||||
ret i32 undef
|
||||
}
|
Loading…
Reference in New Issue
Block a user