IR: Default the Metadata::dump() argument "harder" after r232275
[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/IR/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 "AsmWriter.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/IR/AssemblyAnnotationWriter.h"
23 #include "llvm/IR/CFG.h"
24 #include "llvm/IR/CallingConv.h"
25 #include "llvm/IR/Constants.h"
26 #include "llvm/IR/DebugInfo.h"
27 #include "llvm/IR/DerivedTypes.h"
28 #include "llvm/IR/IRPrintingPasses.h"
29 #include "llvm/IR/InlineAsm.h"
30 #include "llvm/IR/IntrinsicInst.h"
31 #include "llvm/IR/LLVMContext.h"
32 #include "llvm/IR/Module.h"
33 #include "llvm/IR/Operator.h"
34 #include "llvm/IR/TypeFinder.h"
35 #include "llvm/IR/ValueSymbolTable.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 namespace {
53 struct OrderMap {
54   DenseMap<const Value *, std::pair<unsigned, bool>> IDs;
55
56   unsigned size() const { return IDs.size(); }
57   std::pair<unsigned, bool> &operator[](const Value *V) { return IDs[V]; }
58   std::pair<unsigned, bool> lookup(const Value *V) const {
59     return IDs.lookup(V);
60   }
61   void index(const Value *V) {
62     // Explicitly sequence get-size and insert-value operations to avoid UB.
63     unsigned ID = IDs.size() + 1;
64     IDs[V].first = ID;
65   }
66 };
67 }
68
69 static void orderValue(const Value *V, OrderMap &OM) {
70   if (OM.lookup(V).first)
71     return;
72
73   if (const Constant *C = dyn_cast<Constant>(V))
74     if (C->getNumOperands() && !isa<GlobalValue>(C))
75       for (const Value *Op : C->operands())
76         if (!isa<BasicBlock>(Op) && !isa<GlobalValue>(Op))
77           orderValue(Op, OM);
78
79   // Note: we cannot cache this lookup above, since inserting into the map
80   // changes the map's size, and thus affects the other IDs.
81   OM.index(V);
82 }
83
84 static OrderMap orderModule(const Module *M) {
85   // This needs to match the order used by ValueEnumerator::ValueEnumerator()
86   // and ValueEnumerator::incorporateFunction().
87   OrderMap OM;
88
89   for (const GlobalVariable &G : M->globals()) {
90     if (G.hasInitializer())
91       if (!isa<GlobalValue>(G.getInitializer()))
92         orderValue(G.getInitializer(), OM);
93     orderValue(&G, OM);
94   }
95   for (const GlobalAlias &A : M->aliases()) {
96     if (!isa<GlobalValue>(A.getAliasee()))
97       orderValue(A.getAliasee(), OM);
98     orderValue(&A, OM);
99   }
100   for (const Function &F : *M) {
101     if (F.hasPrefixData())
102       if (!isa<GlobalValue>(F.getPrefixData()))
103         orderValue(F.getPrefixData(), OM);
104
105     if (F.hasPrologueData())
106       if (!isa<GlobalValue>(F.getPrologueData()))
107         orderValue(F.getPrologueData(), OM);
108
109     orderValue(&F, OM);
110
111     if (F.isDeclaration())
112       continue;
113
114     for (const Argument &A : F.args())
115       orderValue(&A, OM);
116     for (const BasicBlock &BB : F) {
117       orderValue(&BB, OM);
118       for (const Instruction &I : BB) {
119         for (const Value *Op : I.operands())
120           if ((isa<Constant>(*Op) && !isa<GlobalValue>(*Op)) ||
121               isa<InlineAsm>(*Op))
122             orderValue(Op, OM);
123         orderValue(&I, OM);
124       }
125     }
126   }
127   return OM;
128 }
129
130 static void predictValueUseListOrderImpl(const Value *V, const Function *F,
131                                          unsigned ID, const OrderMap &OM,
132                                          UseListOrderStack &Stack) {
133   // Predict use-list order for this one.
134   typedef std::pair<const Use *, unsigned> Entry;
135   SmallVector<Entry, 64> List;
136   for (const Use &U : V->uses())
137     // Check if this user will be serialized.
138     if (OM.lookup(U.getUser()).first)
139       List.push_back(std::make_pair(&U, List.size()));
140
141   if (List.size() < 2)
142     // We may have lost some users.
143     return;
144
145   bool GetsReversed =
146       !isa<GlobalVariable>(V) && !isa<Function>(V) && !isa<BasicBlock>(V);
147   if (auto *BA = dyn_cast<BlockAddress>(V))
148     ID = OM.lookup(BA->getBasicBlock()).first;
149   std::sort(List.begin(), List.end(), [&](const Entry &L, const Entry &R) {
150     const Use *LU = L.first;
151     const Use *RU = R.first;
152     if (LU == RU)
153       return false;
154
155     auto LID = OM.lookup(LU->getUser()).first;
156     auto RID = OM.lookup(RU->getUser()).first;
157
158     // If ID is 4, then expect: 7 6 5 1 2 3.
159     if (LID < RID) {
160       if (GetsReversed)
161         if (RID <= ID)
162           return true;
163       return false;
164     }
165     if (RID < LID) {
166       if (GetsReversed)
167         if (LID <= ID)
168           return false;
169       return true;
170     }
171
172     // LID and RID are equal, so we have different operands of the same user.
173     // Assume operands are added in order for all instructions.
174     if (GetsReversed)
175       if (LID <= ID)
176         return LU->getOperandNo() < RU->getOperandNo();
177     return LU->getOperandNo() > RU->getOperandNo();
178   });
179
180   if (std::is_sorted(
181           List.begin(), List.end(),
182           [](const Entry &L, const Entry &R) { return L.second < R.second; }))
183     // Order is already correct.
184     return;
185
186   // Store the shuffle.
187   Stack.emplace_back(V, F, List.size());
188   assert(List.size() == Stack.back().Shuffle.size() && "Wrong size");
189   for (size_t I = 0, E = List.size(); I != E; ++I)
190     Stack.back().Shuffle[I] = List[I].second;
191 }
192
193 static void predictValueUseListOrder(const Value *V, const Function *F,
194                                      OrderMap &OM, UseListOrderStack &Stack) {
195   auto &IDPair = OM[V];
196   assert(IDPair.first && "Unmapped value");
197   if (IDPair.second)
198     // Already predicted.
199     return;
200
201   // Do the actual prediction.
202   IDPair.second = true;
203   if (!V->use_empty() && std::next(V->use_begin()) != V->use_end())
204     predictValueUseListOrderImpl(V, F, IDPair.first, OM, Stack);
205
206   // Recursive descent into constants.
207   if (const Constant *C = dyn_cast<Constant>(V))
208     if (C->getNumOperands()) // Visit GlobalValues.
209       for (const Value *Op : C->operands())
210         if (isa<Constant>(Op)) // Visit GlobalValues.
211           predictValueUseListOrder(Op, F, OM, Stack);
212 }
213
214 static UseListOrderStack predictUseListOrder(const Module *M) {
215   OrderMap OM = orderModule(M);
216
217   // Use-list orders need to be serialized after all the users have been added
218   // to a value, or else the shuffles will be incomplete.  Store them per
219   // function in a stack.
220   //
221   // Aside from function order, the order of values doesn't matter much here.
222   UseListOrderStack Stack;
223
224   // We want to visit the functions backward now so we can list function-local
225   // constants in the last Function they're used in.  Module-level constants
226   // have already been visited above.
227   for (auto I = M->rbegin(), E = M->rend(); I != E; ++I) {
228     const Function &F = *I;
229     if (F.isDeclaration())
230       continue;
231     for (const BasicBlock &BB : F)
232       predictValueUseListOrder(&BB, &F, OM, Stack);
233     for (const Argument &A : F.args())
234       predictValueUseListOrder(&A, &F, OM, Stack);
235     for (const BasicBlock &BB : F)
236       for (const Instruction &I : BB)
237         for (const Value *Op : I.operands())
238           if (isa<Constant>(*Op) || isa<InlineAsm>(*Op)) // Visit GlobalValues.
239             predictValueUseListOrder(Op, &F, OM, Stack);
240     for (const BasicBlock &BB : F)
241       for (const Instruction &I : BB)
242         predictValueUseListOrder(&I, &F, OM, Stack);
243   }
244
245   // Visit globals last.
246   for (const GlobalVariable &G : M->globals())
247     predictValueUseListOrder(&G, nullptr, OM, Stack);
248   for (const Function &F : *M)
249     predictValueUseListOrder(&F, nullptr, OM, Stack);
250   for (const GlobalAlias &A : M->aliases())
251     predictValueUseListOrder(&A, nullptr, OM, Stack);
252   for (const GlobalVariable &G : M->globals())
253     if (G.hasInitializer())
254       predictValueUseListOrder(G.getInitializer(), nullptr, OM, Stack);
255   for (const GlobalAlias &A : M->aliases())
256     predictValueUseListOrder(A.getAliasee(), nullptr, OM, Stack);
257   for (const Function &F : *M)
258     if (F.hasPrefixData())
259       predictValueUseListOrder(F.getPrefixData(), nullptr, OM, Stack);
260
261   return Stack;
262 }
263
264 static const Module *getModuleFromVal(const Value *V) {
265   if (const Argument *MA = dyn_cast<Argument>(V))
266     return MA->getParent() ? MA->getParent()->getParent() : nullptr;
267
268   if (const BasicBlock *BB = dyn_cast<BasicBlock>(V))
269     return BB->getParent() ? BB->getParent()->getParent() : nullptr;
270
271   if (const Instruction *I = dyn_cast<Instruction>(V)) {
272     const Function *M = I->getParent() ? I->getParent()->getParent() : nullptr;
273     return M ? M->getParent() : nullptr;
274   }
275
276   if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))
277     return GV->getParent();
278
279   if (const auto *MAV = dyn_cast<MetadataAsValue>(V)) {
280     for (const User *U : MAV->users())
281       if (isa<Instruction>(U))
282         if (const Module *M = getModuleFromVal(U))
283           return M;
284     return nullptr;
285   }
286
287   return nullptr;
288 }
289
290 static void PrintCallingConv(unsigned cc, raw_ostream &Out) {
291   switch (cc) {
292   default:                         Out << "cc" << cc; break;
293   case CallingConv::Fast:          Out << "fastcc"; break;
294   case CallingConv::Cold:          Out << "coldcc"; break;
295   case CallingConv::WebKit_JS:     Out << "webkit_jscc"; break;
296   case CallingConv::AnyReg:        Out << "anyregcc"; break;
297   case CallingConv::PreserveMost:  Out << "preserve_mostcc"; break;
298   case CallingConv::PreserveAll:   Out << "preserve_allcc"; break;
299   case CallingConv::GHC:           Out << "ghccc"; break;
300   case CallingConv::X86_StdCall:   Out << "x86_stdcallcc"; break;
301   case CallingConv::X86_FastCall:  Out << "x86_fastcallcc"; break;
302   case CallingConv::X86_ThisCall:  Out << "x86_thiscallcc"; break;
303   case CallingConv::X86_VectorCall:Out << "x86_vectorcallcc"; break;
304   case CallingConv::Intel_OCL_BI:  Out << "intel_ocl_bicc"; break;
305   case CallingConv::ARM_APCS:      Out << "arm_apcscc"; break;
306   case CallingConv::ARM_AAPCS:     Out << "arm_aapcscc"; break;
307   case CallingConv::ARM_AAPCS_VFP: Out << "arm_aapcs_vfpcc"; break;
308   case CallingConv::MSP430_INTR:   Out << "msp430_intrcc"; break;
309   case CallingConv::PTX_Kernel:    Out << "ptx_kernel"; break;
310   case CallingConv::PTX_Device:    Out << "ptx_device"; break;
311   case CallingConv::X86_64_SysV:   Out << "x86_64_sysvcc"; break;
312   case CallingConv::X86_64_Win64:  Out << "x86_64_win64cc"; break;
313   case CallingConv::SPIR_FUNC:     Out << "spir_func"; break;
314   case CallingConv::SPIR_KERNEL:   Out << "spir_kernel"; break;
315   }
316 }
317
318 // PrintEscapedString - Print each character of the specified string, escaping
319 // it if it is not printable or if it is an escape char.
320 static void PrintEscapedString(StringRef Name, raw_ostream &Out) {
321   for (unsigned i = 0, e = Name.size(); i != e; ++i) {
322     unsigned char C = Name[i];
323     if (isprint(C) && C != '\\' && C != '"')
324       Out << C;
325     else
326       Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F);
327   }
328 }
329
330 enum PrefixType {
331   GlobalPrefix,
332   ComdatPrefix,
333   LabelPrefix,
334   LocalPrefix,
335   NoPrefix
336 };
337
338 /// PrintLLVMName - Turn the specified name into an 'LLVM name', which is either
339 /// prefixed with % (if the string only contains simple characters) or is
340 /// surrounded with ""'s (if it has special chars in it).  Print it out.
341 static void PrintLLVMName(raw_ostream &OS, StringRef Name, PrefixType Prefix) {
342   assert(!Name.empty() && "Cannot get empty name!");
343   switch (Prefix) {
344   case NoPrefix: break;
345   case GlobalPrefix: OS << '@'; break;
346   case ComdatPrefix: OS << '$'; break;
347   case LabelPrefix:  break;
348   case LocalPrefix:  OS << '%'; break;
349   }
350
351   // Scan the name to see if it needs quotes first.
352   bool NeedsQuotes = isdigit(static_cast<unsigned char>(Name[0]));
353   if (!NeedsQuotes) {
354     for (unsigned i = 0, e = Name.size(); i != e; ++i) {
355       // By making this unsigned, the value passed in to isalnum will always be
356       // in the range 0-255.  This is important when building with MSVC because
357       // its implementation will assert.  This situation can arise when dealing
358       // with UTF-8 multibyte characters.
359       unsigned char C = Name[i];
360       if (!isalnum(static_cast<unsigned char>(C)) && C != '-' && C != '.' &&
361           C != '_') {
362         NeedsQuotes = true;
363         break;
364       }
365     }
366   }
367
368   // If we didn't need any quotes, just write out the name in one blast.
369   if (!NeedsQuotes) {
370     OS << Name;
371     return;
372   }
373
374   // Okay, we need quotes.  Output the quotes and escape any scary characters as
375   // needed.
376   OS << '"';
377   PrintEscapedString(Name, OS);
378   OS << '"';
379 }
380
381 /// PrintLLVMName - Turn the specified name into an 'LLVM name', which is either
382 /// prefixed with % (if the string only contains simple characters) or is
383 /// surrounded with ""'s (if it has special chars in it).  Print it out.
384 static void PrintLLVMName(raw_ostream &OS, const Value *V) {
385   PrintLLVMName(OS, V->getName(),
386                 isa<GlobalValue>(V) ? GlobalPrefix : LocalPrefix);
387 }
388
389
390 namespace llvm {
391
392 void TypePrinting::incorporateTypes(const Module &M) {
393   NamedTypes.run(M, false);
394
395   // The list of struct types we got back includes all the struct types, split
396   // the unnamed ones out to a numbering and remove the anonymous structs.
397   unsigned NextNumber = 0;
398
399   std::vector<StructType*>::iterator NextToUse = NamedTypes.begin(), I, E;
400   for (I = NamedTypes.begin(), E = NamedTypes.end(); I != E; ++I) {
401     StructType *STy = *I;
402
403     // Ignore anonymous types.
404     if (STy->isLiteral())
405       continue;
406
407     if (STy->getName().empty())
408       NumberedTypes[STy] = NextNumber++;
409     else
410       *NextToUse++ = STy;
411   }
412
413   NamedTypes.erase(NextToUse, NamedTypes.end());
414 }
415
416
417 /// CalcTypeName - Write the specified type to the specified raw_ostream, making
418 /// use of type names or up references to shorten the type name where possible.
419 void TypePrinting::print(Type *Ty, raw_ostream &OS) {
420   switch (Ty->getTypeID()) {
421   case Type::VoidTyID:      OS << "void"; return;
422   case Type::HalfTyID:      OS << "half"; return;
423   case Type::FloatTyID:     OS << "float"; return;
424   case Type::DoubleTyID:    OS << "double"; return;
425   case Type::X86_FP80TyID:  OS << "x86_fp80"; return;
426   case Type::FP128TyID:     OS << "fp128"; return;
427   case Type::PPC_FP128TyID: OS << "ppc_fp128"; return;
428   case Type::LabelTyID:     OS << "label"; return;
429   case Type::MetadataTyID:  OS << "metadata"; return;
430   case Type::X86_MMXTyID:   OS << "x86_mmx"; return;
431   case Type::IntegerTyID:
432     OS << 'i' << cast<IntegerType>(Ty)->getBitWidth();
433     return;
434
435   case Type::FunctionTyID: {
436     FunctionType *FTy = cast<FunctionType>(Ty);
437     print(FTy->getReturnType(), OS);
438     OS << " (";
439     for (FunctionType::param_iterator I = FTy->param_begin(),
440          E = FTy->param_end(); I != E; ++I) {
441       if (I != FTy->param_begin())
442         OS << ", ";
443       print(*I, OS);
444     }
445     if (FTy->isVarArg()) {
446       if (FTy->getNumParams()) OS << ", ";
447       OS << "...";
448     }
449     OS << ')';
450     return;
451   }
452   case Type::StructTyID: {
453     StructType *STy = cast<StructType>(Ty);
454
455     if (STy->isLiteral())
456       return printStructBody(STy, OS);
457
458     if (!STy->getName().empty())
459       return PrintLLVMName(OS, STy->getName(), LocalPrefix);
460
461     DenseMap<StructType*, unsigned>::iterator I = NumberedTypes.find(STy);
462     if (I != NumberedTypes.end())
463       OS << '%' << I->second;
464     else  // Not enumerated, print the hex address.
465       OS << "%\"type " << STy << '\"';
466     return;
467   }
468   case Type::PointerTyID: {
469     PointerType *PTy = cast<PointerType>(Ty);
470     print(PTy->getElementType(), OS);
471     if (unsigned AddressSpace = PTy->getAddressSpace())
472       OS << " addrspace(" << AddressSpace << ')';
473     OS << '*';
474     return;
475   }
476   case Type::ArrayTyID: {
477     ArrayType *ATy = cast<ArrayType>(Ty);
478     OS << '[' << ATy->getNumElements() << " x ";
479     print(ATy->getElementType(), OS);
480     OS << ']';
481     return;
482   }
483   case Type::VectorTyID: {
484     VectorType *PTy = cast<VectorType>(Ty);
485     OS << "<" << PTy->getNumElements() << " x ";
486     print(PTy->getElementType(), OS);
487     OS << '>';
488     return;
489   }
490   }
491   llvm_unreachable("Invalid TypeID");
492 }
493
494 void TypePrinting::printStructBody(StructType *STy, raw_ostream &OS) {
495   if (STy->isOpaque()) {
496     OS << "opaque";
497     return;
498   }
499
500   if (STy->isPacked())
501     OS << '<';
502
503   if (STy->getNumElements() == 0) {
504     OS << "{}";
505   } else {
506     StructType::element_iterator I = STy->element_begin();
507     OS << "{ ";
508     print(*I++, OS);
509     for (StructType::element_iterator E = STy->element_end(); I != E; ++I) {
510       OS << ", ";
511       print(*I, OS);
512     }
513
514     OS << " }";
515   }
516   if (STy->isPacked())
517     OS << '>';
518 }
519
520 //===----------------------------------------------------------------------===//
521 // SlotTracker Class: Enumerate slot numbers for unnamed values
522 //===----------------------------------------------------------------------===//
523 /// This class provides computation of slot numbers for LLVM Assembly writing.
524 ///
525 class SlotTracker {
526 public:
527   /// ValueMap - A mapping of Values to slot numbers.
528   typedef DenseMap<const Value*, unsigned> ValueMap;
529
530 private:
531   /// TheModule - The module for which we are holding slot numbers.
532   const Module* TheModule;
533
534   /// TheFunction - The function for which we are holding slot numbers.
535   const Function* TheFunction;
536   bool FunctionProcessed;
537   bool ShouldInitializeAllMetadata;
538
539   /// mMap - The slot map for the module level data.
540   ValueMap mMap;
541   unsigned mNext;
542
543   /// fMap - The slot map for the function level data.
544   ValueMap fMap;
545   unsigned fNext;
546
547   /// mdnMap - Map for MDNodes.
548   DenseMap<const MDNode*, unsigned> mdnMap;
549   unsigned mdnNext;
550
551   /// asMap - The slot map for attribute sets.
552   DenseMap<AttributeSet, unsigned> asMap;
553   unsigned asNext;
554 public:
555   /// Construct from a module.
556   ///
557   /// If \c ShouldInitializeAllMetadata, initializes all metadata in all
558   /// functions, giving correct numbering for metadata referenced only from
559   /// within a function (even if no functions have been initialized).
560   explicit SlotTracker(const Module *M,
561                        bool ShouldInitializeAllMetadata = false);
562   /// Construct from a function, starting out in incorp state.
563   ///
564   /// If \c ShouldInitializeAllMetadata, initializes all metadata in all
565   /// functions, giving correct numbering for metadata referenced only from
566   /// within a function (even if no functions have been initialized).
567   explicit SlotTracker(const Function *F,
568                        bool ShouldInitializeAllMetadata = false);
569
570   /// Return the slot number of the specified value in it's type
571   /// plane.  If something is not in the SlotTracker, return -1.
572   int getLocalSlot(const Value *V);
573   int getGlobalSlot(const GlobalValue *V);
574   int getMetadataSlot(const MDNode *N);
575   int getAttributeGroupSlot(AttributeSet AS);
576
577   /// If you'd like to deal with a function instead of just a module, use
578   /// this method to get its data into the SlotTracker.
579   void incorporateFunction(const Function *F) {
580     TheFunction = F;
581     FunctionProcessed = false;
582   }
583
584   const Function *getFunction() const { return TheFunction; }
585
586   /// After calling incorporateFunction, use this method to remove the
587   /// most recently incorporated function from the SlotTracker. This
588   /// will reset the state of the machine back to just the module contents.
589   void purgeFunction();
590
591   /// MDNode map iterators.
592   typedef DenseMap<const MDNode*, unsigned>::iterator mdn_iterator;
593   mdn_iterator mdn_begin() { return mdnMap.begin(); }
594   mdn_iterator mdn_end() { return mdnMap.end(); }
595   unsigned mdn_size() const { return mdnMap.size(); }
596   bool mdn_empty() const { return mdnMap.empty(); }
597
598   /// AttributeSet map iterators.
599   typedef DenseMap<AttributeSet, unsigned>::iterator as_iterator;
600   as_iterator as_begin()   { return asMap.begin(); }
601   as_iterator as_end()     { return asMap.end(); }
602   unsigned as_size() const { return asMap.size(); }
603   bool as_empty() const    { return asMap.empty(); }
604
605   /// This function does the actual initialization.
606   inline void initialize();
607
608   // Implementation Details
609 private:
610   /// CreateModuleSlot - Insert the specified GlobalValue* into the slot table.
611   void CreateModuleSlot(const GlobalValue *V);
612
613   /// CreateMetadataSlot - Insert the specified MDNode* into the slot table.
614   void CreateMetadataSlot(const MDNode *N);
615
616   /// CreateFunctionSlot - Insert the specified Value* into the slot table.
617   void CreateFunctionSlot(const Value *V);
618
619   /// \brief Insert the specified AttributeSet into the slot table.
620   void CreateAttributeSetSlot(AttributeSet AS);
621
622   /// Add all of the module level global variables (and their initializers)
623   /// and function declarations, but not the contents of those functions.
624   void processModule();
625
626   /// Add all of the functions arguments, basic blocks, and instructions.
627   void processFunction();
628
629   /// Add all of the metadata from a function.
630   void processFunctionMetadata(const Function &F);
631
632   /// Add all of the metadata from an instruction.
633   void processInstructionMetadata(const Instruction &I);
634
635   SlotTracker(const SlotTracker &) = delete;
636   void operator=(const SlotTracker &) = delete;
637 };
638
639 SlotTracker *createSlotTracker(const Module *M) {
640   return new SlotTracker(M);
641 }
642
643 static SlotTracker *createSlotTracker(const Value *V) {
644   if (const Argument *FA = dyn_cast<Argument>(V))
645     return new SlotTracker(FA->getParent());
646
647   if (const Instruction *I = dyn_cast<Instruction>(V))
648     if (I->getParent())
649       return new SlotTracker(I->getParent()->getParent());
650
651   if (const BasicBlock *BB = dyn_cast<BasicBlock>(V))
652     return new SlotTracker(BB->getParent());
653
654   if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
655     return new SlotTracker(GV->getParent());
656
657   if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(V))
658     return new SlotTracker(GA->getParent());
659
660   if (const Function *Func = dyn_cast<Function>(V))
661     return new SlotTracker(Func);
662
663   return nullptr;
664 }
665
666 #if 0
667 #define ST_DEBUG(X) dbgs() << X
668 #else
669 #define ST_DEBUG(X)
670 #endif
671
672 // Module level constructor. Causes the contents of the Module (sans functions)
673 // to be added to the slot table.
674 SlotTracker::SlotTracker(const Module *M, bool ShouldInitializeAllMetadata)
675     : TheModule(M), TheFunction(nullptr), FunctionProcessed(false),
676       ShouldInitializeAllMetadata(ShouldInitializeAllMetadata), mNext(0),
677       fNext(0), mdnNext(0), asNext(0) {}
678
679 // Function level constructor. Causes the contents of the Module and the one
680 // function provided to be added to the slot table.
681 SlotTracker::SlotTracker(const Function *F, bool ShouldInitializeAllMetadata)
682     : TheModule(F ? F->getParent() : nullptr), TheFunction(F),
683       FunctionProcessed(false),
684       ShouldInitializeAllMetadata(ShouldInitializeAllMetadata), mNext(0),
685       fNext(0), mdnNext(0), asNext(0) {}
686
687 inline void SlotTracker::initialize() {
688   if (TheModule) {
689     processModule();
690     TheModule = nullptr; ///< Prevent re-processing next time we're called.
691   }
692
693   if (TheFunction && !FunctionProcessed)
694     processFunction();
695 }
696
697 // Iterate through all the global variables, functions, and global
698 // variable initializers and create slots for them.
699 void SlotTracker::processModule() {
700   ST_DEBUG("begin processModule!\n");
701
702   // Add all of the unnamed global variables to the value table.
703   for (Module::const_global_iterator I = TheModule->global_begin(),
704          E = TheModule->global_end(); I != E; ++I) {
705     if (!I->hasName())
706       CreateModuleSlot(I);
707   }
708
709   // Add metadata used by named metadata.
710   for (Module::const_named_metadata_iterator
711          I = TheModule->named_metadata_begin(),
712          E = TheModule->named_metadata_end(); I != E; ++I) {
713     const NamedMDNode *NMD = I;
714     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
715       CreateMetadataSlot(NMD->getOperand(i));
716   }
717
718   for (Module::const_iterator I = TheModule->begin(), E = TheModule->end();
719        I != E; ++I) {
720     if (!I->hasName())
721       // Add all the unnamed functions to the table.
722       CreateModuleSlot(I);
723
724     if (ShouldInitializeAllMetadata)
725       processFunctionMetadata(*I);
726
727     // Add all the function attributes to the table.
728     // FIXME: Add attributes of other objects?
729     AttributeSet FnAttrs = I->getAttributes().getFnAttributes();
730     if (FnAttrs.hasAttributes(AttributeSet::FunctionIndex))
731       CreateAttributeSetSlot(FnAttrs);
732   }
733
734   ST_DEBUG("end processModule!\n");
735 }
736
737 // Process the arguments, basic blocks, and instructions  of a function.
738 void SlotTracker::processFunction() {
739   ST_DEBUG("begin processFunction!\n");
740   fNext = 0;
741
742   // Add all the function arguments with no names.
743   for(Function::const_arg_iterator AI = TheFunction->arg_begin(),
744       AE = TheFunction->arg_end(); AI != AE; ++AI)
745     if (!AI->hasName())
746       CreateFunctionSlot(AI);
747
748   ST_DEBUG("Inserting Instructions:\n");
749
750   // Add all of the basic blocks and instructions with no names.
751   for (auto &BB : *TheFunction) {
752     if (!BB.hasName())
753       CreateFunctionSlot(&BB);
754
755     for (auto &I : BB) {
756       if (!I.getType()->isVoidTy() && !I.hasName())
757         CreateFunctionSlot(&I);
758
759       processInstructionMetadata(I);
760
761       // We allow direct calls to any llvm.foo function here, because the
762       // target may not be linked into the optimizer.
763       if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
764         // Add all the call attributes to the table.
765         AttributeSet Attrs = CI->getAttributes().getFnAttributes();
766         if (Attrs.hasAttributes(AttributeSet::FunctionIndex))
767           CreateAttributeSetSlot(Attrs);
768       } else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I)) {
769         // Add all the call attributes to the table.
770         AttributeSet Attrs = II->getAttributes().getFnAttributes();
771         if (Attrs.hasAttributes(AttributeSet::FunctionIndex))
772           CreateAttributeSetSlot(Attrs);
773       }
774     }
775   }
776
777   FunctionProcessed = true;
778
779   ST_DEBUG("end processFunction!\n");
780 }
781
782 void SlotTracker::processFunctionMetadata(const Function &F) {
783   for (auto &BB : F)
784     for (auto &I : BB)
785       processInstructionMetadata(I);
786 }
787
788 void SlotTracker::processInstructionMetadata(const Instruction &I) {
789   // Process metadata used directly by intrinsics.
790   if (const CallInst *CI = dyn_cast<CallInst>(&I))
791     if (Function *F = CI->getCalledFunction())
792       if (F->isIntrinsic())
793         for (auto &Op : I.operands())
794           if (auto *V = dyn_cast_or_null<MetadataAsValue>(Op))
795             if (MDNode *N = dyn_cast<MDNode>(V->getMetadata()))
796               CreateMetadataSlot(N);
797
798   // Process metadata attached to this instruction.
799   SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
800   I.getAllMetadata(MDs);
801   for (auto &MD : MDs)
802     CreateMetadataSlot(MD.second);
803 }
804
805 /// Clean up after incorporating a function. This is the only way to get out of
806 /// the function incorporation state that affects get*Slot/Create*Slot. Function
807 /// incorporation state is indicated by TheFunction != 0.
808 void SlotTracker::purgeFunction() {
809   ST_DEBUG("begin purgeFunction!\n");
810   fMap.clear(); // Simply discard the function level map
811   TheFunction = nullptr;
812   FunctionProcessed = false;
813   ST_DEBUG("end purgeFunction!\n");
814 }
815
816 /// getGlobalSlot - Get the slot number of a global value.
817 int SlotTracker::getGlobalSlot(const GlobalValue *V) {
818   // Check for uninitialized state and do lazy initialization.
819   initialize();
820
821   // Find the value in the module map
822   ValueMap::iterator MI = mMap.find(V);
823   return MI == mMap.end() ? -1 : (int)MI->second;
824 }
825
826 /// getMetadataSlot - Get the slot number of a MDNode.
827 int SlotTracker::getMetadataSlot(const MDNode *N) {
828   // Check for uninitialized state and do lazy initialization.
829   initialize();
830
831   // Find the MDNode in the module map
832   mdn_iterator MI = mdnMap.find(N);
833   return MI == mdnMap.end() ? -1 : (int)MI->second;
834 }
835
836
837 /// getLocalSlot - Get the slot number for a value that is local to a function.
838 int SlotTracker::getLocalSlot(const Value *V) {
839   assert(!isa<Constant>(V) && "Can't get a constant or global slot with this!");
840
841   // Check for uninitialized state and do lazy initialization.
842   initialize();
843
844   ValueMap::iterator FI = fMap.find(V);
845   return FI == fMap.end() ? -1 : (int)FI->second;
846 }
847
848 int SlotTracker::getAttributeGroupSlot(AttributeSet AS) {
849   // Check for uninitialized state and do lazy initialization.
850   initialize();
851
852   // Find the AttributeSet in the module map.
853   as_iterator AI = asMap.find(AS);
854   return AI == asMap.end() ? -1 : (int)AI->second;
855 }
856
857 /// CreateModuleSlot - Insert the specified GlobalValue* into the slot table.
858 void SlotTracker::CreateModuleSlot(const GlobalValue *V) {
859   assert(V && "Can't insert a null Value into SlotTracker!");
860   assert(!V->getType()->isVoidTy() && "Doesn't need a slot!");
861   assert(!V->hasName() && "Doesn't need a slot!");
862
863   unsigned DestSlot = mNext++;
864   mMap[V] = DestSlot;
865
866   ST_DEBUG("  Inserting value [" << V->getType() << "] = " << V << " slot=" <<
867            DestSlot << " [");
868   // G = Global, F = Function, A = Alias, o = other
869   ST_DEBUG((isa<GlobalVariable>(V) ? 'G' :
870             (isa<Function>(V) ? 'F' :
871              (isa<GlobalAlias>(V) ? 'A' : 'o'))) << "]\n");
872 }
873
874 /// CreateSlot - Create a new slot for the specified value if it has no name.
875 void SlotTracker::CreateFunctionSlot(const Value *V) {
876   assert(!V->getType()->isVoidTy() && !V->hasName() && "Doesn't need a slot!");
877
878   unsigned DestSlot = fNext++;
879   fMap[V] = DestSlot;
880
881   // G = Global, F = Function, o = other
882   ST_DEBUG("  Inserting value [" << V->getType() << "] = " << V << " slot=" <<
883            DestSlot << " [o]\n");
884 }
885
886 /// CreateModuleSlot - Insert the specified MDNode* into the slot table.
887 void SlotTracker::CreateMetadataSlot(const MDNode *N) {
888   assert(N && "Can't insert a null Value into SlotTracker!");
889
890   unsigned DestSlot = mdnNext;
891   if (!mdnMap.insert(std::make_pair(N, DestSlot)).second)
892     return;
893   ++mdnNext;
894
895   // Recursively add any MDNodes referenced by operands.
896   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
897     if (const MDNode *Op = dyn_cast_or_null<MDNode>(N->getOperand(i)))
898       CreateMetadataSlot(Op);
899 }
900
901 void SlotTracker::CreateAttributeSetSlot(AttributeSet AS) {
902   assert(AS.hasAttributes(AttributeSet::FunctionIndex) &&
903          "Doesn't need a slot!");
904
905   as_iterator I = asMap.find(AS);
906   if (I != asMap.end())
907     return;
908
909   unsigned DestSlot = asNext++;
910   asMap[AS] = DestSlot;
911 }
912
913 //===----------------------------------------------------------------------===//
914 // AsmWriter Implementation
915 //===----------------------------------------------------------------------===//
916
917 static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
918                                    TypePrinting *TypePrinter,
919                                    SlotTracker *Machine,
920                                    const Module *Context);
921
922 static void WriteAsOperandInternal(raw_ostream &Out, const Metadata *MD,
923                                    TypePrinting *TypePrinter,
924                                    SlotTracker *Machine, const Module *Context,
925                                    bool FromValue = false);
926
927 static const char *getPredicateText(unsigned predicate) {
928   const char * pred = "unknown";
929   switch (predicate) {
930   case FCmpInst::FCMP_FALSE: pred = "false"; break;
931   case FCmpInst::FCMP_OEQ:   pred = "oeq"; break;
932   case FCmpInst::FCMP_OGT:   pred = "ogt"; break;
933   case FCmpInst::FCMP_OGE:   pred = "oge"; break;
934   case FCmpInst::FCMP_OLT:   pred = "olt"; break;
935   case FCmpInst::FCMP_OLE:   pred = "ole"; break;
936   case FCmpInst::FCMP_ONE:   pred = "one"; break;
937   case FCmpInst::FCMP_ORD:   pred = "ord"; break;
938   case FCmpInst::FCMP_UNO:   pred = "uno"; break;
939   case FCmpInst::FCMP_UEQ:   pred = "ueq"; break;
940   case FCmpInst::FCMP_UGT:   pred = "ugt"; break;
941   case FCmpInst::FCMP_UGE:   pred = "uge"; break;
942   case FCmpInst::FCMP_ULT:   pred = "ult"; break;
943   case FCmpInst::FCMP_ULE:   pred = "ule"; break;
944   case FCmpInst::FCMP_UNE:   pred = "une"; break;
945   case FCmpInst::FCMP_TRUE:  pred = "true"; break;
946   case ICmpInst::ICMP_EQ:    pred = "eq"; break;
947   case ICmpInst::ICMP_NE:    pred = "ne"; break;
948   case ICmpInst::ICMP_SGT:   pred = "sgt"; break;
949   case ICmpInst::ICMP_SGE:   pred = "sge"; break;
950   case ICmpInst::ICMP_SLT:   pred = "slt"; break;
951   case ICmpInst::ICMP_SLE:   pred = "sle"; break;
952   case ICmpInst::ICMP_UGT:   pred = "ugt"; break;
953   case ICmpInst::ICMP_UGE:   pred = "uge"; break;
954   case ICmpInst::ICMP_ULT:   pred = "ult"; break;
955   case ICmpInst::ICMP_ULE:   pred = "ule"; break;
956   }
957   return pred;
958 }
959
960 static void writeAtomicRMWOperation(raw_ostream &Out,
961                                     AtomicRMWInst::BinOp Op) {
962   switch (Op) {
963   default: Out << " <unknown operation " << Op << ">"; break;
964   case AtomicRMWInst::Xchg: Out << " xchg"; break;
965   case AtomicRMWInst::Add:  Out << " add"; break;
966   case AtomicRMWInst::Sub:  Out << " sub"; break;
967   case AtomicRMWInst::And:  Out << " and"; break;
968   case AtomicRMWInst::Nand: Out << " nand"; break;
969   case AtomicRMWInst::Or:   Out << " or"; break;
970   case AtomicRMWInst::Xor:  Out << " xor"; break;
971   case AtomicRMWInst::Max:  Out << " max"; break;
972   case AtomicRMWInst::Min:  Out << " min"; break;
973   case AtomicRMWInst::UMax: Out << " umax"; break;
974   case AtomicRMWInst::UMin: Out << " umin"; break;
975   }
976 }
977
978 static void WriteOptimizationInfo(raw_ostream &Out, const User *U) {
979   if (const FPMathOperator *FPO = dyn_cast<const FPMathOperator>(U)) {
980     // Unsafe algebra implies all the others, no need to write them all out
981     if (FPO->hasUnsafeAlgebra())
982       Out << " fast";
983     else {
984       if (FPO->hasNoNaNs())
985         Out << " nnan";
986       if (FPO->hasNoInfs())
987         Out << " ninf";
988       if (FPO->hasNoSignedZeros())
989         Out << " nsz";
990       if (FPO->hasAllowReciprocal())
991         Out << " arcp";
992     }
993   }
994
995   if (const OverflowingBinaryOperator *OBO =
996         dyn_cast<OverflowingBinaryOperator>(U)) {
997     if (OBO->hasNoUnsignedWrap())
998       Out << " nuw";
999     if (OBO->hasNoSignedWrap())
1000       Out << " nsw";
1001   } else if (const PossiblyExactOperator *Div =
1002                dyn_cast<PossiblyExactOperator>(U)) {
1003     if (Div->isExact())
1004       Out << " exact";
1005   } else if (const GEPOperator *GEP = dyn_cast<GEPOperator>(U)) {
1006     if (GEP->isInBounds())
1007       Out << " inbounds";
1008   }
1009 }
1010
1011 static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
1012                                   TypePrinting &TypePrinter,
1013                                   SlotTracker *Machine,
1014                                   const Module *Context) {
1015   if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) {
1016     if (CI->getType()->isIntegerTy(1)) {
1017       Out << (CI->getZExtValue() ? "true" : "false");
1018       return;
1019     }
1020     Out << CI->getValue();
1021     return;
1022   }
1023
1024   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(CV)) {
1025     if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEsingle ||
1026         &CFP->getValueAPF().getSemantics() == &APFloat::IEEEdouble) {
1027       // We would like to output the FP constant value in exponential notation,
1028       // but we cannot do this if doing so will lose precision.  Check here to
1029       // make sure that we only output it in exponential format if we can parse
1030       // the value back and get the same value.
1031       //
1032       bool ignored;
1033       bool isHalf = &CFP->getValueAPF().getSemantics()==&APFloat::IEEEhalf;
1034       bool isDouble = &CFP->getValueAPF().getSemantics()==&APFloat::IEEEdouble;
1035       bool isInf = CFP->getValueAPF().isInfinity();
1036       bool isNaN = CFP->getValueAPF().isNaN();
1037       if (!isHalf && !isInf && !isNaN) {
1038         double Val = isDouble ? CFP->getValueAPF().convertToDouble() :
1039                                 CFP->getValueAPF().convertToFloat();
1040         SmallString<128> StrVal;
1041         raw_svector_ostream(StrVal) << Val;
1042
1043         // Check to make sure that the stringized number is not some string like
1044         // "Inf" or NaN, that atof will accept, but the lexer will not.  Check
1045         // that the string matches the "[-+]?[0-9]" regex.
1046         //
1047         if ((StrVal[0] >= '0' && StrVal[0] <= '9') ||
1048             ((StrVal[0] == '-' || StrVal[0] == '+') &&
1049              (StrVal[1] >= '0' && StrVal[1] <= '9'))) {
1050           // Reparse stringized version!
1051           if (APFloat(APFloat::IEEEdouble, StrVal).convertToDouble() == Val) {
1052             Out << StrVal;
1053             return;
1054           }
1055         }
1056       }
1057       // Otherwise we could not reparse it to exactly the same value, so we must
1058       // output the string in hexadecimal format!  Note that loading and storing
1059       // floating point types changes the bits of NaNs on some hosts, notably
1060       // x86, so we must not use these types.
1061       static_assert(sizeof(double) == sizeof(uint64_t),
1062                     "assuming that double is 64 bits!");
1063       char Buffer[40];
1064       APFloat apf = CFP->getValueAPF();
1065       // Halves and floats are represented in ASCII IR as double, convert.
1066       if (!isDouble)
1067         apf.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven,
1068                           &ignored);
1069       Out << "0x" <<
1070               utohex_buffer(uint64_t(apf.bitcastToAPInt().getZExtValue()),
1071                             Buffer+40);
1072       return;
1073     }
1074
1075     // Either half, or some form of long double.
1076     // These appear as a magic letter identifying the type, then a
1077     // fixed number of hex digits.
1078     Out << "0x";
1079     // Bit position, in the current word, of the next nibble to print.
1080     int shiftcount;
1081
1082     if (&CFP->getValueAPF().getSemantics() == &APFloat::x87DoubleExtended) {
1083       Out << 'K';
1084       // api needed to prevent premature destruction
1085       APInt api = CFP->getValueAPF().bitcastToAPInt();
1086       const uint64_t* p = api.getRawData();
1087       uint64_t word = p[1];
1088       shiftcount = 12;
1089       int width = api.getBitWidth();
1090       for (int j=0; j<width; j+=4, shiftcount-=4) {
1091         unsigned int nibble = (word>>shiftcount) & 15;
1092         if (nibble < 10)
1093           Out << (unsigned char)(nibble + '0');
1094         else
1095           Out << (unsigned char)(nibble - 10 + 'A');
1096         if (shiftcount == 0 && j+4 < width) {
1097           word = *p;
1098           shiftcount = 64;
1099           if (width-j-4 < 64)
1100             shiftcount = width-j-4;
1101         }
1102       }
1103       return;
1104     } else if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEquad) {
1105       shiftcount = 60;
1106       Out << 'L';
1107     } else if (&CFP->getValueAPF().getSemantics() == &APFloat::PPCDoubleDouble) {
1108       shiftcount = 60;
1109       Out << 'M';
1110     } else if (&CFP->getValueAPF().getSemantics() == &APFloat::IEEEhalf) {
1111       shiftcount = 12;
1112       Out << 'H';
1113     } else
1114       llvm_unreachable("Unsupported floating point type");
1115     // api needed to prevent premature destruction
1116     APInt api = CFP->getValueAPF().bitcastToAPInt();
1117     const uint64_t* p = api.getRawData();
1118     uint64_t word = *p;
1119     int width = api.getBitWidth();
1120     for (int j=0; j<width; j+=4, shiftcount-=4) {
1121       unsigned int nibble = (word>>shiftcount) & 15;
1122       if (nibble < 10)
1123         Out << (unsigned char)(nibble + '0');
1124       else
1125         Out << (unsigned char)(nibble - 10 + 'A');
1126       if (shiftcount == 0 && j+4 < width) {
1127         word = *(++p);
1128         shiftcount = 64;
1129         if (width-j-4 < 64)
1130           shiftcount = width-j-4;
1131       }
1132     }
1133     return;
1134   }
1135
1136   if (isa<ConstantAggregateZero>(CV)) {
1137     Out << "zeroinitializer";
1138     return;
1139   }
1140
1141   if (const BlockAddress *BA = dyn_cast<BlockAddress>(CV)) {
1142     Out << "blockaddress(";
1143     WriteAsOperandInternal(Out, BA->getFunction(), &TypePrinter, Machine,
1144                            Context);
1145     Out << ", ";
1146     WriteAsOperandInternal(Out, BA->getBasicBlock(), &TypePrinter, Machine,
1147                            Context);
1148     Out << ")";
1149     return;
1150   }
1151
1152   if (const ConstantArray *CA = dyn_cast<ConstantArray>(CV)) {
1153     Type *ETy = CA->getType()->getElementType();
1154     Out << '[';
1155     TypePrinter.print(ETy, Out);
1156     Out << ' ';
1157     WriteAsOperandInternal(Out, CA->getOperand(0),
1158                            &TypePrinter, Machine,
1159                            Context);
1160     for (unsigned i = 1, e = CA->getNumOperands(); i != e; ++i) {
1161       Out << ", ";
1162       TypePrinter.print(ETy, Out);
1163       Out << ' ';
1164       WriteAsOperandInternal(Out, CA->getOperand(i), &TypePrinter, Machine,
1165                              Context);
1166     }
1167     Out << ']';
1168     return;
1169   }
1170
1171   if (const ConstantDataArray *CA = dyn_cast<ConstantDataArray>(CV)) {
1172     // As a special case, print the array as a string if it is an array of
1173     // i8 with ConstantInt values.
1174     if (CA->isString()) {
1175       Out << "c\"";
1176       PrintEscapedString(CA->getAsString(), Out);
1177       Out << '"';
1178       return;
1179     }
1180
1181     Type *ETy = CA->getType()->getElementType();
1182     Out << '[';
1183     TypePrinter.print(ETy, Out);
1184     Out << ' ';
1185     WriteAsOperandInternal(Out, CA->getElementAsConstant(0),
1186                            &TypePrinter, Machine,
1187                            Context);
1188     for (unsigned i = 1, e = CA->getNumElements(); i != e; ++i) {
1189       Out << ", ";
1190       TypePrinter.print(ETy, Out);
1191       Out << ' ';
1192       WriteAsOperandInternal(Out, CA->getElementAsConstant(i), &TypePrinter,
1193                              Machine, Context);
1194     }
1195     Out << ']';
1196     return;
1197   }
1198
1199
1200   if (const ConstantStruct *CS = dyn_cast<ConstantStruct>(CV)) {
1201     if (CS->getType()->isPacked())
1202       Out << '<';
1203     Out << '{';
1204     unsigned N = CS->getNumOperands();
1205     if (N) {
1206       Out << ' ';
1207       TypePrinter.print(CS->getOperand(0)->getType(), Out);
1208       Out << ' ';
1209
1210       WriteAsOperandInternal(Out, CS->getOperand(0), &TypePrinter, Machine,
1211                              Context);
1212
1213       for (unsigned i = 1; i < N; i++) {
1214         Out << ", ";
1215         TypePrinter.print(CS->getOperand(i)->getType(), Out);
1216         Out << ' ';
1217
1218         WriteAsOperandInternal(Out, CS->getOperand(i), &TypePrinter, Machine,
1219                                Context);
1220       }
1221       Out << ' ';
1222     }
1223
1224     Out << '}';
1225     if (CS->getType()->isPacked())
1226       Out << '>';
1227     return;
1228   }
1229
1230   if (isa<ConstantVector>(CV) || isa<ConstantDataVector>(CV)) {
1231     Type *ETy = CV->getType()->getVectorElementType();
1232     Out << '<';
1233     TypePrinter.print(ETy, Out);
1234     Out << ' ';
1235     WriteAsOperandInternal(Out, CV->getAggregateElement(0U), &TypePrinter,
1236                            Machine, Context);
1237     for (unsigned i = 1, e = CV->getType()->getVectorNumElements(); i != e;++i){
1238       Out << ", ";
1239       TypePrinter.print(ETy, Out);
1240       Out << ' ';
1241       WriteAsOperandInternal(Out, CV->getAggregateElement(i), &TypePrinter,
1242                              Machine, Context);
1243     }
1244     Out << '>';
1245     return;
1246   }
1247
1248   if (isa<ConstantPointerNull>(CV)) {
1249     Out << "null";
1250     return;
1251   }
1252
1253   if (isa<UndefValue>(CV)) {
1254     Out << "undef";
1255     return;
1256   }
1257
1258   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) {
1259     Out << CE->getOpcodeName();
1260     WriteOptimizationInfo(Out, CE);
1261     if (CE->isCompare())
1262       Out << ' ' << getPredicateText(CE->getPredicate());
1263     Out << " (";
1264
1265     if (const GEPOperator *GEP = dyn_cast<GEPOperator>(CE)) {
1266       TypePrinter.print(
1267           cast<PointerType>(GEP->getPointerOperandType()->getScalarType())
1268               ->getElementType(),
1269           Out);
1270       Out << ", ";
1271     }
1272
1273     for (User::const_op_iterator OI=CE->op_begin(); OI != CE->op_end(); ++OI) {
1274       TypePrinter.print((*OI)->getType(), Out);
1275       Out << ' ';
1276       WriteAsOperandInternal(Out, *OI, &TypePrinter, Machine, Context);
1277       if (OI+1 != CE->op_end())
1278         Out << ", ";
1279     }
1280
1281     if (CE->hasIndices()) {
1282       ArrayRef<unsigned> Indices = CE->getIndices();
1283       for (unsigned i = 0, e = Indices.size(); i != e; ++i)
1284         Out << ", " << Indices[i];
1285     }
1286
1287     if (CE->isCast()) {
1288       Out << " to ";
1289       TypePrinter.print(CE->getType(), Out);
1290     }
1291
1292     Out << ')';
1293     return;
1294   }
1295
1296   Out << "<placeholder or erroneous Constant>";
1297 }
1298
1299 static void writeMDTuple(raw_ostream &Out, const MDTuple *Node,
1300                          TypePrinting *TypePrinter, SlotTracker *Machine,
1301                          const Module *Context) {
1302   Out << "!{";
1303   for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) {
1304     const Metadata *MD = Node->getOperand(mi);
1305     if (!MD)
1306       Out << "null";
1307     else if (auto *MDV = dyn_cast<ValueAsMetadata>(MD)) {
1308       Value *V = MDV->getValue();
1309       TypePrinter->print(V->getType(), Out);
1310       Out << ' ';
1311       WriteAsOperandInternal(Out, V, TypePrinter, Machine, Context);
1312     } else {
1313       WriteAsOperandInternal(Out, MD, TypePrinter, Machine, Context);
1314     }
1315     if (mi + 1 != me)
1316       Out << ", ";
1317   }
1318
1319   Out << "}";
1320 }
1321
1322 namespace {
1323 struct FieldSeparator {
1324   bool Skip;
1325   const char *Sep;
1326   FieldSeparator(const char *Sep = ", ") : Skip(true), Sep(Sep) {}
1327 };
1328 raw_ostream &operator<<(raw_ostream &OS, FieldSeparator &FS) {
1329   if (FS.Skip) {
1330     FS.Skip = false;
1331     return OS;
1332   }
1333   return OS << FS.Sep;
1334 }
1335 } // end namespace
1336
1337 static void writeMetadataAsOperand(raw_ostream &Out, const Metadata *MD,
1338                                    TypePrinting *TypePrinter,
1339                                    SlotTracker *Machine,
1340                                    const Module *Context) {
1341   if (!MD) {
1342     Out << "null";
1343     return;
1344   }
1345   WriteAsOperandInternal(Out, MD, TypePrinter, Machine, Context);
1346 }
1347
1348 static void writeTag(raw_ostream &Out, FieldSeparator &FS, const DebugNode *N) {
1349   Out << FS << "tag: ";
1350   if (const char *Tag = dwarf::TagString(N->getTag()))
1351     Out << Tag;
1352   else
1353     Out << N->getTag();
1354 }
1355
1356 static void writeStringField(raw_ostream &Out, FieldSeparator &FS,
1357                              StringRef Name, StringRef Value,
1358                              bool ShouldSkipEmpty = true) {
1359   if (ShouldSkipEmpty && Value.empty())
1360     return;
1361
1362   Out << FS << Name << ": \"";
1363   PrintEscapedString(Value, Out);
1364   Out << "\"";
1365 }
1366
1367 static void writeGenericDebugNode(raw_ostream &Out, const GenericDebugNode *N,
1368                                   TypePrinting *TypePrinter,
1369                                   SlotTracker *Machine, const Module *Context) {
1370   Out << "!GenericDebugNode(";
1371   FieldSeparator FS;
1372   writeTag(Out, FS, N);
1373   writeStringField(Out, FS, "header", N->getHeader());
1374   if (N->getNumDwarfOperands()) {
1375     Out << FS << "operands: {";
1376     FieldSeparator IFS;
1377     for (auto &I : N->dwarf_operands()) {
1378       Out << IFS;
1379       writeMetadataAsOperand(Out, I, TypePrinter, Machine, Context);
1380     }
1381     Out << "}";
1382   }
1383   Out << ")";
1384 }
1385
1386 static void writeMDLocation(raw_ostream &Out, const MDLocation *DL,
1387                             TypePrinting *TypePrinter, SlotTracker *Machine,
1388                             const Module *Context) {
1389   Out << "!MDLocation(";
1390   FieldSeparator FS;
1391   // Always output the line, since 0 is a relevant and important value for it.
1392   Out << FS << "line: " << DL->getLine();
1393   if (DL->getColumn())
1394     Out << FS << "column: " << DL->getColumn();
1395   Out << FS << "scope: ";
1396   WriteAsOperandInternal(Out, DL->getScope(), TypePrinter, Machine, Context);
1397   if (DL->getInlinedAt()) {
1398     Out << FS << "inlinedAt: ";
1399     WriteAsOperandInternal(Out, DL->getInlinedAt(), TypePrinter, Machine,
1400                            Context);
1401   }
1402   Out << ")";
1403 }
1404
1405 static void writeMDSubrange(raw_ostream &Out, const MDSubrange *N,
1406                             TypePrinting *, SlotTracker *, const Module *) {
1407   Out << "!MDSubrange(";
1408   FieldSeparator FS;
1409   Out << FS << "count: " << N->getCount();
1410   if (N->getLo())
1411     Out << FS << "lowerBound: " << N->getLo();
1412   Out << ")";
1413 }
1414
1415 static void writeMDEnumerator(raw_ostream &Out, const MDEnumerator *N,
1416                               TypePrinting *, SlotTracker *, const Module *) {
1417   Out << "!MDEnumerator(";
1418   FieldSeparator FS;
1419   writeStringField(Out, FS, "name", N->getName(), /* ShouldSkipEmpty */ false);
1420   Out << FS << "value: " << N->getValue();
1421   Out << ")";
1422 }
1423
1424 static void writeMDBasicType(raw_ostream &Out, const MDBasicType *N,
1425                              TypePrinting *, SlotTracker *, const Module *) {
1426   Out << "!MDBasicType(";
1427   FieldSeparator FS;
1428   if (N->getTag() != dwarf::DW_TAG_base_type)
1429     writeTag(Out, FS, N);
1430   writeStringField(Out, FS, "name", N->getName());
1431   if (N->getSizeInBits())
1432     Out << FS << "size: " << N->getSizeInBits();
1433   if (N->getAlignInBits())
1434     Out << FS << "align: " << N->getAlignInBits();
1435   if (unsigned Encoding = N->getEncoding()) {
1436     Out << FS << "encoding: ";
1437     if (const char *S = dwarf::AttributeEncodingString(Encoding))
1438       Out << S;
1439     else
1440       Out << Encoding;
1441   }
1442   Out << ")";
1443 }
1444
1445 static void writeDIFlags(raw_ostream &Out, unsigned Flags) {
1446   SmallVector<unsigned, 8> SplitFlags;
1447   unsigned Extra = DIDescriptor::splitFlags(Flags, SplitFlags);
1448
1449   FieldSeparator FS(" | ");
1450   for (unsigned F : SplitFlags) {
1451     const char *StringF = DIDescriptor::getFlagString(F);
1452     assert(StringF && "Expected valid flag");
1453     Out << FS << StringF;
1454   }
1455   if (Extra || SplitFlags.empty())
1456     Out << FS << Extra;
1457 }
1458
1459 static void writeMDDerivedType(raw_ostream &Out, const MDDerivedType *N,
1460                                TypePrinting *TypePrinter, SlotTracker *Machine,
1461                                const Module *Context) {
1462   Out << "!MDDerivedType(";
1463   FieldSeparator FS;
1464   writeTag(Out, FS, N);
1465   writeStringField(Out, FS, "name", N->getName());
1466   if (N->getScope()) {
1467     Out << FS << "scope: ";
1468     writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1469   }
1470   if (N->getFile()) {
1471     Out << FS << "file: ";
1472     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
1473                            Context);
1474   }
1475   if (N->getLine())
1476     Out << FS << "line: " << N->getLine();
1477   Out << FS << "baseType: ";
1478   writeMetadataAsOperand(Out, N->getBaseType(), TypePrinter, Machine, Context);
1479   if (N->getSizeInBits())
1480     Out << FS << "size: " << N->getSizeInBits();
1481   if (N->getAlignInBits())
1482     Out << FS << "align: " << N->getAlignInBits();
1483   if (N->getOffsetInBits())
1484     Out << FS << "offset: " << N->getOffsetInBits();
1485   if (auto Flags = N->getFlags()) {
1486     Out << FS << "flags: ";
1487     writeDIFlags(Out, Flags);
1488   }
1489   if (N->getExtraData()) {
1490     Out << FS << "extraData: ";
1491     writeMetadataAsOperand(Out, N->getExtraData(), TypePrinter, Machine,
1492                            Context);
1493   }
1494   Out << ")";
1495 }
1496
1497 static void writeMDCompositeType(raw_ostream &Out, const MDCompositeType *N,
1498                                  TypePrinting *TypePrinter,
1499                                  SlotTracker *Machine, const Module *Context) {
1500   Out << "!MDCompositeType(";
1501   FieldSeparator FS;
1502   writeTag(Out, FS, N);
1503   writeStringField(Out, FS, "name", N->getName());
1504   if (N->getScope()) {
1505     Out << FS << "scope: ";
1506     writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1507   }
1508   if (N->getFile()) {
1509     Out << FS << "file: ";
1510     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
1511                            Context);
1512   }
1513   if (N->getLine())
1514     Out << FS << "line: " << N->getLine();
1515   if (N->getBaseType()) {
1516     Out << FS << "baseType: ";
1517     writeMetadataAsOperand(Out, N->getBaseType(), TypePrinter, Machine,
1518                            Context);
1519   }
1520   if (N->getSizeInBits())
1521     Out << FS << "size: " << N->getSizeInBits();
1522   if (N->getAlignInBits())
1523     Out << FS << "align: " << N->getAlignInBits();
1524   if (N->getOffsetInBits())
1525     Out << FS << "offset: " << N->getOffsetInBits();
1526   if (auto Flags = N->getFlags()) {
1527     Out << FS << "flags: ";
1528     writeDIFlags(Out, Flags);
1529   }
1530   if (N->getElements()) {
1531     Out << FS << "elements: ";
1532     writeMetadataAsOperand(Out, N->getElements(), TypePrinter, Machine,
1533                            Context);
1534   }
1535   if (unsigned Lang = N->getRuntimeLang()) {
1536     Out << FS << "runtimeLang: ";
1537     if (const char *S = dwarf::LanguageString(Lang))
1538       Out << S;
1539     else
1540       Out << Lang;
1541   }
1542
1543   if (N->getVTableHolder()) {
1544     Out << FS << "vtableHolder: ";
1545     writeMetadataAsOperand(Out, N->getVTableHolder(), TypePrinter, Machine,
1546                            Context);
1547   }
1548   if (N->getTemplateParams()) {
1549     Out << FS << "templateParams: ";
1550     writeMetadataAsOperand(Out, N->getTemplateParams(), TypePrinter, Machine,
1551                            Context);
1552   }
1553   writeStringField(Out, FS, "identifier", N->getIdentifier());
1554   Out << ")";
1555 }
1556
1557 static void writeMDSubroutineType(raw_ostream &Out, const MDSubroutineType *N,
1558                                   TypePrinting *TypePrinter,
1559                                   SlotTracker *Machine, const Module *Context) {
1560   Out << "!MDSubroutineType(";
1561   FieldSeparator FS;
1562   if (auto Flags = N->getFlags()) {
1563     Out << FS << "flags: ";
1564     writeDIFlags(Out, Flags);
1565   }
1566   Out << FS << "types: ";
1567   writeMetadataAsOperand(Out, N->getTypeArray(), TypePrinter, Machine, Context);
1568   Out << ")";
1569 }
1570
1571 static void writeMDFile(raw_ostream &Out, const MDFile *N, TypePrinting *,
1572                         SlotTracker *, const Module *) {
1573   Out << "!MDFile(";
1574   FieldSeparator FS;
1575   writeStringField(Out, FS, "filename", N->getFilename(),
1576                    /* ShouldSkipEmpty */ false);
1577   writeStringField(Out, FS, "directory", N->getDirectory(),
1578                    /* ShouldSkipEmpty */ false);
1579   Out << ")";
1580 }
1581
1582 static void writeMDCompileUnit(raw_ostream &Out, const MDCompileUnit *N,
1583                                TypePrinting *TypePrinter, SlotTracker *Machine,
1584                                const Module *Context) {
1585   Out << "!MDCompileUnit(";
1586   FieldSeparator FS;
1587   Out << FS << "language: ";
1588   if (const char *Lang = dwarf::LanguageString(N->getSourceLanguage()))
1589     Out << Lang;
1590   else
1591     Out << N->getSourceLanguage();
1592   Out << FS << "file: ";
1593   writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine, Context);
1594   writeStringField(Out, FS, "producer", N->getProducer());
1595   Out << FS << "isOptimized: " << (N->isOptimized() ? "true" : "false");
1596   writeStringField(Out, FS, "flags", N->getFlags());
1597   Out << FS << "runtimeVersion: " << N->getRuntimeVersion();
1598   writeStringField(Out, FS, "splitDebugFilename", N->getSplitDebugFilename());
1599   Out << FS << "emissionKind: " << N->getEmissionKind();
1600   if (N->getEnumTypes()) {
1601     Out << FS << "enums: ";
1602     writeMetadataAsOperand(Out, N->getEnumTypes(), TypePrinter, Machine,
1603                            Context);
1604   }
1605   if (N->getRetainedTypes()) {
1606     Out << FS << "retainedTypes: ";
1607     writeMetadataAsOperand(Out, N->getRetainedTypes(), TypePrinter, Machine,
1608                            Context);
1609   }
1610   if (N->getSubprograms()) {
1611     Out << FS << "subprograms: ";
1612     writeMetadataAsOperand(Out, N->getSubprograms(), TypePrinter, Machine,
1613                            Context);
1614   }
1615   if (N->getGlobalVariables()) {
1616     Out << FS << "globals: ";
1617     writeMetadataAsOperand(Out, N->getGlobalVariables(), TypePrinter, Machine,
1618                            Context);
1619   }
1620   if (N->getImportedEntities()) {
1621     Out << FS << "imports: ";
1622     writeMetadataAsOperand(Out, N->getImportedEntities(), TypePrinter, Machine,
1623                            Context);
1624   }
1625   Out << ")";
1626 }
1627
1628 static void writeMDSubprogram(raw_ostream &Out, const MDSubprogram *N,
1629                               TypePrinting *TypePrinter, SlotTracker *Machine,
1630                               const Module *Context) {
1631   Out << "!MDSubprogram(";
1632   FieldSeparator FS;
1633   writeStringField(Out, FS, "name", N->getName());
1634   writeStringField(Out, FS, "linkageName", N->getLinkageName());
1635   Out << FS << "scope: ";
1636   writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1637   if (N->getFile()) {
1638     Out << FS << "file: ";
1639     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
1640                            Context);
1641   }
1642   if (N->getLine())
1643     Out << FS << "line: " << N->getLine();
1644   if (N->getType()) {
1645     Out << FS << "type: ";
1646     writeMetadataAsOperand(Out, N->getType(), TypePrinter, Machine,
1647                            Context);
1648   }
1649   Out << FS << "isLocal: " << (N->isLocalToUnit() ? "true" : "false");
1650   Out << FS << "isDefinition: " << (N->isDefinition() ? "true" : "false");
1651   if (N->getScopeLine())
1652     Out << FS << "scopeLine: " << N->getScopeLine();
1653   if (N->getContainingType()) {
1654     Out << FS << "containingType: ";
1655     writeMetadataAsOperand(Out, N->getContainingType(), TypePrinter, Machine,
1656                            Context);
1657   }
1658   if (unsigned V = N->getVirtuality()) {
1659     Out << FS << "virtuality: ";
1660     if (const char *S = dwarf::VirtualityString(V))
1661       Out << S;
1662     else
1663       Out << V;
1664   }
1665   if (N->getVirtualIndex())
1666     Out << FS << "virtualIndex: " << N->getVirtualIndex();
1667   if (auto Flags = N->getFlags()) {
1668     Out << FS << "flags: ";
1669     writeDIFlags(Out, Flags);
1670   }
1671   Out << FS << "isOptimized: " << (N->isOptimized() ? "true" : "false");
1672   if (N->getFunction()) {
1673     Out << FS << "function: ";
1674     writeMetadataAsOperand(Out, N->getFunction(), TypePrinter, Machine,
1675                            Context);
1676   }
1677   if (N->getTemplateParams()) {
1678     Out << FS << "templateParams: ";
1679     writeMetadataAsOperand(Out, N->getTemplateParams(), TypePrinter, Machine,
1680                            Context);
1681   }
1682   if (N->getDeclaration()) {
1683     Out << FS << "declaration: ";
1684     writeMetadataAsOperand(Out, N->getDeclaration(), TypePrinter, Machine,
1685                            Context);
1686   }
1687   if (N->getVariables()) {
1688     Out << FS << "variables: ";
1689     writeMetadataAsOperand(Out, N->getVariables(), TypePrinter, Machine,
1690                            Context);
1691   }
1692   Out << ")";
1693 }
1694
1695 static void writeMDLexicalBlock(raw_ostream &Out, const MDLexicalBlock *N,
1696                               TypePrinting *TypePrinter, SlotTracker *Machine,
1697                               const Module *Context) {
1698   Out << "!MDLexicalBlock(";
1699   FieldSeparator FS;
1700   Out << FS << "scope: ";
1701   writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1702   if (N->getFile()) {
1703     Out << FS << "file: ";
1704     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
1705                            Context);
1706   }
1707   if (N->getLine())
1708     Out << FS << "line: " << N->getLine();
1709   if (N->getColumn())
1710     Out << FS << "column: " << N->getColumn();
1711   Out << ")";
1712 }
1713
1714 static void writeMDLexicalBlockFile(raw_ostream &Out,
1715                                     const MDLexicalBlockFile *N,
1716                                     TypePrinting *TypePrinter,
1717                                     SlotTracker *Machine,
1718                                     const Module *Context) {
1719   Out << "!MDLexicalBlockFile(";
1720   FieldSeparator FS;
1721   Out << FS << "scope: ";
1722   writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1723   if (N->getFile()) {
1724     Out << FS << "file: ";
1725     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
1726                            Context);
1727   }
1728   Out << FS << "discriminator: " << N->getDiscriminator();
1729   Out << ")";
1730 }
1731
1732 static void writeMDNamespace(raw_ostream &Out, const MDNamespace *N,
1733                              TypePrinting *TypePrinter, SlotTracker *Machine,
1734                              const Module *Context) {
1735   Out << "!MDNamespace(";
1736   FieldSeparator FS;
1737   writeStringField(Out, FS, "name", N->getName());
1738   Out << FS << "scope: ";
1739   writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1740   if (N->getFile()) {
1741     Out << FS << "file: ";
1742     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine, Context);
1743   }
1744   if (N->getLine())
1745     Out << FS << "line: " << N->getLine();
1746   Out << ")";
1747 }
1748
1749 static void writeMDTemplateTypeParameter(raw_ostream &Out,
1750                                          const MDTemplateTypeParameter *N,
1751                                          TypePrinting *TypePrinter,
1752                                          SlotTracker *Machine,
1753                                          const Module *Context) {
1754   Out << "!MDTemplateTypeParameter(";
1755   FieldSeparator FS;
1756   writeStringField(Out, FS, "name", N->getName());
1757   Out << FS << "type: ";
1758   writeMetadataAsOperand(Out, N->getType(), TypePrinter, Machine, Context);
1759   Out << ")";
1760 }
1761
1762 static void writeMDTemplateValueParameter(raw_ostream &Out,
1763                                           const MDTemplateValueParameter *N,
1764                                           TypePrinting *TypePrinter,
1765                                           SlotTracker *Machine,
1766                                           const Module *Context) {
1767   Out << "!MDTemplateValueParameter(";
1768   FieldSeparator FS;
1769   if (N->getTag() != dwarf::DW_TAG_template_value_parameter)
1770     writeTag(Out, FS, N);
1771   writeStringField(Out, FS, "name", N->getName());
1772   if (auto *Type = N->getType()) {
1773     Out << FS << "type: ";
1774     writeMetadataAsOperand(Out, Type, TypePrinter, Machine, Context);
1775   }
1776   Out << FS << "value: ";
1777   writeMetadataAsOperand(Out, N->getValue(), TypePrinter, Machine, Context);
1778   Out << ")";
1779 }
1780
1781 static void writeMDGlobalVariable(raw_ostream &Out, const MDGlobalVariable *N,
1782                                   TypePrinting *TypePrinter,
1783                                   SlotTracker *Machine, const Module *Context) {
1784   Out << "!MDGlobalVariable(";
1785   FieldSeparator FS;
1786   writeStringField(Out, FS, "name", N->getName());
1787   writeStringField(Out, FS, "linkageName", N->getLinkageName());
1788   Out << FS << "scope: ";
1789   writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1790   if (N->getFile()) {
1791     Out << FS << "file: ";
1792     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
1793                            Context);
1794   }
1795   if (N->getLine())
1796     Out << FS << "line: " << N->getLine();
1797   if (N->getType()) {
1798     Out << FS << "type: ";
1799     writeMetadataAsOperand(Out, N->getType(), TypePrinter, Machine,
1800                            Context);
1801   }
1802   Out << FS << "isLocal: " << (N->isLocalToUnit() ? "true" : "false");
1803   Out << FS << "isDefinition: " << (N->isDefinition() ? "true" : "false");
1804   if (N->getVariable()) {
1805     Out << FS << "variable: ";
1806     writeMetadataAsOperand(Out, N->getVariable(), TypePrinter, Machine,
1807                            Context);
1808   }
1809   if (N->getStaticDataMemberDeclaration()) {
1810     Out << FS << "declaration: ";
1811     writeMetadataAsOperand(Out, N->getStaticDataMemberDeclaration(),
1812                            TypePrinter, Machine, Context);
1813   }
1814   Out << ")";
1815 }
1816
1817 static void writeMDLocalVariable(raw_ostream &Out, const MDLocalVariable *N,
1818                                  TypePrinting *TypePrinter,
1819                                  SlotTracker *Machine, const Module *Context) {
1820   Out << "!MDLocalVariable(";
1821   FieldSeparator FS;
1822   writeTag(Out, FS, N);
1823   writeStringField(Out, FS, "name", N->getName());
1824   if (N->getTag() == dwarf::DW_TAG_arg_variable || N->getArg())
1825     Out << FS << "arg: " << N->getArg();
1826   Out << FS << "scope: ";
1827   writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1828   if (N->getFile()) {
1829     Out << FS << "file: ";
1830     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
1831                            Context);
1832   }
1833   if (N->getLine())
1834     Out << FS << "line: " << N->getLine();
1835   if (N->getType()) {
1836     Out << FS << "type: ";
1837     writeMetadataAsOperand(Out, N->getType(), TypePrinter, Machine,
1838                            Context);
1839   }
1840   if (auto Flags = N->getFlags()) {
1841     Out << FS << "flags: ";
1842     writeDIFlags(Out, Flags);
1843   }
1844   if (N->getInlinedAt()) {
1845     Out << FS << "inlinedAt: ";
1846     writeMetadataAsOperand(Out, N->getInlinedAt(), TypePrinter, Machine,
1847                            Context);
1848   }
1849   Out << ")";
1850 }
1851
1852 static void writeMDExpression(raw_ostream &Out, const MDExpression *N,
1853                               TypePrinting *TypePrinter, SlotTracker *Machine,
1854                               const Module *Context) {
1855   Out << "!MDExpression(";
1856   FieldSeparator FS;
1857   if (N->isValid()) {
1858     for (auto I = N->expr_op_begin(), E = N->expr_op_end(); I != E; ++I) {
1859       const char *OpStr = dwarf::OperationEncodingString(I->getOp());
1860       assert(OpStr && "Expected valid opcode");
1861
1862       Out << FS << OpStr;
1863       for (unsigned A = 0, AE = I->getNumArgs(); A != AE; ++A)
1864         Out << FS << I->getArg(A);
1865     }
1866   } else {
1867     for (const auto &I : N->getElements())
1868       Out << FS << I;
1869   }
1870   Out << ")";
1871 }
1872
1873 static void writeMDObjCProperty(raw_ostream &Out, const MDObjCProperty *N,
1874                                 TypePrinting *TypePrinter, SlotTracker *Machine,
1875                                 const Module *Context) {
1876   Out << "!MDObjCProperty(";
1877   FieldSeparator FS;
1878   writeStringField(Out, FS, "name", N->getName());
1879   if (N->getFile()) {
1880     Out << FS << "file: ";
1881     writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine, Context);
1882   }
1883   if (N->getLine())
1884     Out << FS << "line: " << N->getLine();
1885   writeStringField(Out, FS, "setter", N->getSetterName());
1886   writeStringField(Out, FS, "getter", N->getGetterName());
1887   if (N->getAttributes())
1888     Out << FS << "attributes: " << N->getAttributes();
1889   if (N->getType()) {
1890     Out << FS << "type: ";
1891     writeMetadataAsOperand(Out, N->getType(), TypePrinter, Machine, Context);
1892   }
1893   Out << ")";
1894 }
1895
1896 static void writeMDImportedEntity(raw_ostream &Out, const MDImportedEntity *N,
1897                                   TypePrinting *TypePrinter,
1898                                   SlotTracker *Machine, const Module *Context) {
1899   Out << "!MDImportedEntity(";
1900   FieldSeparator FS;
1901   writeTag(Out, FS, N);
1902   writeStringField(Out, FS, "name", N->getName());
1903   Out << FS << "scope: ";
1904   writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context);
1905   if (N->getEntity()) {
1906     Out << FS << "entity: ";
1907     writeMetadataAsOperand(Out, N->getEntity(), TypePrinter, Machine, Context);
1908   }
1909   if (N->getLine())
1910     Out << FS << "line: " << N->getLine();
1911   Out << ")";
1912 }
1913
1914
1915 static void WriteMDNodeBodyInternal(raw_ostream &Out, const MDNode *Node,
1916                                     TypePrinting *TypePrinter,
1917                                     SlotTracker *Machine,
1918                                     const Module *Context) {
1919   assert(!Node->isTemporary() && "Unexpected forward declaration");
1920
1921   if (Node->isDistinct())
1922     Out << "distinct ";
1923
1924   switch (Node->getMetadataID()) {
1925   default:
1926     llvm_unreachable("Expected uniquable MDNode");
1927 #define HANDLE_MDNODE_LEAF(CLASS)                                              \
1928   case Metadata::CLASS##Kind:                                                  \
1929     write##CLASS(Out, cast<CLASS>(Node), TypePrinter, Machine, Context);       \
1930     break;
1931 #include "llvm/IR/Metadata.def"
1932   }
1933 }
1934
1935 // Full implementation of printing a Value as an operand with support for
1936 // TypePrinting, etc.
1937 static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
1938                                    TypePrinting *TypePrinter,
1939                                    SlotTracker *Machine,
1940                                    const Module *Context) {
1941   if (V->hasName()) {
1942     PrintLLVMName(Out, V);
1943     return;
1944   }
1945
1946   const Constant *CV = dyn_cast<Constant>(V);
1947   if (CV && !isa<GlobalValue>(CV)) {
1948     assert(TypePrinter && "Constants require TypePrinting!");
1949     WriteConstantInternal(Out, CV, *TypePrinter, Machine, Context);
1950     return;
1951   }
1952
1953   if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
1954     Out << "asm ";
1955     if (IA->hasSideEffects())
1956       Out << "sideeffect ";
1957     if (IA->isAlignStack())
1958       Out << "alignstack ";
1959     // We don't emit the AD_ATT dialect as it's the assumed default.
1960     if (IA->getDialect() == InlineAsm::AD_Intel)
1961       Out << "inteldialect ";
1962     Out << '"';
1963     PrintEscapedString(IA->getAsmString(), Out);
1964     Out << "\", \"";
1965     PrintEscapedString(IA->getConstraintString(), Out);
1966     Out << '"';
1967     return;
1968   }
1969
1970   if (auto *MD = dyn_cast<MetadataAsValue>(V)) {
1971     WriteAsOperandInternal(Out, MD->getMetadata(), TypePrinter, Machine,
1972                            Context, /* FromValue */ true);
1973     return;
1974   }
1975
1976   char Prefix = '%';
1977   int Slot;
1978   // If we have a SlotTracker, use it.
1979   if (Machine) {
1980     if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
1981       Slot = Machine->getGlobalSlot(GV);
1982       Prefix = '@';
1983     } else {
1984       Slot = Machine->getLocalSlot(V);
1985
1986       // If the local value didn't succeed, then we may be referring to a value
1987       // from a different function.  Translate it, as this can happen when using
1988       // address of blocks.
1989       if (Slot == -1)
1990         if ((Machine = createSlotTracker(V))) {
1991           Slot = Machine->getLocalSlot(V);
1992           delete Machine;
1993         }
1994     }
1995   } else if ((Machine = createSlotTracker(V))) {
1996     // Otherwise, create one to get the # and then destroy it.
1997     if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
1998       Slot = Machine->getGlobalSlot(GV);
1999       Prefix = '@';
2000     } else {
2001       Slot = Machine->getLocalSlot(V);
2002     }
2003     delete Machine;
2004     Machine = nullptr;
2005   } else {
2006     Slot = -1;
2007   }
2008
2009   if (Slot != -1)
2010     Out << Prefix << Slot;
2011   else
2012     Out << "<badref>";
2013 }
2014
2015 static void WriteAsOperandInternal(raw_ostream &Out, const Metadata *MD,
2016                                    TypePrinting *TypePrinter,
2017                                    SlotTracker *Machine, const Module *Context,
2018                                    bool FromValue) {
2019   if (const MDNode *N = dyn_cast<MDNode>(MD)) {
2020     if (!Machine)
2021       Machine = new SlotTracker(Context);
2022     int Slot = Machine->getMetadataSlot(N);
2023     if (Slot == -1)
2024       // Give the pointer value instead of "badref", since this comes up all
2025       // the time when debugging.
2026       Out << "<" << N << ">";
2027     else
2028       Out << '!' << Slot;
2029     return;
2030   }
2031
2032   if (const MDString *MDS = dyn_cast<MDString>(MD)) {
2033     Out << "!\"";
2034     PrintEscapedString(MDS->getString(), Out);
2035     Out << '"';
2036     return;
2037   }
2038
2039   auto *V = cast<ValueAsMetadata>(MD);
2040   assert(TypePrinter && "TypePrinter required for metadata values");
2041   assert((FromValue || !isa<LocalAsMetadata>(V)) &&
2042          "Unexpected function-local metadata outside of value argument");
2043
2044   TypePrinter->print(V->getValue()->getType(), Out);
2045   Out << ' ';
2046   WriteAsOperandInternal(Out, V->getValue(), TypePrinter, Machine, Context);
2047 }
2048
2049 void AssemblyWriter::init() {
2050   if (!TheModule)
2051     return;
2052   TypePrinter.incorporateTypes(*TheModule);
2053   for (const Function &F : *TheModule)
2054     if (const Comdat *C = F.getComdat())
2055       Comdats.insert(C);
2056   for (const GlobalVariable &GV : TheModule->globals())
2057     if (const Comdat *C = GV.getComdat())
2058       Comdats.insert(C);
2059 }
2060
2061
2062 AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
2063                                const Module *M,
2064                                AssemblyAnnotationWriter *AAW)
2065   : Out(o), TheModule(M), Machine(Mac), AnnotationWriter(AAW) {
2066   init();
2067 }
2068
2069 AssemblyWriter::AssemblyWriter(formatted_raw_ostream &o, const Module *M,
2070                                AssemblyAnnotationWriter *AAW)
2071   : Out(o), TheModule(M), ModuleSlotTracker(createSlotTracker(M)),
2072     Machine(*ModuleSlotTracker), AnnotationWriter(AAW) {
2073   init();
2074 }
2075
2076 AssemblyWriter::~AssemblyWriter() { }
2077
2078 void AssemblyWriter::writeOperand(const Value *Operand, bool PrintType) {
2079   if (!Operand) {
2080     Out << "<null operand!>";
2081     return;
2082   }
2083   if (PrintType) {
2084     TypePrinter.print(Operand->getType(), Out);
2085     Out << ' ';
2086   }
2087   WriteAsOperandInternal(Out, Operand, &TypePrinter, &Machine, TheModule);
2088 }
2089
2090 void AssemblyWriter::writeAtomic(AtomicOrdering Ordering,
2091                                  SynchronizationScope SynchScope) {
2092   if (Ordering == NotAtomic)
2093     return;
2094
2095   switch (SynchScope) {
2096   case SingleThread: Out << " singlethread"; break;
2097   case CrossThread: break;
2098   }
2099
2100   switch (Ordering) {
2101   default: Out << " <bad ordering " << int(Ordering) << ">"; break;
2102   case Unordered: Out << " unordered"; break;
2103   case Monotonic: Out << " monotonic"; break;
2104   case Acquire: Out << " acquire"; break;
2105   case Release: Out << " release"; break;
2106   case AcquireRelease: Out << " acq_rel"; break;
2107   case SequentiallyConsistent: Out << " seq_cst"; break;
2108   }
2109 }
2110
2111 void AssemblyWriter::writeAtomicCmpXchg(AtomicOrdering SuccessOrdering,
2112                                         AtomicOrdering FailureOrdering,
2113                                         SynchronizationScope SynchScope) {
2114   assert(SuccessOrdering != NotAtomic && FailureOrdering != NotAtomic);
2115
2116   switch (SynchScope) {
2117   case SingleThread: Out << " singlethread"; break;
2118   case CrossThread: break;
2119   }
2120
2121   switch (SuccessOrdering) {
2122   default: Out << " <bad ordering " << int(SuccessOrdering) << ">"; break;
2123   case Unordered: Out << " unordered"; break;
2124   case Monotonic: Out << " monotonic"; break;
2125   case Acquire: Out << " acquire"; break;
2126   case Release: Out << " release"; break;
2127   case AcquireRelease: Out << " acq_rel"; break;
2128   case SequentiallyConsistent: Out << " seq_cst"; break;
2129   }
2130
2131   switch (FailureOrdering) {
2132   default: Out << " <bad ordering " << int(FailureOrdering) << ">"; break;
2133   case Unordered: Out << " unordered"; break;
2134   case Monotonic: Out << " monotonic"; break;
2135   case Acquire: Out << " acquire"; break;
2136   case Release: Out << " release"; break;
2137   case AcquireRelease: Out << " acq_rel"; break;
2138   case SequentiallyConsistent: Out << " seq_cst"; break;
2139   }
2140 }
2141
2142 void AssemblyWriter::writeParamOperand(const Value *Operand,
2143                                        AttributeSet Attrs, unsigned Idx) {
2144   if (!Operand) {
2145     Out << "<null operand!>";
2146     return;
2147   }
2148
2149   // Print the type
2150   TypePrinter.print(Operand->getType(), Out);
2151   // Print parameter attributes list
2152   if (Attrs.hasAttributes(Idx))
2153     Out << ' ' << Attrs.getAsString(Idx);
2154   Out << ' ';
2155   // Print the operand
2156   WriteAsOperandInternal(Out, Operand, &TypePrinter, &Machine, TheModule);
2157 }
2158
2159 void AssemblyWriter::printModule(const Module *M) {
2160   Machine.initialize();
2161
2162   if (shouldPreserveAssemblyUseListOrder())
2163     UseListOrders = predictUseListOrder(M);
2164
2165   if (!M->getModuleIdentifier().empty() &&
2166       // Don't print the ID if it will start a new line (which would
2167       // require a comment char before it).
2168       M->getModuleIdentifier().find('\n') == std::string::npos)
2169     Out << "; ModuleID = '" << M->getModuleIdentifier() << "'\n";
2170
2171   const std::string &DL = M->getDataLayoutStr();
2172   if (!DL.empty())
2173     Out << "target datalayout = \"" << DL << "\"\n";
2174   if (!M->getTargetTriple().empty())
2175     Out << "target triple = \"" << M->getTargetTriple() << "\"\n";
2176
2177   if (!M->getModuleInlineAsm().empty()) {
2178     // Split the string into lines, to make it easier to read the .ll file.
2179     std::string Asm = M->getModuleInlineAsm();
2180     size_t CurPos = 0;
2181     size_t NewLine = Asm.find_first_of('\n', CurPos);
2182     Out << '\n';
2183     while (NewLine != std::string::npos) {
2184       // We found a newline, print the portion of the asm string from the
2185       // last newline up to this newline.
2186       Out << "module asm \"";
2187       PrintEscapedString(std::string(Asm.begin()+CurPos, Asm.begin()+NewLine),
2188                          Out);
2189       Out << "\"\n";
2190       CurPos = NewLine+1;
2191       NewLine = Asm.find_first_of('\n', CurPos);
2192     }
2193     std::string rest(Asm.begin()+CurPos, Asm.end());
2194     if (!rest.empty()) {
2195       Out << "module asm \"";
2196       PrintEscapedString(rest, Out);
2197       Out << "\"\n";
2198     }
2199   }
2200
2201   printTypeIdentities();
2202
2203   // Output all comdats.
2204   if (!Comdats.empty())
2205     Out << '\n';
2206   for (const Comdat *C : Comdats) {
2207     printComdat(C);
2208     if (C != Comdats.back())
2209       Out << '\n';
2210   }
2211
2212   // Output all globals.
2213   if (!M->global_empty()) Out << '\n';
2214   for (Module::const_global_iterator I = M->global_begin(), E = M->global_end();
2215        I != E; ++I) {
2216     printGlobal(I); Out << '\n';
2217   }
2218
2219   // Output all aliases.
2220   if (!M->alias_empty()) Out << "\n";
2221   for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end();
2222        I != E; ++I)
2223     printAlias(I);
2224
2225   // Output global use-lists.
2226   printUseLists(nullptr);
2227
2228   // Output all of the functions.
2229   for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
2230     printFunction(I);
2231   assert(UseListOrders.empty() && "All use-lists should have been consumed");
2232
2233   // Output all attribute groups.
2234   if (!Machine.as_empty()) {
2235     Out << '\n';
2236     writeAllAttributeGroups();
2237   }
2238
2239   // Output named metadata.
2240   if (!M->named_metadata_empty()) Out << '\n';
2241
2242   for (Module::const_named_metadata_iterator I = M->named_metadata_begin(),
2243        E = M->named_metadata_end(); I != E; ++I)
2244     printNamedMDNode(I);
2245
2246   // Output metadata.
2247   if (!Machine.mdn_empty()) {
2248     Out << '\n';
2249     writeAllMDNodes();
2250   }
2251 }
2252
2253 void AssemblyWriter::printNamedMDNode(const NamedMDNode *NMD) {
2254   Out << '!';
2255   StringRef Name = NMD->getName();
2256   if (Name.empty()) {
2257     Out << "<empty name> ";
2258   } else {
2259     if (isalpha(static_cast<unsigned char>(Name[0])) ||
2260         Name[0] == '-' || Name[0] == '$' ||
2261         Name[0] == '.' || Name[0] == '_')
2262       Out << Name[0];
2263     else
2264       Out << '\\' << hexdigit(Name[0] >> 4) << hexdigit(Name[0] & 0x0F);
2265     for (unsigned i = 1, e = Name.size(); i != e; ++i) {
2266       unsigned char C = Name[i];
2267       if (isalnum(static_cast<unsigned char>(C)) || C == '-' || C == '$' ||
2268           C == '.' || C == '_')
2269         Out << C;
2270       else
2271         Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F);
2272     }
2273   }
2274   Out << " = !{";
2275   for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2276     if (i) Out << ", ";
2277     int Slot = Machine.getMetadataSlot(NMD->getOperand(i));
2278     if (Slot == -1)
2279       Out << "<badref>";
2280     else
2281       Out << '!' << Slot;
2282   }
2283   Out << "}\n";
2284 }
2285
2286
2287 static void PrintLinkage(GlobalValue::LinkageTypes LT,
2288                          formatted_raw_ostream &Out) {
2289   switch (LT) {
2290   case GlobalValue::ExternalLinkage: break;
2291   case GlobalValue::PrivateLinkage:       Out << "private ";        break;
2292   case GlobalValue::InternalLinkage:      Out << "internal ";       break;
2293   case GlobalValue::LinkOnceAnyLinkage:   Out << "linkonce ";       break;
2294   case GlobalValue::LinkOnceODRLinkage:   Out << "linkonce_odr ";   break;
2295   case GlobalValue::WeakAnyLinkage:       Out << "weak ";           break;
2296   case GlobalValue::WeakODRLinkage:       Out << "weak_odr ";       break;
2297   case GlobalValue::CommonLinkage:        Out << "common ";         break;
2298   case GlobalValue::AppendingLinkage:     Out << "appending ";      break;
2299   case GlobalValue::ExternalWeakLinkage:  Out << "extern_weak ";    break;
2300   case GlobalValue::AvailableExternallyLinkage:
2301     Out << "available_externally ";
2302     break;
2303   }
2304 }
2305
2306
2307 static void PrintVisibility(GlobalValue::VisibilityTypes Vis,
2308                             formatted_raw_ostream &Out) {
2309   switch (Vis) {
2310   case GlobalValue::DefaultVisibility: break;
2311   case GlobalValue::HiddenVisibility:    Out << "hidden "; break;
2312   case GlobalValue::ProtectedVisibility: Out << "protected "; break;
2313   }
2314 }
2315
2316 static void PrintDLLStorageClass(GlobalValue::DLLStorageClassTypes SCT,
2317                                  formatted_raw_ostream &Out) {
2318   switch (SCT) {
2319   case GlobalValue::DefaultStorageClass: break;
2320   case GlobalValue::DLLImportStorageClass: Out << "dllimport "; break;
2321   case GlobalValue::DLLExportStorageClass: Out << "dllexport "; break;
2322   }
2323 }
2324
2325 static void PrintThreadLocalModel(GlobalVariable::ThreadLocalMode TLM,
2326                                   formatted_raw_ostream &Out) {
2327   switch (TLM) {
2328     case GlobalVariable::NotThreadLocal:
2329       break;
2330     case GlobalVariable::GeneralDynamicTLSModel:
2331       Out << "thread_local ";
2332       break;
2333     case GlobalVariable::LocalDynamicTLSModel:
2334       Out << "thread_local(localdynamic) ";
2335       break;
2336     case GlobalVariable::InitialExecTLSModel:
2337       Out << "thread_local(initialexec) ";
2338       break;
2339     case GlobalVariable::LocalExecTLSModel:
2340       Out << "thread_local(localexec) ";
2341       break;
2342   }
2343 }
2344
2345 static void maybePrintComdat(formatted_raw_ostream &Out,
2346                              const GlobalObject &GO) {
2347   const Comdat *C = GO.getComdat();
2348   if (!C)
2349     return;
2350
2351   if (isa<GlobalVariable>(GO))
2352     Out << ',';
2353   Out << " comdat";
2354
2355   if (GO.getName() == C->getName())
2356     return;
2357
2358   Out << '(';
2359   PrintLLVMName(Out, C->getName(), ComdatPrefix);
2360   Out << ')';
2361 }
2362
2363 void AssemblyWriter::printGlobal(const GlobalVariable *GV) {
2364   if (GV->isMaterializable())
2365     Out << "; Materializable\n";
2366
2367   WriteAsOperandInternal(Out, GV, &TypePrinter, &Machine, GV->getParent());
2368   Out << " = ";
2369
2370   if (!GV->hasInitializer() && GV->hasExternalLinkage())
2371     Out << "external ";
2372
2373   PrintLinkage(GV->getLinkage(), Out);
2374   PrintVisibility(GV->getVisibility(), Out);
2375   PrintDLLStorageClass(GV->getDLLStorageClass(), Out);
2376   PrintThreadLocalModel(GV->getThreadLocalMode(), Out);
2377   if (GV->hasUnnamedAddr())
2378     Out << "unnamed_addr ";
2379
2380   if (unsigned AddressSpace = GV->getType()->getAddressSpace())
2381     Out << "addrspace(" << AddressSpace << ") ";
2382   if (GV->isExternallyInitialized()) Out << "externally_initialized ";
2383   Out << (GV->isConstant() ? "constant " : "global ");
2384   TypePrinter.print(GV->getType()->getElementType(), Out);
2385
2386   if (GV->hasInitializer()) {
2387     Out << ' ';
2388     writeOperand(GV->getInitializer(), false);
2389   }
2390
2391   if (GV->hasSection()) {
2392     Out << ", section \"";
2393     PrintEscapedString(GV->getSection(), Out);
2394     Out << '"';
2395   }
2396   maybePrintComdat(Out, *GV);
2397   if (GV->getAlignment())
2398     Out << ", align " << GV->getAlignment();
2399
2400   printInfoComment(*GV);
2401 }
2402
2403 void AssemblyWriter::printAlias(const GlobalAlias *GA) {
2404   if (GA->isMaterializable())
2405     Out << "; Materializable\n";
2406
2407   // Don't crash when dumping partially built GA
2408   if (!GA->hasName())
2409     Out << "<<nameless>> = ";
2410   else {
2411     PrintLLVMName(Out, GA);
2412     Out << " = ";
2413   }
2414   PrintLinkage(GA->getLinkage(), Out);
2415   PrintVisibility(GA->getVisibility(), Out);
2416   PrintDLLStorageClass(GA->getDLLStorageClass(), Out);
2417   PrintThreadLocalModel(GA->getThreadLocalMode(), Out);
2418   if (GA->hasUnnamedAddr())
2419     Out << "unnamed_addr ";
2420
2421   Out << "alias ";
2422
2423   const Constant *Aliasee = GA->getAliasee();
2424
2425   if (!Aliasee) {
2426     TypePrinter.print(GA->getType(), Out);
2427     Out << " <<NULL ALIASEE>>";
2428   } else {
2429     writeOperand(Aliasee, !isa<ConstantExpr>(Aliasee));
2430   }
2431
2432   printInfoComment(*GA);
2433   Out << '\n';
2434 }
2435
2436 void AssemblyWriter::printComdat(const Comdat *C) {
2437   C->print(Out);
2438 }
2439
2440 void AssemblyWriter::printTypeIdentities() {
2441   if (TypePrinter.NumberedTypes.empty() &&
2442       TypePrinter.NamedTypes.empty())
2443     return;
2444
2445   Out << '\n';
2446
2447   // We know all the numbers that each type is used and we know that it is a
2448   // dense assignment.  Convert the map to an index table.
2449   std::vector<StructType*> NumberedTypes(TypePrinter.NumberedTypes.size());
2450   for (DenseMap<StructType*, unsigned>::iterator I =
2451        TypePrinter.NumberedTypes.begin(), E = TypePrinter.NumberedTypes.end();
2452        I != E; ++I) {
2453     assert(I->second < NumberedTypes.size() && "Didn't get a dense numbering?");
2454     NumberedTypes[I->second] = I->first;
2455   }
2456
2457   // Emit all numbered types.
2458   for (unsigned i = 0, e = NumberedTypes.size(); i != e; ++i) {
2459     Out << '%' << i << " = type ";
2460
2461     // Make sure we print out at least one level of the type structure, so
2462     // that we do not get %2 = type %2
2463     TypePrinter.printStructBody(NumberedTypes[i], Out);
2464     Out << '\n';
2465   }
2466
2467   for (unsigned i = 0, e = TypePrinter.NamedTypes.size(); i != e; ++i) {
2468     PrintLLVMName(Out, TypePrinter.NamedTypes[i]->getName(), LocalPrefix);
2469     Out << " = type ";
2470
2471     // Make sure we print out at least one level of the type structure, so
2472     // that we do not get %FILE = type %FILE
2473     TypePrinter.printStructBody(TypePrinter.NamedTypes[i], Out);
2474     Out << '\n';
2475   }
2476 }
2477
2478 /// printFunction - Print all aspects of a function.
2479 ///
2480 void AssemblyWriter::printFunction(const Function *F) {
2481   // Print out the return type and name.
2482   Out << '\n';
2483
2484   if (AnnotationWriter) AnnotationWriter->emitFunctionAnnot(F, Out);
2485
2486   if (F->isMaterializable())
2487     Out << "; Materializable\n";
2488
2489   const AttributeSet &Attrs = F->getAttributes();
2490   if (Attrs.hasAttributes(AttributeSet::FunctionIndex)) {
2491     AttributeSet AS = Attrs.getFnAttributes();
2492     std::string AttrStr;
2493
2494     unsigned Idx = 0;
2495     for (unsigned E = AS.getNumSlots(); Idx != E; ++Idx)
2496       if (AS.getSlotIndex(Idx) == AttributeSet::FunctionIndex)
2497         break;
2498
2499     for (AttributeSet::iterator I = AS.begin(Idx), E = AS.end(Idx);
2500          I != E; ++I) {
2501       Attribute Attr = *I;
2502       if (!Attr.isStringAttribute()) {
2503         if (!AttrStr.empty()) AttrStr += ' ';
2504         AttrStr += Attr.getAsString();
2505       }
2506     }
2507
2508     if (!AttrStr.empty())
2509       Out << "; Function Attrs: " << AttrStr << '\n';
2510   }
2511
2512   if (F->isDeclaration())
2513     Out << "declare ";
2514   else
2515     Out << "define ";
2516
2517   PrintLinkage(F->getLinkage(), Out);
2518   PrintVisibility(F->getVisibility(), Out);
2519   PrintDLLStorageClass(F->getDLLStorageClass(), Out);
2520
2521   // Print the calling convention.
2522   if (F->getCallingConv() != CallingConv::C) {
2523     PrintCallingConv(F->getCallingConv(), Out);
2524     Out << " ";
2525   }
2526
2527   FunctionType *FT = F->getFunctionType();
2528   if (Attrs.hasAttributes(AttributeSet::ReturnIndex))
2529     Out <<  Attrs.getAsString(AttributeSet::ReturnIndex) << ' ';
2530   TypePrinter.print(F->getReturnType(), Out);
2531   Out << ' ';
2532   WriteAsOperandInternal(Out, F, &TypePrinter, &Machine, F->getParent());
2533   Out << '(';
2534   Machine.incorporateFunction(F);
2535
2536   // Loop over the arguments, printing them...
2537
2538   unsigned Idx = 1;
2539   if (!F->isDeclaration()) {
2540     // If this isn't a declaration, print the argument names as well.
2541     for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end();
2542          I != E; ++I) {
2543       // Insert commas as we go... the first arg doesn't get a comma
2544       if (I != F->arg_begin()) Out << ", ";
2545       printArgument(I, Attrs, Idx);
2546       Idx++;
2547     }
2548   } else {
2549     // Otherwise, print the types from the function type.
2550     for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
2551       // Insert commas as we go... the first arg doesn't get a comma
2552       if (i) Out << ", ";
2553
2554       // Output type...
2555       TypePrinter.print(FT->getParamType(i), Out);
2556
2557       if (Attrs.hasAttributes(i+1))
2558         Out << ' ' << Attrs.getAsString(i+1);
2559     }
2560   }
2561
2562   // Finish printing arguments...
2563   if (FT->isVarArg()) {
2564     if (FT->getNumParams()) Out << ", ";
2565     Out << "...";  // Output varargs portion of signature!
2566   }
2567   Out << ')';
2568   if (F->hasUnnamedAddr())
2569     Out << " unnamed_addr";
2570   if (Attrs.hasAttributes(AttributeSet::FunctionIndex))
2571     Out << " #" << Machine.getAttributeGroupSlot(Attrs.getFnAttributes());
2572   if (F->hasSection()) {
2573     Out << " section \"";
2574     PrintEscapedString(F->getSection(), Out);
2575     Out << '"';
2576   }
2577   maybePrintComdat(Out, *F);
2578   if (F->getAlignment())
2579     Out << " align " << F->getAlignment();
2580   if (F->hasGC())
2581     Out << " gc \"" << F->getGC() << '"';
2582   if (F->hasPrefixData()) {
2583     Out << " prefix ";
2584     writeOperand(F->getPrefixData(), true);
2585   }
2586   if (F->hasPrologueData()) {
2587     Out << " prologue ";
2588     writeOperand(F->getPrologueData(), true);
2589   }
2590
2591   if (F->isDeclaration()) {
2592     Out << '\n';
2593   } else {
2594     Out << " {";
2595     // Output all of the function's basic blocks.
2596     for (Function::const_iterator I = F->begin(), E = F->end(); I != E; ++I)
2597       printBasicBlock(I);
2598
2599     // Output the function's use-lists.
2600     printUseLists(F);
2601
2602     Out << "}\n";
2603   }
2604
2605   Machine.purgeFunction();
2606 }
2607
2608 /// printArgument - This member is called for every argument that is passed into
2609 /// the function.  Simply print it out
2610 ///
2611 void AssemblyWriter::printArgument(const Argument *Arg,
2612                                    AttributeSet Attrs, unsigned Idx) {
2613   // Output type...
2614   TypePrinter.print(Arg->getType(), Out);
2615
2616   // Output parameter attributes list
2617   if (Attrs.hasAttributes(Idx))
2618     Out << ' ' << Attrs.getAsString(Idx);
2619
2620   // Output name, if available...
2621   if (Arg->hasName()) {
2622     Out << ' ';
2623     PrintLLVMName(Out, Arg);
2624   }
2625 }
2626
2627 /// printBasicBlock - This member is called for each basic block in a method.
2628 ///
2629 void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
2630   if (BB->hasName()) {              // Print out the label if it exists...
2631     Out << "\n";
2632     PrintLLVMName(Out, BB->getName(), LabelPrefix);
2633     Out << ':';
2634   } else if (!BB->use_empty()) {      // Don't print block # of no uses...
2635     Out << "\n; <label>:";
2636     int Slot = Machine.getLocalSlot(BB);
2637     if (Slot != -1)
2638       Out << Slot;
2639     else
2640       Out << "<badref>";
2641   }
2642
2643   if (!BB->getParent()) {
2644     Out.PadToColumn(50);
2645     Out << "; Error: Block without parent!";
2646   } else if (BB != &BB->getParent()->getEntryBlock()) {  // Not the entry block?
2647     // Output predecessors for the block.
2648     Out.PadToColumn(50);
2649     Out << ";";
2650     const_pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
2651
2652     if (PI == PE) {
2653       Out << " No predecessors!";
2654     } else {
2655       Out << " preds = ";
2656       writeOperand(*PI, false);
2657       for (++PI; PI != PE; ++PI) {
2658         Out << ", ";
2659         writeOperand(*PI, false);
2660       }
2661     }
2662   }
2663
2664   Out << "\n";
2665
2666   if (AnnotationWriter) AnnotationWriter->emitBasicBlockStartAnnot(BB, Out);
2667
2668   // Output all of the instructions in the basic block...
2669   for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
2670     printInstructionLine(*I);
2671   }
2672
2673   if (AnnotationWriter) AnnotationWriter->emitBasicBlockEndAnnot(BB, Out);
2674 }
2675
2676 /// printInstructionLine - Print an instruction and a newline character.
2677 void AssemblyWriter::printInstructionLine(const Instruction &I) {
2678   printInstruction(I);
2679   Out << '\n';
2680 }
2681
2682 /// printInfoComment - Print a little comment after the instruction indicating
2683 /// which slot it occupies.
2684 ///
2685 void AssemblyWriter::printInfoComment(const Value &V) {
2686   if (AnnotationWriter)
2687     AnnotationWriter->printInfoComment(V, Out);
2688 }
2689
2690 // This member is called for each Instruction in a function..
2691 void AssemblyWriter::printInstruction(const Instruction &I) {
2692   if (AnnotationWriter) AnnotationWriter->emitInstructionAnnot(&I, Out);
2693
2694   // Print out indentation for an instruction.
2695   Out << "  ";
2696
2697   // Print out name if it exists...
2698   if (I.hasName()) {
2699     PrintLLVMName(Out, &I);
2700     Out << " = ";
2701   } else if (!I.getType()->isVoidTy()) {
2702     // Print out the def slot taken.
2703     int SlotNum = Machine.getLocalSlot(&I);
2704     if (SlotNum == -1)
2705       Out << "<badref> = ";
2706     else
2707       Out << '%' << SlotNum << " = ";
2708   }
2709
2710   if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
2711     if (CI->isMustTailCall())
2712       Out << "musttail ";
2713     else if (CI->isTailCall())
2714       Out << "tail ";
2715   }
2716
2717   // Print out the opcode...
2718   Out << I.getOpcodeName();
2719
2720   // If this is an atomic load or store, print out the atomic marker.
2721   if ((isa<LoadInst>(I)  && cast<LoadInst>(I).isAtomic()) ||
2722       (isa<StoreInst>(I) && cast<StoreInst>(I).isAtomic()))
2723     Out << " atomic";
2724
2725   if (isa<AtomicCmpXchgInst>(I) && cast<AtomicCmpXchgInst>(I).isWeak())
2726     Out << " weak";
2727
2728   // If this is a volatile operation, print out the volatile marker.
2729   if ((isa<LoadInst>(I)  && cast<LoadInst>(I).isVolatile()) ||
2730       (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile()) ||
2731       (isa<AtomicCmpXchgInst>(I) && cast<AtomicCmpXchgInst>(I).isVolatile()) ||
2732       (isa<AtomicRMWInst>(I) && cast<AtomicRMWInst>(I).isVolatile()))
2733     Out << " volatile";
2734
2735   // Print out optimization information.
2736   WriteOptimizationInfo(Out, &I);
2737
2738   // Print out the compare instruction predicates
2739   if (const CmpInst *CI = dyn_cast<CmpInst>(&I))
2740     Out << ' ' << getPredicateText(CI->getPredicate());
2741
2742   // Print out the atomicrmw operation
2743   if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(&I))
2744     writeAtomicRMWOperation(Out, RMWI->getOperation());
2745
2746   // Print out the type of the operands...
2747   const Value *Operand = I.getNumOperands() ? I.getOperand(0) : nullptr;
2748
2749   // Special case conditional branches to swizzle the condition out to the front
2750   if (isa<BranchInst>(I) && cast<BranchInst>(I).isConditional()) {
2751     const BranchInst &BI(cast<BranchInst>(I));
2752     Out << ' ';
2753     writeOperand(BI.getCondition(), true);
2754     Out << ", ";
2755     writeOperand(BI.getSuccessor(0), true);
2756     Out << ", ";
2757     writeOperand(BI.getSuccessor(1), true);
2758
2759   } else if (isa<SwitchInst>(I)) {
2760     const SwitchInst& SI(cast<SwitchInst>(I));
2761     // Special case switch instruction to get formatting nice and correct.
2762     Out << ' ';
2763     writeOperand(SI.getCondition(), true);
2764     Out << ", ";
2765     writeOperand(SI.getDefaultDest(), true);
2766     Out << " [";
2767     for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end();
2768          i != e; ++i) {
2769       Out << "\n    ";
2770       writeOperand(i.getCaseValue(), true);
2771       Out << ", ";
2772       writeOperand(i.getCaseSuccessor(), true);
2773     }
2774     Out << "\n  ]";
2775   } else if (isa<IndirectBrInst>(I)) {
2776     // Special case indirectbr instruction to get formatting nice and correct.
2777     Out << ' ';
2778     writeOperand(Operand, true);
2779     Out << ", [";
2780
2781     for (unsigned i = 1, e = I.getNumOperands(); i != e; ++i) {
2782       if (i != 1)
2783         Out << ", ";
2784       writeOperand(I.getOperand(i), true);
2785     }
2786     Out << ']';
2787   } else if (const PHINode *PN = dyn_cast<PHINode>(&I)) {
2788     Out << ' ';
2789     TypePrinter.print(I.getType(), Out);
2790     Out << ' ';
2791
2792     for (unsigned op = 0, Eop = PN->getNumIncomingValues(); op < Eop; ++op) {
2793       if (op) Out << ", ";
2794       Out << "[ ";
2795       writeOperand(PN->getIncomingValue(op), false); Out << ", ";
2796       writeOperand(PN->getIncomingBlock(op), false); Out << " ]";
2797     }
2798   } else if (const ExtractValueInst *EVI = dyn_cast<ExtractValueInst>(&I)) {
2799     Out << ' ';
2800     writeOperand(I.getOperand(0), true);
2801     for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
2802       Out << ", " << *i;
2803   } else if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(&I)) {
2804     Out << ' ';
2805     writeOperand(I.getOperand(0), true); Out << ", ";
2806     writeOperand(I.getOperand(1), true);
2807     for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
2808       Out << ", " << *i;
2809   } else if (const LandingPadInst *LPI = dyn_cast<LandingPadInst>(&I)) {
2810     Out << ' ';
2811     TypePrinter.print(I.getType(), Out);
2812     Out << " personality ";
2813     writeOperand(I.getOperand(0), true); Out << '\n';
2814
2815     if (LPI->isCleanup())
2816       Out << "          cleanup";
2817
2818     for (unsigned i = 0, e = LPI->getNumClauses(); i != e; ++i) {
2819       if (i != 0 || LPI->isCleanup()) Out << "\n";
2820       if (LPI->isCatch(i))
2821         Out << "          catch ";
2822       else
2823         Out << "          filter ";
2824
2825       writeOperand(LPI->getClause(i), true);
2826     }
2827   } else if (isa<ReturnInst>(I) && !Operand) {
2828     Out << " void";
2829   } else if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
2830     // Print the calling convention being used.
2831     if (CI->getCallingConv() != CallingConv::C) {
2832       Out << " ";
2833       PrintCallingConv(CI->getCallingConv(), Out);
2834     }
2835
2836     Operand = CI->getCalledValue();
2837     PointerType *PTy = cast<PointerType>(Operand->getType());
2838     FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
2839     Type *RetTy = FTy->getReturnType();
2840     const AttributeSet &PAL = CI->getAttributes();
2841
2842     if (PAL.hasAttributes(AttributeSet::ReturnIndex))
2843       Out << ' ' << PAL.getAsString(AttributeSet::ReturnIndex);
2844
2845     // If possible, print out the short form of the call instruction.  We can
2846     // only do this if the first argument is a pointer to a nonvararg function,
2847     // and if the return type is not a pointer to a function.
2848     //
2849     Out << ' ';
2850     if (!FTy->isVarArg() &&
2851         (!RetTy->isPointerTy() ||
2852          !cast<PointerType>(RetTy)->getElementType()->isFunctionTy())) {
2853       TypePrinter.print(RetTy, Out);
2854       Out << ' ';
2855       writeOperand(Operand, false);
2856     } else {
2857       writeOperand(Operand, true);
2858     }
2859     Out << '(';
2860     for (unsigned op = 0, Eop = CI->getNumArgOperands(); op < Eop; ++op) {
2861       if (op > 0)
2862         Out << ", ";
2863       writeParamOperand(CI->getArgOperand(op), PAL, op + 1);
2864     }
2865
2866     // Emit an ellipsis if this is a musttail call in a vararg function.  This
2867     // is only to aid readability, musttail calls forward varargs by default.
2868     if (CI->isMustTailCall() && CI->getParent() &&
2869         CI->getParent()->getParent() &&
2870         CI->getParent()->getParent()->isVarArg())
2871       Out << ", ...";
2872
2873     Out << ')';
2874     if (PAL.hasAttributes(AttributeSet::FunctionIndex))
2875       Out << " #" << Machine.getAttributeGroupSlot(PAL.getFnAttributes());
2876   } else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I)) {
2877     Operand = II->getCalledValue();
2878     PointerType *PTy = cast<PointerType>(Operand->getType());
2879     FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
2880     Type *RetTy = FTy->getReturnType();
2881     const AttributeSet &PAL = II->getAttributes();
2882
2883     // Print the calling convention being used.
2884     if (II->getCallingConv() != CallingConv::C) {
2885       Out << " ";
2886       PrintCallingConv(II->getCallingConv(), Out);
2887     }
2888
2889     if (PAL.hasAttributes(AttributeSet::ReturnIndex))
2890       Out << ' ' << PAL.getAsString(AttributeSet::ReturnIndex);
2891
2892     // If possible, print out the short form of the invoke instruction. We can
2893     // only do this if the first argument is a pointer to a nonvararg function,
2894     // and if the return type is not a pointer to a function.
2895     //
2896     Out << ' ';
2897     if (!FTy->isVarArg() &&
2898         (!RetTy->isPointerTy() ||
2899          !cast<PointerType>(RetTy)->getElementType()->isFunctionTy())) {
2900       TypePrinter.print(RetTy, Out);
2901       Out << ' ';
2902       writeOperand(Operand, false);
2903     } else {
2904       writeOperand(Operand, true);
2905     }
2906     Out << '(';
2907     for (unsigned op = 0, Eop = II->getNumArgOperands(); op < Eop; ++op) {
2908       if (op)
2909         Out << ", ";
2910       writeParamOperand(II->getArgOperand(op), PAL, op + 1);
2911     }
2912
2913     Out << ')';
2914     if (PAL.hasAttributes(AttributeSet::FunctionIndex))
2915       Out << " #" << Machine.getAttributeGroupSlot(PAL.getFnAttributes());
2916
2917     Out << "\n          to ";
2918     writeOperand(II->getNormalDest(), true);
2919     Out << " unwind ";
2920     writeOperand(II->getUnwindDest(), true);
2921
2922   } else if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {
2923     Out << ' ';
2924     if (AI->isUsedWithInAlloca())
2925       Out << "inalloca ";
2926     TypePrinter.print(AI->getAllocatedType(), Out);
2927
2928     // Explicitly write the array size if the code is broken, if it's an array
2929     // allocation, or if the type is not canonical for scalar allocations.  The
2930     // latter case prevents the type from mutating when round-tripping through
2931     // assembly.
2932     if (!AI->getArraySize() || AI->isArrayAllocation() ||
2933         !AI->getArraySize()->getType()->isIntegerTy(32)) {
2934       Out << ", ";
2935       writeOperand(AI->getArraySize(), true);
2936     }
2937     if (AI->getAlignment()) {
2938       Out << ", align " << AI->getAlignment();
2939     }
2940   } else if (isa<CastInst>(I)) {
2941     if (Operand) {
2942       Out << ' ';
2943       writeOperand(Operand, true);   // Work with broken code
2944     }
2945     Out << " to ";
2946     TypePrinter.print(I.getType(), Out);
2947   } else if (isa<VAArgInst>(I)) {
2948     if (Operand) {
2949       Out << ' ';
2950       writeOperand(Operand, true);   // Work with broken code
2951     }
2952     Out << ", ";
2953     TypePrinter.print(I.getType(), Out);
2954   } else if (Operand) {   // Print the normal way.
2955     if (const auto *GEP = dyn_cast<GetElementPtrInst>(&I)) {
2956       Out << ' ';
2957       TypePrinter.print(GEP->getSourceElementType(), Out);
2958       Out << ',';
2959     } else if (const auto *LI = dyn_cast<LoadInst>(&I)) {
2960       Out << ' ';
2961       TypePrinter.print(LI->getType(), Out);
2962       Out << ',';
2963     }
2964
2965     // PrintAllTypes - Instructions who have operands of all the same type
2966     // omit the type from all but the first operand.  If the instruction has
2967     // different type operands (for example br), then they are all printed.
2968     bool PrintAllTypes = false;
2969     Type *TheType = Operand->getType();
2970
2971     // Select, Store and ShuffleVector always print all types.
2972     if (isa<SelectInst>(I) || isa<StoreInst>(I) || isa<ShuffleVectorInst>(I)
2973         || isa<ReturnInst>(I)) {
2974       PrintAllTypes = true;
2975     } else {
2976       for (unsigned i = 1, E = I.getNumOperands(); i != E; ++i) {
2977         Operand = I.getOperand(i);
2978         // note that Operand shouldn't be null, but the test helps make dump()
2979         // more tolerant of malformed IR
2980         if (Operand && Operand->getType() != TheType) {
2981           PrintAllTypes = true;    // We have differing types!  Print them all!
2982           break;
2983         }
2984       }
2985     }
2986
2987     if (!PrintAllTypes) {
2988       Out << ' ';
2989       TypePrinter.print(TheType, Out);
2990     }
2991
2992     Out << ' ';
2993     for (unsigned i = 0, E = I.getNumOperands(); i != E; ++i) {
2994       if (i) Out << ", ";
2995       writeOperand(I.getOperand(i), PrintAllTypes);
2996     }
2997   }
2998
2999   // Print atomic ordering/alignment for memory operations
3000   if (const LoadInst *LI = dyn_cast<LoadInst>(&I)) {
3001     if (LI->isAtomic())
3002       writeAtomic(LI->getOrdering(), LI->getSynchScope());
3003     if (LI->getAlignment())
3004       Out << ", align " << LI->getAlignment();
3005   } else if (const StoreInst *SI = dyn_cast<StoreInst>(&I)) {
3006     if (SI->isAtomic())
3007       writeAtomic(SI->getOrdering(), SI->getSynchScope());
3008     if (SI->getAlignment())
3009       Out << ", align " << SI->getAlignment();
3010   } else if (const AtomicCmpXchgInst *CXI = dyn_cast<AtomicCmpXchgInst>(&I)) {
3011     writeAtomicCmpXchg(CXI->getSuccessOrdering(), CXI->getFailureOrdering(),
3012                        CXI->getSynchScope());
3013   } else if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(&I)) {
3014     writeAtomic(RMWI->getOrdering(), RMWI->getSynchScope());
3015   } else if (const FenceInst *FI = dyn_cast<FenceInst>(&I)) {
3016     writeAtomic(FI->getOrdering(), FI->getSynchScope());
3017   }
3018
3019   // Print Metadata info.
3020   SmallVector<std::pair<unsigned, MDNode *>, 4> InstMD;
3021   I.getAllMetadata(InstMD);
3022   if (!InstMD.empty()) {
3023     SmallVector<StringRef, 8> MDNames;
3024     I.getType()->getContext().getMDKindNames(MDNames);
3025     for (unsigned i = 0, e = InstMD.size(); i != e; ++i) {
3026       unsigned Kind = InstMD[i].first;
3027        if (Kind < MDNames.size()) {
3028          Out << ", !" << MDNames[Kind];
3029        } else {
3030          Out << ", !<unknown kind #" << Kind << ">";
3031        }
3032       Out << ' ';
3033       WriteAsOperandInternal(Out, InstMD[i].second, &TypePrinter, &Machine,
3034                              TheModule);
3035     }
3036   }
3037   printInfoComment(I);
3038 }
3039
3040 void AssemblyWriter::writeMDNode(unsigned Slot, const MDNode *Node) {
3041   Out << '!' << Slot << " = ";
3042   printMDNodeBody(Node);
3043   Out << "\n";
3044 }
3045
3046 void AssemblyWriter::writeAllMDNodes() {
3047   SmallVector<const MDNode *, 16> Nodes;
3048   Nodes.resize(Machine.mdn_size());
3049   for (SlotTracker::mdn_iterator I = Machine.mdn_begin(), E = Machine.mdn_end();
3050        I != E; ++I)
3051     Nodes[I->second] = cast<MDNode>(I->first);
3052
3053   for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
3054     writeMDNode(i, Nodes[i]);
3055   }
3056 }
3057
3058 void AssemblyWriter::printMDNodeBody(const MDNode *Node) {
3059   WriteMDNodeBodyInternal(Out, Node, &TypePrinter, &Machine, TheModule);
3060 }
3061
3062 void AssemblyWriter::writeAllAttributeGroups() {
3063   std::vector<std::pair<AttributeSet, unsigned> > asVec;
3064   asVec.resize(Machine.as_size());
3065
3066   for (SlotTracker::as_iterator I = Machine.as_begin(), E = Machine.as_end();
3067        I != E; ++I)
3068     asVec[I->second] = *I;
3069
3070   for (std::vector<std::pair<AttributeSet, unsigned> >::iterator
3071          I = asVec.begin(), E = asVec.end(); I != E; ++I)
3072     Out << "attributes #" << I->second << " = { "
3073         << I->first.getAsString(AttributeSet::FunctionIndex, true) << " }\n";
3074 }
3075
3076 } // namespace llvm
3077
3078 void AssemblyWriter::printUseListOrder(const UseListOrder &Order) {
3079   bool IsInFunction = Machine.getFunction();
3080   if (IsInFunction)
3081     Out << "  ";
3082
3083   Out << "uselistorder";
3084   if (const BasicBlock *BB =
3085           IsInFunction ? nullptr : dyn_cast<BasicBlock>(Order.V)) {
3086     Out << "_bb ";
3087     writeOperand(BB->getParent(), false);
3088     Out << ", ";
3089     writeOperand(BB, false);
3090   } else {
3091     Out << " ";
3092     writeOperand(Order.V, true);
3093   }
3094   Out << ", { ";
3095
3096   assert(Order.Shuffle.size() >= 2 && "Shuffle too small");
3097   Out << Order.Shuffle[0];
3098   for (unsigned I = 1, E = Order.Shuffle.size(); I != E; ++I)
3099     Out << ", " << Order.Shuffle[I];
3100   Out << " }\n";
3101 }
3102
3103 void AssemblyWriter::printUseLists(const Function *F) {
3104   auto hasMore =
3105       [&]() { return !UseListOrders.empty() && UseListOrders.back().F == F; };
3106   if (!hasMore())
3107     // Nothing to do.
3108     return;
3109
3110   Out << "\n; uselistorder directives\n";
3111   while (hasMore()) {
3112     printUseListOrder(UseListOrders.back());
3113     UseListOrders.pop_back();
3114   }
3115 }
3116
3117 //===----------------------------------------------------------------------===//
3118 //                       External Interface declarations
3119 //===----------------------------------------------------------------------===//
3120
3121 void Module::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW) const {
3122   SlotTracker SlotTable(this);
3123   formatted_raw_ostream OS(ROS);
3124   AssemblyWriter W(OS, SlotTable, this, AAW);
3125   W.printModule(this);
3126 }
3127
3128 void NamedMDNode::print(raw_ostream &ROS) const {
3129   SlotTracker SlotTable(getParent());
3130   formatted_raw_ostream OS(ROS);
3131   AssemblyWriter W(OS, SlotTable, getParent(), nullptr);
3132   W.printNamedMDNode(this);
3133 }
3134
3135 void Comdat::print(raw_ostream &ROS) const {
3136   PrintLLVMName(ROS, getName(), ComdatPrefix);
3137   ROS << " = comdat ";
3138
3139   switch (getSelectionKind()) {
3140   case Comdat::Any:
3141     ROS << "any";
3142     break;
3143   case Comdat::ExactMatch:
3144     ROS << "exactmatch";
3145     break;
3146   case Comdat::Largest:
3147     ROS << "largest";
3148     break;
3149   case Comdat::NoDuplicates:
3150     ROS << "noduplicates";
3151     break;
3152   case Comdat::SameSize:
3153     ROS << "samesize";
3154     break;
3155   }
3156
3157   ROS << '\n';
3158 }
3159
3160 void Type::print(raw_ostream &OS) const {
3161   TypePrinting TP;
3162   TP.print(const_cast<Type*>(this), OS);
3163
3164   // If the type is a named struct type, print the body as well.
3165   if (StructType *STy = dyn_cast<StructType>(const_cast<Type*>(this)))
3166     if (!STy->isLiteral()) {
3167       OS << " = type ";
3168       TP.printStructBody(STy, OS);
3169     }
3170 }
3171
3172 static bool isReferencingMDNode(const Instruction &I) {
3173   if (const auto *CI = dyn_cast<CallInst>(&I))
3174     if (Function *F = CI->getCalledFunction())
3175       if (F->isIntrinsic())
3176         for (auto &Op : I.operands())
3177           if (auto *V = dyn_cast_or_null<MetadataAsValue>(Op))
3178             if (isa<MDNode>(V->getMetadata()))
3179               return true;
3180   return false;
3181 }
3182
3183 void Value::print(raw_ostream &ROS) const {
3184   formatted_raw_ostream OS(ROS);
3185   if (const Instruction *I = dyn_cast<Instruction>(this)) {
3186     const Function *F = I->getParent() ? I->getParent()->getParent() : nullptr;
3187     SlotTracker SlotTable(
3188         F,
3189         /* ShouldInitializeAllMetadata */ isReferencingMDNode(*I));
3190     AssemblyWriter W(OS, SlotTable, getModuleFromVal(I), nullptr);
3191     W.printInstruction(*I);
3192   } else if (const BasicBlock *BB = dyn_cast<BasicBlock>(this)) {
3193     SlotTracker SlotTable(BB->getParent());
3194     AssemblyWriter W(OS, SlotTable, getModuleFromVal(BB), nullptr);
3195     W.printBasicBlock(BB);
3196   } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(this)) {
3197     SlotTracker SlotTable(GV->getParent(),
3198                           /* ShouldInitializeAllMetadata */ isa<Function>(GV));
3199     AssemblyWriter W(OS, SlotTable, GV->getParent(), nullptr);
3200     if (const GlobalVariable *V = dyn_cast<GlobalVariable>(GV))
3201       W.printGlobal(V);
3202     else if (const Function *F = dyn_cast<Function>(GV))
3203       W.printFunction(F);
3204     else
3205       W.printAlias(cast<GlobalAlias>(GV));
3206   } else if (const MetadataAsValue *V = dyn_cast<MetadataAsValue>(this)) {
3207     V->getMetadata()->print(ROS, getModuleFromVal(V));
3208   } else if (const Constant *C = dyn_cast<Constant>(this)) {
3209     TypePrinting TypePrinter;
3210     TypePrinter.print(C->getType(), OS);
3211     OS << ' ';
3212     WriteConstantInternal(OS, C, TypePrinter, nullptr, nullptr);
3213   } else if (isa<InlineAsm>(this) || isa<Argument>(this)) {
3214     this->printAsOperand(OS);
3215   } else {
3216     llvm_unreachable("Unknown value to print out!");
3217   }
3218 }
3219
3220 void Value::printAsOperand(raw_ostream &O, bool PrintType, const Module *M) const {
3221   // Fast path: Don't construct and populate a TypePrinting object if we
3222   // won't be needing any types printed.
3223   bool IsMetadata = isa<MetadataAsValue>(this);
3224   if (!PrintType && ((!isa<Constant>(this) && !IsMetadata) || hasName() ||
3225                      isa<GlobalValue>(this))) {
3226     WriteAsOperandInternal(O, this, nullptr, nullptr, M);
3227     return;
3228   }
3229
3230   if (!M)
3231     M = getModuleFromVal(this);
3232
3233   TypePrinting TypePrinter;
3234   if (M)
3235     TypePrinter.incorporateTypes(*M);
3236   if (PrintType) {
3237     TypePrinter.print(getType(), O);
3238     O << ' ';
3239   }
3240
3241   SlotTracker Machine(M, /* ShouldInitializeAllMetadata */ IsMetadata);
3242   WriteAsOperandInternal(O, this, &TypePrinter, &Machine, M);
3243 }
3244
3245 static void printMetadataImpl(raw_ostream &ROS, const Metadata &MD,
3246                               const Module *M, bool OnlyAsOperand) {
3247   formatted_raw_ostream OS(ROS);
3248
3249   auto *N = dyn_cast<MDNode>(&MD);
3250   TypePrinting TypePrinter;
3251   SlotTracker Machine(M, /* ShouldInitializeAllMetadata */ N);
3252   if (M)
3253     TypePrinter.incorporateTypes(*M);
3254
3255   WriteAsOperandInternal(OS, &MD, &TypePrinter, &Machine, M,
3256                          /* FromValue */ true);
3257   if (OnlyAsOperand || !N)
3258     return;
3259
3260   OS << " = ";
3261   WriteMDNodeBodyInternal(OS, N, &TypePrinter, &Machine, M);
3262 }
3263
3264 void Metadata::printAsOperand(raw_ostream &OS, const Module *M) const {
3265   printMetadataImpl(OS, *this, M, /* OnlyAsOperand */ true);
3266 }
3267
3268 void Metadata::print(raw_ostream &OS, const Module *M) const {
3269   printMetadataImpl(OS, *this, M, /* OnlyAsOperand */ false);
3270 }
3271
3272 // Value::dump - allow easy printing of Values from the debugger.
3273 LLVM_DUMP_METHOD
3274 void Value::dump() const { print(dbgs()); dbgs() << '\n'; }
3275
3276 // Type::dump - allow easy printing of Types from the debugger.
3277 LLVM_DUMP_METHOD
3278 void Type::dump() const { print(dbgs()); dbgs() << '\n'; }
3279
3280 // Module::dump() - Allow printing of Modules from the debugger.
3281 LLVM_DUMP_METHOD
3282 void Module::dump() const { print(dbgs(), nullptr); }
3283
3284 // \brief Allow printing of Comdats from the debugger.
3285 LLVM_DUMP_METHOD
3286 void Comdat::dump() const { print(dbgs()); }
3287
3288 // NamedMDNode::dump() - Allow printing of NamedMDNodes from the debugger.
3289 LLVM_DUMP_METHOD
3290 void NamedMDNode::dump() const { print(dbgs()); }
3291
3292 LLVM_DUMP_METHOD
3293 void Metadata::dump() const { dump(nullptr); }
3294
3295 LLVM_DUMP_METHOD
3296 void Metadata::dump(const Module *M) const {
3297   print(dbgs(), M);
3298   dbgs() << '\n';
3299 }