Fix problem where labels were being incorrectly elided, and fix problem
authorChris Lattner <sabre@nondot.org>
Wed, 23 Apr 2003 19:15:13 +0000 (19:15 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 23 Apr 2003 19:15:13 +0000 (19:15 +0000)
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

lib/Target/CBackend/CBackend.cpp
lib/Target/CBackend/Writer.cpp

index f9ddc7d8c419fb5ba8a4767842f5717d5bbbc470..b9e27acf57f9fcfed71e923002ce35cf40ccb296 100644 (file)
@@ -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<TerminatorInst>(*UI))
-        if (TI != Prev->getTerminator()) {
+        if (TI != Prev->getTerminator() ||
+            isa<SwitchInst>(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 ";
index f9ddc7d8c419fb5ba8a4767842f5717d5bbbc470..b9e27acf57f9fcfed71e923002ce35cf40ccb296 100644 (file)
@@ -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<TerminatorInst>(*UI))
-        if (TI != Prev->getTerminator()) {
+        if (TI != Prev->getTerminator() ||
+            isa<SwitchInst>(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 ";