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