Add support for printing out the attribute groups.
[oota-llvm.git] / lib / IR / AsmWriter.cpp
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/ADT/DenseMap.h"
19 #include "llvm/ADT/STLExtras.h"
20 #include "llvm/ADT/SmallString.h"
21 #include "llvm/ADT/StringExtras.h"
22 #include "llvm/Assembly/AssemblyAnnotationWriter.h"
23 #include "llvm/Assembly/PrintModulePass.h"
24 #include "llvm/DebugInfo.h"
25 #include "llvm/IR/CallingConv.h"
26 #include "llvm/IR/Constants.h"
27 #include "llvm/IR/DerivedTypes.h"
28 #include "llvm/IR/InlineAsm.h"
29 #include "llvm/IR/IntrinsicInst.h"
30 #include "llvm/IR/LLVMContext.h"
31 #include "llvm/IR/Module.h"
32 #include "llvm/IR/Operator.h"
33 #include "llvm/IR/TypeFinder.h"
34 #include "llvm/IR/ValueSymbolTable.h"
35 #include "llvm/Support/CFG.h"
36 #include "llvm/Support/Debug.h"
37 #include "llvm/Support/Dwarf.h"
38 #include "llvm/Support/ErrorHandling.h"
39 #include "llvm/Support/FormattedStream.h"
40 #include "llvm/Support/MathExtras.h"
41 #include <algorithm>
42 #include <cctype>
43 using namespace llvm;
44
45 // Make virtual table appear in this compilation unit.
46 AssemblyAnnotationWriter::~AssemblyAnnotationWriter() {}
47
48 //===----------------------------------------------------------------------===//
49 // Helper Functions
50 //===----------------------------------------------------------------------===//
51
52 static const Module *getModuleFromVal(const Value *V) {
53   if (const Argument *MA = dyn_cast<Argument>(V))
54     return MA->getParent() ? MA->getParent()->getParent() : 0;
55
56   if (const BasicBlock *BB = dyn_cast<BasicBlock>(V))
57     return BB->getParent() ? BB->getParent()->getParent() : 0;
58
59   if (const Instruction *I = dyn_cast<Instruction>(V)) {
60     const Function *M = I->getParent() ? I->getParent()->getParent() : 0;
61     return M ? M->getParent() : 0;
62   }
63
64   if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))
65     return GV->getParent();
66   return 0;
67 }
68
69 static void PrintCallingConv(unsigned cc, raw_ostream &Out)
70 {
71   switch (cc) {
72     case CallingConv::Fast:         Out << "fastcc"; break;
73     case CallingConv::Cold:         Out << "coldcc"; break;
74     case CallingConv::X86_StdCall:  Out << "x86_stdcallcc"; break;
75     case CallingConv::X86_FastCall: Out << "x86_fastcallcc"; break;
76     case CallingConv::X86_ThisCall: Out << "x86_thiscallcc"; break;
77     case CallingConv::Intel_OCL_BI: Out << "intel_ocl_bicc"; break;
78     case CallingConv::ARM_APCS:     Out << "arm_apcscc"; break;
79     case CallingConv::ARM_AAPCS:    Out << "arm_aapcscc"; break;
80     case CallingConv::ARM_AAPCS_VFP:Out << "arm_aapcs_vfpcc"; break;
81     case CallingConv::MSP430_INTR:  Out << "msp430_intrcc"; break;
82     case CallingConv::PTX_Kernel:   Out << "ptx_kernel"; break;
83     case CallingConv::PTX_Device:   Out << "ptx_device"; break;
84     default:                        Out << "cc" << cc; break;
85   }
86 }
87
88 // PrintEscapedString - Print each character of the specified string, escaping
89 // it if it is not printable or if it is an escape char.
90 static void PrintEscapedString(StringRef Name, raw_ostream &Out) {
91   for (unsigned i = 0, e = Name.size(); i != e; ++i) {
92     unsigned char C = Name[i];
93     if (isprint(C) && C != '\\' && C != '"')
94       Out << C;
95     else
96       Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F);
97   }
98 }
99
100 enum PrefixType {
101   GlobalPrefix,
102   LabelPrefix,
103   LocalPrefix,
104   NoPrefix
105 };
106
107 /// PrintLLVMName - Turn the specified name into an 'LLVM name', which is either
108 /// prefixed with % (if the string only contains simple characters) or is
109 /// surrounded with ""'s (if it has special chars in it).  Print it out.
110 static void PrintLLVMName(raw_ostream &OS, StringRef Name, PrefixType Prefix) {
111   assert(!Name.empty() && "Cannot get empty name!");
112   switch (Prefix) {
113   case NoPrefix: break;
114   case GlobalPrefix: OS << '@'; break;
115   case LabelPrefix:  break;
116   case LocalPrefix:  OS << '%'; break;
117   }
118
119   // Scan the name to see if it needs quotes first.
120   bool NeedsQuotes = isdigit(Name[0]);
121   if (!NeedsQuotes) {
122     for (unsigned i = 0, e = Name.size(); i != e; ++i) {
123       // By making this unsigned, the value passed in to isalnum will always be
124       // in the range 0-255.  This is important when building with MSVC because
125       // its implementation will assert.  This situation can arise when dealing
126       // with UTF-8 multibyte characters.
127       unsigned char C = Name[i];
128       if (!isalnum(C) && C != '-' && C != '.' && C != '_') {
129         NeedsQuotes = true;
130         break;
131       }
132     }
133   }
134
135   // If we didn't need any quotes, just write out the name in one blast.
136   if (!NeedsQuotes) {
137     OS << Name;
138     return;
139   }
140
141   // Okay, we need quotes.  Output the quotes and escape any scary characters as
142   // needed.
143   OS << '"';
144   PrintEscapedString(Name, OS);
145   OS << '"';
146 }
147
148 /// PrintLLVMName - Turn the specified name into an 'LLVM name', which is either
149 /// prefixed with % (if the string only contains simple characters) or is
150 /// surrounded with ""'s (if it has special chars in it).  Print it out.
151 static void PrintLLVMName(raw_ostream &OS, const Value *V) {
152   PrintLLVMName(OS, V->getName(),
153                 isa<GlobalValue>(V) ? GlobalPrefix : LocalPrefix);
154 }
155
156 //===----------------------------------------------------------------------===//
157 // TypePrinting Class: Type printing machinery
158 //===----------------------------------------------------------------------===//
159
160 /// TypePrinting - Type printing machinery.
161 namespace {
162 class TypePrinting {
163   TypePrinting(const TypePrinting &) LLVM_DELETED_FUNCTION;
164   void operator=(const TypePrinting&) LLVM_DELETED_FUNCTION;
165 public:
166
167   /// NamedTypes - The named types that are used by the current module.
168   TypeFinder NamedTypes;
169
170   /// NumberedTypes - The numbered types, along with their value.
171   DenseMap<StructType*, unsigned> NumberedTypes;
172
173
174   TypePrinting() {}
175   ~TypePrinting() {}
176
177   void incorporateTypes(const Module &M);
178
179   void print(Type *Ty, raw_ostream &OS);
180
181   void printStructBody(StructType *Ty, raw_ostream &OS);
182 };
183 } // end anonymous namespace.
184
185
186 void TypePrinting::incorporateTypes(const Module &M) {
187   NamedTypes.run(M, false);
188
189   // The list of struct types we got back includes all the struct types, split
190   // the unnamed ones out to a numbering and remove the anonymous structs.
191   unsigned NextNumber = 0;
192
193   std::vector<StructType*>::iterator NextToUse = NamedTypes.begin(), I, E;
194   for (I = NamedTypes.begin(), E = NamedTypes.end(); I != E; ++I) {
195     StructType *STy = *I;
196
197     // Ignore anonymous types.
198     if (STy->isLiteral())
199       continue;
200
201     if (STy->getName().empty())
202       NumberedTypes[STy] = NextNumber++;
203     else
204       *NextToUse++ = STy;
205   }
206
207   NamedTypes.erase(NextToUse, NamedTypes.end());
208 }
209
210
211 /// CalcTypeName - Write the specified type to the specified raw_ostream, making
212 /// use of type names or up references to shorten the type name where possible.
213 void TypePrinting::print(Type *Ty, raw_ostream &OS) {
214   switch (Ty->getTypeID()) {
215   case Type::VoidTyID:      OS << "void"; break;
216   case Type::HalfTyID:      OS << "half"; break;
217   case Type::FloatTyID:     OS << "float"; break;
218   case Type::DoubleTyID:    OS << "double"; break;
219   case Type::X86_FP80TyID:  OS << "x86_fp80"; break;
220   case Type::FP128TyID:     OS << "fp128"; break;
221   case Type::PPC_FP128TyID: OS << "ppc_fp128"; break;
222   case Type::LabelTyID:     OS << "label"; break;
223   case Type::MetadataTyID:  OS << "metadata"; break;
224   case Type::X86_MMXTyID:   OS << "x86_mmx"; break;
225   case Type::IntegerTyID:
226     OS << 'i' << cast<IntegerType>(Ty)->getBitWidth();
227     return;
228
229   case Type::FunctionTyID: {
230     FunctionType *FTy = cast<FunctionType>(Ty);
231     print(FTy->getReturnType(), OS);
232     OS << " (";
233     for (FunctionType::param_iterator I = FTy->param_begin(),
234          E = FTy->param_end(); I != E; ++I) {
235       if (I != FTy->param_begin())
236         OS << ", ";
237       print(*I, OS);
238     }
239     if (FTy->isVarArg()) {
240       if (FTy->getNumParams()) OS << ", ";
241       OS << "...";
242     }
243     OS << ')';
244     return;
245   }
246   case Type::StructTyID: {
247     StructType *STy = cast<StructType>(Ty);
248
249     if (STy->isLiteral())
250       return printStructBody(STy, OS);
251
252     if (!STy->getName().empty())
253       return PrintLLVMName(OS, STy->getName(), LocalPrefix);
254
255     DenseMap<StructType*, unsigned>::iterator I = NumberedTypes.find(STy);
256     if (I != NumberedTypes.end())
257       OS << '%' << I->second;
258     else  // Not enumerated, print the hex address.
259       OS << "%\"type " << STy << '\"';
260     return;
261   }
262   case Type::PointerTyID: {
263     PointerType *PTy = cast<PointerType>(Ty);
264     print(PTy->getElementType(), OS);
265     if (unsigned AddressSpace = PTy->getAddressSpace())
266       OS << " addrspace(" << AddressSpace << ')';
267     OS << '*';
268     return;
269   }
270   case Type::ArrayTyID: {
271     ArrayType *ATy = cast<ArrayType>(Ty);
272     OS << '[' << ATy->getNumElements() << " x ";
273     print(ATy->getElementType(), OS);
274     OS << ']';
275     return;
276   }
277   case Type::VectorTyID: {
278     VectorType *PTy = cast<VectorType>(Ty);
279     OS << "<" << PTy->getNumElements() << " x ";
280     print(PTy->getElementType(), OS);
281     OS << '>';
282     return;
283   }
284   default:
285     OS << "<unrecognized-type>";
286     return;
287   }
288 }
289
290 void TypePrinting::printStructBody(StructType *STy, raw_ostream &OS) {
291   if (STy->isOpaque()) {
292     OS << "opaque";
293     return;
294   }
295
296   if (STy->isPacked())
297     OS << '<';
298
299   if (STy->getNumElements() == 0) {
300     OS << "{}";
301   } else {
302     StructType::element_iterator I = STy->element_begin();
303     OS << "{ ";
304     print(*I++, OS);
305     for (StructType::element_iterator E = STy->element_end(); I != E; ++I) {
306       OS << ", ";
307       print(*I, OS);
308     }
309
310     OS << " }";
311   }
312   if (STy->isPacked())
313     OS << '>';
314 }
315
316
317
318 //===----------------------------------------------------------------------===//
319 // SlotTracker Class: Enumerate slot numbers for unnamed values
320 //===----------------------------------------------------------------------===//
321
322 namespace {
323
324 /// This class provides computation of slot numbers for LLVM Assembly writing.
325 ///
326 class SlotTracker {
327 public:
328   /// ValueMap - A mapping of Values to slot numbers.
329   typedef DenseMap<const Value*, unsigned> ValueMap;
330
331 private:
332   /// TheModule - The module for which we are holding slot numbers.
333   const Module* TheModule;
334
335   /// TheFunction - The function for which we are holding slot numbers.
336   const Function* TheFunction;
337   bool FunctionProcessed;
338
339   /// mMap - The slot map for the module level data.
340   ValueMap mMap;
341   unsigned mNext;
342
343   /// fMap - The slot map for the function level data.
344   ValueMap fMap;
345   unsigned fNext;
346
347   /// mdnMap - Map for MDNodes.
348   DenseMap<const MDNode*, unsigned> mdnMap;
349   unsigned mdnNext;
350
351   /// asMap - The slot map for attribute sets.
352   DenseMap<AttributeSet, unsigned> asMap;
353   unsigned asNext;
354 public:
355   /// Construct from a module
356   explicit SlotTracker(const Module *M);
357   /// Construct from a function, starting out in incorp state.
358   explicit SlotTracker(const Function *F);
359
360   /// Return the slot number of the specified value in it's type
361   /// plane.  If something is not in the SlotTracker, return -1.
362   int getLocalSlot(const Value *V);
363   int getGlobalSlot(const GlobalValue *V);
364   int getMetadataSlot(const MDNode *N);
365   int getAttributeGroupSlot(AttributeSet AS);
366
367   /// If you'd like to deal with a function instead of just a module, use
368   /// this method to get its data into the SlotTracker.
369   void incorporateFunction(const Function *F) {
370     TheFunction = F;
371     FunctionProcessed = false;
372   }
373
374   /// After calling incorporateFunction, use this method to remove the
375   /// most recently incorporated function from the SlotTracker. This
376   /// will reset the state of the machine back to just the module contents.
377   void purgeFunction();
378
379   /// MDNode map iterators.
380   typedef DenseMap<const MDNode*, unsigned>::iterator mdn_iterator;
381   mdn_iterator mdn_begin() { return mdnMap.begin(); }
382   mdn_iterator mdn_end() { return mdnMap.end(); }
383   unsigned mdn_size() const { return mdnMap.size(); }
384   bool mdn_empty() const { return mdnMap.empty(); }
385
386   /// AttributeSet map iterators.
387   typedef DenseMap<AttributeSet, unsigned>::iterator as_iterator;
388   as_iterator as_begin()   { return asMap.begin(); }
389   as_iterator as_end()     { return asMap.end(); }
390   unsigned as_size() const { return asMap.size(); }
391   bool as_empty() const    { return asMap.empty(); }
392
393   /// This function does the actual initialization.
394   inline void initialize();
395
396   // Implementation Details
397 private:
398   /// CreateModuleSlot - Insert the specified GlobalValue* into the slot table.
399   void CreateModuleSlot(const GlobalValue *V);
400
401   /// CreateMetadataSlot - Insert the specified MDNode* into the slot table.
402   void CreateMetadataSlot(const MDNode *N);
403
404   /// CreateFunctionSlot - Insert the specified Value* into the slot table.
405   void CreateFunctionSlot(const Value *V);
406
407   /// \brief Insert the specified AttributeSet into the slot table.
408   void CreateAttributeSetSlot(AttributeSet AS);
409
410   /// Add all of the module level global variables (and their initializers)
411   /// and function declarations, but not the contents of those functions.
412   void processModule();
413
414   /// Add all of the functions arguments, basic blocks, and instructions.
415   void processFunction();
416
417   SlotTracker(const SlotTracker &) LLVM_DELETED_FUNCTION;
418   void operator=(const SlotTracker &) LLVM_DELETED_FUNCTION;
419 };
420
421 }  // end anonymous namespace
422
423
424 static SlotTracker *createSlotTracker(const Value *V) {
425   if (const Argument *FA = dyn_cast<Argument>(V))
426     return new SlotTracker(FA->getParent());
427
428   if (const Instruction *I = dyn_cast<Instruction>(V))
429     if (I->getParent())
430       return new SlotTracker(I->getParent()->getParent());
431
432   if (const BasicBlock *BB = dyn_cast<BasicBlock>(V))
433     return new SlotTracker(BB->getParent());
434
435   if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
436     return new SlotTracker(GV->getParent());
437
438   if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(V))
439     return new SlotTracker(GA->getParent());
440
441   if (const Function *Func = dyn_cast<Function>(V))
442     return new SlotTracker(Func);
443
444   if (const MDNode *MD = dyn_cast<MDNode>(V)) {
445     if (!MD->isFunctionLocal())
446       return new SlotTracker(MD->getFunction());
447
448     return new SlotTracker((Function *)0);
449   }
450
451   return 0;
452 }
453
454 #if 0
455 #define ST_DEBUG(X) dbgs() << X
456 #else
457 #define ST_DEBUG(X)
458 #endif
459
460 // Module level constructor. Causes the contents of the Module (sans functions)
461 // to be added to the slot table.
462 SlotTracker::SlotTracker(const Module *M)
463   : TheModule(M), TheFunction(0), FunctionProcessed(false),
464     mNext(0), fNext(0),  mdnNext(0), asNext(0) {
465 }
466
467 // Function level constructor. Causes the contents of the Module and the one
468 // function provided to be added to the slot table.
469 SlotTracker::SlotTracker(const Function *F)
470   : TheModule(F ? F->getParent() : 0), TheFunction(F), FunctionProcessed(false),
471     mNext(0), fNext(0), mdnNext(0), asNext(0) {
472 }
473
474 inline void SlotTracker::initialize() {
475   if (TheModule) {
476     processModule();
477     TheModule = 0; ///< Prevent re-processing next time we're called.
478   }
479
480   if (TheFunction && !FunctionProcessed)
481     processFunction();
482 }
483
484 // Iterate through all the global variables, functions, and global
485 // variable initializers and create slots for them.
486 void SlotTracker::processModule() {
487   ST_DEBUG("begin processModule!\n");
488
489   // Add all of the unnamed global variables to the value table.
490   for (Module::const_global_iterator I = TheModule->global_begin(),
491          E = TheModule->global_end(); I != E; ++I) {
492     if (!I->hasName())
493       CreateModuleSlot(I);
494   }
495
496   // Add metadata used by named metadata.
497   for (Module::const_named_metadata_iterator
498          I = TheModule->named_metadata_begin(),
499          E = TheModule->named_metadata_end(); I != E; ++I) {
500     const NamedMDNode *NMD = I;
501     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
502       CreateMetadataSlot(NMD->getOperand(i));
503   }
504
505   for (Module::const_iterator I = TheModule->begin(), E = TheModule->end();
506        I != E; ++I) {
507     if (!I->hasName())
508       // Add all the unnamed functions to the table.
509       CreateModuleSlot(I);
510
511     // Add all the function attributes to the table.
512     AttributeSet FnAttrs = I->getAttributes().getFnAttributes();
513     if (FnAttrs.hasAttributes(AttributeSet::FunctionIndex))
514       CreateAttributeSetSlot(FnAttrs);
515   }
516
517   ST_DEBUG("end processModule!\n");
518 }
519
520 // Process the arguments, basic blocks, and instructions  of a function.
521 void SlotTracker::processFunction() {
522   ST_DEBUG("begin processFunction!\n");
523   fNext = 0;
524
525   // Add all the function arguments with no names.
526   for(Function::const_arg_iterator AI = TheFunction->arg_begin(),
527       AE = TheFunction->arg_end(); AI != AE; ++AI)
528     if (!AI->hasName())
529       CreateFunctionSlot(AI);
530
531   ST_DEBUG("Inserting Instructions:\n");
532
533   SmallVector<std::pair<unsigned, MDNode*>, 4> MDForInst;
534
535   // Add all of the basic blocks and instructions with no names.
536   for (Function::const_iterator BB = TheFunction->begin(),
537        E = TheFunction->end(); BB != E; ++BB) {
538     if (!BB->hasName())
539       CreateFunctionSlot(BB);
540
541     for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E;
542          ++I) {
543       if (!I->getType()->isVoidTy() && !I->hasName())
544         CreateFunctionSlot(I);
545
546       // Intrinsics can directly use metadata.  We allow direct calls to any
547       // llvm.foo function here, because the target may not be linked into the
548       // optimizer.
549       if (const CallInst *CI = dyn_cast<CallInst>(I)) {
550         if (Function *F = CI->getCalledFunction())
551           if (F->getName().startswith("llvm."))
552             for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
553               if (MDNode *N = dyn_cast_or_null<MDNode>(I->getOperand(i)))
554                 CreateMetadataSlot(N);
555       }
556
557       // Process metadata attached with this instruction.
558       I->getAllMetadata(MDForInst);
559       for (unsigned i = 0, e = MDForInst.size(); i != e; ++i)
560         CreateMetadataSlot(MDForInst[i].second);
561       MDForInst.clear();
562     }
563   }
564
565   FunctionProcessed = true;
566
567   ST_DEBUG("end processFunction!\n");
568 }
569
570 /// Clean up after incorporating a function. This is the only way to get out of
571 /// the function incorporation state that affects get*Slot/Create*Slot. Function
572 /// incorporation state is indicated by TheFunction != 0.
573 void SlotTracker::purgeFunction() {
574   ST_DEBUG("begin purgeFunction!\n");
575   fMap.clear(); // Simply discard the function level map
576   TheFunction = 0;
577   FunctionProcessed = false;
578   ST_DEBUG("end purgeFunction!\n");
579 }
580
581 /// getGlobalSlot - Get the slot number of a global value.
582 int SlotTracker::getGlobalSlot(const GlobalValue *V) {
583   // Check for uninitialized state and do lazy initialization.
584   initialize();
585
586   // Find the value in the module map
587   ValueMap::iterator MI = mMap.find(V);
588   return MI == mMap.end() ? -1 : (int)MI->second;
589 }
590
591 /// getMetadataSlot - Get the slot number of a MDNode.
592 int SlotTracker::getMetadataSlot(const MDNode *N) {
593   // Check for uninitialized state and do lazy initialization.
594   initialize();
595
596   // Find the MDNode in the module map
597   mdn_iterator MI = mdnMap.find(N);
598   return MI == mdnMap.end() ? -1 : (int)MI->second;
599 }
600
601
602 /// getLocalSlot - Get the slot number for a value that is local to a function.
603 int SlotTracker::getLocalSlot(const Value *V) {
604   assert(!isa<Constant>(V) && "Can't get a constant or global slot with this!");
605
606   // Check for uninitialized state and do lazy initialization.
607   initialize();
608
609   ValueMap::iterator FI = fMap.find(V);
610   return FI == fMap.end() ? -1 : (int)FI->second;
611 }
612
613 int SlotTracker::getAttributeGroupSlot(AttributeSet AS) {
614   // Check for uninitialized state and do lazy initialization.
615   initialize();
616
617   // Find the AttributeSet in the module map.
618   as_iterator AI = asMap.find(AS);
619   return AI == asMap.end() ? -1 : (int)AI->second;
620 }
621
622 /// CreateModuleSlot - Insert the specified GlobalValue* into the slot table.
623 void SlotTracker::CreateModuleSlot(const GlobalValue *V) {
624   assert(V && "Can't insert a null Value into SlotTracker!");
625   assert(!V->getType()->isVoidTy() && "Doesn't need a slot!");
626   assert(!V->hasName() && "Doesn't need a slot!");
627
628   unsigned DestSlot = mNext++;
629   mMap[V] = DestSlot;
630
631   ST_DEBUG("  Inserting value [" << V->getType() << "] = " << V << " slot=" <<
632            DestSlot << " [");
633   // G = Global, F = Function, A = Alias, o = other
634   ST_DEBUG((isa<GlobalVariable>(V) ? 'G' :
635             (isa<Function>(V) ? 'F' :
636              (isa<GlobalAlias>(V) ? 'A' : 'o'))) << "]\n");
637 }
638
639 /// CreateSlot - Create a new slot for the specified value if it has no name.
640 void SlotTracker::CreateFunctionSlot(const Value *V) {
641   assert(!V->getType()->isVoidTy() && !V->hasName() && "Doesn't need a slot!");
642
643   unsigned DestSlot = fNext++;
644   fMap[V] = DestSlot;
645
646   // G = Global, F = Function, o = other
647   ST_DEBUG("  Inserting value [" << V->getType() << "] = " << V << " slot=" <<
648            DestSlot << " [o]\n");
649 }
650
651 /// CreateModuleSlot - Insert the specified MDNode* into the slot table.
652 void SlotTracker::CreateMetadataSlot(const MDNode *N) {
653   assert(N && "Can't insert a null Value into SlotTracker!");
654
655   // Don't insert if N is a function-local metadata, these are always printed
656   // inline.
657   if (!N->isFunctionLocal()) {
658     mdn_iterator I = mdnMap.find(N);
659     if (I != mdnMap.end())
660       return;
661
662     unsigned DestSlot = mdnNext++;
663     mdnMap[N] = DestSlot;
664   }
665
666   // Recursively add any MDNodes referenced by operands.
667   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
668     if (const MDNode *Op = dyn_cast_or_null<MDNode>(N->getOperand(i)))
669       CreateMetadataSlot(Op);
670 }
671
672 void SlotTracker::CreateAttributeSetSlot(AttributeSet AS) {
673   assert(AS.hasAttributes(AttributeSet::FunctionIndex) &&
674          "Doesn't need a slot!");
675
676   as_iterator I = asMap.find(AS);
677   if (I != asMap.end())
678     return;
679
680   unsigned DestSlot = asNext++;
681   asMap[AS] = DestSlot;
682 }
683
684 //===----------------------------------------------------------------------===//
685 // AsmWriter Implementation
686 //===----------------------------------------------------------------------===//
687
688 static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
689                                    TypePrinting *TypePrinter,
690                                    SlotTracker *Machine,
691                                    const Module *Context);
692
693
694
695 static const char *getPredicateText(unsigned predicate) {
696   const char * pred = "unknown";
697   switch (predicate) {
698   case FCmpInst::FCMP_FALSE: pred = "false"; break;
699   case FCmpInst::FCMP_OEQ:   pred = "oeq"; break;
700   case FCmpInst::FCMP_OGT:   pred = "ogt"; break;
701   case FCmpInst::FCMP_OGE:   pred = "oge"; break;
702   case FCmpInst::FCMP_OLT:   pred = "olt"; break;
703   case FCmpInst::FCMP_OLE:   pred = "ole"; break;
704   case FCmpInst::FCMP_ONE:   pred = "one"; break;
705   case FCmpInst::FCMP_ORD:   pred = "ord"; break;
706   case FCmpInst::FCMP_UNO:   pred = "uno"; break;
707   case FCmpInst::FCMP_UEQ:   pred = "ueq"; break;
708   case FCmpInst::FCMP_UGT:   pred = "ugt"; break;
709   case FCmpInst::FCMP_UGE:   pred = "uge"; break;
710   case FCmpInst::FCMP_ULT:   pred = "ult"; break;
711   case FCmpInst::FCMP_ULE:   pred = "ule"; break;
712   case FCmpInst::FCMP_UNE:   pred = "une"; break;
713   case FCmpInst::FCMP_TRUE:  pred = "true"; break;
714   case ICmpInst::ICMP_EQ:    pred = "eq"; break;
715   case ICmpInst::ICMP_NE:    pred = "ne"; break;
716   case ICmpInst::ICMP_SGT:   pred = "sgt"; break;
717   case ICmpInst::ICMP_SGE:   pred = "sge"; break;
718   case ICmpInst::ICMP_SLT:   pred = "slt"; break;
719   case ICmpInst::ICMP_SLE:   pred = "sle"; break;
720   case ICmpInst::ICMP_UGT:   pred = "ugt"; break;
721   case ICmpInst::ICMP_UGE:   pred = "uge"; break;
722   case ICmpInst::ICMP_ULT:   pred = "ult"; break;
723   case ICmpInst::ICMP_ULE:   pred = "ule"; break;
724   }
725   return pred;
726 }
727
728 static void writeAtomicRMWOperation(raw_ostream &Out,
729                                     AtomicRMWInst::BinOp Op) {
730   switch (Op) {
731   default: Out << " <unknown operation " << Op << ">"; break;
732   case AtomicRMWInst::Xchg: Out << " xchg"; break;
733   case AtomicRMWInst::Add:  Out << " add"; break;
734   case AtomicRMWInst::Sub:  Out << " sub"; break;
735   case AtomicRMWInst::And:  Out << " and"; break;
736   case AtomicRMWInst::Nand: Out << " nand"; break;
737   case AtomicRMWInst::Or:   Out << " or"; break;
738   case AtomicRMWInst::Xor:  Out << " xor"; break;
739   case AtomicRMWInst::Max:  Out << " max"; break;
740   case AtomicRMWInst::Min:  Out << " min"; break;
741   case AtomicRMWInst::UMax: Out << " umax"; break;
742   case AtomicRMWInst::UMin: Out << " umin"; break;
743   }
744 }
745
746 static void WriteOptimizationInfo(raw_ostream &Out, const User *U) {
747   if (const FPMathOperator *FPO = dyn_cast<const FPMathOperator>(U)) {
748     // Unsafe algebra implies all the others, no need to write them all out
749     if (FPO->hasUnsafeAlgebra())
750       Out << " fast";
751     else {
752       if (FPO->hasNoNaNs())
753         Out << " nnan";
754       if (FPO->hasNoInfs())
755         Out << " ninf";
756       if (FPO->hasNoSignedZeros())
757         Out << " nsz";
758       if (FPO->hasAllowReciprocal())
759         Out << " arcp";
760     }
761   }
762
763   if (const OverflowingBinaryOperator *OBO =
764         dyn_cast<OverflowingBinaryOperator>(U)) {
765     if (OBO->hasNoUnsignedWrap())
766       Out << " nuw";
767     if (OBO->hasNoSignedWrap())
768       Out << " nsw";
769   } else if (const PossiblyExactOperator *Div =
770                dyn_cast<PossiblyExactOperator>(U)) {
771     if (Div->isExact())
772       Out << " exact";
773   } else if (const GEPOperator *GEP = dyn_cast<GEPOperator>(U)) {
774     if (GEP->isInBounds())
775       Out << " inbounds";
776   }
777 }
778
779 static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
780                                   TypePrinting &TypePrinter,
781                                   SlotTracker *Machine,
782                                   const Module *Context) {
783   if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) {
784     if (CI->getType()->isIntegerTy(1)) {
785       Out << (CI->getZExtValue() ? "true" : "false");
786       return;
787     }
788     Out << CI->getValue();
789     return;
790   }
791
792   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(CV)) {
793     if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEsingle ||
794         &CFP->getValueAPF().getSemantics() == &APFloat::IEEEdouble) {
795       // We would like to output the FP constant value in exponential notation,
796       // but we cannot do this if doing so will lose precision.  Check here to
797       // make sure that we only output it in exponential format if we can parse
798       // the value back and get the same value.
799       //
800       bool ignored;
801       bool isHalf = &CFP->getValueAPF().getSemantics()==&APFloat::IEEEhalf;
802       bool isDouble = &CFP->getValueAPF().getSemantics()==&APFloat::IEEEdouble;
803       bool isInf = CFP->getValueAPF().isInfinity();
804       bool isNaN = CFP->getValueAPF().isNaN();
805       if (!isHalf && !isInf && !isNaN) {
806         double Val = isDouble ? CFP->getValueAPF().convertToDouble() :
807                                 CFP->getValueAPF().convertToFloat();
808         SmallString<128> StrVal;
809         raw_svector_ostream(StrVal) << Val;
810
811         // Check to make sure that the stringized number is not some string like
812         // "Inf" or NaN, that atof will accept, but the lexer will not.  Check
813         // that the string matches the "[-+]?[0-9]" regex.
814         //
815         if ((StrVal[0] >= '0' && StrVal[0] <= '9') ||
816             ((StrVal[0] == '-' || StrVal[0] == '+') &&
817              (StrVal[1] >= '0' && StrVal[1] <= '9'))) {
818           // Reparse stringized version!
819           if (APFloat(APFloat::IEEEdouble, StrVal).convertToDouble() == Val) {
820             Out << StrVal.str();
821             return;
822           }
823         }
824       }
825       // Otherwise we could not reparse it to exactly the same value, so we must
826       // output the string in hexadecimal format!  Note that loading and storing
827       // floating point types changes the bits of NaNs on some hosts, notably
828       // x86, so we must not use these types.
829       assert(sizeof(double) == sizeof(uint64_t) &&
830              "assuming that double is 64 bits!");
831       char Buffer[40];
832       APFloat apf = CFP->getValueAPF();
833       // Halves and floats are represented in ASCII IR as double, convert.
834       if (!isDouble)
835         apf.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven,
836                           &ignored);
837       Out << "0x" <<
838               utohex_buffer(uint64_t(apf.bitcastToAPInt().getZExtValue()),
839                             Buffer+40);
840       return;
841     }
842
843     // Either half, or some form of long double.
844     // These appear as a magic letter identifying the type, then a
845     // fixed number of hex digits.
846     Out << "0x";
847     // Bit position, in the current word, of the next nibble to print.
848     int shiftcount;
849
850     if (&CFP->getValueAPF().getSemantics() == &APFloat::x87DoubleExtended) {
851       Out << 'K';
852       // api needed to prevent premature destruction
853       APInt api = CFP->getValueAPF().bitcastToAPInt();
854       const uint64_t* p = api.getRawData();
855       uint64_t word = p[1];
856       shiftcount = 12;
857       int width = api.getBitWidth();
858       for (int j=0; j<width; j+=4, shiftcount-=4) {
859         unsigned int nibble = (word>>shiftcount) & 15;
860         if (nibble < 10)
861           Out << (unsigned char)(nibble + '0');
862         else
863           Out << (unsigned char)(nibble - 10 + 'A');
864         if (shiftcount == 0 && j+4 < width) {
865           word = *p;
866           shiftcount = 64;
867           if (width-j-4 < 64)
868             shiftcount = width-j-4;
869         }
870       }
871       return;
872     } else if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEquad) {
873       shiftcount = 60;
874       Out << 'L';
875     } else if (&CFP->getValueAPF().getSemantics() == &APFloat::PPCDoubleDouble) {
876       shiftcount = 60;
877       Out << 'M';
878     } else if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEhalf) {
879       shiftcount = 12;
880       Out << 'H';
881     } else
882       llvm_unreachable("Unsupported floating point type");
883     // api needed to prevent premature destruction
884     APInt api = CFP->getValueAPF().bitcastToAPInt();
885     const uint64_t* p = api.getRawData();
886     uint64_t word = *p;
887     int width = api.getBitWidth();
888     for (int j=0; j<width; j+=4, shiftcount-=4) {
889       unsigned int nibble = (word>>shiftcount) & 15;
890       if (nibble < 10)
891         Out << (unsigned char)(nibble + '0');
892       else
893         Out << (unsigned char)(nibble - 10 + 'A');
894       if (shiftcount == 0 && j+4 < width) {
895         word = *(++p);
896         shiftcount = 64;
897         if (width-j-4 < 64)
898           shiftcount = width-j-4;
899       }
900     }
901     return;
902   }
903
904   if (isa<ConstantAggregateZero>(CV)) {
905     Out << "zeroinitializer";
906     return;
907   }
908
909   if (const BlockAddress *BA = dyn_cast<BlockAddress>(CV)) {
910     Out << "blockaddress(";
911     WriteAsOperandInternal(Out, BA->getFunction(), &TypePrinter, Machine,
912                            Context);
913     Out << ", ";
914     WriteAsOperandInternal(Out, BA->getBasicBlock(), &TypePrinter, Machine,
915                            Context);
916     Out << ")";
917     return;
918   }
919
920   if (const ConstantArray *CA = dyn_cast<ConstantArray>(CV)) {
921     Type *ETy = CA->getType()->getElementType();
922     Out << '[';
923     TypePrinter.print(ETy, Out);
924     Out << ' ';
925     WriteAsOperandInternal(Out, CA->getOperand(0),
926                            &TypePrinter, Machine,
927                            Context);
928     for (unsigned i = 1, e = CA->getNumOperands(); i != e; ++i) {
929       Out << ", ";
930       TypePrinter.print(ETy, Out);
931       Out << ' ';
932       WriteAsOperandInternal(Out, CA->getOperand(i), &TypePrinter, Machine,
933                              Context);
934     }
935     Out << ']';
936     return;
937   }
938
939   if (const ConstantDataArray *CA = dyn_cast<ConstantDataArray>(CV)) {
940     // As a special case, print the array as a string if it is an array of
941     // i8 with ConstantInt values.
942     if (CA->isString()) {
943       Out << "c\"";
944       PrintEscapedString(CA->getAsString(), Out);
945       Out << '"';
946       return;
947     }
948
949     Type *ETy = CA->getType()->getElementType();
950     Out << '[';
951     TypePrinter.print(ETy, Out);
952     Out << ' ';
953     WriteAsOperandInternal(Out, CA->getElementAsConstant(0),
954                            &TypePrinter, Machine,
955                            Context);
956     for (unsigned i = 1, e = CA->getNumElements(); i != e; ++i) {
957       Out << ", ";
958       TypePrinter.print(ETy, Out);
959       Out << ' ';
960       WriteAsOperandInternal(Out, CA->getElementAsConstant(i), &TypePrinter,
961                              Machine, Context);
962     }
963     Out << ']';
964     return;
965   }
966
967
968   if (const ConstantStruct *CS = dyn_cast<ConstantStruct>(CV)) {
969     if (CS->getType()->isPacked())
970       Out << '<';
971     Out << '{';
972     unsigned N = CS->getNumOperands();
973     if (N) {
974       Out << ' ';
975       TypePrinter.print(CS->getOperand(0)->getType(), Out);
976       Out << ' ';
977
978       WriteAsOperandInternal(Out, CS->getOperand(0), &TypePrinter, Machine,
979                              Context);
980
981       for (unsigned i = 1; i < N; i++) {
982         Out << ", ";
983         TypePrinter.print(CS->getOperand(i)->getType(), Out);
984         Out << ' ';
985
986         WriteAsOperandInternal(Out, CS->getOperand(i), &TypePrinter, Machine,
987                                Context);
988       }
989       Out << ' ';
990     }
991
992     Out << '}';
993     if (CS->getType()->isPacked())
994       Out << '>';
995     return;
996   }
997
998   if (isa<ConstantVector>(CV) || isa<ConstantDataVector>(CV)) {
999     Type *ETy = CV->getType()->getVectorElementType();
1000     Out << '<';
1001     TypePrinter.print(ETy, Out);
1002     Out << ' ';
1003     WriteAsOperandInternal(Out, CV->getAggregateElement(0U), &TypePrinter,
1004                            Machine, Context);
1005     for (unsigned i = 1, e = CV->getType()->getVectorNumElements(); i != e;++i){
1006       Out << ", ";
1007       TypePrinter.print(ETy, Out);
1008       Out << ' ';
1009       WriteAsOperandInternal(Out, CV->getAggregateElement(i), &TypePrinter,
1010                              Machine, Context);
1011     }
1012     Out << '>';
1013     return;
1014   }
1015
1016   if (isa<ConstantPointerNull>(CV)) {
1017     Out << "null";
1018     return;
1019   }
1020
1021   if (isa<UndefValue>(CV)) {
1022     Out << "undef";
1023     return;
1024   }
1025
1026   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) {
1027     Out << CE->getOpcodeName();
1028     WriteOptimizationInfo(Out, CE);
1029     if (CE->isCompare())
1030       Out << ' ' << getPredicateText(CE->getPredicate());
1031     Out << " (";
1032
1033     for (User::const_op_iterator OI=CE->op_begin(); OI != CE->op_end(); ++OI) {
1034       TypePrinter.print((*OI)->getType(), Out);
1035       Out << ' ';
1036       WriteAsOperandInternal(Out, *OI, &TypePrinter, Machine, Context);
1037       if (OI+1 != CE->op_end())
1038         Out << ", ";
1039     }
1040
1041     if (CE->hasIndices()) {
1042       ArrayRef<unsigned> Indices = CE->getIndices();
1043       for (unsigned i = 0, e = Indices.size(); i != e; ++i)
1044         Out << ", " << Indices[i];
1045     }
1046
1047     if (CE->isCast()) {
1048       Out << " to ";
1049       TypePrinter.print(CE->getType(), Out);
1050     }
1051
1052     Out << ')';
1053     return;
1054   }
1055
1056   Out << "<placeholder or erroneous Constant>";
1057 }
1058
1059 static void WriteMDNodeBodyInternal(raw_ostream &Out, const MDNode *Node,
1060                                     TypePrinting *TypePrinter,
1061                                     SlotTracker *Machine,
1062                                     const Module *Context) {
1063   Out << "!{";
1064   for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) {
1065     const Value *V = Node->getOperand(mi);
1066     if (V == 0)
1067       Out << "null";
1068     else {
1069       TypePrinter->print(V->getType(), Out);
1070       Out << ' ';
1071       WriteAsOperandInternal(Out, Node->getOperand(mi),
1072                              TypePrinter, Machine, Context);
1073     }
1074     if (mi + 1 != me)
1075       Out << ", ";
1076   }
1077
1078   Out << "}";
1079 }
1080
1081
1082 /// WriteAsOperand - Write the name of the specified value out to the specified
1083 /// ostream.  This can be useful when you just want to print int %reg126, not
1084 /// the whole instruction that generated it.
1085 ///
1086 static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
1087                                    TypePrinting *TypePrinter,
1088                                    SlotTracker *Machine,
1089                                    const Module *Context) {
1090   if (V->hasName()) {
1091     PrintLLVMName(Out, V);
1092     return;
1093   }
1094
1095   const Constant *CV = dyn_cast<Constant>(V);
1096   if (CV && !isa<GlobalValue>(CV)) {
1097     assert(TypePrinter && "Constants require TypePrinting!");
1098     WriteConstantInternal(Out, CV, *TypePrinter, Machine, Context);
1099     return;
1100   }
1101
1102   if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
1103     Out << "asm ";
1104     if (IA->hasSideEffects())
1105       Out << "sideeffect ";
1106     if (IA->isAlignStack())
1107       Out << "alignstack ";
1108     // We don't emit the AD_ATT dialect as it's the assumed default.
1109     if (IA->getDialect() == InlineAsm::AD_Intel)
1110       Out << "inteldialect ";
1111     Out << '"';
1112     PrintEscapedString(IA->getAsmString(), Out);
1113     Out << "\", \"";
1114     PrintEscapedString(IA->getConstraintString(), Out);
1115     Out << '"';
1116     return;
1117   }
1118
1119   if (const MDNode *N = dyn_cast<MDNode>(V)) {
1120     if (N->isFunctionLocal()) {
1121       // Print metadata inline, not via slot reference number.
1122       WriteMDNodeBodyInternal(Out, N, TypePrinter, Machine, Context);
1123       return;
1124     }
1125
1126     if (!Machine) {
1127       if (N->isFunctionLocal())
1128         Machine = new SlotTracker(N->getFunction());
1129       else
1130         Machine = new SlotTracker(Context);
1131     }
1132     int Slot = Machine->getMetadataSlot(N);
1133     if (Slot == -1)
1134       Out << "<badref>";
1135     else
1136       Out << '!' << Slot;
1137     return;
1138   }
1139
1140   if (const MDString *MDS = dyn_cast<MDString>(V)) {
1141     Out << "!\"";
1142     PrintEscapedString(MDS->getString(), Out);
1143     Out << '"';
1144     return;
1145   }
1146
1147   if (V->getValueID() == Value::PseudoSourceValueVal ||
1148       V->getValueID() == Value::FixedStackPseudoSourceValueVal) {
1149     V->print(Out);
1150     return;
1151   }
1152
1153   char Prefix = '%';
1154   int Slot;
1155   // If we have a SlotTracker, use it.
1156   if (Machine) {
1157     if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
1158       Slot = Machine->getGlobalSlot(GV);
1159       Prefix = '@';
1160     } else {
1161       Slot = Machine->getLocalSlot(V);
1162
1163       // If the local value didn't succeed, then we may be referring to a value
1164       // from a different function.  Translate it, as this can happen when using
1165       // address of blocks.
1166       if (Slot == -1)
1167         if ((Machine = createSlotTracker(V))) {
1168           Slot = Machine->getLocalSlot(V);
1169           delete Machine;
1170         }
1171     }
1172   } else if ((Machine = createSlotTracker(V))) {
1173     // Otherwise, create one to get the # and then destroy it.
1174     if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
1175       Slot = Machine->getGlobalSlot(GV);
1176       Prefix = '@';
1177     } else {
1178       Slot = Machine->getLocalSlot(V);
1179     }
1180     delete Machine;
1181     Machine = 0;
1182   } else {
1183     Slot = -1;
1184   }
1185
1186   if (Slot != -1)
1187     Out << Prefix << Slot;
1188   else
1189     Out << "<badref>";
1190 }
1191
1192 void llvm::WriteAsOperand(raw_ostream &Out, const Value *V,
1193                           bool PrintType, const Module *Context) {
1194
1195   // Fast path: Don't construct and populate a TypePrinting object if we
1196   // won't be needing any types printed.
1197   if (!PrintType &&
1198       ((!isa<Constant>(V) && !isa<MDNode>(V)) ||
1199        V->hasName() || isa<GlobalValue>(V))) {
1200     WriteAsOperandInternal(Out, V, 0, 0, Context);
1201     return;
1202   }
1203
1204   if (Context == 0) Context = getModuleFromVal(V);
1205
1206   TypePrinting TypePrinter;
1207   if (Context)
1208     TypePrinter.incorporateTypes(*Context);
1209   if (PrintType) {
1210     TypePrinter.print(V->getType(), Out);
1211     Out << ' ';
1212   }
1213
1214   WriteAsOperandInternal(Out, V, &TypePrinter, 0, Context);
1215 }
1216
1217 namespace {
1218
1219 class AssemblyWriter {
1220   formatted_raw_ostream &Out;
1221   SlotTracker &Machine;
1222   const Module *TheModule;
1223   TypePrinting TypePrinter;
1224   AssemblyAnnotationWriter *AnnotationWriter;
1225
1226 public:
1227   inline AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
1228                         const Module *M,
1229                         AssemblyAnnotationWriter *AAW)
1230     : Out(o), Machine(Mac), TheModule(M), AnnotationWriter(AAW) {
1231     if (M)
1232       TypePrinter.incorporateTypes(*M);
1233   }
1234
1235   void printMDNodeBody(const MDNode *MD);
1236   void printNamedMDNode(const NamedMDNode *NMD);
1237
1238   void printModule(const Module *M);
1239
1240   void writeOperand(const Value *Op, bool PrintType);
1241   void writeParamOperand(const Value *Operand, AttributeSet Attrs,unsigned Idx);
1242   void writeAtomic(AtomicOrdering Ordering, SynchronizationScope SynchScope);
1243
1244   void writeAllMDNodes();
1245   void writeAllAttributeGroups();
1246
1247   void printTypeIdentities();
1248   void printGlobal(const GlobalVariable *GV);
1249   void printAlias(const GlobalAlias *GV);
1250   void printFunction(const Function *F);
1251   void printArgument(const Argument *FA, AttributeSet Attrs, unsigned Idx);
1252   void printBasicBlock(const BasicBlock *BB);
1253   void printInstruction(const Instruction &I);
1254
1255 private:
1256   // printInfoComment - Print a little comment after the instruction indicating
1257   // which slot it occupies.
1258   void printInfoComment(const Value &V);
1259 };
1260 }  // end of anonymous namespace
1261
1262 void AssemblyWriter::writeOperand(const Value *Operand, bool PrintType) {
1263   if (Operand == 0) {
1264     Out << "<null operand!>";
1265     return;
1266   }
1267   if (PrintType) {
1268     TypePrinter.print(Operand->getType(), Out);
1269     Out << ' ';
1270   }
1271   WriteAsOperandInternal(Out, Operand, &TypePrinter, &Machine, TheModule);
1272 }
1273
1274 void AssemblyWriter::writeAtomic(AtomicOrdering Ordering,
1275                                  SynchronizationScope SynchScope) {
1276   if (Ordering == NotAtomic)
1277     return;
1278
1279   switch (SynchScope) {
1280   case SingleThread: Out << " singlethread"; break;
1281   case CrossThread: break;
1282   }
1283
1284   switch (Ordering) {
1285   default: Out << " <bad ordering " << int(Ordering) << ">"; break;
1286   case Unordered: Out << " unordered"; break;
1287   case Monotonic: Out << " monotonic"; break;
1288   case Acquire: Out << " acquire"; break;
1289   case Release: Out << " release"; break;
1290   case AcquireRelease: Out << " acq_rel"; break;
1291   case SequentiallyConsistent: Out << " seq_cst"; break;
1292   }
1293 }
1294
1295 void AssemblyWriter::writeParamOperand(const Value *Operand,
1296                                        AttributeSet Attrs, unsigned Idx) {
1297   if (Operand == 0) {
1298     Out << "<null operand!>";
1299     return;
1300   }
1301
1302   // Print the type
1303   TypePrinter.print(Operand->getType(), Out);
1304   // Print parameter attributes list
1305   if (Attrs.hasAttributes(Idx))
1306     Out << ' ' << Attrs.getAsString(Idx);
1307   Out << ' ';
1308   // Print the operand
1309   WriteAsOperandInternal(Out, Operand, &TypePrinter, &Machine, TheModule);
1310 }
1311
1312 void AssemblyWriter::printModule(const Module *M) {
1313   Machine.initialize();
1314
1315   if (!M->getModuleIdentifier().empty() &&
1316       // Don't print the ID if it will start a new line (which would
1317       // require a comment char before it).
1318       M->getModuleIdentifier().find('\n') == std::string::npos)
1319     Out << "; ModuleID = '" << M->getModuleIdentifier() << "'\n";
1320
1321   if (!M->getDataLayout().empty())
1322     Out << "target datalayout = \"" << M->getDataLayout() << "\"\n";
1323   if (!M->getTargetTriple().empty())
1324     Out << "target triple = \"" << M->getTargetTriple() << "\"\n";
1325
1326   if (!M->getModuleInlineAsm().empty()) {
1327     // Split the string into lines, to make it easier to read the .ll file.
1328     std::string Asm = M->getModuleInlineAsm();
1329     size_t CurPos = 0;
1330     size_t NewLine = Asm.find_first_of('\n', CurPos);
1331     Out << '\n';
1332     while (NewLine != std::string::npos) {
1333       // We found a newline, print the portion of the asm string from the
1334       // last newline up to this newline.
1335       Out << "module asm \"";
1336       PrintEscapedString(std::string(Asm.begin()+CurPos, Asm.begin()+NewLine),
1337                          Out);
1338       Out << "\"\n";
1339       CurPos = NewLine+1;
1340       NewLine = Asm.find_first_of('\n', CurPos);
1341     }
1342     std::string rest(Asm.begin()+CurPos, Asm.end());
1343     if (!rest.empty()) {
1344       Out << "module asm \"";
1345       PrintEscapedString(rest, Out);
1346       Out << "\"\n";
1347     }
1348   }
1349
1350   printTypeIdentities();
1351
1352   // Output all globals.
1353   if (!M->global_empty()) Out << '\n';
1354   for (Module::const_global_iterator I = M->global_begin(), E = M->global_end();
1355        I != E; ++I) {
1356     printGlobal(I); Out << '\n';
1357   }
1358
1359   // Output all aliases.
1360   if (!M->alias_empty()) Out << "\n";
1361   for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end();
1362        I != E; ++I)
1363     printAlias(I);
1364
1365   // Output all of the functions.
1366   for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
1367     printFunction(I);
1368
1369   // Output all attribute groups.
1370   if (!Machine.as_empty()) {
1371     Out << '\n';
1372     writeAllAttributeGroups();
1373   }
1374
1375   // Output named metadata.
1376   if (!M->named_metadata_empty()) Out << '\n';
1377
1378   for (Module::const_named_metadata_iterator I = M->named_metadata_begin(),
1379        E = M->named_metadata_end(); I != E; ++I)
1380     printNamedMDNode(I);
1381
1382   // Output metadata.
1383   if (!Machine.mdn_empty()) {
1384     Out << '\n';
1385     writeAllMDNodes();
1386   }
1387 }
1388
1389 void AssemblyWriter::printNamedMDNode(const NamedMDNode *NMD) {
1390   Out << '!';
1391   StringRef Name = NMD->getName();
1392   if (Name.empty()) {
1393     Out << "<empty name> ";
1394   } else {
1395     if (isalpha(Name[0]) || Name[0] == '-' || Name[0] == '$' ||
1396         Name[0] == '.' || Name[0] == '_')
1397       Out << Name[0];
1398     else
1399       Out << '\\' << hexdigit(Name[0] >> 4) << hexdigit(Name[0] & 0x0F);
1400     for (unsigned i = 1, e = Name.size(); i != e; ++i) {
1401       unsigned char C = Name[i];
1402       if (isalnum(C) || C == '-' || C == '$' || C == '.' || C == '_')
1403         Out << C;
1404       else
1405         Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F);
1406     }
1407   }
1408   Out << " = !{";
1409   for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1410     if (i) Out << ", ";
1411     int Slot = Machine.getMetadataSlot(NMD->getOperand(i));
1412     if (Slot == -1)
1413       Out << "<badref>";
1414     else
1415       Out << '!' << Slot;
1416   }
1417   Out << "}\n";
1418 }
1419
1420
1421 static void PrintLinkage(GlobalValue::LinkageTypes LT,
1422                          formatted_raw_ostream &Out) {
1423   switch (LT) {
1424   case GlobalValue::ExternalLinkage: break;
1425   case GlobalValue::PrivateLinkage:       Out << "private ";        break;
1426   case GlobalValue::LinkerPrivateLinkage: Out << "linker_private "; break;
1427   case GlobalValue::LinkerPrivateWeakLinkage:
1428     Out << "linker_private_weak ";
1429     break;
1430   case GlobalValue::InternalLinkage:      Out << "internal ";       break;
1431   case GlobalValue::LinkOnceAnyLinkage:   Out << "linkonce ";       break;
1432   case GlobalValue::LinkOnceODRLinkage:   Out << "linkonce_odr ";   break;
1433   case GlobalValue::LinkOnceODRAutoHideLinkage:
1434     Out << "linkonce_odr_auto_hide ";
1435     break;
1436   case GlobalValue::WeakAnyLinkage:       Out << "weak ";           break;
1437   case GlobalValue::WeakODRLinkage:       Out << "weak_odr ";       break;
1438   case GlobalValue::CommonLinkage:        Out << "common ";         break;
1439   case GlobalValue::AppendingLinkage:     Out << "appending ";      break;
1440   case GlobalValue::DLLImportLinkage:     Out << "dllimport ";      break;
1441   case GlobalValue::DLLExportLinkage:     Out << "dllexport ";      break;
1442   case GlobalValue::ExternalWeakLinkage:  Out << "extern_weak ";    break;
1443   case GlobalValue::AvailableExternallyLinkage:
1444     Out << "available_externally ";
1445     break;
1446   }
1447 }
1448
1449
1450 static void PrintVisibility(GlobalValue::VisibilityTypes Vis,
1451                             formatted_raw_ostream &Out) {
1452   switch (Vis) {
1453   case GlobalValue::DefaultVisibility: break;
1454   case GlobalValue::HiddenVisibility:    Out << "hidden "; break;
1455   case GlobalValue::ProtectedVisibility: Out << "protected "; break;
1456   }
1457 }
1458
1459 static void PrintThreadLocalModel(GlobalVariable::ThreadLocalMode TLM,
1460                                   formatted_raw_ostream &Out) {
1461   switch (TLM) {
1462     case GlobalVariable::NotThreadLocal:
1463       break;
1464     case GlobalVariable::GeneralDynamicTLSModel:
1465       Out << "thread_local ";
1466       break;
1467     case GlobalVariable::LocalDynamicTLSModel:
1468       Out << "thread_local(localdynamic) ";
1469       break;
1470     case GlobalVariable::InitialExecTLSModel:
1471       Out << "thread_local(initialexec) ";
1472       break;
1473     case GlobalVariable::LocalExecTLSModel:
1474       Out << "thread_local(localexec) ";
1475       break;
1476   }
1477 }
1478
1479 void AssemblyWriter::printGlobal(const GlobalVariable *GV) {
1480   if (GV->isMaterializable())
1481     Out << "; Materializable\n";
1482
1483   WriteAsOperandInternal(Out, GV, &TypePrinter, &Machine, GV->getParent());
1484   Out << " = ";
1485
1486   if (!GV->hasInitializer() && GV->hasExternalLinkage())
1487     Out << "external ";
1488
1489   PrintLinkage(GV->getLinkage(), Out);
1490   PrintVisibility(GV->getVisibility(), Out);
1491   PrintThreadLocalModel(GV->getThreadLocalMode(), Out);
1492
1493   if (unsigned AddressSpace = GV->getType()->getAddressSpace())
1494     Out << "addrspace(" << AddressSpace << ") ";
1495   if (GV->hasUnnamedAddr()) Out << "unnamed_addr ";
1496   if (GV->isExternallyInitialized()) Out << "externally_initialized ";
1497   Out << (GV->isConstant() ? "constant " : "global ");
1498   TypePrinter.print(GV->getType()->getElementType(), Out);
1499
1500   if (GV->hasInitializer()) {
1501     Out << ' ';
1502     writeOperand(GV->getInitializer(), false);
1503   }
1504
1505   if (GV->hasSection()) {
1506     Out << ", section \"";
1507     PrintEscapedString(GV->getSection(), Out);
1508     Out << '"';
1509   }
1510   if (GV->getAlignment())
1511     Out << ", align " << GV->getAlignment();
1512
1513   printInfoComment(*GV);
1514 }
1515
1516 void AssemblyWriter::printAlias(const GlobalAlias *GA) {
1517   if (GA->isMaterializable())
1518     Out << "; Materializable\n";
1519
1520   // Don't crash when dumping partially built GA
1521   if (!GA->hasName())
1522     Out << "<<nameless>> = ";
1523   else {
1524     PrintLLVMName(Out, GA);
1525     Out << " = ";
1526   }
1527   PrintVisibility(GA->getVisibility(), Out);
1528
1529   Out << "alias ";
1530
1531   PrintLinkage(GA->getLinkage(), Out);
1532
1533   const Constant *Aliasee = GA->getAliasee();
1534
1535   if (Aliasee == 0) {
1536     TypePrinter.print(GA->getType(), Out);
1537     Out << " <<NULL ALIASEE>>";
1538   } else {
1539     writeOperand(Aliasee, !isa<ConstantExpr>(Aliasee));
1540   }
1541
1542   printInfoComment(*GA);
1543   Out << '\n';
1544 }
1545
1546 void AssemblyWriter::printTypeIdentities() {
1547   if (TypePrinter.NumberedTypes.empty() &&
1548       TypePrinter.NamedTypes.empty())
1549     return;
1550
1551   Out << '\n';
1552
1553   // We know all the numbers that each type is used and we know that it is a
1554   // dense assignment.  Convert the map to an index table.
1555   std::vector<StructType*> NumberedTypes(TypePrinter.NumberedTypes.size());
1556   for (DenseMap<StructType*, unsigned>::iterator I =
1557        TypePrinter.NumberedTypes.begin(), E = TypePrinter.NumberedTypes.end();
1558        I != E; ++I) {
1559     assert(I->second < NumberedTypes.size() && "Didn't get a dense numbering?");
1560     NumberedTypes[I->second] = I->first;
1561   }
1562
1563   // Emit all numbered types.
1564   for (unsigned i = 0, e = NumberedTypes.size(); i != e; ++i) {
1565     Out << '%' << i << " = type ";
1566
1567     // Make sure we print out at least one level of the type structure, so
1568     // that we do not get %2 = type %2
1569     TypePrinter.printStructBody(NumberedTypes[i], Out);
1570     Out << '\n';
1571   }
1572
1573   for (unsigned i = 0, e = TypePrinter.NamedTypes.size(); i != e; ++i) {
1574     PrintLLVMName(Out, TypePrinter.NamedTypes[i]->getName(), LocalPrefix);
1575     Out << " = type ";
1576
1577     // Make sure we print out at least one level of the type structure, so
1578     // that we do not get %FILE = type %FILE
1579     TypePrinter.printStructBody(TypePrinter.NamedTypes[i], Out);
1580     Out << '\n';
1581   }
1582 }
1583
1584 /// printFunction - Print all aspects of a function.
1585 ///
1586 void AssemblyWriter::printFunction(const Function *F) {
1587   // Print out the return type and name.
1588   Out << '\n';
1589
1590   if (AnnotationWriter) AnnotationWriter->emitFunctionAnnot(F, Out);
1591
1592   if (F->isMaterializable())
1593     Out << "; Materializable\n";
1594
1595   if (F->isDeclaration())
1596     Out << "declare ";
1597   else
1598     Out << "define ";
1599
1600   PrintLinkage(F->getLinkage(), Out);
1601   PrintVisibility(F->getVisibility(), Out);
1602
1603   // Print the calling convention.
1604   if (F->getCallingConv() != CallingConv::C) {
1605     PrintCallingConv(F->getCallingConv(), Out);
1606     Out << " ";
1607   }
1608
1609   FunctionType *FT = F->getFunctionType();
1610   const AttributeSet &Attrs = F->getAttributes();
1611   if (Attrs.hasAttributes(AttributeSet::ReturnIndex))
1612     Out <<  Attrs.getAsString(AttributeSet::ReturnIndex) << ' ';
1613   TypePrinter.print(F->getReturnType(), Out);
1614   Out << ' ';
1615   WriteAsOperandInternal(Out, F, &TypePrinter, &Machine, F->getParent());
1616   Out << '(';
1617   Machine.incorporateFunction(F);
1618
1619   // Loop over the arguments, printing them...
1620
1621   unsigned Idx = 1;
1622   if (!F->isDeclaration()) {
1623     // If this isn't a declaration, print the argument names as well.
1624     for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end();
1625          I != E; ++I) {
1626       // Insert commas as we go... the first arg doesn't get a comma
1627       if (I != F->arg_begin()) Out << ", ";
1628       printArgument(I, Attrs, Idx);
1629       Idx++;
1630     }
1631   } else {
1632     // Otherwise, print the types from the function type.
1633     for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
1634       // Insert commas as we go... the first arg doesn't get a comma
1635       if (i) Out << ", ";
1636
1637       // Output type...
1638       TypePrinter.print(FT->getParamType(i), Out);
1639
1640       if (Attrs.hasAttributes(i+1))
1641         Out << ' ' << Attrs.getAsString(i+1);
1642     }
1643   }
1644
1645   // Finish printing arguments...
1646   if (FT->isVarArg()) {
1647     if (FT->getNumParams()) Out << ", ";
1648     Out << "...";  // Output varargs portion of signature!
1649   }
1650   Out << ')';
1651   if (F->hasUnnamedAddr())
1652     Out << " unnamed_addr";
1653   if (Attrs.hasAttributes(AttributeSet::FunctionIndex))
1654     Out << ' ' << Attrs.getAsString(AttributeSet::FunctionIndex);
1655   if (F->hasSection()) {
1656     Out << " section \"";
1657     PrintEscapedString(F->getSection(), Out);
1658     Out << '"';
1659   }
1660   if (F->getAlignment())
1661     Out << " align " << F->getAlignment();
1662   if (F->hasGC())
1663     Out << " gc \"" << F->getGC() << '"';
1664   if (F->isDeclaration()) {
1665     Out << '\n';
1666   } else {
1667     Out << " {";
1668     // Output all of the function's basic blocks.
1669     for (Function::const_iterator I = F->begin(), E = F->end(); I != E; ++I)
1670       printBasicBlock(I);
1671
1672     Out << "}\n";
1673   }
1674
1675   Machine.purgeFunction();
1676 }
1677
1678 /// printArgument - This member is called for every argument that is passed into
1679 /// the function.  Simply print it out
1680 ///
1681 void AssemblyWriter::printArgument(const Argument *Arg,
1682                                    AttributeSet Attrs, unsigned Idx) {
1683   // Output type...
1684   TypePrinter.print(Arg->getType(), Out);
1685
1686   // Output parameter attributes list
1687   if (Attrs.hasAttributes(Idx))
1688     Out << ' ' << Attrs.getAsString(Idx);
1689
1690   // Output name, if available...
1691   if (Arg->hasName()) {
1692     Out << ' ';
1693     PrintLLVMName(Out, Arg);
1694   }
1695 }
1696
1697 /// printBasicBlock - This member is called for each basic block in a method.
1698 ///
1699 void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
1700   if (BB->hasName()) {              // Print out the label if it exists...
1701     Out << "\n";
1702     PrintLLVMName(Out, BB->getName(), LabelPrefix);
1703     Out << ':';
1704   } else if (!BB->use_empty()) {      // Don't print block # of no uses...
1705     Out << "\n; <label>:";
1706     int Slot = Machine.getLocalSlot(BB);
1707     if (Slot != -1)
1708       Out << Slot;
1709     else
1710       Out << "<badref>";
1711   }
1712
1713   if (BB->getParent() == 0) {
1714     Out.PadToColumn(50);
1715     Out << "; Error: Block without parent!";
1716   } else if (BB != &BB->getParent()->getEntryBlock()) {  // Not the entry block?
1717     // Output predecessors for the block.
1718     Out.PadToColumn(50);
1719     Out << ";";
1720     const_pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
1721
1722     if (PI == PE) {
1723       Out << " No predecessors!";
1724     } else {
1725       Out << " preds = ";
1726       writeOperand(*PI, false);
1727       for (++PI; PI != PE; ++PI) {
1728         Out << ", ";
1729         writeOperand(*PI, false);
1730       }
1731     }
1732   }
1733
1734   Out << "\n";
1735
1736   if (AnnotationWriter) AnnotationWriter->emitBasicBlockStartAnnot(BB, Out);
1737
1738   // Output all of the instructions in the basic block...
1739   for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
1740     printInstruction(*I);
1741     Out << '\n';
1742   }
1743
1744   if (AnnotationWriter) AnnotationWriter->emitBasicBlockEndAnnot(BB, Out);
1745 }
1746
1747 /// printInfoComment - Print a little comment after the instruction indicating
1748 /// which slot it occupies.
1749 ///
1750 void AssemblyWriter::printInfoComment(const Value &V) {
1751   if (AnnotationWriter) {
1752     AnnotationWriter->printInfoComment(V, Out);
1753     return;
1754   }
1755 }
1756
1757 // This member is called for each Instruction in a function..
1758 void AssemblyWriter::printInstruction(const Instruction &I) {
1759   if (AnnotationWriter) AnnotationWriter->emitInstructionAnnot(&I, Out);
1760
1761   // Print out indentation for an instruction.
1762   Out << "  ";
1763
1764   // Print out name if it exists...
1765   if (I.hasName()) {
1766     PrintLLVMName(Out, &I);
1767     Out << " = ";
1768   } else if (!I.getType()->isVoidTy()) {
1769     // Print out the def slot taken.
1770     int SlotNum = Machine.getLocalSlot(&I);
1771     if (SlotNum == -1)
1772       Out << "<badref> = ";
1773     else
1774       Out << '%' << SlotNum << " = ";
1775   }
1776
1777   if (isa<CallInst>(I) && cast<CallInst>(I).isTailCall())
1778     Out << "tail ";
1779
1780   // Print out the opcode...
1781   Out << I.getOpcodeName();
1782
1783   // If this is an atomic load or store, print out the atomic marker.
1784   if ((isa<LoadInst>(I)  && cast<LoadInst>(I).isAtomic()) ||
1785       (isa<StoreInst>(I) && cast<StoreInst>(I).isAtomic()))
1786     Out << " atomic";
1787
1788   // If this is a volatile operation, print out the volatile marker.
1789   if ((isa<LoadInst>(I)  && cast<LoadInst>(I).isVolatile()) ||
1790       (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile()) ||
1791       (isa<AtomicCmpXchgInst>(I) && cast<AtomicCmpXchgInst>(I).isVolatile()) ||
1792       (isa<AtomicRMWInst>(I) && cast<AtomicRMWInst>(I).isVolatile()))
1793     Out << " volatile";
1794
1795   // Print out optimization information.
1796   WriteOptimizationInfo(Out, &I);
1797
1798   // Print out the compare instruction predicates
1799   if (const CmpInst *CI = dyn_cast<CmpInst>(&I))
1800     Out << ' ' << getPredicateText(CI->getPredicate());
1801
1802   // Print out the atomicrmw operation
1803   if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(&I))
1804     writeAtomicRMWOperation(Out, RMWI->getOperation());
1805
1806   // Print out the type of the operands...
1807   const Value *Operand = I.getNumOperands() ? I.getOperand(0) : 0;
1808
1809   // Special case conditional branches to swizzle the condition out to the front
1810   if (isa<BranchInst>(I) && cast<BranchInst>(I).isConditional()) {
1811     const BranchInst &BI(cast<BranchInst>(I));
1812     Out << ' ';
1813     writeOperand(BI.getCondition(), true);
1814     Out << ", ";
1815     writeOperand(BI.getSuccessor(0), true);
1816     Out << ", ";
1817     writeOperand(BI.getSuccessor(1), true);
1818
1819   } else if (isa<SwitchInst>(I)) {
1820     const SwitchInst& SI(cast<SwitchInst>(I));
1821     // Special case switch instruction to get formatting nice and correct.
1822     Out << ' ';
1823     writeOperand(SI.getCondition(), true);
1824     Out << ", ";
1825     writeOperand(SI.getDefaultDest(), true);
1826     Out << " [";
1827     for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end();
1828          i != e; ++i) {
1829       Out << "\n    ";
1830       writeOperand(i.getCaseValue(), true);
1831       Out << ", ";
1832       writeOperand(i.getCaseSuccessor(), true);
1833     }
1834     Out << "\n  ]";
1835   } else if (isa<IndirectBrInst>(I)) {
1836     // Special case indirectbr instruction to get formatting nice and correct.
1837     Out << ' ';
1838     writeOperand(Operand, true);
1839     Out << ", [";
1840
1841     for (unsigned i = 1, e = I.getNumOperands(); i != e; ++i) {
1842       if (i != 1)
1843         Out << ", ";
1844       writeOperand(I.getOperand(i), true);
1845     }
1846     Out << ']';
1847   } else if (const PHINode *PN = dyn_cast<PHINode>(&I)) {
1848     Out << ' ';
1849     TypePrinter.print(I.getType(), Out);
1850     Out << ' ';
1851
1852     for (unsigned op = 0, Eop = PN->getNumIncomingValues(); op < Eop; ++op) {
1853       if (op) Out << ", ";
1854       Out << "[ ";
1855       writeOperand(PN->getIncomingValue(op), false); Out << ", ";
1856       writeOperand(PN->getIncomingBlock(op), false); Out << " ]";
1857     }
1858   } else if (const ExtractValueInst *EVI = dyn_cast<ExtractValueInst>(&I)) {
1859     Out << ' ';
1860     writeOperand(I.getOperand(0), true);
1861     for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
1862       Out << ", " << *i;
1863   } else if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(&I)) {
1864     Out << ' ';
1865     writeOperand(I.getOperand(0), true); Out << ", ";
1866     writeOperand(I.getOperand(1), true);
1867     for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
1868       Out << ", " << *i;
1869   } else if (const LandingPadInst *LPI = dyn_cast<LandingPadInst>(&I)) {
1870     Out << ' ';
1871     TypePrinter.print(I.getType(), Out);
1872     Out << " personality ";
1873     writeOperand(I.getOperand(0), true); Out << '\n';
1874
1875     if (LPI->isCleanup())
1876       Out << "          cleanup";
1877
1878     for (unsigned i = 0, e = LPI->getNumClauses(); i != e; ++i) {
1879       if (i != 0 || LPI->isCleanup()) Out << "\n";
1880       if (LPI->isCatch(i))
1881         Out << "          catch ";
1882       else
1883         Out << "          filter ";
1884
1885       writeOperand(LPI->getClause(i), true);
1886     }
1887   } else if (isa<ReturnInst>(I) && !Operand) {
1888     Out << " void";
1889   } else if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
1890     // Print the calling convention being used.
1891     if (CI->getCallingConv() != CallingConv::C) {
1892       Out << " ";
1893       PrintCallingConv(CI->getCallingConv(), Out);
1894     }
1895
1896     Operand = CI->getCalledValue();
1897     PointerType *PTy = cast<PointerType>(Operand->getType());
1898     FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
1899     Type *RetTy = FTy->getReturnType();
1900     const AttributeSet &PAL = CI->getAttributes();
1901
1902     if (PAL.hasAttributes(AttributeSet::ReturnIndex))
1903       Out << ' ' << PAL.getAsString(AttributeSet::ReturnIndex);
1904
1905     // If possible, print out the short form of the call instruction.  We can
1906     // only do this if the first argument is a pointer to a nonvararg function,
1907     // and if the return type is not a pointer to a function.
1908     //
1909     Out << ' ';
1910     if (!FTy->isVarArg() &&
1911         (!RetTy->isPointerTy() ||
1912          !cast<PointerType>(RetTy)->getElementType()->isFunctionTy())) {
1913       TypePrinter.print(RetTy, Out);
1914       Out << ' ';
1915       writeOperand(Operand, false);
1916     } else {
1917       writeOperand(Operand, true);
1918     }
1919     Out << '(';
1920     for (unsigned op = 0, Eop = CI->getNumArgOperands(); op < Eop; ++op) {
1921       if (op > 0)
1922         Out << ", ";
1923       writeParamOperand(CI->getArgOperand(op), PAL, op + 1);
1924     }
1925     Out << ')';
1926     if (PAL.hasAttributes(AttributeSet::FunctionIndex))
1927       Out << ' ' << PAL.getAsString(AttributeSet::FunctionIndex);
1928   } else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I)) {
1929     Operand = II->getCalledValue();
1930     PointerType *PTy = cast<PointerType>(Operand->getType());
1931     FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
1932     Type *RetTy = FTy->getReturnType();
1933     const AttributeSet &PAL = II->getAttributes();
1934
1935     // Print the calling convention being used.
1936     if (II->getCallingConv() != CallingConv::C) {
1937       Out << " ";
1938       PrintCallingConv(II->getCallingConv(), Out);
1939     }
1940
1941     if (PAL.hasAttributes(AttributeSet::ReturnIndex))
1942       Out << ' ' << PAL.getAsString(AttributeSet::ReturnIndex);
1943
1944     // If possible, print out the short form of the invoke instruction. We can
1945     // only do this if the first argument is a pointer to a nonvararg function,
1946     // and if the return type is not a pointer to a function.
1947     //
1948     Out << ' ';
1949     if (!FTy->isVarArg() &&
1950         (!RetTy->isPointerTy() ||
1951          !cast<PointerType>(RetTy)->getElementType()->isFunctionTy())) {
1952       TypePrinter.print(RetTy, Out);
1953       Out << ' ';
1954       writeOperand(Operand, false);
1955     } else {
1956       writeOperand(Operand, true);
1957     }
1958     Out << '(';
1959     for (unsigned op = 0, Eop = II->getNumArgOperands(); op < Eop; ++op) {
1960       if (op)
1961         Out << ", ";
1962       writeParamOperand(II->getArgOperand(op), PAL, op + 1);
1963     }
1964
1965     Out << ')';
1966     if (PAL.hasAttributes(AttributeSet::FunctionIndex))
1967       Out << ' ' << PAL.getAsString(AttributeSet::FunctionIndex);
1968
1969     Out << "\n          to ";
1970     writeOperand(II->getNormalDest(), true);
1971     Out << " unwind ";
1972     writeOperand(II->getUnwindDest(), true);
1973
1974   } else if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {
1975     Out << ' ';
1976     TypePrinter.print(AI->getAllocatedType(), Out);
1977     if (!AI->getArraySize() || AI->isArrayAllocation()) {
1978       Out << ", ";
1979       writeOperand(AI->getArraySize(), true);
1980     }
1981     if (AI->getAlignment()) {
1982       Out << ", align " << AI->getAlignment();
1983     }
1984   } else if (isa<CastInst>(I)) {
1985     if (Operand) {
1986       Out << ' ';
1987       writeOperand(Operand, true);   // Work with broken code
1988     }
1989     Out << " to ";
1990     TypePrinter.print(I.getType(), Out);
1991   } else if (isa<VAArgInst>(I)) {
1992     if (Operand) {
1993       Out << ' ';
1994       writeOperand(Operand, true);   // Work with broken code
1995     }
1996     Out << ", ";
1997     TypePrinter.print(I.getType(), Out);
1998   } else if (Operand) {   // Print the normal way.
1999
2000     // PrintAllTypes - Instructions who have operands of all the same type
2001     // omit the type from all but the first operand.  If the instruction has
2002     // different type operands (for example br), then they are all printed.
2003     bool PrintAllTypes = false;
2004     Type *TheType = Operand->getType();
2005
2006     // Select, Store and ShuffleVector always print all types.
2007     if (isa<SelectInst>(I) || isa<StoreInst>(I) || isa<ShuffleVectorInst>(I)
2008         || isa<ReturnInst>(I)) {
2009       PrintAllTypes = true;
2010     } else {
2011       for (unsigned i = 1, E = I.getNumOperands(); i != E; ++i) {
2012         Operand = I.getOperand(i);
2013         // note that Operand shouldn't be null, but the test helps make dump()
2014         // more tolerant of malformed IR
2015         if (Operand && Operand->getType() != TheType) {
2016           PrintAllTypes = true;    // We have differing types!  Print them all!
2017           break;
2018         }
2019       }
2020     }
2021
2022     if (!PrintAllTypes) {
2023       Out << ' ';
2024       TypePrinter.print(TheType, Out);
2025     }
2026
2027     Out << ' ';
2028     for (unsigned i = 0, E = I.getNumOperands(); i != E; ++i) {
2029       if (i) Out << ", ";
2030       writeOperand(I.getOperand(i), PrintAllTypes);
2031     }
2032   }
2033
2034   // Print atomic ordering/alignment for memory operations
2035   if (const LoadInst *LI = dyn_cast<LoadInst>(&I)) {
2036     if (LI->isAtomic())
2037       writeAtomic(LI->getOrdering(), LI->getSynchScope());
2038     if (LI->getAlignment())
2039       Out << ", align " << LI->getAlignment();
2040   } else if (const StoreInst *SI = dyn_cast<StoreInst>(&I)) {
2041     if (SI->isAtomic())
2042       writeAtomic(SI->getOrdering(), SI->getSynchScope());
2043     if (SI->getAlignment())
2044       Out << ", align " << SI->getAlignment();
2045   } else if (const AtomicCmpXchgInst *CXI = dyn_cast<AtomicCmpXchgInst>(&I)) {
2046     writeAtomic(CXI->getOrdering(), CXI->getSynchScope());
2047   } else if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(&I)) {
2048     writeAtomic(RMWI->getOrdering(), RMWI->getSynchScope());
2049   } else if (const FenceInst *FI = dyn_cast<FenceInst>(&I)) {
2050     writeAtomic(FI->getOrdering(), FI->getSynchScope());
2051   }
2052
2053   // Print Metadata info.
2054   SmallVector<std::pair<unsigned, MDNode*>, 4> InstMD;
2055   I.getAllMetadata(InstMD);
2056   if (!InstMD.empty()) {
2057     SmallVector<StringRef, 8> MDNames;
2058     I.getType()->getContext().getMDKindNames(MDNames);
2059     for (unsigned i = 0, e = InstMD.size(); i != e; ++i) {
2060       unsigned Kind = InstMD[i].first;
2061        if (Kind < MDNames.size()) {
2062          Out << ", !" << MDNames[Kind];
2063       } else {
2064         Out << ", !<unknown kind #" << Kind << ">";
2065       }
2066       Out << ' ';
2067       WriteAsOperandInternal(Out, InstMD[i].second, &TypePrinter, &Machine,
2068                              TheModule);
2069     }
2070   }
2071   printInfoComment(I);
2072 }
2073
2074 static void WriteMDNodeComment(const MDNode *Node,
2075                                formatted_raw_ostream &Out) {
2076   if (Node->getNumOperands() < 1)
2077     return;
2078
2079   Value *Op = Node->getOperand(0);
2080   if (!Op || !isa<ConstantInt>(Op) || cast<ConstantInt>(Op)->getBitWidth() < 32)
2081     return;
2082
2083   DIDescriptor Desc(Node);
2084   if (Desc.getVersion() < LLVMDebugVersion11)
2085     return;
2086
2087   unsigned Tag = Desc.getTag();
2088   Out.PadToColumn(50);
2089   if (dwarf::TagString(Tag)) {
2090     Out << "; ";
2091     Desc.print(Out);
2092   } else if (Tag == dwarf::DW_TAG_user_base) {
2093     Out << "; [ DW_TAG_user_base ]";
2094   }
2095 }
2096
2097 void AssemblyWriter::writeAllMDNodes() {
2098   SmallVector<const MDNode *, 16> Nodes;
2099   Nodes.resize(Machine.mdn_size());
2100   for (SlotTracker::mdn_iterator I = Machine.mdn_begin(), E = Machine.mdn_end();
2101        I != E; ++I)
2102     Nodes[I->second] = cast<MDNode>(I->first);
2103
2104   for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
2105     Out << '!' << i << " = metadata ";
2106     printMDNodeBody(Nodes[i]);
2107   }
2108 }
2109
2110 void AssemblyWriter::printMDNodeBody(const MDNode *Node) {
2111   WriteMDNodeBodyInternal(Out, Node, &TypePrinter, &Machine, TheModule);
2112   WriteMDNodeComment(Node, Out);
2113   Out << "\n";
2114 }
2115
2116 void AssemblyWriter::writeAllAttributeGroups() {
2117   std::vector<std::pair<AttributeSet, unsigned> > asVec;
2118   asVec.resize(Machine.as_size());
2119
2120   for (SlotTracker::as_iterator I = Machine.as_begin(), E = Machine.as_end();
2121        I != E; ++I)
2122     asVec[I->second] = *I;
2123
2124   for (std::vector<std::pair<AttributeSet, unsigned> >::iterator
2125          I = asVec.begin(), E = asVec.end(); I != E; ++I)
2126     Out << "attributes #" << I->second << " = { "
2127         << I->first.getAsString(AttributeSet::FunctionIndex, true) << " }\n";
2128 }
2129
2130 //===----------------------------------------------------------------------===//
2131 //                       External Interface declarations
2132 //===----------------------------------------------------------------------===//
2133
2134 void Module::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW) const {
2135   SlotTracker SlotTable(this);
2136   formatted_raw_ostream OS(ROS);
2137   AssemblyWriter W(OS, SlotTable, this, AAW);
2138   W.printModule(this);
2139 }
2140
2141 void NamedMDNode::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW) const {
2142   SlotTracker SlotTable(getParent());
2143   formatted_raw_ostream OS(ROS);
2144   AssemblyWriter W(OS, SlotTable, getParent(), AAW);
2145   W.printNamedMDNode(this);
2146 }
2147
2148 void Type::print(raw_ostream &OS) const {
2149   if (this == 0) {
2150     OS << "<null Type>";
2151     return;
2152   }
2153   TypePrinting TP;
2154   TP.print(const_cast<Type*>(this), OS);
2155
2156   // If the type is a named struct type, print the body as well.
2157   if (StructType *STy = dyn_cast<StructType>(const_cast<Type*>(this)))
2158     if (!STy->isLiteral()) {
2159       OS << " = type ";
2160       TP.printStructBody(STy, OS);
2161     }
2162 }
2163
2164 void Value::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW) const {
2165   if (this == 0) {
2166     ROS << "printing a <null> value\n";
2167     return;
2168   }
2169   formatted_raw_ostream OS(ROS);
2170   if (const Instruction *I = dyn_cast<Instruction>(this)) {
2171     const Function *F = I->getParent() ? I->getParent()->getParent() : 0;
2172     SlotTracker SlotTable(F);
2173     AssemblyWriter W(OS, SlotTable, getModuleFromVal(I), AAW);
2174     W.printInstruction(*I);
2175   } else if (const BasicBlock *BB = dyn_cast<BasicBlock>(this)) {
2176     SlotTracker SlotTable(BB->getParent());
2177     AssemblyWriter W(OS, SlotTable, getModuleFromVal(BB), AAW);
2178     W.printBasicBlock(BB);
2179   } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(this)) {
2180     SlotTracker SlotTable(GV->getParent());
2181     AssemblyWriter W(OS, SlotTable, GV->getParent(), AAW);
2182     if (const GlobalVariable *V = dyn_cast<GlobalVariable>(GV))
2183       W.printGlobal(V);
2184     else if (const Function *F = dyn_cast<Function>(GV))
2185       W.printFunction(F);
2186     else
2187       W.printAlias(cast<GlobalAlias>(GV));
2188   } else if (const MDNode *N = dyn_cast<MDNode>(this)) {
2189     const Function *F = N->getFunction();
2190     SlotTracker SlotTable(F);
2191     AssemblyWriter W(OS, SlotTable, F ? F->getParent() : 0, AAW);
2192     W.printMDNodeBody(N);
2193   } else if (const Constant *C = dyn_cast<Constant>(this)) {
2194     TypePrinting TypePrinter;
2195     TypePrinter.print(C->getType(), OS);
2196     OS << ' ';
2197     WriteConstantInternal(OS, C, TypePrinter, 0, 0);
2198   } else if (isa<InlineAsm>(this) || isa<MDString>(this) ||
2199              isa<Argument>(this)) {
2200     WriteAsOperand(OS, this, true, 0);
2201   } else {
2202     // Otherwise we don't know what it is. Call the virtual function to
2203     // allow a subclass to print itself.
2204     printCustom(OS);
2205   }
2206 }
2207
2208 // Value::printCustom - subclasses should override this to implement printing.
2209 void Value::printCustom(raw_ostream &OS) const {
2210   llvm_unreachable("Unknown value to print out!");
2211 }
2212
2213 // Value::dump - allow easy printing of Values from the debugger.
2214 void Value::dump() const { print(dbgs()); dbgs() << '\n'; }
2215
2216 // Type::dump - allow easy printing of Types from the debugger.
2217 void Type::dump() const { print(dbgs()); }
2218
2219 // Module::dump() - Allow printing of Modules from the debugger.
2220 void Module::dump() const { print(dbgs(), 0); }
2221
2222 // NamedMDNode::dump() - Allow printing of NamedMDNodes from the debugger.
2223 void NamedMDNode::dump() const { print(dbgs(), 0); }