Add support for unreachable and undef
authorChris Lattner <sabre@nondot.org>
Sat, 16 Oct 2004 18:12:13 +0000 (18:12 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 16 Oct 2004 18:12:13 +0000 (18:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17048 91177308-0d34-0410-b5e6-96231b3b80d8

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

index c4d8c46483702df7e6714d4635187a82b062181a..bc3f839409c9fca348c690e7a76649a47213f36f 100644 (file)
@@ -174,6 +174,7 @@ namespace {
     void visitUnwindInst(UnwindInst &I) {
       assert(0 && "Lowerinvoke pass didn't work!");
     }
+    void visitUnreachableInst(UnreachableInst &I);
 
     void visitPHINode(PHINode &I);
     void visitBinaryOperator(Instruction &I);
@@ -521,6 +522,9 @@ void CWriter::printConstant(Constant *CPV) {
                 << *CE << "\n";
       abort();
     }
+  } else if (isa<UndefValue>(CPV) && CPV->getType()->isFirstClassType()) {
+    Out << "0";
+    return;
   }
 
   switch (CPV->getType()->getTypeID()) {
@@ -606,7 +610,7 @@ void CWriter::printConstant(Constant *CPV) {
   }
 
   case Type::ArrayTyID:
-    if (isa<ConstantAggregateZero>(CPV)) {
+    if (isa<ConstantAggregateZero>(CPV) || isa<UndefValue>(CPV)) {
       const ArrayType *AT = cast<ArrayType>(CPV->getType());
       Out << "{";
       if (AT->getNumElements()) {
@@ -625,7 +629,7 @@ void CWriter::printConstant(Constant *CPV) {
     break;
 
   case Type::StructTyID:
-    if (isa<ConstantAggregateZero>(CPV)) {
+    if (isa<ConstantAggregateZero>(CPV) || isa<UndefValue>(CPV)) {
       const StructType *ST = cast<StructType>(CPV->getType());
       Out << "{";
       if (ST->getNumElements()) {
@@ -1205,6 +1209,10 @@ void CWriter::visitSwitchInst(SwitchInst &SI) {
   Out << "  }\n";
 }
 
+void CWriter::visitUnreachableInst(UnreachableInst &I) {
+  Out << "  /*UNREACHABLE*/\n";
+}
+
 bool CWriter::isGotoCodeNecessary(BasicBlock *From, BasicBlock *To) {
   /// FIXME: This should be reenabled, but loop reordering safe!!
   return true;
index c4d8c46483702df7e6714d4635187a82b062181a..bc3f839409c9fca348c690e7a76649a47213f36f 100644 (file)
@@ -174,6 +174,7 @@ namespace {
     void visitUnwindInst(UnwindInst &I) {
       assert(0 && "Lowerinvoke pass didn't work!");
     }
+    void visitUnreachableInst(UnreachableInst &I);
 
     void visitPHINode(PHINode &I);
     void visitBinaryOperator(Instruction &I);
@@ -521,6 +522,9 @@ void CWriter::printConstant(Constant *CPV) {
                 << *CE << "\n";
       abort();
     }
+  } else if (isa<UndefValue>(CPV) && CPV->getType()->isFirstClassType()) {
+    Out << "0";
+    return;
   }
 
   switch (CPV->getType()->getTypeID()) {
@@ -606,7 +610,7 @@ void CWriter::printConstant(Constant *CPV) {
   }
 
   case Type::ArrayTyID:
-    if (isa<ConstantAggregateZero>(CPV)) {
+    if (isa<ConstantAggregateZero>(CPV) || isa<UndefValue>(CPV)) {
       const ArrayType *AT = cast<ArrayType>(CPV->getType());
       Out << "{";
       if (AT->getNumElements()) {
@@ -625,7 +629,7 @@ void CWriter::printConstant(Constant *CPV) {
     break;
 
   case Type::StructTyID:
-    if (isa<ConstantAggregateZero>(CPV)) {
+    if (isa<ConstantAggregateZero>(CPV) || isa<UndefValue>(CPV)) {
       const StructType *ST = cast<StructType>(CPV->getType());
       Out << "{";
       if (ST->getNumElements()) {
@@ -1205,6 +1209,10 @@ void CWriter::visitSwitchInst(SwitchInst &SI) {
   Out << "  }\n";
 }
 
+void CWriter::visitUnreachableInst(UnreachableInst &I) {
+  Out << "  /*UNREACHABLE*/\n";
+}
+
 bool CWriter::isGotoCodeNecessary(BasicBlock *From, BasicBlock *To) {
   /// FIXME: This should be reenabled, but loop reordering safe!!
   return true;