Add support for unreachable and undef

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17048 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2004-10-16 18:12:13 +00:00
parent e87597fb75
commit a9d12c0a56
2 changed files with 20 additions and 4 deletions

View File

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

View File

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