aha, DAE does have to think about PHI nodes. Many thanks to "Dr Evil" (aka Duncan)

for pointing this out :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67212 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-03-18 16:48:45 +00:00
parent b44b3666f9
commit a5affdcf4c
2 changed files with 14 additions and 3 deletions

View File

@ -803,9 +803,9 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
" must have been a struct!");
Instruction *InsertPt = Call;
if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
InsertPt = II->getNormalDest()->begin();
assert(!isa<PHINode>(InsertPt) &&
"Can't have a use of the invoke value if the edge is critical");
BasicBlock::iterator IP = II->getNormalDest()->begin();
while (isa<PHINode>(IP)) ++IP;
InsertPt = IP;
}
// We used to return a struct. Instead of doing smart stuff with all the

View File

@ -13,3 +13,14 @@ T:
T2:
unreachable
}
define i32 @bar2() {
entry:
%x = invoke {i32,i32} @foo() to label %T unwind label %T2
T:
%PN = phi i32 [0, %entry]
%y = extractvalue {i32,i32} %x, 1
ret i32 %y
T2:
unreachable
}