Home | History | Annotate | Download | only in IR
      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>
     48 using namespace llvm;
     49 
     50 // Make virtual table appear in this compilation unit.
     51 AssemblyAnnotationWriter::~AssemblyAnnotationWriter() {}
     52 
     53 //===----------------------------------------------------------------------===//
     54 // Helper Functions
     55 //===----------------------------------------------------------------------===//
     56 
     57 namespace {
     58 struct 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 
     74 static 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 
     89 static 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 
    136 static 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 
    199 static 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 
    220 static 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 
    273 static 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 
    299 static 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.
    341 static 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 
    351 enum PrefixType {
    352   GlobalPrefix,
    353   ComdatPrefix,
    354   LabelPrefix,
    355   LocalPrefix,
    356   NoPrefix
    357 };
    358 
    359 void 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.
    395 static 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.
    417 static void PrintLLVMName(raw_ostream &OS, const Value *V) {
    418   PrintLLVMName(OS, V->getName(),
    419                 isa<GlobalValue>(V) ? GlobalPrefix : LocalPrefix);
    420 }
    421 
    422 
    423 namespace {
    424 class TypePrinting {
    425   TypePrinting(const TypePrinting &) = delete;
    426   void operator=(const TypePrinting&) = delete;
    427 public:
    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 
    445 void 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.
    472 void 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 
    548 void 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 
    574 namespace 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 ///
    580 class SlotTracker {
    581 public:
    582   /// ValueMap - A mapping of Values to slot numbers.
    583   typedef DenseMap<const Value*, unsigned> ValueMap;
    584 
    585 private:
    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;
    609 public:
    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
    664 private:
    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 
    698 ModuleSlotTracker::ModuleSlotTracker(SlotTracker &Machine, const Module *M,
    699                                      const Function *F)
    700     : M(M), F(F), Machine(&Machine) {}
    701 
    702 ModuleSlotTracker::ModuleSlotTracker(const Module *M,
    703                                      bool ShouldInitializeAllMetadata)
    704     : ShouldCreateStorage(M),
    705       ShouldInitializeAllMetadata(ShouldInitializeAllMetadata), M(M) {}
    706 
    707 ModuleSlotTracker::~ModuleSlotTracker() {}
    708 
    709 SlotTracker *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 
    720 void 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 
    734 int ModuleSlotTracker::getLocalSlot(const Value *V) {
    735   assert(F && "No function incorporated");
    736   return Machine->getLocalSlot(V);
    737 }
    738 
    739 static 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.
    773 SlotTracker::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.
    780 SlotTracker::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 
    786 inline 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.
    798 void 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.
    843 void 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 
    889 void 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 
    896 void SlotTracker::processFunctionMetadata(const Function &F) {
    897   processGlobalObjectMetadata(F);
    898   for (auto &BB : F) {
    899     for (auto &I : BB)
    900       processInstructionMetadata(I);
    901   }
    902 }
    903 
    904 void 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.
    924 void 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.
    933 int 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.
    943 int 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.
    954 int 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 
    964 int 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.
    974 void 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.
    992 void 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.
   1004 void 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 
   1018 void 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 
   1034 static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
   1035                                    TypePrinting *TypePrinter,
   1036                                    SlotTracker *Machine,
   1037                                    const Module *Context);
   1038 
   1039 static void WriteAsOperandInternal(raw_ostream &Out, const Metadata *MD,
   1040                                    TypePrinting *TypePrinter,
   1041                                    SlotTracker *Machine, const Module *Context,
   1042                                    bool FromValue = false);
   1043 
   1044 static 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 
   1077 static 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 
   1095 static 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 
   1128 static 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 
   1386 static 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 
   1409 namespace {
   1410 struct FieldSeparator {
   1411   bool Skip;
   1412   const char *Sep;
   1413   FieldSeparator(const char *Sep = ", ") : Skip(true), Sep(Sep) {}
   1414 };
   1415 raw_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 }
   1422 struct 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 
   1452 void 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 
   1460 void 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 
   1468 void 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 
   1478 static 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 
   1489 void 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 
   1498 template <class IntTy>
   1499 void MDFieldPrinter::printInt(StringRef Name, IntTy Int, bool ShouldSkipZero) {
   1500   if (ShouldSkipZero && !Int)
   1501     return;
   1502 
   1503   Out << FS << Name << ": " << Int;
   1504 }
   1505 
   1506 void MDFieldPrinter::printBool(StringRef Name, bool Value) {
   1507   Out << FS << Name << ": " << (Value ? "true" : "false");
   1508 }
   1509 
   1510 void 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 
   1529 void MDFieldPrinter::printEmissionKind(StringRef Name,
   1530                                        DICompileUnit::DebugEmissionKind EK) {
   1531   Out << FS << Name << ": " << DICompileUnit::EmissionKindString(EK);
   1532 }
   1533 
   1534 
   1535 template <class IntTy, class Stringifier>
   1536 void 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 
   1548 static 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 
   1567 static 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 
   1580 static 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 
   1589 static 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 
   1598 static 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 
   1612 static 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 
   1632 static 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 
   1656 static 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 
   1668 static 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 
   1679 static 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 
   1703 static 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 
   1733 static 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 
   1745 static 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 
   1759 static 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 
   1771 static 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 
   1783 static 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 
   1794 static 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 
   1808 static 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 
   1820 static 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 
   1835 static 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 
   1853 static 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 
   1868 static 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 
   1889 static 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 
   1904 static 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 
   1918 static 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.
   1940 static 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 
   2018 static 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 
   2055 namespace {
   2056 class 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 
   2069 public:
   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 
   2105 private:
   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 
   2121 AssemblyWriter::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 
   2135 void 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 
   2147 void 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 
   2160 void 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 
   2175 void 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 
   2192 void 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 
   2229 void 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 
   2324 static 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 
   2345 void 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 
   2361 static 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 
   2389 static 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 
   2398 static 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 
   2407 static 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 
   2427 static 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 
   2439 static 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 
   2457 void 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 
   2502 void 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 
   2541 void AssemblyWriter::printComdat(const Comdat *C) {
   2542   C->print(Out);
   2543 }
   2544 
   2545 void 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 ///
   2585 void 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 ///
   2728 void 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 ///
   2746 void 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.
   2794 void 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.
   2801 void 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 ///
   2812 void 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..
   2821 void 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 
   3195 void 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 
   3217 void AssemblyWriter::writeMDNode(unsigned Slot, const MDNode *Node) {
   3218   Out << '!' << Slot << " = ";
   3219   printMDNodeBody(Node);
   3220   Out << "\n";
   3221 }
   3222 
   3223 void 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 
   3235 void AssemblyWriter::printMDNodeBody(const MDNode *Node) {
   3236   WriteMDNodeBodyInternal(Out, Node, &TypePrinter, &Machine, TheModule);
   3237 }
   3238 
   3239 void 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 
   3252 void 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 
   3277 void 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 
   3295 void 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 
   3306 void 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 
   3315 void 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 
   3322 void 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 
   3338 void 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 
   3363 void 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 
   3378 static 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 
   3389 void 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 
   3400 void 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.
   3444 static 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 
   3454 static 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 
   3468 void 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 
   3483 void 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 
   3492 static 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 
   3512 void 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 
   3517 void Metadata::printAsOperand(raw_ostream &OS, ModuleSlotTracker &MST,
   3518                               const Module *M) const {
   3519   printMetadataImpl(OS, *this, MST, M, /* OnlyAsOperand */ true);
   3520 }
   3521 
   3522 void 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 
   3528 void 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.
   3534 LLVM_DUMP_METHOD
   3535 void Value::dump() const { print(dbgs(), /*IsForDebug=*/true); dbgs() << '\n'; }
   3536 
   3537 // Type::dump - allow easy printing of Types from the debugger.
   3538 LLVM_DUMP_METHOD
   3539 void Type::dump() const { print(dbgs(), /*IsForDebug=*/true); dbgs() << '\n'; }
   3540 
   3541 // Module::dump() - Allow printing of Modules from the debugger.
   3542 LLVM_DUMP_METHOD
   3543 void Module::dump() const {
   3544   print(dbgs(), nullptr,
   3545         /*ShouldPreserveUseListOrder=*/false, /*IsForDebug=*/true);
   3546 }
   3547 
   3548 // \brief Allow printing of Comdats from the debugger.
   3549 LLVM_DUMP_METHOD
   3550 void Comdat::dump() const { print(dbgs(), /*IsForDebug=*/true); }
   3551 
   3552 // NamedMDNode::dump() - Allow printing of NamedMDNodes from the debugger.
   3553 LLVM_DUMP_METHOD
   3554 void NamedMDNode::dump() const { print(dbgs(), /*IsForDebug=*/true); }
   3555 
   3556 LLVM_DUMP_METHOD
   3557 void Metadata::dump() const { dump(nullptr); }
   3558 
   3559 LLVM_DUMP_METHOD
   3560 void Metadata::dump(const Module *M) const {
   3561   print(dbgs(), M, /*IsForDebug=*/true);
   3562   dbgs() << '\n';
   3563 }
   3564