From: Chris Lattner Date: Wed, 23 Apr 2003 19:15:13 +0000 (+0000) Subject: Fix problem where labels were being incorrectly elided, and fix problem X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f1acd9623c642e2ad16c74a803d5c10934cb8402;p=oota-llvm.git Fix problem where labels were being incorrectly elided, and fix problem where PHI copies where not emitted for the default label of switch insts git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5882 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index f9ddc7d8c41..b9e27acf57f 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -817,7 +817,8 @@ void CWriter::printFunction(Function *F) { for (Value::use_iterator UI = BB->use_begin(), UE = BB->use_end(); UI != UE; ++UI) if (TerminatorInst *TI = dyn_cast(*UI)) - if (TI != Prev->getTerminator()) { + if (TI != Prev->getTerminator() || + isa(Prev->getTerminator())) { NeedsLabel = true; break; } @@ -867,8 +868,8 @@ void CWriter::visitReturnInst(ReturnInst &I) { void CWriter::visitSwitchInst(SwitchInst &SI) { Out << " switch ("; writeOperand(SI.getOperand(0)); - Out << ") {\n default: goto "; - writeOperand(SI.getDefaultDest()); + Out << ") {\n default:\n"; + printBranchToBlock(SI.getParent(), SI.getDefaultDest(), 2); Out << ";\n"; for (unsigned i = 2, e = SI.getNumOperands(); i != e; i += 2) { Out << " case "; diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index f9ddc7d8c41..b9e27acf57f 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -817,7 +817,8 @@ void CWriter::printFunction(Function *F) { for (Value::use_iterator UI = BB->use_begin(), UE = BB->use_end(); UI != UE; ++UI) if (TerminatorInst *TI = dyn_cast(*UI)) - if (TI != Prev->getTerminator()) { + if (TI != Prev->getTerminator() || + isa(Prev->getTerminator())) { NeedsLabel = true; break; } @@ -867,8 +868,8 @@ void CWriter::visitReturnInst(ReturnInst &I) { void CWriter::visitSwitchInst(SwitchInst &SI) { Out << " switch ("; writeOperand(SI.getOperand(0)); - Out << ") {\n default: goto "; - writeOperand(SI.getDefaultDest()); + Out << ") {\n default:\n"; + printBranchToBlock(SI.getParent(), SI.getDefaultDest(), 2); Out << ";\n"; for (unsigned i = 2, e = SI.getNumOperands(); i != e; i += 2) { Out << " case ";