AsmWriter.cpp revision 3d10a5a75794356a0a568ce283713adc3a963200
1//===-- AsmWriter.cpp - Printing LLVM as an assembly file -----------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This library implements the functionality defined in llvm/Assembly/Writer.h
11//
12// Note that these routines must be extremely tolerant of various errors in the
13// LLVM code, because it can be used for debugging transformations.
14//
15//===----------------------------------------------------------------------===//
16
17#include "llvm/Assembly/Writer.h"
18#include "llvm/Assembly/PrintModulePass.h"
19#include "llvm/Assembly/AsmAnnotationWriter.h"
20#include "llvm/CallingConv.h"
21#include "llvm/Constants.h"
22#include "llvm/DerivedTypes.h"
23#include "llvm/InlineAsm.h"
24#include "llvm/Instruction.h"
25#include "llvm/Instructions.h"
26#include "llvm/MDNode.h"
27#include "llvm/Module.h"
28#include "llvm/ValueSymbolTable.h"
29#include "llvm/TypeSymbolTable.h"
30#include "llvm/ADT/DenseSet.h"
31#include "llvm/ADT/StringExtras.h"
32#include "llvm/ADT/STLExtras.h"
33#include "llvm/Support/CFG.h"
34#include "llvm/Support/ErrorHandling.h"
35#include "llvm/Support/MathExtras.h"
36#include "llvm/Support/Streams.h"
37#include "llvm/Support/raw_ostream.h"
38#include <algorithm>
39#include <cctype>
40#include <map>
41using namespace llvm;
42
43// Make virtual table appear in this compilation unit.
44AssemblyAnnotationWriter::~AssemblyAnnotationWriter() {}
45
46//===----------------------------------------------------------------------===//
47// Helper Functions
48//===----------------------------------------------------------------------===//
49
50static const Module *getModuleFromVal(const Value *V) {
51  if (const Argument *MA = dyn_cast<Argument>(V))
52    return MA->getParent() ? MA->getParent()->getParent() : 0;
53
54  if (const BasicBlock *BB = dyn_cast<BasicBlock>(V))
55    return BB->getParent() ? BB->getParent()->getParent() : 0;
56
57  if (const Instruction *I = dyn_cast<Instruction>(V)) {
58    const Function *M = I->getParent() ? I->getParent()->getParent() : 0;
59    return M ? M->getParent() : 0;
60  }
61
62  if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))
63    return GV->getParent();
64  return 0;
65}
66
67// PrintEscapedString - Print each character of the specified string, escaping
68// it if it is not printable or if it is an escape char.
69static void PrintEscapedString(const char *Str, unsigned Length,
70                               raw_ostream &Out) {
71  for (unsigned i = 0; i != Length; ++i) {
72    unsigned char C = Str[i];
73    if (isprint(C) && C != '\\' && C != '"')
74      Out << C;
75    else
76      Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F);
77  }
78}
79
80// PrintEscapedString - Print each character of the specified string, escaping
81// it if it is not printable or if it is an escape char.
82static void PrintEscapedString(const std::string &Str, raw_ostream &Out) {
83  PrintEscapedString(Str.c_str(), Str.size(), Out);
84}
85
86enum PrefixType {
87  GlobalPrefix,
88  LabelPrefix,
89  LocalPrefix,
90  NoPrefix
91};
92
93/// PrintLLVMName - Turn the specified name into an 'LLVM name', which is either
94/// prefixed with % (if the string only contains simple characters) or is
95/// surrounded with ""'s (if it has special chars in it).  Print it out.
96static void PrintLLVMName(raw_ostream &OS, const char *NameStr,
97                          unsigned NameLen, PrefixType Prefix) {
98  assert(NameStr && "Cannot get empty name!");
99  switch (Prefix) {
100  default: llvm_unreachable("Bad prefix!");
101  case NoPrefix: break;
102  case GlobalPrefix: OS << '@'; break;
103  case LabelPrefix:  break;
104  case LocalPrefix:  OS << '%'; break;
105  }
106
107  // Scan the name to see if it needs quotes first.
108  bool NeedsQuotes = isdigit(NameStr[0]);
109  if (!NeedsQuotes) {
110    for (unsigned i = 0; i != NameLen; ++i) {
111      char C = NameStr[i];
112      if (!isalnum(C) && C != '-' && C != '.' && C != '_') {
113        NeedsQuotes = true;
114        break;
115      }
116    }
117  }
118
119  // If we didn't need any quotes, just write out the name in one blast.
120  if (!NeedsQuotes) {
121    OS.write(NameStr, NameLen);
122    return;
123  }
124
125  // Okay, we need quotes.  Output the quotes and escape any scary characters as
126  // needed.
127  OS << '"';
128  PrintEscapedString(NameStr, NameLen, OS);
129  OS << '"';
130}
131
132/// PrintLLVMName - Turn the specified name into an 'LLVM name', which is either
133/// prefixed with % (if the string only contains simple characters) or is
134/// surrounded with ""'s (if it has special chars in it).  Print it out.
135static void PrintLLVMName(raw_ostream &OS, const Value *V) {
136  PrintLLVMName(OS, V->getNameStart(), V->getNameLen(),
137                isa<GlobalValue>(V) ? GlobalPrefix : LocalPrefix);
138}
139
140//===----------------------------------------------------------------------===//
141// TypePrinting Class: Type printing machinery
142//===----------------------------------------------------------------------===//
143
144static DenseMap<const Type *, std::string> &getTypeNamesMap(void *M) {
145  return *static_cast<DenseMap<const Type *, std::string>*>(M);
146}
147
148void TypePrinting::clear() {
149  getTypeNamesMap(TypeNames).clear();
150}
151
152bool TypePrinting::hasTypeName(const Type *Ty) const {
153  return getTypeNamesMap(TypeNames).count(Ty);
154}
155
156void TypePrinting::addTypeName(const Type *Ty, const std::string &N) {
157  getTypeNamesMap(TypeNames).insert(std::make_pair(Ty, N));
158}
159
160
161TypePrinting::TypePrinting() {
162  TypeNames = new DenseMap<const Type *, std::string>();
163}
164
165TypePrinting::~TypePrinting() {
166  delete &getTypeNamesMap(TypeNames);
167}
168
169/// CalcTypeName - Write the specified type to the specified raw_ostream, making
170/// use of type names or up references to shorten the type name where possible.
171void TypePrinting::CalcTypeName(const Type *Ty,
172                                SmallVectorImpl<const Type *> &TypeStack,
173                                raw_ostream &OS, bool IgnoreTopLevelName) {
174  // Check to see if the type is named.
175  if (!IgnoreTopLevelName) {
176    DenseMap<const Type *, std::string> &TM = getTypeNamesMap(TypeNames);
177    DenseMap<const Type *, std::string>::iterator I = TM.find(Ty);
178    if (I != TM.end()) {
179      OS << I->second;
180      return;
181    }
182  }
183
184  // Check to see if the Type is already on the stack...
185  unsigned Slot = 0, CurSize = TypeStack.size();
186  while (Slot < CurSize && TypeStack[Slot] != Ty) ++Slot; // Scan for type
187
188  // This is another base case for the recursion.  In this case, we know
189  // that we have looped back to a type that we have previously visited.
190  // Generate the appropriate upreference to handle this.
191  if (Slot < CurSize) {
192    OS << '\\' << unsigned(CurSize-Slot);     // Here's the upreference
193    return;
194  }
195
196  TypeStack.push_back(Ty);    // Recursive case: Add us to the stack..
197
198  switch (Ty->getTypeID()) {
199  case Type::VoidTyID:      OS << "void"; break;
200  case Type::FloatTyID:     OS << "float"; break;
201  case Type::DoubleTyID:    OS << "double"; break;
202  case Type::X86_FP80TyID:  OS << "x86_fp80"; break;
203  case Type::FP128TyID:     OS << "fp128"; break;
204  case Type::PPC_FP128TyID: OS << "ppc_fp128"; break;
205  case Type::LabelTyID:     OS << "label"; break;
206  case Type::MetadataTyID:  OS << "metadata"; break;
207  case Type::IntegerTyID:
208    OS << 'i' << cast<IntegerType>(Ty)->getBitWidth();
209    break;
210
211  case Type::FunctionTyID: {
212    const FunctionType *FTy = cast<FunctionType>(Ty);
213    CalcTypeName(FTy->getReturnType(), TypeStack, OS);
214    OS << " (";
215    for (FunctionType::param_iterator I = FTy->param_begin(),
216         E = FTy->param_end(); I != E; ++I) {
217      if (I != FTy->param_begin())
218        OS << ", ";
219      CalcTypeName(*I, TypeStack, OS);
220    }
221    if (FTy->isVarArg()) {
222      if (FTy->getNumParams()) OS << ", ";
223      OS << "...";
224    }
225    OS << ')';
226    break;
227  }
228  case Type::StructTyID: {
229    const StructType *STy = cast<StructType>(Ty);
230    if (STy->isPacked())
231      OS << '<';
232    OS << "{ ";
233    for (StructType::element_iterator I = STy->element_begin(),
234         E = STy->element_end(); I != E; ++I) {
235      CalcTypeName(*I, TypeStack, OS);
236      if (next(I) != STy->element_end())
237        OS << ',';
238      OS << ' ';
239    }
240    OS << '}';
241    if (STy->isPacked())
242      OS << '>';
243    break;
244  }
245  case Type::PointerTyID: {
246    const PointerType *PTy = cast<PointerType>(Ty);
247    CalcTypeName(PTy->getElementType(), TypeStack, OS);
248    if (unsigned AddressSpace = PTy->getAddressSpace())
249      OS << " addrspace(" << AddressSpace << ')';
250    OS << '*';
251    break;
252  }
253  case Type::ArrayTyID: {
254    const ArrayType *ATy = cast<ArrayType>(Ty);
255    OS << '[' << ATy->getNumElements() << " x ";
256    CalcTypeName(ATy->getElementType(), TypeStack, OS);
257    OS << ']';
258    break;
259  }
260  case Type::VectorTyID: {
261    const VectorType *PTy = cast<VectorType>(Ty);
262    OS << "<" << PTy->getNumElements() << " x ";
263    CalcTypeName(PTy->getElementType(), TypeStack, OS);
264    OS << '>';
265    break;
266  }
267  case Type::OpaqueTyID:
268    OS << "opaque";
269    break;
270  default:
271    OS << "<unrecognized-type>";
272    break;
273  }
274
275  TypeStack.pop_back();       // Remove self from stack.
276}
277
278/// printTypeInt - The internal guts of printing out a type that has a
279/// potentially named portion.
280///
281void TypePrinting::print(const Type *Ty, raw_ostream &OS,
282                         bool IgnoreTopLevelName) {
283  // Check to see if the type is named.
284  DenseMap<const Type*, std::string> &TM = getTypeNamesMap(TypeNames);
285  if (!IgnoreTopLevelName) {
286    DenseMap<const Type*, std::string>::iterator I = TM.find(Ty);
287    if (I != TM.end()) {
288      OS << I->second;
289      return;
290    }
291  }
292
293  // Otherwise we have a type that has not been named but is a derived type.
294  // Carefully recurse the type hierarchy to print out any contained symbolic
295  // names.
296  SmallVector<const Type *, 16> TypeStack;
297  std::string TypeName;
298
299  raw_string_ostream TypeOS(TypeName);
300  CalcTypeName(Ty, TypeStack, TypeOS, IgnoreTopLevelName);
301  OS << TypeOS.str();
302
303  // Cache type name for later use.
304  if (!IgnoreTopLevelName)
305    TM.insert(std::make_pair(Ty, TypeOS.str()));
306}
307
308namespace {
309  class TypeFinder {
310    // To avoid walking constant expressions multiple times and other IR
311    // objects, we keep several helper maps.
312    DenseSet<const Value*> VisitedConstants;
313    DenseSet<const Type*> VisitedTypes;
314
315    TypePrinting &TP;
316    std::vector<const Type*> &NumberedTypes;
317  public:
318    TypeFinder(TypePrinting &tp, std::vector<const Type*> &numberedTypes)
319      : TP(tp), NumberedTypes(numberedTypes) {}
320
321    void Run(const Module &M) {
322      // Get types from the type symbol table.  This gets opaque types referened
323      // only through derived named types.
324      const TypeSymbolTable &ST = M.getTypeSymbolTable();
325      for (TypeSymbolTable::const_iterator TI = ST.begin(), E = ST.end();
326           TI != E; ++TI)
327        IncorporateType(TI->second);
328
329      // Get types from global variables.
330      for (Module::const_global_iterator I = M.global_begin(),
331           E = M.global_end(); I != E; ++I) {
332        IncorporateType(I->getType());
333        if (I->hasInitializer())
334          IncorporateValue(I->getInitializer());
335      }
336
337      // Get types from aliases.
338      for (Module::const_alias_iterator I = M.alias_begin(),
339           E = M.alias_end(); I != E; ++I) {
340        IncorporateType(I->getType());
341        IncorporateValue(I->getAliasee());
342      }
343
344      // Get types from functions.
345      for (Module::const_iterator FI = M.begin(), E = M.end(); FI != E; ++FI) {
346        IncorporateType(FI->getType());
347
348        for (Function::const_iterator BB = FI->begin(), E = FI->end();
349             BB != E;++BB)
350          for (BasicBlock::const_iterator II = BB->begin(),
351               E = BB->end(); II != E; ++II) {
352            const Instruction &I = *II;
353            // Incorporate the type of the instruction and all its operands.
354            IncorporateType(I.getType());
355            for (User::const_op_iterator OI = I.op_begin(), OE = I.op_end();
356                 OI != OE; ++OI)
357              IncorporateValue(*OI);
358          }
359      }
360    }
361
362  private:
363    void IncorporateType(const Type *Ty) {
364      // Check to see if we're already visited this type.
365      if (!VisitedTypes.insert(Ty).second)
366        return;
367
368      // If this is a structure or opaque type, add a name for the type.
369      if (((isa<StructType>(Ty) && cast<StructType>(Ty)->getNumElements())
370            || isa<OpaqueType>(Ty)) && !TP.hasTypeName(Ty)) {
371        TP.addTypeName(Ty, "%"+utostr(unsigned(NumberedTypes.size())));
372        NumberedTypes.push_back(Ty);
373      }
374
375      // Recursively walk all contained types.
376      for (Type::subtype_iterator I = Ty->subtype_begin(),
377           E = Ty->subtype_end(); I != E; ++I)
378        IncorporateType(*I);
379    }
380
381    /// IncorporateValue - This method is used to walk operand lists finding
382    /// types hiding in constant expressions and other operands that won't be
383    /// walked in other ways.  GlobalValues, basic blocks, instructions, and
384    /// inst operands are all explicitly enumerated.
385    void IncorporateValue(const Value *V) {
386      if (V == 0 || !isa<Constant>(V) || isa<GlobalValue>(V)) return;
387
388      // Already visited?
389      if (!VisitedConstants.insert(V).second)
390        return;
391
392      // Check this type.
393      IncorporateType(V->getType());
394
395      // Look in operands for types.
396      const Constant *C = cast<Constant>(V);
397      for (Constant::const_op_iterator I = C->op_begin(),
398           E = C->op_end(); I != E;++I)
399        IncorporateValue(*I);
400    }
401  };
402} // end anonymous namespace
403
404
405/// AddModuleTypesToPrinter - Add all of the symbolic type names for types in
406/// the specified module to the TypePrinter and all numbered types to it and the
407/// NumberedTypes table.
408static void AddModuleTypesToPrinter(TypePrinting &TP,
409                                    std::vector<const Type*> &NumberedTypes,
410                                    const Module *M) {
411  if (M == 0) return;
412
413  // If the module has a symbol table, take all global types and stuff their
414  // names into the TypeNames map.
415  const TypeSymbolTable &ST = M->getTypeSymbolTable();
416  for (TypeSymbolTable::const_iterator TI = ST.begin(), E = ST.end();
417       TI != E; ++TI) {
418    const Type *Ty = cast<Type>(TI->second);
419
420    // As a heuristic, don't insert pointer to primitive types, because
421    // they are used too often to have a single useful name.
422    if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) {
423      const Type *PETy = PTy->getElementType();
424      if ((PETy->isPrimitiveType() || PETy->isInteger()) &&
425          !isa<OpaqueType>(PETy))
426        continue;
427    }
428
429    // Likewise don't insert primitives either.
430    if (Ty->isInteger() || Ty->isPrimitiveType())
431      continue;
432
433    // Get the name as a string and insert it into TypeNames.
434    std::string NameStr;
435    raw_string_ostream NameOS(NameStr);
436    PrintLLVMName(NameOS, TI->first.c_str(), TI->first.length(), LocalPrefix);
437    TP.addTypeName(Ty, NameOS.str());
438  }
439
440  // Walk the entire module to find references to unnamed structure and opaque
441  // types.  This is required for correctness by opaque types (because multiple
442  // uses of an unnamed opaque type needs to be referred to by the same ID) and
443  // it shrinks complex recursive structure types substantially in some cases.
444  TypeFinder(TP, NumberedTypes).Run(*M);
445}
446
447
448/// WriteTypeSymbolic - This attempts to write the specified type as a symbolic
449/// type, iff there is an entry in the modules symbol table for the specified
450/// type or one of it's component types.
451///
452void llvm::WriteTypeSymbolic(raw_ostream &OS, const Type *Ty, const Module *M) {
453  TypePrinting Printer;
454  std::vector<const Type*> NumberedTypes;
455  AddModuleTypesToPrinter(Printer, NumberedTypes, M);
456  Printer.print(Ty, OS);
457}
458
459//===----------------------------------------------------------------------===//
460// SlotTracker Class: Enumerate slot numbers for unnamed values
461//===----------------------------------------------------------------------===//
462
463namespace {
464
465/// This class provides computation of slot numbers for LLVM Assembly writing.
466///
467class SlotTracker {
468public:
469  /// ValueMap - A mapping of Values to slot numbers.
470  typedef DenseMap<const Value*, unsigned> ValueMap;
471
472private:
473  /// TheModule - The module for which we are holding slot numbers.
474  const Module* TheModule;
475
476  /// TheFunction - The function for which we are holding slot numbers.
477  const Function* TheFunction;
478  bool FunctionProcessed;
479
480  /// TheMDNode - The MDNode for which we are holding slot numbers.
481  const MDNode *TheMDNode;
482
483  /// mMap - The TypePlanes map for the module level data.
484  ValueMap mMap;
485  unsigned mNext;
486
487  /// fMap - The TypePlanes map for the function level data.
488  ValueMap fMap;
489  unsigned fNext;
490
491  /// mdnMap - Map for MDNodes.
492  ValueMap mdnMap;
493  unsigned mdnNext;
494public:
495  /// Construct from a module
496  explicit SlotTracker(const Module *M);
497  /// Construct from a function, starting out in incorp state.
498  explicit SlotTracker(const Function *F);
499  /// Construct from a mdnode.
500  explicit SlotTracker(const MDNode *N);
501
502  /// Return the slot number of the specified value in it's type
503  /// plane.  If something is not in the SlotTracker, return -1.
504  int getLocalSlot(const Value *V);
505  int getGlobalSlot(const GlobalValue *V);
506  int getMetadataSlot(const MDNode *N);
507
508  /// If you'd like to deal with a function instead of just a module, use
509  /// this method to get its data into the SlotTracker.
510  void incorporateFunction(const Function *F) {
511    TheFunction = F;
512    FunctionProcessed = false;
513  }
514
515  /// After calling incorporateFunction, use this method to remove the
516  /// most recently incorporated function from the SlotTracker. This
517  /// will reset the state of the machine back to just the module contents.
518  void purgeFunction();
519
520  /// MDNode map iterators.
521  ValueMap::iterator mdnBegin() { return mdnMap.begin(); }
522  ValueMap::iterator mdnEnd() { return mdnMap.end(); }
523  unsigned mdnSize() { return mdnMap.size(); }
524
525  /// This function does the actual initialization.
526  inline void initialize();
527
528  // Implementation Details
529private:
530  /// CreateModuleSlot - Insert the specified GlobalValue* into the slot table.
531  void CreateModuleSlot(const GlobalValue *V);
532
533  /// CreateMetadataSlot - Insert the specified MDNode* into the slot table.
534  void CreateMetadataSlot(const MDNode *N);
535
536  /// CreateFunctionSlot - Insert the specified Value* into the slot table.
537  void CreateFunctionSlot(const Value *V);
538
539  /// Add all of the module level global variables (and their initializers)
540  /// and function declarations, but not the contents of those functions.
541  void processModule();
542
543  /// Add all of the functions arguments, basic blocks, and instructions.
544  void processFunction();
545
546  /// Add all MDNode operands.
547  void processMDNode();
548
549  SlotTracker(const SlotTracker &);  // DO NOT IMPLEMENT
550  void operator=(const SlotTracker &);  // DO NOT IMPLEMENT
551};
552
553}  // end anonymous namespace
554
555
556static SlotTracker *createSlotTracker(const Value *V) {
557  if (const Argument *FA = dyn_cast<Argument>(V))
558    return new SlotTracker(FA->getParent());
559
560  if (const Instruction *I = dyn_cast<Instruction>(V))
561    return new SlotTracker(I->getParent()->getParent());
562
563  if (const BasicBlock *BB = dyn_cast<BasicBlock>(V))
564    return new SlotTracker(BB->getParent());
565
566  if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
567    return new SlotTracker(GV->getParent());
568
569  if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(V))
570    return new SlotTracker(GA->getParent());
571
572  if (const Function *Func = dyn_cast<Function>(V))
573    return new SlotTracker(Func);
574
575  return 0;
576}
577
578#if 0
579#define ST_DEBUG(X) cerr << X
580#else
581#define ST_DEBUG(X)
582#endif
583
584// Module level constructor. Causes the contents of the Module (sans functions)
585// to be added to the slot table.
586SlotTracker::SlotTracker(const Module *M)
587  : TheModule(M), TheFunction(0), FunctionProcessed(false), TheMDNode(0),
588    mNext(0), fNext(0),  mdnNext(0) {
589}
590
591// Function level constructor. Causes the contents of the Module and the one
592// function provided to be added to the slot table.
593SlotTracker::SlotTracker(const Function *F)
594  : TheModule(F ? F->getParent() : 0), TheFunction(F), FunctionProcessed(false),
595    TheMDNode(0), mNext(0), fNext(0) {
596}
597
598// Constructor to handle single MDNode.
599SlotTracker::SlotTracker(const MDNode *C)
600  : TheModule(0), TheFunction(0), FunctionProcessed(false), TheMDNode(C),
601    mNext(0), fNext(0),  mdnNext(0) {
602}
603
604inline void SlotTracker::initialize() {
605  if (TheModule) {
606    processModule();
607    TheModule = 0; ///< Prevent re-processing next time we're called.
608  }
609
610  if (TheFunction && !FunctionProcessed)
611    processFunction();
612
613  if (TheMDNode)
614    processMDNode();
615}
616
617// Iterate through all the global variables, functions, and global
618// variable initializers and create slots for them.
619void SlotTracker::processModule() {
620  ST_DEBUG("begin processModule!\n");
621
622  // Add all of the unnamed global variables to the value table.
623  for (Module::const_global_iterator I = TheModule->global_begin(),
624         E = TheModule->global_end(); I != E; ++I) {
625    if (!I->hasName())
626      CreateModuleSlot(I);
627    if (I->hasInitializer()) {
628      if (MDNode *N = dyn_cast<MDNode>(I->getInitializer()))
629        CreateMetadataSlot(N);
630    }
631  }
632
633  // Add all the unnamed functions to the table.
634  for (Module::const_iterator I = TheModule->begin(), E = TheModule->end();
635       I != E; ++I)
636    if (!I->hasName())
637      CreateModuleSlot(I);
638
639  ST_DEBUG("end processModule!\n");
640}
641
642// Process the arguments, basic blocks, and instructions  of a function.
643void SlotTracker::processFunction() {
644  ST_DEBUG("begin processFunction!\n");
645  fNext = 0;
646
647  // Add all the function arguments with no names.
648  for(Function::const_arg_iterator AI = TheFunction->arg_begin(),
649      AE = TheFunction->arg_end(); AI != AE; ++AI)
650    if (!AI->hasName())
651      CreateFunctionSlot(AI);
652
653  ST_DEBUG("Inserting Instructions:\n");
654
655  // Add all of the basic blocks and instructions with no names.
656  for (Function::const_iterator BB = TheFunction->begin(),
657       E = TheFunction->end(); BB != E; ++BB) {
658    if (!BB->hasName())
659      CreateFunctionSlot(BB);
660    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E;
661         ++I) {
662      if (I->getType() != Type::VoidTy && !I->hasName())
663        CreateFunctionSlot(I);
664      for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
665        if (MDNode *N = dyn_cast<MDNode>(I->getOperand(i)))
666          CreateMetadataSlot(N);
667    }
668  }
669
670  FunctionProcessed = true;
671
672  ST_DEBUG("end processFunction!\n");
673}
674
675/// processMDNode - Process TheMDNode.
676void SlotTracker::processMDNode() {
677  ST_DEBUG("begin processMDNode!\n");
678  mdnNext = 0;
679  CreateMetadataSlot(TheMDNode);
680  TheMDNode = 0;
681  ST_DEBUG("end processMDNode!\n");
682}
683
684/// Clean up after incorporating a function. This is the only way to get out of
685/// the function incorporation state that affects get*Slot/Create*Slot. Function
686/// incorporation state is indicated by TheFunction != 0.
687void SlotTracker::purgeFunction() {
688  ST_DEBUG("begin purgeFunction!\n");
689  fMap.clear(); // Simply discard the function level map
690  TheFunction = 0;
691  FunctionProcessed = false;
692  ST_DEBUG("end purgeFunction!\n");
693}
694
695/// getGlobalSlot - Get the slot number of a global value.
696int SlotTracker::getGlobalSlot(const GlobalValue *V) {
697  // Check for uninitialized state and do lazy initialization.
698  initialize();
699
700  // Find the type plane in the module map
701  ValueMap::iterator MI = mMap.find(V);
702  return MI == mMap.end() ? -1 : (int)MI->second;
703}
704
705/// getGlobalSlot - Get the slot number of a MDNode.
706int SlotTracker::getMetadataSlot(const MDNode *N) {
707  // Check for uninitialized state and do lazy initialization.
708  initialize();
709
710  // Find the type plane in the module map
711  ValueMap::iterator MI = mdnMap.find(N);
712  return MI == mdnMap.end() ? -1 : (int)MI->second;
713}
714
715
716/// getLocalSlot - Get the slot number for a value that is local to a function.
717int SlotTracker::getLocalSlot(const Value *V) {
718  assert(!isa<Constant>(V) && "Can't get a constant or global slot with this!");
719
720  // Check for uninitialized state and do lazy initialization.
721  initialize();
722
723  ValueMap::iterator FI = fMap.find(V);
724  return FI == fMap.end() ? -1 : (int)FI->second;
725}
726
727
728/// CreateModuleSlot - Insert the specified GlobalValue* into the slot table.
729void SlotTracker::CreateModuleSlot(const GlobalValue *V) {
730  assert(V && "Can't insert a null Value into SlotTracker!");
731  assert(V->getType() != Type::VoidTy && "Doesn't need a slot!");
732  assert(!V->hasName() && "Doesn't need a slot!");
733
734  unsigned DestSlot = mNext++;
735  mMap[V] = DestSlot;
736
737  ST_DEBUG("  Inserting value [" << V->getType() << "] = " << V << " slot=" <<
738           DestSlot << " [");
739  // G = Global, F = Function, A = Alias, o = other
740  ST_DEBUG((isa<GlobalVariable>(V) ? 'G' :
741            (isa<Function>(V) ? 'F' :
742             (isa<GlobalAlias>(V) ? 'A' : 'o'))) << "]\n");
743}
744
745/// CreateSlot - Create a new slot for the specified value if it has no name.
746void SlotTracker::CreateFunctionSlot(const Value *V) {
747  assert(V->getType() != Type::VoidTy && !V->hasName() &&
748         "Doesn't need a slot!");
749
750  unsigned DestSlot = fNext++;
751  fMap[V] = DestSlot;
752
753  // G = Global, F = Function, o = other
754  ST_DEBUG("  Inserting value [" << V->getType() << "] = " << V << " slot=" <<
755           DestSlot << " [o]\n");
756}
757
758/// CreateModuleSlot - Insert the specified MDNode* into the slot table.
759void SlotTracker::CreateMetadataSlot(const MDNode *N) {
760  assert(N && "Can't insert a null Value into SlotTracker!");
761
762  ValueMap::iterator I = mdnMap.find(N);
763  if (I != mdnMap.end())
764    return;
765
766  unsigned DestSlot = mdnNext++;
767  mdnMap[N] = DestSlot;
768
769  for (MDNode::const_elem_iterator MDI = N->elem_begin(),
770         MDE = N->elem_end(); MDI != MDE; ++MDI) {
771    const Value *TV = *MDI;
772    if (TV)
773      if (const MDNode *N2 = dyn_cast<MDNode>(TV))
774        CreateMetadataSlot(N2);
775  }
776}
777
778//===----------------------------------------------------------------------===//
779// AsmWriter Implementation
780//===----------------------------------------------------------------------===//
781
782static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
783                                   TypePrinting &TypePrinter,
784                                   SlotTracker *Machine);
785
786
787
788static const char *getPredicateText(unsigned predicate) {
789  const char * pred = "unknown";
790  switch (predicate) {
791    case FCmpInst::FCMP_FALSE: pred = "false"; break;
792    case FCmpInst::FCMP_OEQ:   pred = "oeq"; break;
793    case FCmpInst::FCMP_OGT:   pred = "ogt"; break;
794    case FCmpInst::FCMP_OGE:   pred = "oge"; break;
795    case FCmpInst::FCMP_OLT:   pred = "olt"; break;
796    case FCmpInst::FCMP_OLE:   pred = "ole"; break;
797    case FCmpInst::FCMP_ONE:   pred = "one"; break;
798    case FCmpInst::FCMP_ORD:   pred = "ord"; break;
799    case FCmpInst::FCMP_UNO:   pred = "uno"; break;
800    case FCmpInst::FCMP_UEQ:   pred = "ueq"; break;
801    case FCmpInst::FCMP_UGT:   pred = "ugt"; break;
802    case FCmpInst::FCMP_UGE:   pred = "uge"; break;
803    case FCmpInst::FCMP_ULT:   pred = "ult"; break;
804    case FCmpInst::FCMP_ULE:   pred = "ule"; break;
805    case FCmpInst::FCMP_UNE:   pred = "une"; break;
806    case FCmpInst::FCMP_TRUE:  pred = "true"; break;
807    case ICmpInst::ICMP_EQ:    pred = "eq"; break;
808    case ICmpInst::ICMP_NE:    pred = "ne"; break;
809    case ICmpInst::ICMP_SGT:   pred = "sgt"; break;
810    case ICmpInst::ICMP_SGE:   pred = "sge"; break;
811    case ICmpInst::ICMP_SLT:   pred = "slt"; break;
812    case ICmpInst::ICMP_SLE:   pred = "sle"; break;
813    case ICmpInst::ICMP_UGT:   pred = "ugt"; break;
814    case ICmpInst::ICMP_UGE:   pred = "uge"; break;
815    case ICmpInst::ICMP_ULT:   pred = "ult"; break;
816    case ICmpInst::ICMP_ULE:   pred = "ule"; break;
817  }
818  return pred;
819}
820
821static void WriteMDNodes(raw_ostream &Out, TypePrinting &TypePrinter,
822                         SlotTracker &Machine) {
823  SmallVector<const MDNode *, 16> Nodes;
824  Nodes.resize(Machine.mdnSize());
825  for (SlotTracker::ValueMap::iterator I =
826         Machine.mdnBegin(), E = Machine.mdnEnd(); I != E; ++I)
827    Nodes[I->second] = cast<MDNode>(I->first);
828
829  for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
830    Out << '!' << i << " = metadata ";
831    const MDNode *Node = Nodes[i];
832    Out << "!{";
833    for (MDNode::const_elem_iterator NI = Node->elem_begin(),
834           NE = Node->elem_end(); NI != NE;) {
835      const Value *V = *NI;
836      if (!V)
837        Out << "null";
838      else if (const MDNode *N = dyn_cast<MDNode>(V)) {
839        Out << "metadata ";
840        Out << '!' << Machine.getMetadataSlot(N);
841      }
842      else {
843        TypePrinter.print((*NI)->getType(), Out);
844        Out << ' ';
845        WriteAsOperandInternal(Out, *NI, TypePrinter, &Machine);
846      }
847      if (++NI != NE)
848        Out << ", ";
849    }
850    Out << "}\n";
851  }
852}
853
854static void WriteConstantInt(raw_ostream &Out, const Constant *CV,
855                             TypePrinting &TypePrinter, SlotTracker *Machine) {
856  if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) {
857    if (CI->getType() == Type::Int1Ty) {
858      Out << (CI->getZExtValue() ? "true" : "false");
859      return;
860    }
861    Out << CI->getValue();
862    return;
863  }
864
865  if (const ConstantFP *CFP = dyn_cast<ConstantFP>(CV)) {
866    if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEdouble ||
867        &CFP->getValueAPF().getSemantics() == &APFloat::IEEEsingle) {
868      // We would like to output the FP constant value in exponential notation,
869      // but we cannot do this if doing so will lose precision.  Check here to
870      // make sure that we only output it in exponential format if we can parse
871      // the value back and get the same value.
872      //
873      bool ignored;
874      bool isDouble = &CFP->getValueAPF().getSemantics()==&APFloat::IEEEdouble;
875      double Val = isDouble ? CFP->getValueAPF().convertToDouble() :
876                              CFP->getValueAPF().convertToFloat();
877      std::string StrVal = ftostr(CFP->getValueAPF());
878
879      // Check to make sure that the stringized number is not some string like
880      // "Inf" or NaN, that atof will accept, but the lexer will not.  Check
881      // that the string matches the "[-+]?[0-9]" regex.
882      //
883      if ((StrVal[0] >= '0' && StrVal[0] <= '9') ||
884          ((StrVal[0] == '-' || StrVal[0] == '+') &&
885           (StrVal[1] >= '0' && StrVal[1] <= '9'))) {
886        // Reparse stringized version!
887        if (atof(StrVal.c_str()) == Val) {
888          Out << StrVal;
889          return;
890        }
891      }
892      // Otherwise we could not reparse it to exactly the same value, so we must
893      // output the string in hexadecimal format!  Note that loading and storing
894      // floating point types changes the bits of NaNs on some hosts, notably
895      // x86, so we must not use these types.
896      assert(sizeof(double) == sizeof(uint64_t) &&
897             "assuming that double is 64 bits!");
898      char Buffer[40];
899      APFloat apf = CFP->getValueAPF();
900      // Floats are represented in ASCII IR as double, convert.
901      if (!isDouble)
902        apf.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven,
903                          &ignored);
904      Out << "0x" <<
905              utohex_buffer(uint64_t(apf.bitcastToAPInt().getZExtValue()),
906                            Buffer+40);
907      return;
908    }
909
910    // Some form of long double.  These appear as a magic letter identifying
911    // the type, then a fixed number of hex digits.
912    Out << "0x";
913    if (&CFP->getValueAPF().getSemantics() == &APFloat::x87DoubleExtended) {
914      Out << 'K';
915      // api needed to prevent premature destruction
916      APInt api = CFP->getValueAPF().bitcastToAPInt();
917      const uint64_t* p = api.getRawData();
918      uint64_t word = p[1];
919      int shiftcount=12;
920      int width = api.getBitWidth();
921      for (int j=0; j<width; j+=4, shiftcount-=4) {
922        unsigned int nibble = (word>>shiftcount) & 15;
923        if (nibble < 10)
924          Out << (unsigned char)(nibble + '0');
925        else
926          Out << (unsigned char)(nibble - 10 + 'A');
927        if (shiftcount == 0 && j+4 < width) {
928          word = *p;
929          shiftcount = 64;
930          if (width-j-4 < 64)
931            shiftcount = width-j-4;
932        }
933      }
934      return;
935    } else if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEquad)
936      Out << 'L';
937    else if (&CFP->getValueAPF().getSemantics() == &APFloat::PPCDoubleDouble)
938      Out << 'M';
939    else
940      llvm_unreachable("Unsupported floating point type");
941    // api needed to prevent premature destruction
942    APInt api = CFP->getValueAPF().bitcastToAPInt();
943    const uint64_t* p = api.getRawData();
944    uint64_t word = *p;
945    int shiftcount=60;
946    int width = api.getBitWidth();
947    for (int j=0; j<width; j+=4, shiftcount-=4) {
948      unsigned int nibble = (word>>shiftcount) & 15;
949      if (nibble < 10)
950        Out << (unsigned char)(nibble + '0');
951      else
952        Out << (unsigned char)(nibble - 10 + 'A');
953      if (shiftcount == 0 && j+4 < width) {
954        word = *(++p);
955        shiftcount = 64;
956        if (width-j-4 < 64)
957          shiftcount = width-j-4;
958      }
959    }
960    return;
961  }
962
963  if (isa<ConstantAggregateZero>(CV)) {
964    Out << "zeroinitializer";
965    return;
966  }
967
968  if (const ConstantArray *CA = dyn_cast<ConstantArray>(CV)) {
969    // As a special case, print the array as a string if it is an array of
970    // i8 with ConstantInt values.
971    //
972    const Type *ETy = CA->getType()->getElementType();
973    if (CA->isString()) {
974      Out << "c\"";
975      PrintEscapedString(CA->getAsString(), Out);
976      Out << '"';
977    } else {                // Cannot output in string format...
978      Out << '[';
979      if (CA->getNumOperands()) {
980        TypePrinter.print(ETy, Out);
981        Out << ' ';
982        WriteAsOperandInternal(Out, CA->getOperand(0),
983                               TypePrinter, Machine);
984        for (unsigned i = 1, e = CA->getNumOperands(); i != e; ++i) {
985          Out << ", ";
986          TypePrinter.print(ETy, Out);
987          Out << ' ';
988          WriteAsOperandInternal(Out, CA->getOperand(i), TypePrinter, Machine);
989        }
990      }
991      Out << ']';
992    }
993    return;
994  }
995
996  if (const ConstantStruct *CS = dyn_cast<ConstantStruct>(CV)) {
997    if (CS->getType()->isPacked())
998      Out << '<';
999    Out << '{';
1000    unsigned N = CS->getNumOperands();
1001    if (N) {
1002      Out << ' ';
1003      TypePrinter.print(CS->getOperand(0)->getType(), Out);
1004      Out << ' ';
1005
1006      WriteAsOperandInternal(Out, CS->getOperand(0), TypePrinter, Machine);
1007
1008      for (unsigned i = 1; i < N; i++) {
1009        Out << ", ";
1010        TypePrinter.print(CS->getOperand(i)->getType(), Out);
1011        Out << ' ';
1012
1013        WriteAsOperandInternal(Out, CS->getOperand(i), TypePrinter, Machine);
1014      }
1015      Out << ' ';
1016    }
1017
1018    Out << '}';
1019    if (CS->getType()->isPacked())
1020      Out << '>';
1021    return;
1022  }
1023
1024  if (const ConstantVector *CP = dyn_cast<ConstantVector>(CV)) {
1025    const Type *ETy = CP->getType()->getElementType();
1026    assert(CP->getNumOperands() > 0 &&
1027           "Number of operands for a PackedConst must be > 0");
1028    Out << '<';
1029    TypePrinter.print(ETy, Out);
1030    Out << ' ';
1031    WriteAsOperandInternal(Out, CP->getOperand(0), TypePrinter, Machine);
1032    for (unsigned i = 1, e = CP->getNumOperands(); i != e; ++i) {
1033      Out << ", ";
1034      TypePrinter.print(ETy, Out);
1035      Out << ' ';
1036      WriteAsOperandInternal(Out, CP->getOperand(i), TypePrinter, Machine);
1037    }
1038    Out << '>';
1039    return;
1040  }
1041
1042  if (isa<ConstantPointerNull>(CV)) {
1043    Out << "null";
1044    return;
1045  }
1046
1047  if (isa<UndefValue>(CV)) {
1048    Out << "undef";
1049    return;
1050  }
1051
1052  if (const MDString *S = dyn_cast<MDString>(CV)) {
1053    Out << "!\"";
1054    PrintEscapedString(S->begin(), S->size(), Out);
1055    Out << '"';
1056    return;
1057  }
1058
1059  if (const MDNode *Node = dyn_cast<MDNode>(CV)) {
1060    Out << "!" << Machine->getMetadataSlot(Node);
1061    return;
1062  }
1063
1064  if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) {
1065    Out << CE->getOpcodeName();
1066    if (CE->isCompare())
1067      Out << ' ' << getPredicateText(CE->getPredicate());
1068    Out << " (";
1069
1070    for (User::const_op_iterator OI=CE->op_begin(); OI != CE->op_end(); ++OI) {
1071      TypePrinter.print((*OI)->getType(), Out);
1072      Out << ' ';
1073      WriteAsOperandInternal(Out, *OI, TypePrinter, Machine);
1074      if (OI+1 != CE->op_end())
1075        Out << ", ";
1076    }
1077
1078    if (CE->hasIndices()) {
1079      const SmallVector<unsigned, 4> &Indices = CE->getIndices();
1080      for (unsigned i = 0, e = Indices.size(); i != e; ++i)
1081        Out << ", " << Indices[i];
1082    }
1083
1084    if (CE->isCast()) {
1085      Out << " to ";
1086      TypePrinter.print(CE->getType(), Out);
1087    }
1088
1089    Out << ')';
1090    return;
1091  }
1092
1093  Out << "<placeholder or erroneous Constant>";
1094}
1095
1096
1097/// WriteAsOperand - Write the name of the specified value out to the specified
1098/// ostream.  This can be useful when you just want to print int %reg126, not
1099/// the whole instruction that generated it.
1100///
1101static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
1102                                   TypePrinting &TypePrinter,
1103                                   SlotTracker *Machine) {
1104  if (V->hasName()) {
1105    PrintLLVMName(Out, V);
1106    return;
1107  }
1108
1109  const Constant *CV = dyn_cast<Constant>(V);
1110  if (CV && !isa<GlobalValue>(CV)) {
1111    WriteConstantInt(Out, CV, TypePrinter, Machine);
1112    return;
1113  }
1114
1115  if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
1116    Out << "asm ";
1117    if (IA->hasSideEffects())
1118      Out << "sideeffect ";
1119    Out << '"';
1120    PrintEscapedString(IA->getAsmString(), Out);
1121    Out << "\", \"";
1122    PrintEscapedString(IA->getConstraintString(), Out);
1123    Out << '"';
1124    return;
1125  }
1126
1127  char Prefix = '%';
1128  int Slot;
1129  if (Machine) {
1130    if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
1131      Slot = Machine->getGlobalSlot(GV);
1132      Prefix = '@';
1133    } else {
1134      Slot = Machine->getLocalSlot(V);
1135    }
1136  } else {
1137    Machine = createSlotTracker(V);
1138    if (Machine) {
1139      if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
1140        Slot = Machine->getGlobalSlot(GV);
1141        Prefix = '@';
1142      } else {
1143        Slot = Machine->getLocalSlot(V);
1144      }
1145    } else {
1146      Slot = -1;
1147    }
1148    delete Machine;
1149  }
1150
1151  if (Slot != -1)
1152    Out << Prefix << Slot;
1153  else
1154    Out << "<badref>";
1155}
1156
1157/// WriteAsOperand - Write the name of the specified value out to the specified
1158/// ostream.  This can be useful when you just want to print int %reg126, not
1159/// the whole instruction that generated it.
1160///
1161void llvm::WriteAsOperand(std::ostream &Out, const Value *V, bool PrintType,
1162                          const Module *Context) {
1163  raw_os_ostream OS(Out);
1164  WriteAsOperand(OS, V, PrintType, Context);
1165}
1166
1167void llvm::WriteAsOperand(raw_ostream &Out, const Value *V, bool PrintType,
1168                          const Module *Context) {
1169  if (Context == 0) Context = getModuleFromVal(V);
1170
1171  TypePrinting TypePrinter;
1172  std::vector<const Type*> NumberedTypes;
1173  AddModuleTypesToPrinter(TypePrinter, NumberedTypes, Context);
1174  if (PrintType) {
1175    TypePrinter.print(V->getType(), Out);
1176    Out << ' ';
1177  }
1178
1179  WriteAsOperandInternal(Out, V, TypePrinter, 0);
1180}
1181
1182
1183namespace {
1184
1185class AssemblyWriter {
1186  raw_ostream &Out;
1187  SlotTracker &Machine;
1188  const Module *TheModule;
1189  TypePrinting TypePrinter;
1190  AssemblyAnnotationWriter *AnnotationWriter;
1191  std::vector<const Type*> NumberedTypes;
1192
1193  // Each MDNode is assigned unique MetadataIDNo.
1194  std::map<const MDNode *, unsigned> MDNodes;
1195  unsigned MetadataIDNo;
1196public:
1197  inline AssemblyWriter(raw_ostream &o, SlotTracker &Mac, const Module *M,
1198                        AssemblyAnnotationWriter *AAW)
1199    : Out(o), Machine(Mac), TheModule(M), AnnotationWriter(AAW), MetadataIDNo(0) {
1200    AddModuleTypesToPrinter(TypePrinter, NumberedTypes, M);
1201  }
1202
1203  void write(const Module *M) { printModule(M); }
1204
1205  void write(const GlobalValue *G) {
1206    if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(G))
1207      printGlobal(GV);
1208    else if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(G))
1209      printAlias(GA);
1210    else if (const Function *F = dyn_cast<Function>(G))
1211      printFunction(F);
1212    else
1213      llvm_unreachable("Unknown global");
1214  }
1215
1216  void write(const BasicBlock *BB)    { printBasicBlock(BB);  }
1217  void write(const Instruction *I)    { printInstruction(*I); }
1218
1219  void writeOperand(const Value *Op, bool PrintType);
1220  void writeParamOperand(const Value *Operand, Attributes Attrs);
1221
1222  const Module* getModule() { return TheModule; }
1223
1224private:
1225  void printModule(const Module *M);
1226  void printTypeSymbolTable(const TypeSymbolTable &ST);
1227  void printGlobal(const GlobalVariable *GV);
1228  void printAlias(const GlobalAlias *GV);
1229  void printFunction(const Function *F);
1230  void printArgument(const Argument *FA, Attributes Attrs);
1231  void printBasicBlock(const BasicBlock *BB);
1232  void printInstruction(const Instruction &I);
1233
1234  // printInfoComment - Print a little comment after the instruction indicating
1235  // which slot it occupies.
1236  void printInfoComment(const Value &V);
1237};
1238}  // end of anonymous namespace
1239
1240
1241void AssemblyWriter::writeOperand(const Value *Operand, bool PrintType) {
1242  if (Operand == 0) {
1243    Out << "<null operand!>";
1244  } else {
1245    if (PrintType) {
1246      TypePrinter.print(Operand->getType(), Out);
1247      Out << ' ';
1248    }
1249    WriteAsOperandInternal(Out, Operand, TypePrinter, &Machine);
1250  }
1251}
1252
1253void AssemblyWriter::writeParamOperand(const Value *Operand,
1254                                       Attributes Attrs) {
1255  if (Operand == 0) {
1256    Out << "<null operand!>";
1257  } else {
1258    // Print the type
1259    TypePrinter.print(Operand->getType(), Out);
1260    // Print parameter attributes list
1261    if (Attrs != Attribute::None)
1262      Out << ' ' << Attribute::getAsString(Attrs);
1263    Out << ' ';
1264    // Print the operand
1265    WriteAsOperandInternal(Out, Operand, TypePrinter, &Machine);
1266  }
1267}
1268
1269void AssemblyWriter::printModule(const Module *M) {
1270  if (!M->getModuleIdentifier().empty() &&
1271      // Don't print the ID if it will start a new line (which would
1272      // require a comment char before it).
1273      M->getModuleIdentifier().find('\n') == std::string::npos)
1274    Out << "; ModuleID = '" << M->getModuleIdentifier() << "'\n";
1275
1276  if (!M->getDataLayout().empty())
1277    Out << "target datalayout = \"" << M->getDataLayout() << "\"\n";
1278  if (!M->getTargetTriple().empty())
1279    Out << "target triple = \"" << M->getTargetTriple() << "\"\n";
1280
1281  if (!M->getModuleInlineAsm().empty()) {
1282    // Split the string into lines, to make it easier to read the .ll file.
1283    std::string Asm = M->getModuleInlineAsm();
1284    size_t CurPos = 0;
1285    size_t NewLine = Asm.find_first_of('\n', CurPos);
1286    while (NewLine != std::string::npos) {
1287      // We found a newline, print the portion of the asm string from the
1288      // last newline up to this newline.
1289      Out << "module asm \"";
1290      PrintEscapedString(std::string(Asm.begin()+CurPos, Asm.begin()+NewLine),
1291                         Out);
1292      Out << "\"\n";
1293      CurPos = NewLine+1;
1294      NewLine = Asm.find_first_of('\n', CurPos);
1295    }
1296    Out << "module asm \"";
1297    PrintEscapedString(std::string(Asm.begin()+CurPos, Asm.end()), Out);
1298    Out << "\"\n";
1299  }
1300
1301  // Loop over the dependent libraries and emit them.
1302  Module::lib_iterator LI = M->lib_begin();
1303  Module::lib_iterator LE = M->lib_end();
1304  if (LI != LE) {
1305    Out << "deplibs = [ ";
1306    while (LI != LE) {
1307      Out << '"' << *LI << '"';
1308      ++LI;
1309      if (LI != LE)
1310        Out << ", ";
1311    }
1312    Out << " ]\n";
1313  }
1314
1315  // Loop over the symbol table, emitting all id'd types.
1316  printTypeSymbolTable(M->getTypeSymbolTable());
1317
1318  for (Module::const_global_iterator I = M->global_begin(), E = M->global_end();
1319       I != E; ++I)
1320    printGlobal(I);
1321
1322  // Output all aliases.
1323  if (!M->alias_empty()) Out << "\n";
1324  for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end();
1325       I != E; ++I)
1326    printAlias(I);
1327
1328  // Output all of the functions.
1329  for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
1330    printFunction(I);
1331
1332  WriteMDNodes(Out, TypePrinter, Machine);
1333}
1334
1335static void PrintLinkage(GlobalValue::LinkageTypes LT, raw_ostream &Out) {
1336  switch (LT) {
1337  case GlobalValue::ExternalLinkage: break;
1338  case GlobalValue::PrivateLinkage:       Out << "private ";        break;
1339  case GlobalValue::LinkerPrivateLinkage: Out << "linker_private "; break;
1340  case GlobalValue::InternalLinkage:      Out << "internal ";       break;
1341  case GlobalValue::LinkOnceAnyLinkage:   Out << "linkonce ";       break;
1342  case GlobalValue::LinkOnceODRLinkage:   Out << "linkonce_odr ";   break;
1343  case GlobalValue::WeakAnyLinkage:       Out << "weak ";           break;
1344  case GlobalValue::WeakODRLinkage:       Out << "weak_odr ";       break;
1345  case GlobalValue::CommonLinkage:        Out << "common ";         break;
1346  case GlobalValue::AppendingLinkage:     Out << "appending ";      break;
1347  case GlobalValue::DLLImportLinkage:     Out << "dllimport ";      break;
1348  case GlobalValue::DLLExportLinkage:     Out << "dllexport ";      break;
1349  case GlobalValue::ExternalWeakLinkage:  Out << "extern_weak ";    break;
1350  case GlobalValue::AvailableExternallyLinkage:
1351    Out << "available_externally ";
1352    break;
1353  case GlobalValue::GhostLinkage:
1354    llvm_unreachable("GhostLinkage not allowed in AsmWriter!");
1355  }
1356}
1357
1358
1359static void PrintVisibility(GlobalValue::VisibilityTypes Vis,
1360                            raw_ostream &Out) {
1361  switch (Vis) {
1362  default: llvm_unreachable("Invalid visibility style!");
1363  case GlobalValue::DefaultVisibility: break;
1364  case GlobalValue::HiddenVisibility:    Out << "hidden "; break;
1365  case GlobalValue::ProtectedVisibility: Out << "protected "; break;
1366  }
1367}
1368
1369void AssemblyWriter::printGlobal(const GlobalVariable *GV) {
1370  if (GV->hasName()) {
1371    PrintLLVMName(Out, GV);
1372    Out << " = ";
1373  }
1374
1375  if (!GV->hasInitializer() && GV->hasExternalLinkage())
1376    Out << "external ";
1377
1378  PrintLinkage(GV->getLinkage(), Out);
1379  PrintVisibility(GV->getVisibility(), Out);
1380
1381  if (GV->isThreadLocal()) Out << "thread_local ";
1382  if (unsigned AddressSpace = GV->getType()->getAddressSpace())
1383    Out << "addrspace(" << AddressSpace << ") ";
1384  Out << (GV->isConstant() ? "constant " : "global ");
1385  TypePrinter.print(GV->getType()->getElementType(), Out);
1386
1387  if (GV->hasInitializer()) {
1388    Out << ' ';
1389    writeOperand(GV->getInitializer(), false);
1390  }
1391
1392  if (GV->hasSection())
1393    Out << ", section \"" << GV->getSection() << '"';
1394  if (GV->getAlignment())
1395    Out << ", align " << GV->getAlignment();
1396
1397  printInfoComment(*GV);
1398  Out << '\n';
1399}
1400
1401void AssemblyWriter::printAlias(const GlobalAlias *GA) {
1402  // Don't crash when dumping partially built GA
1403  if (!GA->hasName())
1404    Out << "<<nameless>> = ";
1405  else {
1406    PrintLLVMName(Out, GA);
1407    Out << " = ";
1408  }
1409  PrintVisibility(GA->getVisibility(), Out);
1410
1411  Out << "alias ";
1412
1413  PrintLinkage(GA->getLinkage(), Out);
1414
1415  const Constant *Aliasee = GA->getAliasee();
1416
1417  if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(Aliasee)) {
1418    TypePrinter.print(GV->getType(), Out);
1419    Out << ' ';
1420    PrintLLVMName(Out, GV);
1421  } else if (const Function *F = dyn_cast<Function>(Aliasee)) {
1422    TypePrinter.print(F->getFunctionType(), Out);
1423    Out << "* ";
1424
1425    WriteAsOperandInternal(Out, F, TypePrinter, &Machine);
1426  } else if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(Aliasee)) {
1427    TypePrinter.print(GA->getType(), Out);
1428    Out << ' ';
1429    PrintLLVMName(Out, GA);
1430  } else {
1431    const ConstantExpr *CE = cast<ConstantExpr>(Aliasee);
1432    // The only valid GEP is an all zero GEP.
1433    assert((CE->getOpcode() == Instruction::BitCast ||
1434            CE->getOpcode() == Instruction::GetElementPtr) &&
1435           "Unsupported aliasee");
1436    writeOperand(CE, false);
1437  }
1438
1439  printInfoComment(*GA);
1440  Out << '\n';
1441}
1442
1443void AssemblyWriter::printTypeSymbolTable(const TypeSymbolTable &ST) {
1444  // Emit all numbered types.
1445  for (unsigned i = 0, e = NumberedTypes.size(); i != e; ++i) {
1446    Out << "\ttype ";
1447
1448    // Make sure we print out at least one level of the type structure, so
1449    // that we do not get %2 = type %2
1450    TypePrinter.printAtLeastOneLevel(NumberedTypes[i], Out);
1451    Out << "\t\t; type %" << i << '\n';
1452  }
1453
1454  // Print the named types.
1455  for (TypeSymbolTable::const_iterator TI = ST.begin(), TE = ST.end();
1456       TI != TE; ++TI) {
1457    Out << '\t';
1458    PrintLLVMName(Out, &TI->first[0], TI->first.size(), LocalPrefix);
1459    Out << " = type ";
1460
1461    // Make sure we print out at least one level of the type structure, so
1462    // that we do not get %FILE = type %FILE
1463    TypePrinter.printAtLeastOneLevel(TI->second, Out);
1464    Out << '\n';
1465  }
1466}
1467
1468/// printFunction - Print all aspects of a function.
1469///
1470void AssemblyWriter::printFunction(const Function *F) {
1471  // Print out the return type and name.
1472  Out << '\n';
1473
1474  if (AnnotationWriter) AnnotationWriter->emitFunctionAnnot(F, Out);
1475
1476  if (F->isDeclaration())
1477    Out << "declare ";
1478  else
1479    Out << "define ";
1480
1481  PrintLinkage(F->getLinkage(), Out);
1482  PrintVisibility(F->getVisibility(), Out);
1483
1484  // Print the calling convention.
1485  switch (F->getCallingConv()) {
1486  case CallingConv::C: break;   // default
1487  case CallingConv::Fast:         Out << "fastcc "; break;
1488  case CallingConv::Cold:         Out << "coldcc "; break;
1489  case CallingConv::X86_StdCall:  Out << "x86_stdcallcc "; break;
1490  case CallingConv::X86_FastCall: Out << "x86_fastcallcc "; break;
1491  case CallingConv::ARM_APCS:     Out << "arm_apcscc "; break;
1492  case CallingConv::ARM_AAPCS:    Out << "arm_aapcscc "; break;
1493  case CallingConv::ARM_AAPCS_VFP:Out << "arm_aapcs_vfpcc "; break;
1494  default: Out << "cc" << F->getCallingConv() << " "; break;
1495  }
1496
1497  const FunctionType *FT = F->getFunctionType();
1498  const AttrListPtr &Attrs = F->getAttributes();
1499  Attributes RetAttrs = Attrs.getRetAttributes();
1500  if (RetAttrs != Attribute::None)
1501    Out <<  Attribute::getAsString(Attrs.getRetAttributes()) << ' ';
1502  TypePrinter.print(F->getReturnType(), Out);
1503  Out << ' ';
1504  WriteAsOperandInternal(Out, F, TypePrinter, &Machine);
1505  Out << '(';
1506  Machine.incorporateFunction(F);
1507
1508  // Loop over the arguments, printing them...
1509
1510  unsigned Idx = 1;
1511  if (!F->isDeclaration()) {
1512    // If this isn't a declaration, print the argument names as well.
1513    for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end();
1514         I != E; ++I) {
1515      // Insert commas as we go... the first arg doesn't get a comma
1516      if (I != F->arg_begin()) Out << ", ";
1517      printArgument(I, Attrs.getParamAttributes(Idx));
1518      Idx++;
1519    }
1520  } else {
1521    // Otherwise, print the types from the function type.
1522    for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
1523      // Insert commas as we go... the first arg doesn't get a comma
1524      if (i) Out << ", ";
1525
1526      // Output type...
1527      TypePrinter.print(FT->getParamType(i), Out);
1528
1529      Attributes ArgAttrs = Attrs.getParamAttributes(i+1);
1530      if (ArgAttrs != Attribute::None)
1531        Out << ' ' << Attribute::getAsString(ArgAttrs);
1532    }
1533  }
1534
1535  // Finish printing arguments...
1536  if (FT->isVarArg()) {
1537    if (FT->getNumParams()) Out << ", ";
1538    Out << "...";  // Output varargs portion of signature!
1539  }
1540  Out << ')';
1541  Attributes FnAttrs = Attrs.getFnAttributes();
1542  if (FnAttrs != Attribute::None)
1543    Out << ' ' << Attribute::getAsString(Attrs.getFnAttributes());
1544  if (F->hasSection())
1545    Out << " section \"" << F->getSection() << '"';
1546  if (F->getAlignment())
1547    Out << " align " << F->getAlignment();
1548  if (F->hasGC())
1549    Out << " gc \"" << F->getGC() << '"';
1550  if (F->isDeclaration()) {
1551    Out << "\n";
1552  } else {
1553    Out << " {";
1554
1555    // Output all of its basic blocks... for the function
1556    for (Function::const_iterator I = F->begin(), E = F->end(); I != E; ++I)
1557      printBasicBlock(I);
1558
1559    Out << "}\n";
1560  }
1561
1562  Machine.purgeFunction();
1563}
1564
1565/// printArgument - This member is called for every argument that is passed into
1566/// the function.  Simply print it out
1567///
1568void AssemblyWriter::printArgument(const Argument *Arg,
1569                                   Attributes Attrs) {
1570  // Output type...
1571  TypePrinter.print(Arg->getType(), Out);
1572
1573  // Output parameter attributes list
1574  if (Attrs != Attribute::None)
1575    Out << ' ' << Attribute::getAsString(Attrs);
1576
1577  // Output name, if available...
1578  if (Arg->hasName()) {
1579    Out << ' ';
1580    PrintLLVMName(Out, Arg);
1581  }
1582}
1583
1584/// printBasicBlock - This member is called for each basic block in a method.
1585///
1586void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
1587  if (BB->hasName()) {              // Print out the label if it exists...
1588    Out << "\n";
1589    PrintLLVMName(Out, BB->getNameStart(), BB->getNameLen(), LabelPrefix);
1590    Out << ':';
1591  } else if (!BB->use_empty()) {      // Don't print block # of no uses...
1592    Out << "\n; <label>:";
1593    int Slot = Machine.getLocalSlot(BB);
1594    if (Slot != -1)
1595      Out << Slot;
1596    else
1597      Out << "<badref>";
1598  }
1599
1600  if (BB->getParent() == 0)
1601    Out << "\t\t; Error: Block without parent!";
1602  else if (BB != &BB->getParent()->getEntryBlock()) {  // Not the entry block?
1603    // Output predecessors for the block...
1604    Out << "\t\t;";
1605    pred_const_iterator PI = pred_begin(BB), PE = pred_end(BB);
1606
1607    if (PI == PE) {
1608      Out << " No predecessors!";
1609    } else {
1610      Out << " preds = ";
1611      writeOperand(*PI, false);
1612      for (++PI; PI != PE; ++PI) {
1613        Out << ", ";
1614        writeOperand(*PI, false);
1615      }
1616    }
1617  }
1618
1619  Out << "\n";
1620
1621  if (AnnotationWriter) AnnotationWriter->emitBasicBlockStartAnnot(BB, Out);
1622
1623  // Output all of the instructions in the basic block...
1624  for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
1625    printInstruction(*I);
1626    Out << '\n';
1627  }
1628
1629  if (AnnotationWriter) AnnotationWriter->emitBasicBlockEndAnnot(BB, Out);
1630}
1631
1632
1633/// printInfoComment - Print a little comment after the instruction indicating
1634/// which slot it occupies.
1635///
1636void AssemblyWriter::printInfoComment(const Value &V) {
1637  if (V.getType() != Type::VoidTy) {
1638    Out << "\t\t; <";
1639    TypePrinter.print(V.getType(), Out);
1640    Out << '>';
1641
1642    if (!V.hasName() && !isa<Instruction>(V)) {
1643      int SlotNum;
1644      if (const GlobalValue *GV = dyn_cast<GlobalValue>(&V))
1645        SlotNum = Machine.getGlobalSlot(GV);
1646      else
1647        SlotNum = Machine.getLocalSlot(&V);
1648      if (SlotNum == -1)
1649        Out << ":<badref>";
1650      else
1651        Out << ':' << SlotNum; // Print out the def slot taken.
1652    }
1653    Out << " [#uses=" << V.getNumUses() << ']';  // Output # uses
1654  }
1655}
1656
1657// This member is called for each Instruction in a function..
1658void AssemblyWriter::printInstruction(const Instruction &I) {
1659  if (AnnotationWriter) AnnotationWriter->emitInstructionAnnot(&I, Out);
1660
1661  Out << '\t';
1662
1663  // Print out name if it exists...
1664  if (I.hasName()) {
1665    PrintLLVMName(Out, &I);
1666    Out << " = ";
1667  } else if (I.getType() != Type::VoidTy) {
1668    // Print out the def slot taken.
1669    int SlotNum = Machine.getLocalSlot(&I);
1670    if (SlotNum == -1)
1671      Out << "<badref> = ";
1672    else
1673      Out << '%' << SlotNum << " = ";
1674  }
1675
1676  // If this is a volatile load or store, print out the volatile marker.
1677  if ((isa<LoadInst>(I)  && cast<LoadInst>(I).isVolatile()) ||
1678      (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile())) {
1679      Out << "volatile ";
1680  } else if (isa<CallInst>(I) && cast<CallInst>(I).isTailCall()) {
1681    // If this is a call, check if it's a tail call.
1682    Out << "tail ";
1683  }
1684
1685  // Print out the opcode...
1686  Out << I.getOpcodeName();
1687
1688  // Print out the compare instruction predicates
1689  if (const CmpInst *CI = dyn_cast<CmpInst>(&I))
1690    Out << ' ' << getPredicateText(CI->getPredicate());
1691
1692  // Print out the type of the operands...
1693  const Value *Operand = I.getNumOperands() ? I.getOperand(0) : 0;
1694
1695  // Special case conditional branches to swizzle the condition out to the front
1696  if (isa<BranchInst>(I) && cast<BranchInst>(I).isConditional()) {
1697    BranchInst &BI(cast<BranchInst>(I));
1698    Out << ' ';
1699    writeOperand(BI.getCondition(), true);
1700    Out << ", ";
1701    writeOperand(BI.getSuccessor(0), true);
1702    Out << ", ";
1703    writeOperand(BI.getSuccessor(1), true);
1704
1705  } else if (isa<SwitchInst>(I)) {
1706    // Special case switch statement to get formatting nice and correct...
1707    Out << ' ';
1708    writeOperand(Operand        , true);
1709    Out << ", ";
1710    writeOperand(I.getOperand(1), true);
1711    Out << " [";
1712
1713    for (unsigned op = 2, Eop = I.getNumOperands(); op < Eop; op += 2) {
1714      Out << "\n\t\t";
1715      writeOperand(I.getOperand(op  ), true);
1716      Out << ", ";
1717      writeOperand(I.getOperand(op+1), true);
1718    }
1719    Out << "\n\t]";
1720  } else if (isa<PHINode>(I)) {
1721    Out << ' ';
1722    TypePrinter.print(I.getType(), Out);
1723    Out << ' ';
1724
1725    for (unsigned op = 0, Eop = I.getNumOperands(); op < Eop; op += 2) {
1726      if (op) Out << ", ";
1727      Out << "[ ";
1728      writeOperand(I.getOperand(op  ), false); Out << ", ";
1729      writeOperand(I.getOperand(op+1), false); Out << " ]";
1730    }
1731  } else if (const ExtractValueInst *EVI = dyn_cast<ExtractValueInst>(&I)) {
1732    Out << ' ';
1733    writeOperand(I.getOperand(0), true);
1734    for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
1735      Out << ", " << *i;
1736  } else if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(&I)) {
1737    Out << ' ';
1738    writeOperand(I.getOperand(0), true); Out << ", ";
1739    writeOperand(I.getOperand(1), true);
1740    for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
1741      Out << ", " << *i;
1742  } else if (isa<ReturnInst>(I) && !Operand) {
1743    Out << " void";
1744  } else if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
1745    // Print the calling convention being used.
1746    switch (CI->getCallingConv()) {
1747    case CallingConv::C: break;   // default
1748    case CallingConv::Fast:  Out << " fastcc"; break;
1749    case CallingConv::Cold:  Out << " coldcc"; break;
1750    case CallingConv::X86_StdCall:  Out << " x86_stdcallcc"; break;
1751    case CallingConv::X86_FastCall: Out << " x86_fastcallcc"; break;
1752    case CallingConv::ARM_APCS:     Out << " arm_apcscc "; break;
1753    case CallingConv::ARM_AAPCS:    Out << " arm_aapcscc "; break;
1754    case CallingConv::ARM_AAPCS_VFP:Out << " arm_aapcs_vfpcc "; break;
1755    default: Out << " cc" << CI->getCallingConv(); break;
1756    }
1757
1758    const PointerType    *PTy = cast<PointerType>(Operand->getType());
1759    const FunctionType   *FTy = cast<FunctionType>(PTy->getElementType());
1760    const Type         *RetTy = FTy->getReturnType();
1761    const AttrListPtr &PAL = CI->getAttributes();
1762
1763    if (PAL.getRetAttributes() != Attribute::None)
1764      Out << ' ' << Attribute::getAsString(PAL.getRetAttributes());
1765
1766    // If possible, print out the short form of the call instruction.  We can
1767    // only do this if the first argument is a pointer to a nonvararg function,
1768    // and if the return type is not a pointer to a function.
1769    //
1770    Out << ' ';
1771    if (!FTy->isVarArg() &&
1772        (!isa<PointerType>(RetTy) ||
1773         !isa<FunctionType>(cast<PointerType>(RetTy)->getElementType()))) {
1774      TypePrinter.print(RetTy, Out);
1775      Out << ' ';
1776      writeOperand(Operand, false);
1777    } else {
1778      writeOperand(Operand, true);
1779    }
1780    Out << '(';
1781    for (unsigned op = 1, Eop = I.getNumOperands(); op < Eop; ++op) {
1782      if (op > 1)
1783        Out << ", ";
1784      writeParamOperand(I.getOperand(op), PAL.getParamAttributes(op));
1785    }
1786    Out << ')';
1787    if (PAL.getFnAttributes() != Attribute::None)
1788      Out << ' ' << Attribute::getAsString(PAL.getFnAttributes());
1789  } else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I)) {
1790    const PointerType    *PTy = cast<PointerType>(Operand->getType());
1791    const FunctionType   *FTy = cast<FunctionType>(PTy->getElementType());
1792    const Type         *RetTy = FTy->getReturnType();
1793    const AttrListPtr &PAL = II->getAttributes();
1794
1795    // Print the calling convention being used.
1796    switch (II->getCallingConv()) {
1797    case CallingConv::C: break;   // default
1798    case CallingConv::Fast:  Out << " fastcc"; break;
1799    case CallingConv::Cold:  Out << " coldcc"; break;
1800    case CallingConv::X86_StdCall:  Out << " x86_stdcallcc"; break;
1801    case CallingConv::X86_FastCall: Out << " x86_fastcallcc"; break;
1802    case CallingConv::ARM_APCS:     Out << " arm_apcscc "; break;
1803    case CallingConv::ARM_AAPCS:    Out << " arm_aapcscc "; break;
1804    case CallingConv::ARM_AAPCS_VFP:Out << " arm_aapcs_vfpcc "; break;
1805    default: Out << " cc" << II->getCallingConv(); break;
1806    }
1807
1808    if (PAL.getRetAttributes() != Attribute::None)
1809      Out << ' ' << Attribute::getAsString(PAL.getRetAttributes());
1810
1811    // If possible, print out the short form of the invoke instruction. We can
1812    // only do this if the first argument is a pointer to a nonvararg function,
1813    // and if the return type is not a pointer to a function.
1814    //
1815    Out << ' ';
1816    if (!FTy->isVarArg() &&
1817        (!isa<PointerType>(RetTy) ||
1818         !isa<FunctionType>(cast<PointerType>(RetTy)->getElementType()))) {
1819      TypePrinter.print(RetTy, Out);
1820      Out << ' ';
1821      writeOperand(Operand, false);
1822    } else {
1823      writeOperand(Operand, true);
1824    }
1825    Out << '(';
1826    for (unsigned op = 3, Eop = I.getNumOperands(); op < Eop; ++op) {
1827      if (op > 3)
1828        Out << ", ";
1829      writeParamOperand(I.getOperand(op), PAL.getParamAttributes(op-2));
1830    }
1831
1832    Out << ')';
1833    if (PAL.getFnAttributes() != Attribute::None)
1834      Out << ' ' << Attribute::getAsString(PAL.getFnAttributes());
1835
1836    Out << "\n\t\t\tto ";
1837    writeOperand(II->getNormalDest(), true);
1838    Out << " unwind ";
1839    writeOperand(II->getUnwindDest(), true);
1840
1841  } else if (const AllocationInst *AI = dyn_cast<AllocationInst>(&I)) {
1842    Out << ' ';
1843    TypePrinter.print(AI->getType()->getElementType(), Out);
1844    if (AI->isArrayAllocation()) {
1845      Out << ", ";
1846      writeOperand(AI->getArraySize(), true);
1847    }
1848    if (AI->getAlignment()) {
1849      Out << ", align " << AI->getAlignment();
1850    }
1851  } else if (isa<CastInst>(I)) {
1852    if (Operand) {
1853      Out << ' ';
1854      writeOperand(Operand, true);   // Work with broken code
1855    }
1856    Out << " to ";
1857    TypePrinter.print(I.getType(), Out);
1858  } else if (isa<VAArgInst>(I)) {
1859    if (Operand) {
1860      Out << ' ';
1861      writeOperand(Operand, true);   // Work with broken code
1862    }
1863    Out << ", ";
1864    TypePrinter.print(I.getType(), Out);
1865  } else if (Operand) {   // Print the normal way.
1866
1867    // PrintAllTypes - Instructions who have operands of all the same type
1868    // omit the type from all but the first operand.  If the instruction has
1869    // different type operands (for example br), then they are all printed.
1870    bool PrintAllTypes = false;
1871    const Type *TheType = Operand->getType();
1872
1873    // Select, Store and ShuffleVector always print all types.
1874    if (isa<SelectInst>(I) || isa<StoreInst>(I) || isa<ShuffleVectorInst>(I)
1875        || isa<ReturnInst>(I)) {
1876      PrintAllTypes = true;
1877    } else {
1878      for (unsigned i = 1, E = I.getNumOperands(); i != E; ++i) {
1879        Operand = I.getOperand(i);
1880        // note that Operand shouldn't be null, but the test helps make dump()
1881        // more tolerant of malformed IR
1882        if (Operand && Operand->getType() != TheType) {
1883          PrintAllTypes = true;    // We have differing types!  Print them all!
1884          break;
1885        }
1886      }
1887    }
1888
1889    if (!PrintAllTypes) {
1890      Out << ' ';
1891      TypePrinter.print(TheType, Out);
1892    }
1893
1894    Out << ' ';
1895    for (unsigned i = 0, E = I.getNumOperands(); i != E; ++i) {
1896      if (i) Out << ", ";
1897      writeOperand(I.getOperand(i), PrintAllTypes);
1898    }
1899  }
1900
1901  // Print post operand alignment for load/store
1902  if (isa<LoadInst>(I) && cast<LoadInst>(I).getAlignment()) {
1903    Out << ", align " << cast<LoadInst>(I).getAlignment();
1904  } else if (isa<StoreInst>(I) && cast<StoreInst>(I).getAlignment()) {
1905    Out << ", align " << cast<StoreInst>(I).getAlignment();
1906  }
1907
1908  printInfoComment(I);
1909}
1910
1911
1912//===----------------------------------------------------------------------===//
1913//                       External Interface declarations
1914//===----------------------------------------------------------------------===//
1915
1916void Module::print(std::ostream &o, AssemblyAnnotationWriter *AAW) const {
1917  raw_os_ostream OS(o);
1918  print(OS, AAW);
1919}
1920void Module::print(raw_ostream &OS, AssemblyAnnotationWriter *AAW) const {
1921  SlotTracker SlotTable(this);
1922  AssemblyWriter W(OS, SlotTable, this, AAW);
1923  W.write(this);
1924}
1925
1926void Type::print(std::ostream &o) const {
1927  raw_os_ostream OS(o);
1928  print(OS);
1929}
1930
1931void Type::print(raw_ostream &OS) const {
1932  if (this == 0) {
1933    OS << "<null Type>";
1934    return;
1935  }
1936  TypePrinting().print(this, OS);
1937}
1938
1939void Value::print(raw_ostream &OS, AssemblyAnnotationWriter *AAW) const {
1940  if (this == 0) {
1941    OS << "printing a <null> value\n";
1942    return;
1943  }
1944  if (const Instruction *I = dyn_cast<Instruction>(this)) {
1945    const Function *F = I->getParent() ? I->getParent()->getParent() : 0;
1946    SlotTracker SlotTable(F);
1947    AssemblyWriter W(OS, SlotTable, F ? F->getParent() : 0, AAW);
1948    W.write(I);
1949  } else if (const BasicBlock *BB = dyn_cast<BasicBlock>(this)) {
1950    SlotTracker SlotTable(BB->getParent());
1951    AssemblyWriter W(OS, SlotTable,
1952                     BB->getParent() ? BB->getParent()->getParent() : 0, AAW);
1953    W.write(BB);
1954  } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(this)) {
1955    SlotTracker SlotTable(GV->getParent());
1956    AssemblyWriter W(OS, SlotTable, GV->getParent(), AAW);
1957    W.write(GV);
1958  } else if (const MDNode *N = dyn_cast<MDNode>(this)) {
1959    SlotTracker SlotTable(N);
1960    TypePrinting TypePrinter;
1961    SlotTable.initialize();
1962    WriteMDNodes(OS, TypePrinter, SlotTable);
1963  } else if (const Constant *C = dyn_cast<Constant>(this)) {
1964    TypePrinting TypePrinter;
1965    TypePrinter.print(C->getType(), OS);
1966    OS << ' ';
1967    WriteConstantInt(OS, C, TypePrinter, 0);
1968  } else if (const Argument *A = dyn_cast<Argument>(this)) {
1969    WriteAsOperand(OS, this, true,
1970                   A->getParent() ? A->getParent()->getParent() : 0);
1971  } else if (isa<InlineAsm>(this)) {
1972    WriteAsOperand(OS, this, true, 0);
1973  } else {
1974    llvm_unreachable("Unknown value to print out!");
1975  }
1976}
1977
1978void Value::print(std::ostream &O, AssemblyAnnotationWriter *AAW) const {
1979  raw_os_ostream OS(O);
1980  print(OS, AAW);
1981}
1982
1983// Value::dump - allow easy printing of Values from the debugger.
1984void Value::dump() const { print(errs()); errs() << '\n'; }
1985
1986// Type::dump - allow easy printing of Types from the debugger.
1987// This one uses type names from the given context module
1988void Type::dump(const Module *Context) const {
1989  WriteTypeSymbolic(errs(), this, Context);
1990  errs() << '\n';
1991}
1992
1993// Type::dump - allow easy printing of Types from the debugger.
1994void Type::dump() const { dump(0); }
1995
1996// Module::dump() - Allow printing of Modules from the debugger.
1997void Module::dump() const { print(errs(), 0); }
1998