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