aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/CBackend
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-10-16 18:12:13 +0000
committerChris Lattner <sabre@nondot.org>2004-10-16 18:12:13 +0000
commita9d12c0a56e60a331af3ef6209d754f0c12e8bab (patch)
tree750c3e7c26db654e761ae86e457ba0db22a2d030 /lib/Target/CBackend
parente87597fb75d2870505ad54480ad51452bd6c75c3 (diff)
downloadexternal_llvm-a9d12c0a56e60a331af3ef6209d754f0c12e8bab.zip
external_llvm-a9d12c0a56e60a331af3ef6209d754f0c12e8bab.tar.gz
external_llvm-a9d12c0a56e60a331af3ef6209d754f0c12e8bab.tar.bz2
Add support for unreachable and undef
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17048 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CBackend')
-rw-r--r--lib/Target/CBackend/CBackend.cpp12
-rw-r--r--lib/Target/CBackend/Writer.cpp12
2 files changed, 20 insertions, 4 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index c4d8c46..bc3f839 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -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;
diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp
index c4d8c46..bc3f839 100644
--- a/lib/Target/CBackend/Writer.cpp
+++ b/lib/Target/CBackend/Writer.cpp
@@ -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;