1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

Make DSE only scan blocks that are reachable from the entry

block.  Other blocks may have pointer cycles that will crash
basicaa and other alias analyses.  In any case, there is no
point wasting cycles optimizing dead blocks.  This fixes 
rdar://7635088

llvm-svn: 95852
This commit is contained in:
Chris Lattner 2010-02-11 05:11:54 +00:00
parent 199f4187b6
commit a087e6e82f
2 changed files with 21 additions and 1 deletions

View File

@ -44,8 +44,14 @@ namespace {
virtual bool runOnFunction(Function &F) {
bool Changed = false;
DominatorTree &DT = getAnalysis<DominatorTree>();
for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
Changed |= runOnBasicBlock(*I);
// Only check non-dead blocks. Dead blocks may have strange pointer
// cycles that will confuse alias analysis.
if (DT.isReachableFromEntry(I))
Changed |= runOnBasicBlock(*I);
return Changed;
}

View File

@ -41,3 +41,17 @@ bb14: ; preds = %bb4
}
declare void @llvm.memcpy.i64(i8* nocapture, i8* nocapture, i64, i32) nounwind
; rdar://7635088
define i32 @test3() {
entry:
ret i32 0
dead:
%P2 = getelementptr i32 *%P2, i32 52
%Q2 = getelementptr i32 *%Q2, i32 52
store i32 4, i32* %P2
store i32 4, i32* %Q2
br label %dead
}