From: Vikram S. Adve Date: Sun, 14 Jul 2002 23:14:45 +0000 (+0000) Subject: Added support to write out ConstantExpr nodes. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b4dbb4445c67fc46e56765035c2787028a66a614;p=oota-llvm.git 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 --- diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 6806575b197..842bc0912aa 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 &TypeStack, break; } default: - assert(0 && "Unhandled case in getTypeProps!"); - Result = ""; + Result = ""; } TypeStack.pop_back(); // Remove self from stack... @@ -326,8 +326,24 @@ static void WriteConstantInt(ostream &Out, const Constant *CV, bool PrintName, } else { Out << ""; } + + } else if (const ConstantExpr *CE=dyn_cast(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 << ""; } } @@ -480,7 +496,8 @@ ostream &AssemblyWriter::printTypeAtLeastOneLevel(const Type *Ty) { } else if (const OpaqueType *OTy = dyn_cast(Ty)) { Out << OTy->getDescription(); } else { - assert(Ty->isPrimitiveType() && "Unknown derived type!"); + if (!Ty->isPrimitiveType()) + Out << ""; printType(Ty); } return Out;