diff options
author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2002-07-14 23:14:45 +0000 |
---|---|---|
committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2002-07-14 23:14:45 +0000 |
commit | b4dbb4445c67fc46e56765035c2787028a66a614 (patch) | |
tree | 230a19a54dd8ad0210e3dc01fb48d47e7cb76107 /lib | |
parent | 345e0cfb86b182c744e618ad39b5181f46110365 (diff) | |
download | llvm-b4dbb4445c67fc46e56765035c2787028a66a614.tar.gz llvm-b4dbb4445c67fc46e56765035c2787028a66a614.tar.bz2 llvm-b4dbb4445c67fc46e56765035c2787028a66a614.tar.xz |
Added support to write out ConstantExpr nodes.
Also, avoid asserting out when writing out an invalid tree
since the assembly writer is used when debugging.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2902 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 6806575b19..842bc0912a 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -12,6 +12,7 @@ #include "llvm/Assembly/Writer.h" #include "llvm/SlotCalculator.h" #include "llvm/DerivedTypes.h" +#include "llvm/Instruction.h" #include "llvm/Module.h" #include "llvm/Constants.h" #include "llvm/iMemory.h" @@ -150,8 +151,7 @@ static string calcTypeName(const Type *Ty, vector<const Type *> &TypeStack, break; } default: - assert(0 && "Unhandled case in getTypeProps!"); - Result = "<error>"; + Result = "<unrecognized-type>"; } TypeStack.pop_back(); // Remove self from stack... @@ -326,8 +326,24 @@ static void WriteConstantInt(ostream &Out, const Constant *CV, bool PrintName, } else { Out << "<pointer reference without context info>"; } + + } else if (const ConstantExpr *CE=dyn_cast<ConstantExpr>(CV)) { + Out << CE->getOpcodeName(); + + bool isGEP = CE->getOpcode() == Instruction::GetElementPtr; + Out << (isGEP? " (" : " "); + + for (User::const_op_iterator OI=CE->op_begin(); OI != CE->op_end(); ++OI) { + printTypeInt(Out, (*OI)->getType(), TypeTable); + WriteAsOperandInternal(Out, *OI, PrintName, TypeTable, Table); + if (OI+1 != CE->op_end()) + Out << ", "; // ((isGEP && OI == CE->op_begin())? " " : ", "); + } + + if (isGEP) + Out << ")"; } else { - assert(0 && "Unrecognized constant value!!!"); + Out << "<placeholder or erroneous Constant>"; } } @@ -480,7 +496,8 @@ ostream &AssemblyWriter::printTypeAtLeastOneLevel(const Type *Ty) { } else if (const OpaqueType *OTy = dyn_cast<OpaqueType>(Ty)) { Out << OTy->getDescription(); } else { - assert(Ty->isPrimitiveType() && "Unknown derived type!"); + if (!Ty->isPrimitiveType()) + Out << "<unknown derived type>"; printType(Ty); } return Out; |