1 //===--- Bitcode/Writer/BitcodeWriter.cpp - Bitcode Writer ----------------===// 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 // Bitcode writer implementation. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/Bitcode/ReaderWriter.h" 15 #include "ValueEnumerator.h" 16 #include "llvm/ADT/STLExtras.h" 17 #include "llvm/ADT/Triple.h" 18 #include "llvm/Bitcode/BitstreamWriter.h" 19 #include "llvm/Bitcode/LLVMBitCodes.h" 20 #include "llvm/IR/CallSite.h" 21 #include "llvm/IR/Constants.h" 22 #include "llvm/IR/DebugInfoMetadata.h" 23 #include "llvm/IR/DerivedTypes.h" 24 #include "llvm/IR/InlineAsm.h" 25 #include "llvm/IR/Instructions.h" 26 #include "llvm/IR/LLVMContext.h" 27 #include "llvm/IR/IntrinsicInst.h" 28 #include "llvm/IR/Module.h" 29 #include "llvm/IR/Operator.h" 30 #include "llvm/IR/UseListOrder.h" 31 #include "llvm/IR/ValueSymbolTable.h" 32 #include "llvm/Support/CommandLine.h" 33 #include "llvm/Support/ErrorHandling.h" 34 #include "llvm/Support/MathExtras.h" 35 #include "llvm/Support/Program.h" 36 #include "llvm/Support/raw_ostream.h" 37 #include <cctype> 38 #include <map> 39 using namespace llvm; 40 41 /// These are manifest constants used by the bitcode writer. They do not need to 42 /// be kept in sync with the reader, but need to be consistent within this file. 43 enum { 44 // VALUE_SYMTAB_BLOCK abbrev id's. 45 VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV, 46 VST_ENTRY_7_ABBREV, 47 VST_ENTRY_6_ABBREV, 48 VST_BBENTRY_6_ABBREV, 49 50 // CONSTANTS_BLOCK abbrev id's. 51 CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV, 52 CONSTANTS_INTEGER_ABBREV, 53 CONSTANTS_CE_CAST_Abbrev, 54 CONSTANTS_NULL_Abbrev, 55 56 // FUNCTION_BLOCK abbrev id's. 57 FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV, 58 FUNCTION_INST_BINOP_ABBREV, 59 FUNCTION_INST_BINOP_FLAGS_ABBREV, 60 FUNCTION_INST_CAST_ABBREV, 61 FUNCTION_INST_RET_VOID_ABBREV, 62 FUNCTION_INST_RET_VAL_ABBREV, 63 FUNCTION_INST_UNREACHABLE_ABBREV, 64 FUNCTION_INST_GEP_ABBREV, 65 }; 66 67 static unsigned GetEncodedCastOpcode(unsigned Opcode) { 68 switch (Opcode) { 69 default: llvm_unreachable("Unknown cast instruction!"); 70 case Instruction::Trunc : return bitc::CAST_TRUNC; 71 case Instruction::ZExt : return bitc::CAST_ZEXT; 72 case Instruction::SExt : return bitc::CAST_SEXT; 73 case Instruction::FPToUI : return bitc::CAST_FPTOUI; 74 case Instruction::FPToSI : return bitc::CAST_FPTOSI; 75 case Instruction::UIToFP : return bitc::CAST_UITOFP; 76 case Instruction::SIToFP : return bitc::CAST_SITOFP; 77 case Instruction::FPTrunc : return bitc::CAST_FPTRUNC; 78 case Instruction::FPExt : return bitc::CAST_FPEXT; 79 case Instruction::PtrToInt: return bitc::CAST_PTRTOINT; 80 case Instruction::IntToPtr: return bitc::CAST_INTTOPTR; 81 case Instruction::BitCast : return bitc::CAST_BITCAST; 82 case Instruction::AddrSpaceCast: return bitc::CAST_ADDRSPACECAST; 83 } 84 } 85 86 static unsigned GetEncodedBinaryOpcode(unsigned Opcode) { 87 switch (Opcode) { 88 default: llvm_unreachable("Unknown binary instruction!"); 89 case Instruction::Add: 90 case Instruction::FAdd: return bitc::BINOP_ADD; 91 case Instruction::Sub: 92 case Instruction::FSub: return bitc::BINOP_SUB; 93 case Instruction::Mul: 94 case Instruction::FMul: return bitc::BINOP_MUL; 95 case Instruction::UDiv: return bitc::BINOP_UDIV; 96 case Instruction::FDiv: 97 case Instruction::SDiv: return bitc::BINOP_SDIV; 98 case Instruction::URem: return bitc::BINOP_UREM; 99 case Instruction::FRem: 100 case Instruction::SRem: return bitc::BINOP_SREM; 101 case Instruction::Shl: return bitc::BINOP_SHL; 102 case Instruction::LShr: return bitc::BINOP_LSHR; 103 case Instruction::AShr: return bitc::BINOP_ASHR; 104 case Instruction::And: return bitc::BINOP_AND; 105 case Instruction::Or: return bitc::BINOP_OR; 106 case Instruction::Xor: return bitc::BINOP_XOR; 107 } 108 } 109 110 static unsigned GetEncodedRMWOperation(AtomicRMWInst::BinOp Op) { 111 switch (Op) { 112 default: llvm_unreachable("Unknown RMW operation!"); 113 case AtomicRMWInst::Xchg: return bitc::RMW_XCHG; 114 case AtomicRMWInst::Add: return bitc::RMW_ADD; 115 case AtomicRMWInst::Sub: return bitc::RMW_SUB; 116 case AtomicRMWInst::And: return bitc::RMW_AND; 117 case AtomicRMWInst::Nand: return bitc::RMW_NAND; 118 case AtomicRMWInst::Or: return bitc::RMW_OR; 119 case AtomicRMWInst::Xor: return bitc::RMW_XOR; 120 case AtomicRMWInst::Max: return bitc::RMW_MAX; 121 case AtomicRMWInst::Min: return bitc::RMW_MIN; 122 case AtomicRMWInst::UMax: return bitc::RMW_UMAX; 123 case AtomicRMWInst::UMin: return bitc::RMW_UMIN; 124 } 125 } 126 127 static unsigned GetEncodedOrdering(AtomicOrdering Ordering) { 128 switch (Ordering) { 129 case NotAtomic: return bitc::ORDERING_NOTATOMIC; 130 case Unordered: return bitc::ORDERING_UNORDERED; 131 case Monotonic: return bitc::ORDERING_MONOTONIC; 132 case Acquire: return bitc::ORDERING_ACQUIRE; 133 case Release: return bitc::ORDERING_RELEASE; 134 case AcquireRelease: return bitc::ORDERING_ACQREL; 135 case SequentiallyConsistent: return bitc::ORDERING_SEQCST; 136 } 137 llvm_unreachable("Invalid ordering"); 138 } 139 140 static unsigned GetEncodedSynchScope(SynchronizationScope SynchScope) { 141 switch (SynchScope) { 142 case SingleThread: return bitc::SYNCHSCOPE_SINGLETHREAD; 143 case CrossThread: return bitc::SYNCHSCOPE_CROSSTHREAD; 144 } 145 llvm_unreachable("Invalid synch scope"); 146 } 147 148 static void WriteStringRecord(unsigned Code, StringRef Str, 149 unsigned AbbrevToUse, BitstreamWriter &Stream) { 150 SmallVector<unsigned, 64> Vals; 151 152 // Code: [strchar x N] 153 for (unsigned i = 0, e = Str.size(); i != e; ++i) { 154 if (AbbrevToUse && !BitCodeAbbrevOp::isChar6(Str[i])) 155 AbbrevToUse = 0; 156 Vals.push_back(Str[i]); 157 } 158 159 // Emit the finished record. 160 Stream.EmitRecord(Code, Vals, AbbrevToUse); 161 } 162 163 static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) { 164 switch (Kind) { 165 case Attribute::Alignment: 166 return bitc::ATTR_KIND_ALIGNMENT; 167 case Attribute::AlwaysInline: 168 return bitc::ATTR_KIND_ALWAYS_INLINE; 169 case Attribute::ArgMemOnly: 170 return bitc::ATTR_KIND_ARGMEMONLY; 171 case Attribute::Builtin: 172 return bitc::ATTR_KIND_BUILTIN; 173 case Attribute::ByVal: 174 return bitc::ATTR_KIND_BY_VAL; 175 case Attribute::Convergent: 176 return bitc::ATTR_KIND_CONVERGENT; 177 case Attribute::InAlloca: 178 return bitc::ATTR_KIND_IN_ALLOCA; 179 case Attribute::Cold: 180 return bitc::ATTR_KIND_COLD; 181 case Attribute::InlineHint: 182 return bitc::ATTR_KIND_INLINE_HINT; 183 case Attribute::InReg: 184 return bitc::ATTR_KIND_IN_REG; 185 case Attribute::JumpTable: 186 return bitc::ATTR_KIND_JUMP_TABLE; 187 case Attribute::MinSize: 188 return bitc::ATTR_KIND_MIN_SIZE; 189 case Attribute::Naked: 190 return bitc::ATTR_KIND_NAKED; 191 case Attribute::Nest: 192 return bitc::ATTR_KIND_NEST; 193 case Attribute::NoAlias: 194 return bitc::ATTR_KIND_NO_ALIAS; 195 case Attribute::NoBuiltin: 196 return bitc::ATTR_KIND_NO_BUILTIN; 197 case Attribute::NoCapture: 198 return bitc::ATTR_KIND_NO_CAPTURE; 199 case Attribute::NoDuplicate: 200 return bitc::ATTR_KIND_NO_DUPLICATE; 201 case Attribute::NoImplicitFloat: 202 return bitc::ATTR_KIND_NO_IMPLICIT_FLOAT; 203 case Attribute::NoInline: 204 return bitc::ATTR_KIND_NO_INLINE; 205 case Attribute::NoRecurse: 206 return bitc::ATTR_KIND_NO_RECURSE; 207 case Attribute::NonLazyBind: 208 return bitc::ATTR_KIND_NON_LAZY_BIND; 209 case Attribute::NonNull: 210 return bitc::ATTR_KIND_NON_NULL; 211 case Attribute::Dereferenceable: 212 return bitc::ATTR_KIND_DEREFERENCEABLE; 213 case Attribute::DereferenceableOrNull: 214 return bitc::ATTR_KIND_DEREFERENCEABLE_OR_NULL; 215 case Attribute::NoRedZone: 216 return bitc::ATTR_KIND_NO_RED_ZONE; 217 case Attribute::NoReturn: 218 return bitc::ATTR_KIND_NO_RETURN; 219 case Attribute::NoUnwind: 220 return bitc::ATTR_KIND_NO_UNWIND; 221 case Attribute::OptimizeForSize: 222 return bitc::ATTR_KIND_OPTIMIZE_FOR_SIZE; 223 case Attribute::OptimizeNone: 224 return bitc::ATTR_KIND_OPTIMIZE_NONE; 225 case Attribute::ReadNone: 226 return bitc::ATTR_KIND_READ_NONE; 227 case Attribute::ReadOnly: 228 return bitc::ATTR_KIND_READ_ONLY; 229 case Attribute::Returned: 230 return bitc::ATTR_KIND_RETURNED; 231 case Attribute::ReturnsTwice: 232 return bitc::ATTR_KIND_RETURNS_TWICE; 233 case Attribute::SExt: 234 return bitc::ATTR_KIND_S_EXT; 235 case Attribute::StackAlignment: 236 return bitc::ATTR_KIND_STACK_ALIGNMENT; 237 case Attribute::StackProtect: 238 return bitc::ATTR_KIND_STACK_PROTECT; 239 case Attribute::StackProtectReq: 240 return bitc::ATTR_KIND_STACK_PROTECT_REQ; 241 case Attribute::StackProtectStrong: 242 return bitc::ATTR_KIND_STACK_PROTECT_STRONG; 243 case Attribute::SafeStack: 244 return bitc::ATTR_KIND_SAFESTACK; 245 case Attribute::StructRet: 246 return bitc::ATTR_KIND_STRUCT_RET; 247 case Attribute::SanitizeAddress: 248 return bitc::ATTR_KIND_SANITIZE_ADDRESS; 249 case Attribute::SanitizeThread: 250 return bitc::ATTR_KIND_SANITIZE_THREAD; 251 case Attribute::SanitizeMemory: 252 return bitc::ATTR_KIND_SANITIZE_MEMORY; 253 case Attribute::UWTable: 254 return bitc::ATTR_KIND_UW_TABLE; 255 case Attribute::ZExt: 256 return bitc::ATTR_KIND_Z_EXT; 257 case Attribute::EndAttrKinds: 258 llvm_unreachable("Can not encode end-attribute kinds marker."); 259 case Attribute::None: 260 llvm_unreachable("Can not encode none-attribute."); 261 } 262 263 llvm_unreachable("Trying to encode unknown attribute"); 264 } 265 266 static void WriteAttributeGroupTable(const ValueEnumerator &VE, 267 BitstreamWriter &Stream) { 268 const std::vector<AttributeSet> &AttrGrps = VE.getAttributeGroups(); 269 if (AttrGrps.empty()) return; 270 271 Stream.EnterSubblock(bitc::PARAMATTR_GROUP_BLOCK_ID, 3); 272 273 SmallVector<uint64_t, 64> Record; 274 for (unsigned i = 0, e = AttrGrps.size(); i != e; ++i) { 275 AttributeSet AS = AttrGrps[i]; 276 for (unsigned i = 0, e = AS.getNumSlots(); i != e; ++i) { 277 AttributeSet A = AS.getSlotAttributes(i); 278 279 Record.push_back(VE.getAttributeGroupID(A)); 280 Record.push_back(AS.getSlotIndex(i)); 281 282 for (AttributeSet::iterator I = AS.begin(0), E = AS.end(0); 283 I != E; ++I) { 284 Attribute Attr = *I; 285 if (Attr.isEnumAttribute()) { 286 Record.push_back(0); 287 Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum())); 288 } else if (Attr.isIntAttribute()) { 289 Record.push_back(1); 290 Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum())); 291 Record.push_back(Attr.getValueAsInt()); 292 } else { 293 StringRef Kind = Attr.getKindAsString(); 294 StringRef Val = Attr.getValueAsString(); 295 296 Record.push_back(Val.empty() ? 3 : 4); 297 Record.append(Kind.begin(), Kind.end()); 298 Record.push_back(0); 299 if (!Val.empty()) { 300 Record.append(Val.begin(), Val.end()); 301 Record.push_back(0); 302 } 303 } 304 } 305 306 Stream.EmitRecord(bitc::PARAMATTR_GRP_CODE_ENTRY, Record); 307 Record.clear(); 308 } 309 } 310 311 Stream.ExitBlock(); 312 } 313 314 static void WriteAttributeTable(const ValueEnumerator &VE, 315 BitstreamWriter &Stream) { 316 const std::vector<AttributeSet> &Attrs = VE.getAttributes(); 317 if (Attrs.empty()) return; 318 319 Stream.EnterSubblock(bitc::PARAMATTR_BLOCK_ID, 3); 320 321 SmallVector<uint64_t, 64> Record; 322 for (unsigned i = 0, e = Attrs.size(); i != e; ++i) { 323 const AttributeSet &A = Attrs[i]; 324 for (unsigned i = 0, e = A.getNumSlots(); i != e; ++i) 325 Record.push_back(VE.getAttributeGroupID(A.getSlotAttributes(i))); 326 327 Stream.EmitRecord(bitc::PARAMATTR_CODE_ENTRY, Record); 328 Record.clear(); 329 } 330 331 Stream.ExitBlock(); 332 } 333 334 /// WriteTypeTable - Write out the type table for a module. 335 static void WriteTypeTable(const ValueEnumerator &VE, BitstreamWriter &Stream) { 336 const ValueEnumerator::TypeList &TypeList = VE.getTypes(); 337 338 Stream.EnterSubblock(bitc::TYPE_BLOCK_ID_NEW, 4 /*count from # abbrevs */); 339 SmallVector<uint64_t, 64> TypeVals; 340 341 uint64_t NumBits = VE.computeBitsRequiredForTypeIndicies(); 342 343 // Abbrev for TYPE_CODE_POINTER. 344 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 345 Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER)); 346 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits)); 347 Abbv->Add(BitCodeAbbrevOp(0)); // Addrspace = 0 348 unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv); 349 350 // Abbrev for TYPE_CODE_FUNCTION. 351 Abbv = new BitCodeAbbrev(); 352 Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION)); 353 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isvararg 354 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 355 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits)); 356 357 unsigned FunctionAbbrev = Stream.EmitAbbrev(Abbv); 358 359 // Abbrev for TYPE_CODE_STRUCT_ANON. 360 Abbv = new BitCodeAbbrev(); 361 Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_ANON)); 362 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ispacked 363 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 364 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits)); 365 366 unsigned StructAnonAbbrev = Stream.EmitAbbrev(Abbv); 367 368 // Abbrev for TYPE_CODE_STRUCT_NAME. 369 Abbv = new BitCodeAbbrev(); 370 Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAME)); 371 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 372 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 373 unsigned StructNameAbbrev = Stream.EmitAbbrev(Abbv); 374 375 // Abbrev for TYPE_CODE_STRUCT_NAMED. 376 Abbv = new BitCodeAbbrev(); 377 Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAMED)); 378 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ispacked 379 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 380 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits)); 381 382 unsigned StructNamedAbbrev = Stream.EmitAbbrev(Abbv); 383 384 // Abbrev for TYPE_CODE_ARRAY. 385 Abbv = new BitCodeAbbrev(); 386 Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY)); 387 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // size 388 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits)); 389 390 unsigned ArrayAbbrev = Stream.EmitAbbrev(Abbv); 391 392 // Emit an entry count so the reader can reserve space. 393 TypeVals.push_back(TypeList.size()); 394 Stream.EmitRecord(bitc::TYPE_CODE_NUMENTRY, TypeVals); 395 TypeVals.clear(); 396 397 // Loop over all of the types, emitting each in turn. 398 for (unsigned i = 0, e = TypeList.size(); i != e; ++i) { 399 Type *T = TypeList[i]; 400 int AbbrevToUse = 0; 401 unsigned Code = 0; 402 403 switch (T->getTypeID()) { 404 case Type::VoidTyID: Code = bitc::TYPE_CODE_VOID; break; 405 case Type::HalfTyID: Code = bitc::TYPE_CODE_HALF; break; 406 case Type::FloatTyID: Code = bitc::TYPE_CODE_FLOAT; break; 407 case Type::DoubleTyID: Code = bitc::TYPE_CODE_DOUBLE; break; 408 case Type::X86_FP80TyID: Code = bitc::TYPE_CODE_X86_FP80; break; 409 case Type::FP128TyID: Code = bitc::TYPE_CODE_FP128; break; 410 case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break; 411 case Type::LabelTyID: Code = bitc::TYPE_CODE_LABEL; break; 412 case Type::MetadataTyID: Code = bitc::TYPE_CODE_METADATA; break; 413 case Type::X86_MMXTyID: Code = bitc::TYPE_CODE_X86_MMX; break; 414 case Type::TokenTyID: Code = bitc::TYPE_CODE_TOKEN; break; 415 case Type::IntegerTyID: 416 // INTEGER: [width] 417 Code = bitc::TYPE_CODE_INTEGER; 418 TypeVals.push_back(cast<IntegerType>(T)->getBitWidth()); 419 break; 420 case Type::PointerTyID: { 421 PointerType *PTy = cast<PointerType>(T); 422 // POINTER: [pointee type, address space] 423 Code = bitc::TYPE_CODE_POINTER; 424 TypeVals.push_back(VE.getTypeID(PTy->getElementType())); 425 unsigned AddressSpace = PTy->getAddressSpace(); 426 TypeVals.push_back(AddressSpace); 427 if (AddressSpace == 0) AbbrevToUse = PtrAbbrev; 428 break; 429 } 430 case Type::FunctionTyID: { 431 FunctionType *FT = cast<FunctionType>(T); 432 // FUNCTION: [isvararg, retty, paramty x N] 433 Code = bitc::TYPE_CODE_FUNCTION; 434 TypeVals.push_back(FT->isVarArg()); 435 TypeVals.push_back(VE.getTypeID(FT->getReturnType())); 436 for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) 437 TypeVals.push_back(VE.getTypeID(FT->getParamType(i))); 438 AbbrevToUse = FunctionAbbrev; 439 break; 440 } 441 case Type::StructTyID: { 442 StructType *ST = cast<StructType>(T); 443 // STRUCT: [ispacked, eltty x N] 444 TypeVals.push_back(ST->isPacked()); 445 // Output all of the element types. 446 for (StructType::element_iterator I = ST->element_begin(), 447 E = ST->element_end(); I != E; ++I) 448 TypeVals.push_back(VE.getTypeID(*I)); 449 450 if (ST->isLiteral()) { 451 Code = bitc::TYPE_CODE_STRUCT_ANON; 452 AbbrevToUse = StructAnonAbbrev; 453 } else { 454 if (ST->isOpaque()) { 455 Code = bitc::TYPE_CODE_OPAQUE; 456 } else { 457 Code = bitc::TYPE_CODE_STRUCT_NAMED; 458 AbbrevToUse = StructNamedAbbrev; 459 } 460 461 // Emit the name if it is present. 462 if (!ST->getName().empty()) 463 WriteStringRecord(bitc::TYPE_CODE_STRUCT_NAME, ST->getName(), 464 StructNameAbbrev, Stream); 465 } 466 break; 467 } 468 case Type::ArrayTyID: { 469 ArrayType *AT = cast<ArrayType>(T); 470 // ARRAY: [numelts, eltty] 471 Code = bitc::TYPE_CODE_ARRAY; 472 TypeVals.push_back(AT->getNumElements()); 473 TypeVals.push_back(VE.getTypeID(AT->getElementType())); 474 AbbrevToUse = ArrayAbbrev; 475 break; 476 } 477 case Type::VectorTyID: { 478 VectorType *VT = cast<VectorType>(T); 479 // VECTOR [numelts, eltty] 480 Code = bitc::TYPE_CODE_VECTOR; 481 TypeVals.push_back(VT->getNumElements()); 482 TypeVals.push_back(VE.getTypeID(VT->getElementType())); 483 break; 484 } 485 } 486 487 // Emit the finished record. 488 Stream.EmitRecord(Code, TypeVals, AbbrevToUse); 489 TypeVals.clear(); 490 } 491 492 Stream.ExitBlock(); 493 } 494 495 static unsigned getEncodedLinkage(const GlobalValue &GV) { 496 switch (GV.getLinkage()) { 497 case GlobalValue::ExternalLinkage: 498 return 0; 499 case GlobalValue::WeakAnyLinkage: 500 return 16; 501 case GlobalValue::AppendingLinkage: 502 return 2; 503 case GlobalValue::InternalLinkage: 504 return 3; 505 case GlobalValue::LinkOnceAnyLinkage: 506 return 18; 507 case GlobalValue::ExternalWeakLinkage: 508 return 7; 509 case GlobalValue::CommonLinkage: 510 return 8; 511 case GlobalValue::PrivateLinkage: 512 return 9; 513 case GlobalValue::WeakODRLinkage: 514 return 17; 515 case GlobalValue::LinkOnceODRLinkage: 516 return 19; 517 case GlobalValue::AvailableExternallyLinkage: 518 return 12; 519 } 520 llvm_unreachable("Invalid linkage"); 521 } 522 523 static unsigned getEncodedVisibility(const GlobalValue &GV) { 524 switch (GV.getVisibility()) { 525 case GlobalValue::DefaultVisibility: return 0; 526 case GlobalValue::HiddenVisibility: return 1; 527 case GlobalValue::ProtectedVisibility: return 2; 528 } 529 llvm_unreachable("Invalid visibility"); 530 } 531 532 static unsigned getEncodedDLLStorageClass(const GlobalValue &GV) { 533 switch (GV.getDLLStorageClass()) { 534 case GlobalValue::DefaultStorageClass: return 0; 535 case GlobalValue::DLLImportStorageClass: return 1; 536 case GlobalValue::DLLExportStorageClass: return 2; 537 } 538 llvm_unreachable("Invalid DLL storage class"); 539 } 540 541 static unsigned getEncodedThreadLocalMode(const GlobalValue &GV) { 542 switch (GV.getThreadLocalMode()) { 543 case GlobalVariable::NotThreadLocal: return 0; 544 case GlobalVariable::GeneralDynamicTLSModel: return 1; 545 case GlobalVariable::LocalDynamicTLSModel: return 2; 546 case GlobalVariable::InitialExecTLSModel: return 3; 547 case GlobalVariable::LocalExecTLSModel: return 4; 548 } 549 llvm_unreachable("Invalid TLS model"); 550 } 551 552 static unsigned getEncodedComdatSelectionKind(const Comdat &C) { 553 switch (C.getSelectionKind()) { 554 case Comdat::Any: 555 return bitc::COMDAT_SELECTION_KIND_ANY; 556 case Comdat::ExactMatch: 557 return bitc::COMDAT_SELECTION_KIND_EXACT_MATCH; 558 case Comdat::Largest: 559 return bitc::COMDAT_SELECTION_KIND_LARGEST; 560 case Comdat::NoDuplicates: 561 return bitc::COMDAT_SELECTION_KIND_NO_DUPLICATES; 562 case Comdat::SameSize: 563 return bitc::COMDAT_SELECTION_KIND_SAME_SIZE; 564 } 565 llvm_unreachable("Invalid selection kind"); 566 } 567 568 static void writeComdats(const ValueEnumerator &VE, BitstreamWriter &Stream) { 569 SmallVector<uint16_t, 64> Vals; 570 for (const Comdat *C : VE.getComdats()) { 571 // COMDAT: [selection_kind, name] 572 Vals.push_back(getEncodedComdatSelectionKind(*C)); 573 size_t Size = C->getName().size(); 574 assert(isUInt<16>(Size)); 575 Vals.push_back(Size); 576 for (char Chr : C->getName()) 577 Vals.push_back((unsigned char)Chr); 578 Stream.EmitRecord(bitc::MODULE_CODE_COMDAT, Vals, /*AbbrevToUse=*/0); 579 Vals.clear(); 580 } 581 } 582 583 /// Write a record that will eventually hold the word offset of the 584 /// module-level VST. For now the offset is 0, which will be backpatched 585 /// after the real VST is written. Returns the bit offset to backpatch. 586 static uint64_t WriteValueSymbolTableForwardDecl(const ValueSymbolTable &VST, 587 BitstreamWriter &Stream) { 588 if (VST.empty()) 589 return 0; 590 591 // Write a placeholder value in for the offset of the real VST, 592 // which is written after the function blocks so that it can include 593 // the offset of each function. The placeholder offset will be 594 // updated when the real VST is written. 595 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 596 Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_VSTOFFSET)); 597 // Blocks are 32-bit aligned, so we can use a 32-bit word offset to 598 // hold the real VST offset. Must use fixed instead of VBR as we don't 599 // know how many VBR chunks to reserve ahead of time. 600 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); 601 unsigned VSTOffsetAbbrev = Stream.EmitAbbrev(Abbv); 602 603 // Emit the placeholder 604 uint64_t Vals[] = {bitc::MODULE_CODE_VSTOFFSET, 0}; 605 Stream.EmitRecordWithAbbrev(VSTOffsetAbbrev, Vals); 606 607 // Compute and return the bit offset to the placeholder, which will be 608 // patched when the real VST is written. We can simply subtract the 32-bit 609 // fixed size from the current bit number to get the location to backpatch. 610 return Stream.GetCurrentBitNo() - 32; 611 } 612 613 /// Emit top-level description of module, including target triple, inline asm, 614 /// descriptors for global variables, and function prototype info. 615 /// Returns the bit offset to backpatch with the location of the real VST. 616 static uint64_t WriteModuleInfo(const Module *M, const ValueEnumerator &VE, 617 BitstreamWriter &Stream) { 618 // Emit various pieces of data attached to a module. 619 if (!M->getTargetTriple().empty()) 620 WriteStringRecord(bitc::MODULE_CODE_TRIPLE, M->getTargetTriple(), 621 0/*TODO*/, Stream); 622 const std::string &DL = M->getDataLayoutStr(); 623 if (!DL.empty()) 624 WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT, DL, 0 /*TODO*/, Stream); 625 if (!M->getModuleInlineAsm().empty()) 626 WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(), 627 0/*TODO*/, Stream); 628 629 // Emit information about sections and GC, computing how many there are. Also 630 // compute the maximum alignment value. 631 std::map<std::string, unsigned> SectionMap; 632 std::map<std::string, unsigned> GCMap; 633 unsigned MaxAlignment = 0; 634 unsigned MaxGlobalType = 0; 635 for (const GlobalValue &GV : M->globals()) { 636 MaxAlignment = std::max(MaxAlignment, GV.getAlignment()); 637 MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV.getValueType())); 638 if (GV.hasSection()) { 639 // Give section names unique ID's. 640 unsigned &Entry = SectionMap[GV.getSection()]; 641 if (!Entry) { 642 WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, GV.getSection(), 643 0/*TODO*/, Stream); 644 Entry = SectionMap.size(); 645 } 646 } 647 } 648 for (const Function &F : *M) { 649 MaxAlignment = std::max(MaxAlignment, F.getAlignment()); 650 if (F.hasSection()) { 651 // Give section names unique ID's. 652 unsigned &Entry = SectionMap[F.getSection()]; 653 if (!Entry) { 654 WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F.getSection(), 655 0/*TODO*/, Stream); 656 Entry = SectionMap.size(); 657 } 658 } 659 if (F.hasGC()) { 660 // Same for GC names. 661 unsigned &Entry = GCMap[F.getGC()]; 662 if (!Entry) { 663 WriteStringRecord(bitc::MODULE_CODE_GCNAME, F.getGC(), 664 0/*TODO*/, Stream); 665 Entry = GCMap.size(); 666 } 667 } 668 } 669 670 // Emit abbrev for globals, now that we know # sections and max alignment. 671 unsigned SimpleGVarAbbrev = 0; 672 if (!M->global_empty()) { 673 // Add an abbrev for common globals with no visibility or thread localness. 674 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 675 Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR)); 676 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 677 Log2_32_Ceil(MaxGlobalType+1))); 678 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // AddrSpace << 2 679 //| explicitType << 1 680 //| constant 681 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Initializer. 682 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 5)); // Linkage. 683 if (MaxAlignment == 0) // Alignment. 684 Abbv->Add(BitCodeAbbrevOp(0)); 685 else { 686 unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1; 687 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 688 Log2_32_Ceil(MaxEncAlignment+1))); 689 } 690 if (SectionMap.empty()) // Section. 691 Abbv->Add(BitCodeAbbrevOp(0)); 692 else 693 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 694 Log2_32_Ceil(SectionMap.size()+1))); 695 // Don't bother emitting vis + thread local. 696 SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv); 697 } 698 699 // Emit the global variable information. 700 SmallVector<unsigned, 64> Vals; 701 for (const GlobalVariable &GV : M->globals()) { 702 unsigned AbbrevToUse = 0; 703 704 // GLOBALVAR: [type, isconst, initid, 705 // linkage, alignment, section, visibility, threadlocal, 706 // unnamed_addr, externally_initialized, dllstorageclass, 707 // comdat] 708 Vals.push_back(VE.getTypeID(GV.getValueType())); 709 Vals.push_back(GV.getType()->getAddressSpace() << 2 | 2 | GV.isConstant()); 710 Vals.push_back(GV.isDeclaration() ? 0 : 711 (VE.getValueID(GV.getInitializer()) + 1)); 712 Vals.push_back(getEncodedLinkage(GV)); 713 Vals.push_back(Log2_32(GV.getAlignment())+1); 714 Vals.push_back(GV.hasSection() ? SectionMap[GV.getSection()] : 0); 715 if (GV.isThreadLocal() || 716 GV.getVisibility() != GlobalValue::DefaultVisibility || 717 GV.hasUnnamedAddr() || GV.isExternallyInitialized() || 718 GV.getDLLStorageClass() != GlobalValue::DefaultStorageClass || 719 GV.hasComdat()) { 720 Vals.push_back(getEncodedVisibility(GV)); 721 Vals.push_back(getEncodedThreadLocalMode(GV)); 722 Vals.push_back(GV.hasUnnamedAddr()); 723 Vals.push_back(GV.isExternallyInitialized()); 724 Vals.push_back(getEncodedDLLStorageClass(GV)); 725 Vals.push_back(GV.hasComdat() ? VE.getComdatID(GV.getComdat()) : 0); 726 } else { 727 AbbrevToUse = SimpleGVarAbbrev; 728 } 729 730 Stream.EmitRecord(bitc::MODULE_CODE_GLOBALVAR, Vals, AbbrevToUse); 731 Vals.clear(); 732 } 733 734 // Emit the function proto information. 735 for (const Function &F : *M) { 736 // FUNCTION: [type, callingconv, isproto, linkage, paramattrs, alignment, 737 // section, visibility, gc, unnamed_addr, prologuedata, 738 // dllstorageclass, comdat, prefixdata, personalityfn] 739 Vals.push_back(VE.getTypeID(F.getFunctionType())); 740 Vals.push_back(F.getCallingConv()); 741 Vals.push_back(F.isDeclaration()); 742 Vals.push_back(getEncodedLinkage(F)); 743 Vals.push_back(VE.getAttributeID(F.getAttributes())); 744 Vals.push_back(Log2_32(F.getAlignment())+1); 745 Vals.push_back(F.hasSection() ? SectionMap[F.getSection()] : 0); 746 Vals.push_back(getEncodedVisibility(F)); 747 Vals.push_back(F.hasGC() ? GCMap[F.getGC()] : 0); 748 Vals.push_back(F.hasUnnamedAddr()); 749 Vals.push_back(F.hasPrologueData() ? (VE.getValueID(F.getPrologueData()) + 1) 750 : 0); 751 Vals.push_back(getEncodedDLLStorageClass(F)); 752 Vals.push_back(F.hasComdat() ? VE.getComdatID(F.getComdat()) : 0); 753 Vals.push_back(F.hasPrefixData() ? (VE.getValueID(F.getPrefixData()) + 1) 754 : 0); 755 Vals.push_back( 756 F.hasPersonalityFn() ? (VE.getValueID(F.getPersonalityFn()) + 1) : 0); 757 758 unsigned AbbrevToUse = 0; 759 Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse); 760 Vals.clear(); 761 } 762 763 // Emit the alias information. 764 for (const GlobalAlias &A : M->aliases()) { 765 // ALIAS: [alias type, aliasee val#, linkage, visibility] 766 Vals.push_back(VE.getTypeID(A.getValueType())); 767 Vals.push_back(A.getType()->getAddressSpace()); 768 Vals.push_back(VE.getValueID(A.getAliasee())); 769 Vals.push_back(getEncodedLinkage(A)); 770 Vals.push_back(getEncodedVisibility(A)); 771 Vals.push_back(getEncodedDLLStorageClass(A)); 772 Vals.push_back(getEncodedThreadLocalMode(A)); 773 Vals.push_back(A.hasUnnamedAddr()); 774 unsigned AbbrevToUse = 0; 775 Stream.EmitRecord(bitc::MODULE_CODE_ALIAS, Vals, AbbrevToUse); 776 Vals.clear(); 777 } 778 779 uint64_t VSTOffsetPlaceholder = 780 WriteValueSymbolTableForwardDecl(M->getValueSymbolTable(), Stream); 781 return VSTOffsetPlaceholder; 782 } 783 784 static uint64_t GetOptimizationFlags(const Value *V) { 785 uint64_t Flags = 0; 786 787 if (const auto *OBO = dyn_cast<OverflowingBinaryOperator>(V)) { 788 if (OBO->hasNoSignedWrap()) 789 Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP; 790 if (OBO->hasNoUnsignedWrap()) 791 Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP; 792 } else if (const auto *PEO = dyn_cast<PossiblyExactOperator>(V)) { 793 if (PEO->isExact()) 794 Flags |= 1 << bitc::PEO_EXACT; 795 } else if (const auto *FPMO = dyn_cast<FPMathOperator>(V)) { 796 if (FPMO->hasUnsafeAlgebra()) 797 Flags |= FastMathFlags::UnsafeAlgebra; 798 if (FPMO->hasNoNaNs()) 799 Flags |= FastMathFlags::NoNaNs; 800 if (FPMO->hasNoInfs()) 801 Flags |= FastMathFlags::NoInfs; 802 if (FPMO->hasNoSignedZeros()) 803 Flags |= FastMathFlags::NoSignedZeros; 804 if (FPMO->hasAllowReciprocal()) 805 Flags |= FastMathFlags::AllowReciprocal; 806 } 807 808 return Flags; 809 } 810 811 static void WriteValueAsMetadata(const ValueAsMetadata *MD, 812 const ValueEnumerator &VE, 813 BitstreamWriter &Stream, 814 SmallVectorImpl<uint64_t> &Record) { 815 // Mimic an MDNode with a value as one operand. 816 Value *V = MD->getValue(); 817 Record.push_back(VE.getTypeID(V->getType())); 818 Record.push_back(VE.getValueID(V)); 819 Stream.EmitRecord(bitc::METADATA_VALUE, Record, 0); 820 Record.clear(); 821 } 822 823 static void WriteMDTuple(const MDTuple *N, const ValueEnumerator &VE, 824 BitstreamWriter &Stream, 825 SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) { 826 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) { 827 Metadata *MD = N->getOperand(i); 828 assert(!(MD && isa<LocalAsMetadata>(MD)) && 829 "Unexpected function-local metadata"); 830 Record.push_back(VE.getMetadataOrNullID(MD)); 831 } 832 Stream.EmitRecord(N->isDistinct() ? bitc::METADATA_DISTINCT_NODE 833 : bitc::METADATA_NODE, 834 Record, Abbrev); 835 Record.clear(); 836 } 837 838 static void WriteDILocation(const DILocation *N, const ValueEnumerator &VE, 839 BitstreamWriter &Stream, 840 SmallVectorImpl<uint64_t> &Record, 841 unsigned Abbrev) { 842 Record.push_back(N->isDistinct()); 843 Record.push_back(N->getLine()); 844 Record.push_back(N->getColumn()); 845 Record.push_back(VE.getMetadataID(N->getScope())); 846 Record.push_back(VE.getMetadataOrNullID(N->getInlinedAt())); 847 848 Stream.EmitRecord(bitc::METADATA_LOCATION, Record, Abbrev); 849 Record.clear(); 850 } 851 852 static void WriteGenericDINode(const GenericDINode *N, 853 const ValueEnumerator &VE, 854 BitstreamWriter &Stream, 855 SmallVectorImpl<uint64_t> &Record, 856 unsigned Abbrev) { 857 Record.push_back(N->isDistinct()); 858 Record.push_back(N->getTag()); 859 Record.push_back(0); // Per-tag version field; unused for now. 860 861 for (auto &I : N->operands()) 862 Record.push_back(VE.getMetadataOrNullID(I)); 863 864 Stream.EmitRecord(bitc::METADATA_GENERIC_DEBUG, Record, Abbrev); 865 Record.clear(); 866 } 867 868 static uint64_t rotateSign(int64_t I) { 869 uint64_t U = I; 870 return I < 0 ? ~(U << 1) : U << 1; 871 } 872 873 static void WriteDISubrange(const DISubrange *N, const ValueEnumerator &, 874 BitstreamWriter &Stream, 875 SmallVectorImpl<uint64_t> &Record, 876 unsigned Abbrev) { 877 Record.push_back(N->isDistinct()); 878 Record.push_back(N->getCount()); 879 Record.push_back(rotateSign(N->getLowerBound())); 880 881 Stream.EmitRecord(bitc::METADATA_SUBRANGE, Record, Abbrev); 882 Record.clear(); 883 } 884 885 static void WriteDIEnumerator(const DIEnumerator *N, const ValueEnumerator &VE, 886 BitstreamWriter &Stream, 887 SmallVectorImpl<uint64_t> &Record, 888 unsigned Abbrev) { 889 Record.push_back(N->isDistinct()); 890 Record.push_back(rotateSign(N->getValue())); 891 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 892 893 Stream.EmitRecord(bitc::METADATA_ENUMERATOR, Record, Abbrev); 894 Record.clear(); 895 } 896 897 static void WriteDIBasicType(const DIBasicType *N, const ValueEnumerator &VE, 898 BitstreamWriter &Stream, 899 SmallVectorImpl<uint64_t> &Record, 900 unsigned Abbrev) { 901 Record.push_back(N->isDistinct()); 902 Record.push_back(N->getTag()); 903 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 904 Record.push_back(N->getSizeInBits()); 905 Record.push_back(N->getAlignInBits()); 906 Record.push_back(N->getEncoding()); 907 908 Stream.EmitRecord(bitc::METADATA_BASIC_TYPE, Record, Abbrev); 909 Record.clear(); 910 } 911 912 static void WriteDIDerivedType(const DIDerivedType *N, 913 const ValueEnumerator &VE, 914 BitstreamWriter &Stream, 915 SmallVectorImpl<uint64_t> &Record, 916 unsigned Abbrev) { 917 Record.push_back(N->isDistinct()); 918 Record.push_back(N->getTag()); 919 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 920 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 921 Record.push_back(N->getLine()); 922 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 923 Record.push_back(VE.getMetadataOrNullID(N->getBaseType())); 924 Record.push_back(N->getSizeInBits()); 925 Record.push_back(N->getAlignInBits()); 926 Record.push_back(N->getOffsetInBits()); 927 Record.push_back(N->getFlags()); 928 Record.push_back(VE.getMetadataOrNullID(N->getExtraData())); 929 930 Stream.EmitRecord(bitc::METADATA_DERIVED_TYPE, Record, Abbrev); 931 Record.clear(); 932 } 933 934 static void WriteDICompositeType(const DICompositeType *N, 935 const ValueEnumerator &VE, 936 BitstreamWriter &Stream, 937 SmallVectorImpl<uint64_t> &Record, 938 unsigned Abbrev) { 939 Record.push_back(N->isDistinct()); 940 Record.push_back(N->getTag()); 941 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 942 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 943 Record.push_back(N->getLine()); 944 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 945 Record.push_back(VE.getMetadataOrNullID(N->getBaseType())); 946 Record.push_back(N->getSizeInBits()); 947 Record.push_back(N->getAlignInBits()); 948 Record.push_back(N->getOffsetInBits()); 949 Record.push_back(N->getFlags()); 950 Record.push_back(VE.getMetadataOrNullID(N->getElements().get())); 951 Record.push_back(N->getRuntimeLang()); 952 Record.push_back(VE.getMetadataOrNullID(N->getVTableHolder())); 953 Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get())); 954 Record.push_back(VE.getMetadataOrNullID(N->getRawIdentifier())); 955 956 Stream.EmitRecord(bitc::METADATA_COMPOSITE_TYPE, Record, Abbrev); 957 Record.clear(); 958 } 959 960 static void WriteDISubroutineType(const DISubroutineType *N, 961 const ValueEnumerator &VE, 962 BitstreamWriter &Stream, 963 SmallVectorImpl<uint64_t> &Record, 964 unsigned Abbrev) { 965 Record.push_back(N->isDistinct()); 966 Record.push_back(N->getFlags()); 967 Record.push_back(VE.getMetadataOrNullID(N->getTypeArray().get())); 968 969 Stream.EmitRecord(bitc::METADATA_SUBROUTINE_TYPE, Record, Abbrev); 970 Record.clear(); 971 } 972 973 static void WriteDIFile(const DIFile *N, const ValueEnumerator &VE, 974 BitstreamWriter &Stream, 975 SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) { 976 Record.push_back(N->isDistinct()); 977 Record.push_back(VE.getMetadataOrNullID(N->getRawFilename())); 978 Record.push_back(VE.getMetadataOrNullID(N->getRawDirectory())); 979 980 Stream.EmitRecord(bitc::METADATA_FILE, Record, Abbrev); 981 Record.clear(); 982 } 983 984 static void WriteDICompileUnit(const DICompileUnit *N, 985 const ValueEnumerator &VE, 986 BitstreamWriter &Stream, 987 SmallVectorImpl<uint64_t> &Record, 988 unsigned Abbrev) { 989 assert(N->isDistinct() && "Expected distinct compile units"); 990 Record.push_back(/* IsDistinct */ true); 991 Record.push_back(N->getSourceLanguage()); 992 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 993 Record.push_back(VE.getMetadataOrNullID(N->getRawProducer())); 994 Record.push_back(N->isOptimized()); 995 Record.push_back(VE.getMetadataOrNullID(N->getRawFlags())); 996 Record.push_back(N->getRuntimeVersion()); 997 Record.push_back(VE.getMetadataOrNullID(N->getRawSplitDebugFilename())); 998 Record.push_back(N->getEmissionKind()); 999 Record.push_back(VE.getMetadataOrNullID(N->getEnumTypes().get())); 1000 Record.push_back(VE.getMetadataOrNullID(N->getRetainedTypes().get())); 1001 Record.push_back(VE.getMetadataOrNullID(N->getSubprograms().get())); 1002 Record.push_back(VE.getMetadataOrNullID(N->getGlobalVariables().get())); 1003 Record.push_back(VE.getMetadataOrNullID(N->getImportedEntities().get())); 1004 Record.push_back(N->getDWOId()); 1005 1006 Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev); 1007 Record.clear(); 1008 } 1009 1010 static void WriteDISubprogram(const DISubprogram *N, const ValueEnumerator &VE, 1011 BitstreamWriter &Stream, 1012 SmallVectorImpl<uint64_t> &Record, 1013 unsigned Abbrev) { 1014 Record.push_back(N->isDistinct()); 1015 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 1016 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1017 Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName())); 1018 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 1019 Record.push_back(N->getLine()); 1020 Record.push_back(VE.getMetadataOrNullID(N->getType())); 1021 Record.push_back(N->isLocalToUnit()); 1022 Record.push_back(N->isDefinition()); 1023 Record.push_back(N->getScopeLine()); 1024 Record.push_back(VE.getMetadataOrNullID(N->getContainingType())); 1025 Record.push_back(N->getVirtuality()); 1026 Record.push_back(N->getVirtualIndex()); 1027 Record.push_back(N->getFlags()); 1028 Record.push_back(N->isOptimized()); 1029 Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get())); 1030 Record.push_back(VE.getMetadataOrNullID(N->getDeclaration())); 1031 Record.push_back(VE.getMetadataOrNullID(N->getVariables().get())); 1032 1033 Stream.EmitRecord(bitc::METADATA_SUBPROGRAM, Record, Abbrev); 1034 Record.clear(); 1035 } 1036 1037 static void WriteDILexicalBlock(const DILexicalBlock *N, 1038 const ValueEnumerator &VE, 1039 BitstreamWriter &Stream, 1040 SmallVectorImpl<uint64_t> &Record, 1041 unsigned Abbrev) { 1042 Record.push_back(N->isDistinct()); 1043 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 1044 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 1045 Record.push_back(N->getLine()); 1046 Record.push_back(N->getColumn()); 1047 1048 Stream.EmitRecord(bitc::METADATA_LEXICAL_BLOCK, Record, Abbrev); 1049 Record.clear(); 1050 } 1051 1052 static void WriteDILexicalBlockFile(const DILexicalBlockFile *N, 1053 const ValueEnumerator &VE, 1054 BitstreamWriter &Stream, 1055 SmallVectorImpl<uint64_t> &Record, 1056 unsigned Abbrev) { 1057 Record.push_back(N->isDistinct()); 1058 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 1059 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 1060 Record.push_back(N->getDiscriminator()); 1061 1062 Stream.EmitRecord(bitc::METADATA_LEXICAL_BLOCK_FILE, Record, Abbrev); 1063 Record.clear(); 1064 } 1065 1066 static void WriteDINamespace(const DINamespace *N, const ValueEnumerator &VE, 1067 BitstreamWriter &Stream, 1068 SmallVectorImpl<uint64_t> &Record, 1069 unsigned Abbrev) { 1070 Record.push_back(N->isDistinct()); 1071 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 1072 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 1073 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1074 Record.push_back(N->getLine()); 1075 1076 Stream.EmitRecord(bitc::METADATA_NAMESPACE, Record, Abbrev); 1077 Record.clear(); 1078 } 1079 1080 static void WriteDIModule(const DIModule *N, const ValueEnumerator &VE, 1081 BitstreamWriter &Stream, 1082 SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) { 1083 Record.push_back(N->isDistinct()); 1084 for (auto &I : N->operands()) 1085 Record.push_back(VE.getMetadataOrNullID(I)); 1086 1087 Stream.EmitRecord(bitc::METADATA_MODULE, Record, Abbrev); 1088 Record.clear(); 1089 } 1090 1091 static void WriteDITemplateTypeParameter(const DITemplateTypeParameter *N, 1092 const ValueEnumerator &VE, 1093 BitstreamWriter &Stream, 1094 SmallVectorImpl<uint64_t> &Record, 1095 unsigned Abbrev) { 1096 Record.push_back(N->isDistinct()); 1097 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1098 Record.push_back(VE.getMetadataOrNullID(N->getType())); 1099 1100 Stream.EmitRecord(bitc::METADATA_TEMPLATE_TYPE, Record, Abbrev); 1101 Record.clear(); 1102 } 1103 1104 static void WriteDITemplateValueParameter(const DITemplateValueParameter *N, 1105 const ValueEnumerator &VE, 1106 BitstreamWriter &Stream, 1107 SmallVectorImpl<uint64_t> &Record, 1108 unsigned Abbrev) { 1109 Record.push_back(N->isDistinct()); 1110 Record.push_back(N->getTag()); 1111 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1112 Record.push_back(VE.getMetadataOrNullID(N->getType())); 1113 Record.push_back(VE.getMetadataOrNullID(N->getValue())); 1114 1115 Stream.EmitRecord(bitc::METADATA_TEMPLATE_VALUE, Record, Abbrev); 1116 Record.clear(); 1117 } 1118 1119 static void WriteDIGlobalVariable(const DIGlobalVariable *N, 1120 const ValueEnumerator &VE, 1121 BitstreamWriter &Stream, 1122 SmallVectorImpl<uint64_t> &Record, 1123 unsigned Abbrev) { 1124 Record.push_back(N->isDistinct()); 1125 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 1126 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1127 Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName())); 1128 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 1129 Record.push_back(N->getLine()); 1130 Record.push_back(VE.getMetadataOrNullID(N->getType())); 1131 Record.push_back(N->isLocalToUnit()); 1132 Record.push_back(N->isDefinition()); 1133 Record.push_back(VE.getMetadataOrNullID(N->getRawVariable())); 1134 Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMemberDeclaration())); 1135 1136 Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR, Record, Abbrev); 1137 Record.clear(); 1138 } 1139 1140 static void WriteDILocalVariable(const DILocalVariable *N, 1141 const ValueEnumerator &VE, 1142 BitstreamWriter &Stream, 1143 SmallVectorImpl<uint64_t> &Record, 1144 unsigned Abbrev) { 1145 Record.push_back(N->isDistinct()); 1146 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 1147 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1148 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 1149 Record.push_back(N->getLine()); 1150 Record.push_back(VE.getMetadataOrNullID(N->getType())); 1151 Record.push_back(N->getArg()); 1152 Record.push_back(N->getFlags()); 1153 1154 Stream.EmitRecord(bitc::METADATA_LOCAL_VAR, Record, Abbrev); 1155 Record.clear(); 1156 } 1157 1158 static void WriteDIExpression(const DIExpression *N, const ValueEnumerator &, 1159 BitstreamWriter &Stream, 1160 SmallVectorImpl<uint64_t> &Record, 1161 unsigned Abbrev) { 1162 Record.reserve(N->getElements().size() + 1); 1163 1164 Record.push_back(N->isDistinct()); 1165 Record.append(N->elements_begin(), N->elements_end()); 1166 1167 Stream.EmitRecord(bitc::METADATA_EXPRESSION, Record, Abbrev); 1168 Record.clear(); 1169 } 1170 1171 static void WriteDIObjCProperty(const DIObjCProperty *N, 1172 const ValueEnumerator &VE, 1173 BitstreamWriter &Stream, 1174 SmallVectorImpl<uint64_t> &Record, 1175 unsigned Abbrev) { 1176 Record.push_back(N->isDistinct()); 1177 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1178 Record.push_back(VE.getMetadataOrNullID(N->getFile())); 1179 Record.push_back(N->getLine()); 1180 Record.push_back(VE.getMetadataOrNullID(N->getRawSetterName())); 1181 Record.push_back(VE.getMetadataOrNullID(N->getRawGetterName())); 1182 Record.push_back(N->getAttributes()); 1183 Record.push_back(VE.getMetadataOrNullID(N->getType())); 1184 1185 Stream.EmitRecord(bitc::METADATA_OBJC_PROPERTY, Record, Abbrev); 1186 Record.clear(); 1187 } 1188 1189 static void WriteDIImportedEntity(const DIImportedEntity *N, 1190 const ValueEnumerator &VE, 1191 BitstreamWriter &Stream, 1192 SmallVectorImpl<uint64_t> &Record, 1193 unsigned Abbrev) { 1194 Record.push_back(N->isDistinct()); 1195 Record.push_back(N->getTag()); 1196 Record.push_back(VE.getMetadataOrNullID(N->getScope())); 1197 Record.push_back(VE.getMetadataOrNullID(N->getEntity())); 1198 Record.push_back(N->getLine()); 1199 Record.push_back(VE.getMetadataOrNullID(N->getRawName())); 1200 1201 Stream.EmitRecord(bitc::METADATA_IMPORTED_ENTITY, Record, Abbrev); 1202 Record.clear(); 1203 } 1204 1205 static void WriteModuleMetadata(const Module *M, 1206 const ValueEnumerator &VE, 1207 BitstreamWriter &Stream) { 1208 const auto &MDs = VE.getMDs(); 1209 if (MDs.empty() && M->named_metadata_empty()) 1210 return; 1211 1212 Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3); 1213 1214 unsigned MDSAbbrev = 0; 1215 if (VE.hasMDString()) { 1216 // Abbrev for METADATA_STRING. 1217 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 1218 Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_STRING)); 1219 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 1220 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); 1221 MDSAbbrev = Stream.EmitAbbrev(Abbv); 1222 } 1223 1224 // Initialize MDNode abbreviations. 1225 #define HANDLE_MDNODE_LEAF(CLASS) unsigned CLASS##Abbrev = 0; 1226 #include "llvm/IR/Metadata.def" 1227 1228 if (VE.hasDILocation()) { 1229 // Abbrev for METADATA_LOCATION. 1230 // 1231 // Assume the column is usually under 128, and always output the inlined-at 1232 // location (it's never more expensive than building an array size 1). 1233 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 1234 Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_LOCATION)); 1235 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); 1236 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 1237 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 1238 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 1239 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 1240 DILocationAbbrev = Stream.EmitAbbrev(Abbv); 1241 } 1242 1243 if (VE.hasGenericDINode()) { 1244 // Abbrev for METADATA_GENERIC_DEBUG. 1245 // 1246 // Assume the column is usually under 128, and always output the inlined-at 1247 // location (it's never more expensive than building an array size 1). 1248 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 1249 Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_GENERIC_DEBUG)); 1250 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); 1251 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 1252 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); 1253 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 1254 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 1255 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 1256 GenericDINodeAbbrev = Stream.EmitAbbrev(Abbv); 1257 } 1258 1259 unsigned NameAbbrev = 0; 1260 if (!M->named_metadata_empty()) { 1261 // Abbrev for METADATA_NAME. 1262 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 1263 Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_NAME)); 1264 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 1265 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); 1266 NameAbbrev = Stream.EmitAbbrev(Abbv); 1267 } 1268 1269 SmallVector<uint64_t, 64> Record; 1270 for (const Metadata *MD : MDs) { 1271 if (const MDNode *N = dyn_cast<MDNode>(MD)) { 1272 assert(N->isResolved() && "Expected forward references to be resolved"); 1273 1274 switch (N->getMetadataID()) { 1275 default: 1276 llvm_unreachable("Invalid MDNode subclass"); 1277 #define HANDLE_MDNODE_LEAF(CLASS) \ 1278 case Metadata::CLASS##Kind: \ 1279 Write##CLASS(cast<CLASS>(N), VE, Stream, Record, CLASS##Abbrev); \ 1280 continue; 1281 #include "llvm/IR/Metadata.def" 1282 } 1283 } 1284 if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) { 1285 WriteValueAsMetadata(MDC, VE, Stream, Record); 1286 continue; 1287 } 1288 const MDString *MDS = cast<MDString>(MD); 1289 // Code: [strchar x N] 1290 Record.append(MDS->bytes_begin(), MDS->bytes_end()); 1291 1292 // Emit the finished record. 1293 Stream.EmitRecord(bitc::METADATA_STRING, Record, MDSAbbrev); 1294 Record.clear(); 1295 } 1296 1297 // Write named metadata. 1298 for (const NamedMDNode &NMD : M->named_metadata()) { 1299 // Write name. 1300 StringRef Str = NMD.getName(); 1301 Record.append(Str.bytes_begin(), Str.bytes_end()); 1302 Stream.EmitRecord(bitc::METADATA_NAME, Record, NameAbbrev); 1303 Record.clear(); 1304 1305 // Write named metadata operands. 1306 for (const MDNode *N : NMD.operands()) 1307 Record.push_back(VE.getMetadataID(N)); 1308 Stream.EmitRecord(bitc::METADATA_NAMED_NODE, Record, 0); 1309 Record.clear(); 1310 } 1311 1312 Stream.ExitBlock(); 1313 } 1314 1315 static void WriteFunctionLocalMetadata(const Function &F, 1316 const ValueEnumerator &VE, 1317 BitstreamWriter &Stream) { 1318 bool StartedMetadataBlock = false; 1319 SmallVector<uint64_t, 64> Record; 1320 const SmallVectorImpl<const LocalAsMetadata *> &MDs = 1321 VE.getFunctionLocalMDs(); 1322 for (unsigned i = 0, e = MDs.size(); i != e; ++i) { 1323 assert(MDs[i] && "Expected valid function-local metadata"); 1324 if (!StartedMetadataBlock) { 1325 Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3); 1326 StartedMetadataBlock = true; 1327 } 1328 WriteValueAsMetadata(MDs[i], VE, Stream, Record); 1329 } 1330 1331 if (StartedMetadataBlock) 1332 Stream.ExitBlock(); 1333 } 1334 1335 static void WriteMetadataAttachment(const Function &F, 1336 const ValueEnumerator &VE, 1337 BitstreamWriter &Stream) { 1338 Stream.EnterSubblock(bitc::METADATA_ATTACHMENT_ID, 3); 1339 1340 SmallVector<uint64_t, 64> Record; 1341 1342 // Write metadata attachments 1343 // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]] 1344 SmallVector<std::pair<unsigned, MDNode *>, 4> MDs; 1345 F.getAllMetadata(MDs); 1346 if (!MDs.empty()) { 1347 for (const auto &I : MDs) { 1348 Record.push_back(I.first); 1349 Record.push_back(VE.getMetadataID(I.second)); 1350 } 1351 Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0); 1352 Record.clear(); 1353 } 1354 1355 for (const BasicBlock &BB : F) 1356 for (const Instruction &I : BB) { 1357 MDs.clear(); 1358 I.getAllMetadataOtherThanDebugLoc(MDs); 1359 1360 // If no metadata, ignore instruction. 1361 if (MDs.empty()) continue; 1362 1363 Record.push_back(VE.getInstructionID(&I)); 1364 1365 for (unsigned i = 0, e = MDs.size(); i != e; ++i) { 1366 Record.push_back(MDs[i].first); 1367 Record.push_back(VE.getMetadataID(MDs[i].second)); 1368 } 1369 Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0); 1370 Record.clear(); 1371 } 1372 1373 Stream.ExitBlock(); 1374 } 1375 1376 static void WriteModuleMetadataStore(const Module *M, BitstreamWriter &Stream) { 1377 SmallVector<uint64_t, 64> Record; 1378 1379 // Write metadata kinds 1380 // METADATA_KIND - [n x [id, name]] 1381 SmallVector<StringRef, 8> Names; 1382 M->getMDKindNames(Names); 1383 1384 if (Names.empty()) return; 1385 1386 Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3); 1387 1388 for (unsigned MDKindID = 0, e = Names.size(); MDKindID != e; ++MDKindID) { 1389 Record.push_back(MDKindID); 1390 StringRef KName = Names[MDKindID]; 1391 Record.append(KName.begin(), KName.end()); 1392 1393 Stream.EmitRecord(bitc::METADATA_KIND, Record, 0); 1394 Record.clear(); 1395 } 1396 1397 Stream.ExitBlock(); 1398 } 1399 1400 static void WriteOperandBundleTags(const Module *M, BitstreamWriter &Stream) { 1401 // Write metadata kinds 1402 // 1403 // OPERAND_BUNDLE_TAGS_BLOCK_ID : N x OPERAND_BUNDLE_TAG 1404 // 1405 // OPERAND_BUNDLE_TAG - [strchr x N] 1406 1407 SmallVector<StringRef, 8> Tags; 1408 M->getOperandBundleTags(Tags); 1409 1410 if (Tags.empty()) 1411 return; 1412 1413 Stream.EnterSubblock(bitc::OPERAND_BUNDLE_TAGS_BLOCK_ID, 3); 1414 1415 SmallVector<uint64_t, 64> Record; 1416 1417 for (auto Tag : Tags) { 1418 Record.append(Tag.begin(), Tag.end()); 1419 1420 Stream.EmitRecord(bitc::OPERAND_BUNDLE_TAG, Record, 0); 1421 Record.clear(); 1422 } 1423 1424 Stream.ExitBlock(); 1425 } 1426 1427 static void emitSignedInt64(SmallVectorImpl<uint64_t> &Vals, uint64_t V) { 1428 if ((int64_t)V >= 0) 1429 Vals.push_back(V << 1); 1430 else 1431 Vals.push_back((-V << 1) | 1); 1432 } 1433 1434 static void WriteConstants(unsigned FirstVal, unsigned LastVal, 1435 const ValueEnumerator &VE, 1436 BitstreamWriter &Stream, bool isGlobal) { 1437 if (FirstVal == LastVal) return; 1438 1439 Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 4); 1440 1441 unsigned AggregateAbbrev = 0; 1442 unsigned String8Abbrev = 0; 1443 unsigned CString7Abbrev = 0; 1444 unsigned CString6Abbrev = 0; 1445 // If this is a constant pool for the module, emit module-specific abbrevs. 1446 if (isGlobal) { 1447 // Abbrev for CST_CODE_AGGREGATE. 1448 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 1449 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE)); 1450 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 1451 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, Log2_32_Ceil(LastVal+1))); 1452 AggregateAbbrev = Stream.EmitAbbrev(Abbv); 1453 1454 // Abbrev for CST_CODE_STRING. 1455 Abbv = new BitCodeAbbrev(); 1456 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING)); 1457 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 1458 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); 1459 String8Abbrev = Stream.EmitAbbrev(Abbv); 1460 // Abbrev for CST_CODE_CSTRING. 1461 Abbv = new BitCodeAbbrev(); 1462 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING)); 1463 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 1464 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); 1465 CString7Abbrev = Stream.EmitAbbrev(Abbv); 1466 // Abbrev for CST_CODE_CSTRING. 1467 Abbv = new BitCodeAbbrev(); 1468 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING)); 1469 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 1470 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 1471 CString6Abbrev = Stream.EmitAbbrev(Abbv); 1472 } 1473 1474 SmallVector<uint64_t, 64> Record; 1475 1476 const ValueEnumerator::ValueList &Vals = VE.getValues(); 1477 Type *LastTy = nullptr; 1478 for (unsigned i = FirstVal; i != LastVal; ++i) { 1479 const Value *V = Vals[i].first; 1480 // If we need to switch types, do so now. 1481 if (V->getType() != LastTy) { 1482 LastTy = V->getType(); 1483 Record.push_back(VE.getTypeID(LastTy)); 1484 Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record, 1485 CONSTANTS_SETTYPE_ABBREV); 1486 Record.clear(); 1487 } 1488 1489 if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) { 1490 Record.push_back(unsigned(IA->hasSideEffects()) | 1491 unsigned(IA->isAlignStack()) << 1 | 1492 unsigned(IA->getDialect()&1) << 2); 1493 1494 // Add the asm string. 1495 const std::string &AsmStr = IA->getAsmString(); 1496 Record.push_back(AsmStr.size()); 1497 Record.append(AsmStr.begin(), AsmStr.end()); 1498 1499 // Add the constraint string. 1500 const std::string &ConstraintStr = IA->getConstraintString(); 1501 Record.push_back(ConstraintStr.size()); 1502 Record.append(ConstraintStr.begin(), ConstraintStr.end()); 1503 Stream.EmitRecord(bitc::CST_CODE_INLINEASM, Record); 1504 Record.clear(); 1505 continue; 1506 } 1507 const Constant *C = cast<Constant>(V); 1508 unsigned Code = -1U; 1509 unsigned AbbrevToUse = 0; 1510 if (C->isNullValue()) { 1511 Code = bitc::CST_CODE_NULL; 1512 } else if (isa<UndefValue>(C)) { 1513 Code = bitc::CST_CODE_UNDEF; 1514 } else if (const ConstantInt *IV = dyn_cast<ConstantInt>(C)) { 1515 if (IV->getBitWidth() <= 64) { 1516 uint64_t V = IV->getSExtValue(); 1517 emitSignedInt64(Record, V); 1518 Code = bitc::CST_CODE_INTEGER; 1519 AbbrevToUse = CONSTANTS_INTEGER_ABBREV; 1520 } else { // Wide integers, > 64 bits in size. 1521 // We have an arbitrary precision integer value to write whose 1522 // bit width is > 64. However, in canonical unsigned integer 1523 // format it is likely that the high bits are going to be zero. 1524 // So, we only write the number of active words. 1525 unsigned NWords = IV->getValue().getActiveWords(); 1526 const uint64_t *RawWords = IV->getValue().getRawData(); 1527 for (unsigned i = 0; i != NWords; ++i) { 1528 emitSignedInt64(Record, RawWords[i]); 1529 } 1530 Code = bitc::CST_CODE_WIDE_INTEGER; 1531 } 1532 } else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) { 1533 Code = bitc::CST_CODE_FLOAT; 1534 Type *Ty = CFP->getType(); 1535 if (Ty->isHalfTy() || Ty->isFloatTy() || Ty->isDoubleTy()) { 1536 Record.push_back(CFP->getValueAPF().bitcastToAPInt().getZExtValue()); 1537 } else if (Ty->isX86_FP80Ty()) { 1538 // api needed to prevent premature destruction 1539 // bits are not in the same order as a normal i80 APInt, compensate. 1540 APInt api = CFP->getValueAPF().bitcastToAPInt(); 1541 const uint64_t *p = api.getRawData(); 1542 Record.push_back((p[1] << 48) | (p[0] >> 16)); 1543 Record.push_back(p[0] & 0xffffLL); 1544 } else if (Ty->isFP128Ty() || Ty->isPPC_FP128Ty()) { 1545 APInt api = CFP->getValueAPF().bitcastToAPInt(); 1546 const uint64_t *p = api.getRawData(); 1547 Record.push_back(p[0]); 1548 Record.push_back(p[1]); 1549 } else { 1550 assert (0 && "Unknown FP type!"); 1551 } 1552 } else if (isa<ConstantDataSequential>(C) && 1553 cast<ConstantDataSequential>(C)->isString()) { 1554 const ConstantDataSequential *Str = cast<ConstantDataSequential>(C); 1555 // Emit constant strings specially. 1556 unsigned NumElts = Str->getNumElements(); 1557 // If this is a null-terminated string, use the denser CSTRING encoding. 1558 if (Str->isCString()) { 1559 Code = bitc::CST_CODE_CSTRING; 1560 --NumElts; // Don't encode the null, which isn't allowed by char6. 1561 } else { 1562 Code = bitc::CST_CODE_STRING; 1563 AbbrevToUse = String8Abbrev; 1564 } 1565 bool isCStr7 = Code == bitc::CST_CODE_CSTRING; 1566 bool isCStrChar6 = Code == bitc::CST_CODE_CSTRING; 1567 for (unsigned i = 0; i != NumElts; ++i) { 1568 unsigned char V = Str->getElementAsInteger(i); 1569 Record.push_back(V); 1570 isCStr7 &= (V & 128) == 0; 1571 if (isCStrChar6) 1572 isCStrChar6 = BitCodeAbbrevOp::isChar6(V); 1573 } 1574 1575 if (isCStrChar6) 1576 AbbrevToUse = CString6Abbrev; 1577 else if (isCStr7) 1578 AbbrevToUse = CString7Abbrev; 1579 } else if (const ConstantDataSequential *CDS = 1580 dyn_cast<ConstantDataSequential>(C)) { 1581 Code = bitc::CST_CODE_DATA; 1582 Type *EltTy = CDS->getType()->getElementType(); 1583 if (isa<IntegerType>(EltTy)) { 1584 for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) 1585 Record.push_back(CDS->getElementAsInteger(i)); 1586 } else if (EltTy->isFloatTy()) { 1587 for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) { 1588 union { float F; uint32_t I; }; 1589 F = CDS->getElementAsFloat(i); 1590 Record.push_back(I); 1591 } 1592 } else { 1593 assert(EltTy->isDoubleTy() && "Unknown ConstantData element type"); 1594 for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) { 1595 union { double F; uint64_t I; }; 1596 F = CDS->getElementAsDouble(i); 1597 Record.push_back(I); 1598 } 1599 } 1600 } else if (isa<ConstantArray>(C) || isa<ConstantStruct>(C) || 1601 isa<ConstantVector>(C)) { 1602 Code = bitc::CST_CODE_AGGREGATE; 1603 for (const Value *Op : C->operands()) 1604 Record.push_back(VE.getValueID(Op)); 1605 AbbrevToUse = AggregateAbbrev; 1606 } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) { 1607 switch (CE->getOpcode()) { 1608 default: 1609 if (Instruction::isCast(CE->getOpcode())) { 1610 Code = bitc::CST_CODE_CE_CAST; 1611 Record.push_back(GetEncodedCastOpcode(CE->getOpcode())); 1612 Record.push_back(VE.getTypeID(C->getOperand(0)->getType())); 1613 Record.push_back(VE.getValueID(C->getOperand(0))); 1614 AbbrevToUse = CONSTANTS_CE_CAST_Abbrev; 1615 } else { 1616 assert(CE->getNumOperands() == 2 && "Unknown constant expr!"); 1617 Code = bitc::CST_CODE_CE_BINOP; 1618 Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode())); 1619 Record.push_back(VE.getValueID(C->getOperand(0))); 1620 Record.push_back(VE.getValueID(C->getOperand(1))); 1621 uint64_t Flags = GetOptimizationFlags(CE); 1622 if (Flags != 0) 1623 Record.push_back(Flags); 1624 } 1625 break; 1626 case Instruction::GetElementPtr: { 1627 Code = bitc::CST_CODE_CE_GEP; 1628 const auto *GO = cast<GEPOperator>(C); 1629 if (GO->isInBounds()) 1630 Code = bitc::CST_CODE_CE_INBOUNDS_GEP; 1631 Record.push_back(VE.getTypeID(GO->getSourceElementType())); 1632 for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) { 1633 Record.push_back(VE.getTypeID(C->getOperand(i)->getType())); 1634 Record.push_back(VE.getValueID(C->getOperand(i))); 1635 } 1636 break; 1637 } 1638 case Instruction::Select: 1639 Code = bitc::CST_CODE_CE_SELECT; 1640 Record.push_back(VE.getValueID(C->getOperand(0))); 1641 Record.push_back(VE.getValueID(C->getOperand(1))); 1642 Record.push_back(VE.getValueID(C->getOperand(2))); 1643 break; 1644 case Instruction::ExtractElement: 1645 Code = bitc::CST_CODE_CE_EXTRACTELT; 1646 Record.push_back(VE.getTypeID(C->getOperand(0)->getType())); 1647 Record.push_back(VE.getValueID(C->getOperand(0))); 1648 Record.push_back(VE.getTypeID(C->getOperand(1)->getType())); 1649 Record.push_back(VE.getValueID(C->getOperand(1))); 1650 break; 1651 case Instruction::InsertElement: 1652 Code = bitc::CST_CODE_CE_INSERTELT; 1653 Record.push_back(VE.getValueID(C->getOperand(0))); 1654 Record.push_back(VE.getValueID(C->getOperand(1))); 1655 Record.push_back(VE.getTypeID(C->getOperand(2)->getType())); 1656 Record.push_back(VE.getValueID(C->getOperand(2))); 1657 break; 1658 case Instruction::ShuffleVector: 1659 // If the return type and argument types are the same, this is a 1660 // standard shufflevector instruction. If the types are different, 1661 // then the shuffle is widening or truncating the input vectors, and 1662 // the argument type must also be encoded. 1663 if (C->getType() == C->getOperand(0)->getType()) { 1664 Code = bitc::CST_CODE_CE_SHUFFLEVEC; 1665 } else { 1666 Code = bitc::CST_CODE_CE_SHUFVEC_EX; 1667 Record.push_back(VE.getTypeID(C->getOperand(0)->getType())); 1668 } 1669 Record.push_back(VE.getValueID(C->getOperand(0))); 1670 Record.push_back(VE.getValueID(C->getOperand(1))); 1671 Record.push_back(VE.getValueID(C->getOperand(2))); 1672 break; 1673 case Instruction::ICmp: 1674 case Instruction::FCmp: 1675 Code = bitc::CST_CODE_CE_CMP; 1676 Record.push_back(VE.getTypeID(C->getOperand(0)->getType())); 1677 Record.push_back(VE.getValueID(C->getOperand(0))); 1678 Record.push_back(VE.getValueID(C->getOperand(1))); 1679 Record.push_back(CE->getPredicate()); 1680 break; 1681 } 1682 } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) { 1683 Code = bitc::CST_CODE_BLOCKADDRESS; 1684 Record.push_back(VE.getTypeID(BA->getFunction()->getType())); 1685 Record.push_back(VE.getValueID(BA->getFunction())); 1686 Record.push_back(VE.getGlobalBasicBlockID(BA->getBasicBlock())); 1687 } else { 1688 #ifndef NDEBUG 1689 C->dump(); 1690 #endif 1691 llvm_unreachable("Unknown constant!"); 1692 } 1693 Stream.EmitRecord(Code, Record, AbbrevToUse); 1694 Record.clear(); 1695 } 1696 1697 Stream.ExitBlock(); 1698 } 1699 1700 static void WriteModuleConstants(const ValueEnumerator &VE, 1701 BitstreamWriter &Stream) { 1702 const ValueEnumerator::ValueList &Vals = VE.getValues(); 1703 1704 // Find the first constant to emit, which is the first non-globalvalue value. 1705 // We know globalvalues have been emitted by WriteModuleInfo. 1706 for (unsigned i = 0, e = Vals.size(); i != e; ++i) { 1707 if (!isa<GlobalValue>(Vals[i].first)) { 1708 WriteConstants(i, Vals.size(), VE, Stream, true); 1709 return; 1710 } 1711 } 1712 } 1713 1714 /// PushValueAndType - The file has to encode both the value and type id for 1715 /// many values, because we need to know what type to create for forward 1716 /// references. However, most operands are not forward references, so this type 1717 /// field is not needed. 1718 /// 1719 /// This function adds V's value ID to Vals. If the value ID is higher than the 1720 /// instruction ID, then it is a forward reference, and it also includes the 1721 /// type ID. The value ID that is written is encoded relative to the InstID. 1722 static bool PushValueAndType(const Value *V, unsigned InstID, 1723 SmallVectorImpl<unsigned> &Vals, 1724 ValueEnumerator &VE) { 1725 unsigned ValID = VE.getValueID(V); 1726 // Make encoding relative to the InstID. 1727 Vals.push_back(InstID - ValID); 1728 if (ValID >= InstID) { 1729 Vals.push_back(VE.getTypeID(V->getType())); 1730 return true; 1731 } 1732 return false; 1733 } 1734 1735 static void WriteOperandBundles(BitstreamWriter &Stream, ImmutableCallSite CS, 1736 unsigned InstID, ValueEnumerator &VE) { 1737 SmallVector<unsigned, 64> Record; 1738 LLVMContext &C = CS.getInstruction()->getContext(); 1739 1740 for (unsigned i = 0, e = CS.getNumOperandBundles(); i != e; ++i) { 1741 const auto &Bundle = CS.getOperandBundleAt(i); 1742 Record.push_back(C.getOperandBundleTagID(Bundle.Tag)); 1743 1744 for (auto &Input : Bundle.Inputs) 1745 PushValueAndType(Input, InstID, Record, VE); 1746 1747 Stream.EmitRecord(bitc::FUNC_CODE_OPERAND_BUNDLE, Record); 1748 Record.clear(); 1749 } 1750 } 1751 1752 /// pushValue - Like PushValueAndType, but where the type of the value is 1753 /// omitted (perhaps it was already encoded in an earlier operand). 1754 static void pushValue(const Value *V, unsigned InstID, 1755 SmallVectorImpl<unsigned> &Vals, 1756 ValueEnumerator &VE) { 1757 unsigned ValID = VE.getValueID(V); 1758 Vals.push_back(InstID - ValID); 1759 } 1760 1761 static void pushValueSigned(const Value *V, unsigned InstID, 1762 SmallVectorImpl<uint64_t> &Vals, 1763 ValueEnumerator &VE) { 1764 unsigned ValID = VE.getValueID(V); 1765 int64_t diff = ((int32_t)InstID - (int32_t)ValID); 1766 emitSignedInt64(Vals, diff); 1767 } 1768 1769 /// WriteInstruction - Emit an instruction to the specified stream. 1770 static void WriteInstruction(const Instruction &I, unsigned InstID, 1771 ValueEnumerator &VE, BitstreamWriter &Stream, 1772 SmallVectorImpl<unsigned> &Vals) { 1773 unsigned Code = 0; 1774 unsigned AbbrevToUse = 0; 1775 VE.setInstructionID(&I); 1776 switch (I.getOpcode()) { 1777 default: 1778 if (Instruction::isCast(I.getOpcode())) { 1779 Code = bitc::FUNC_CODE_INST_CAST; 1780 if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE)) 1781 AbbrevToUse = FUNCTION_INST_CAST_ABBREV; 1782 Vals.push_back(VE.getTypeID(I.getType())); 1783 Vals.push_back(GetEncodedCastOpcode(I.getOpcode())); 1784 } else { 1785 assert(isa<BinaryOperator>(I) && "Unknown instruction!"); 1786 Code = bitc::FUNC_CODE_INST_BINOP; 1787 if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE)) 1788 AbbrevToUse = FUNCTION_INST_BINOP_ABBREV; 1789 pushValue(I.getOperand(1), InstID, Vals, VE); 1790 Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode())); 1791 uint64_t Flags = GetOptimizationFlags(&I); 1792 if (Flags != 0) { 1793 if (AbbrevToUse == FUNCTION_INST_BINOP_ABBREV) 1794 AbbrevToUse = FUNCTION_INST_BINOP_FLAGS_ABBREV; 1795 Vals.push_back(Flags); 1796 } 1797 } 1798 break; 1799 1800 case Instruction::GetElementPtr: { 1801 Code = bitc::FUNC_CODE_INST_GEP; 1802 AbbrevToUse = FUNCTION_INST_GEP_ABBREV; 1803 auto &GEPInst = cast<GetElementPtrInst>(I); 1804 Vals.push_back(GEPInst.isInBounds()); 1805 Vals.push_back(VE.getTypeID(GEPInst.getSourceElementType())); 1806 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) 1807 PushValueAndType(I.getOperand(i), InstID, Vals, VE); 1808 break; 1809 } 1810 case Instruction::ExtractValue: { 1811 Code = bitc::FUNC_CODE_INST_EXTRACTVAL; 1812 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1813 const ExtractValueInst *EVI = cast<ExtractValueInst>(&I); 1814 Vals.append(EVI->idx_begin(), EVI->idx_end()); 1815 break; 1816 } 1817 case Instruction::InsertValue: { 1818 Code = bitc::FUNC_CODE_INST_INSERTVAL; 1819 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1820 PushValueAndType(I.getOperand(1), InstID, Vals, VE); 1821 const InsertValueInst *IVI = cast<InsertValueInst>(&I); 1822 Vals.append(IVI->idx_begin(), IVI->idx_end()); 1823 break; 1824 } 1825 case Instruction::Select: 1826 Code = bitc::FUNC_CODE_INST_VSELECT; 1827 PushValueAndType(I.getOperand(1), InstID, Vals, VE); 1828 pushValue(I.getOperand(2), InstID, Vals, VE); 1829 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1830 break; 1831 case Instruction::ExtractElement: 1832 Code = bitc::FUNC_CODE_INST_EXTRACTELT; 1833 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1834 PushValueAndType(I.getOperand(1), InstID, Vals, VE); 1835 break; 1836 case Instruction::InsertElement: 1837 Code = bitc::FUNC_CODE_INST_INSERTELT; 1838 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1839 pushValue(I.getOperand(1), InstID, Vals, VE); 1840 PushValueAndType(I.getOperand(2), InstID, Vals, VE); 1841 break; 1842 case Instruction::ShuffleVector: 1843 Code = bitc::FUNC_CODE_INST_SHUFFLEVEC; 1844 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1845 pushValue(I.getOperand(1), InstID, Vals, VE); 1846 pushValue(I.getOperand(2), InstID, Vals, VE); 1847 break; 1848 case Instruction::ICmp: 1849 case Instruction::FCmp: { 1850 // compare returning Int1Ty or vector of Int1Ty 1851 Code = bitc::FUNC_CODE_INST_CMP2; 1852 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1853 pushValue(I.getOperand(1), InstID, Vals, VE); 1854 Vals.push_back(cast<CmpInst>(I).getPredicate()); 1855 uint64_t Flags = GetOptimizationFlags(&I); 1856 if (Flags != 0) 1857 Vals.push_back(Flags); 1858 break; 1859 } 1860 1861 case Instruction::Ret: 1862 { 1863 Code = bitc::FUNC_CODE_INST_RET; 1864 unsigned NumOperands = I.getNumOperands(); 1865 if (NumOperands == 0) 1866 AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV; 1867 else if (NumOperands == 1) { 1868 if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE)) 1869 AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV; 1870 } else { 1871 for (unsigned i = 0, e = NumOperands; i != e; ++i) 1872 PushValueAndType(I.getOperand(i), InstID, Vals, VE); 1873 } 1874 } 1875 break; 1876 case Instruction::Br: 1877 { 1878 Code = bitc::FUNC_CODE_INST_BR; 1879 const BranchInst &II = cast<BranchInst>(I); 1880 Vals.push_back(VE.getValueID(II.getSuccessor(0))); 1881 if (II.isConditional()) { 1882 Vals.push_back(VE.getValueID(II.getSuccessor(1))); 1883 pushValue(II.getCondition(), InstID, Vals, VE); 1884 } 1885 } 1886 break; 1887 case Instruction::Switch: 1888 { 1889 Code = bitc::FUNC_CODE_INST_SWITCH; 1890 const SwitchInst &SI = cast<SwitchInst>(I); 1891 Vals.push_back(VE.getTypeID(SI.getCondition()->getType())); 1892 pushValue(SI.getCondition(), InstID, Vals, VE); 1893 Vals.push_back(VE.getValueID(SI.getDefaultDest())); 1894 for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end(); 1895 i != e; ++i) { 1896 Vals.push_back(VE.getValueID(i.getCaseValue())); 1897 Vals.push_back(VE.getValueID(i.getCaseSuccessor())); 1898 } 1899 } 1900 break; 1901 case Instruction::IndirectBr: 1902 Code = bitc::FUNC_CODE_INST_INDIRECTBR; 1903 Vals.push_back(VE.getTypeID(I.getOperand(0)->getType())); 1904 // Encode the address operand as relative, but not the basic blocks. 1905 pushValue(I.getOperand(0), InstID, Vals, VE); 1906 for (unsigned i = 1, e = I.getNumOperands(); i != e; ++i) 1907 Vals.push_back(VE.getValueID(I.getOperand(i))); 1908 break; 1909 1910 case Instruction::Invoke: { 1911 const InvokeInst *II = cast<InvokeInst>(&I); 1912 const Value *Callee = II->getCalledValue(); 1913 FunctionType *FTy = II->getFunctionType(); 1914 1915 if (II->hasOperandBundles()) 1916 WriteOperandBundles(Stream, II, InstID, VE); 1917 1918 Code = bitc::FUNC_CODE_INST_INVOKE; 1919 1920 Vals.push_back(VE.getAttributeID(II->getAttributes())); 1921 Vals.push_back(II->getCallingConv() | 1 << 13); 1922 Vals.push_back(VE.getValueID(II->getNormalDest())); 1923 Vals.push_back(VE.getValueID(II->getUnwindDest())); 1924 Vals.push_back(VE.getTypeID(FTy)); 1925 PushValueAndType(Callee, InstID, Vals, VE); 1926 1927 // Emit value #'s for the fixed parameters. 1928 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) 1929 pushValue(I.getOperand(i), InstID, Vals, VE); // fixed param. 1930 1931 // Emit type/value pairs for varargs params. 1932 if (FTy->isVarArg()) { 1933 for (unsigned i = FTy->getNumParams(), e = I.getNumOperands()-3; 1934 i != e; ++i) 1935 PushValueAndType(I.getOperand(i), InstID, Vals, VE); // vararg 1936 } 1937 break; 1938 } 1939 case Instruction::Resume: 1940 Code = bitc::FUNC_CODE_INST_RESUME; 1941 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 1942 break; 1943 case Instruction::CleanupRet: { 1944 Code = bitc::FUNC_CODE_INST_CLEANUPRET; 1945 const auto &CRI = cast<CleanupReturnInst>(I); 1946 pushValue(CRI.getCleanupPad(), InstID, Vals, VE); 1947 if (CRI.hasUnwindDest()) 1948 Vals.push_back(VE.getValueID(CRI.getUnwindDest())); 1949 break; 1950 } 1951 case Instruction::CatchRet: { 1952 Code = bitc::FUNC_CODE_INST_CATCHRET; 1953 const auto &CRI = cast<CatchReturnInst>(I); 1954 pushValue(CRI.getCatchPad(), InstID, Vals, VE); 1955 Vals.push_back(VE.getValueID(CRI.getSuccessor())); 1956 break; 1957 } 1958 case Instruction::CatchPad: { 1959 Code = bitc::FUNC_CODE_INST_CATCHPAD; 1960 const auto &CPI = cast<CatchPadInst>(I); 1961 Vals.push_back(VE.getValueID(CPI.getNormalDest())); 1962 Vals.push_back(VE.getValueID(CPI.getUnwindDest())); 1963 unsigned NumArgOperands = CPI.getNumArgOperands(); 1964 Vals.push_back(NumArgOperands); 1965 for (unsigned Op = 0; Op != NumArgOperands; ++Op) 1966 PushValueAndType(CPI.getArgOperand(Op), InstID, Vals, VE); 1967 break; 1968 } 1969 case Instruction::TerminatePad: { 1970 Code = bitc::FUNC_CODE_INST_TERMINATEPAD; 1971 const auto &TPI = cast<TerminatePadInst>(I); 1972 Vals.push_back(TPI.hasUnwindDest()); 1973 if (TPI.hasUnwindDest()) 1974 Vals.push_back(VE.getValueID(TPI.getUnwindDest())); 1975 unsigned NumArgOperands = TPI.getNumArgOperands(); 1976 Vals.push_back(NumArgOperands); 1977 for (unsigned Op = 0; Op != NumArgOperands; ++Op) 1978 PushValueAndType(TPI.getArgOperand(Op), InstID, Vals, VE); 1979 break; 1980 } 1981 case Instruction::CleanupPad: { 1982 Code = bitc::FUNC_CODE_INST_CLEANUPPAD; 1983 const auto &CPI = cast<CleanupPadInst>(I); 1984 unsigned NumOperands = CPI.getNumOperands(); 1985 Vals.push_back(NumOperands); 1986 for (unsigned Op = 0; Op != NumOperands; ++Op) 1987 PushValueAndType(CPI.getOperand(Op), InstID, Vals, VE); 1988 break; 1989 } 1990 case Instruction::CatchEndPad: { 1991 Code = bitc::FUNC_CODE_INST_CATCHENDPAD; 1992 const auto &CEPI = cast<CatchEndPadInst>(I); 1993 if (CEPI.hasUnwindDest()) 1994 Vals.push_back(VE.getValueID(CEPI.getUnwindDest())); 1995 break; 1996 } 1997 case Instruction::CleanupEndPad: { 1998 Code = bitc::FUNC_CODE_INST_CLEANUPENDPAD; 1999 const auto &CEPI = cast<CleanupEndPadInst>(I); 2000 pushValue(CEPI.getCleanupPad(), InstID, Vals, VE); 2001 if (CEPI.hasUnwindDest()) 2002 Vals.push_back(VE.getValueID(CEPI.getUnwindDest())); 2003 break; 2004 } 2005 case Instruction::Unreachable: 2006 Code = bitc::FUNC_CODE_INST_UNREACHABLE; 2007 AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV; 2008 break; 2009 2010 case Instruction::PHI: { 2011 const PHINode &PN = cast<PHINode>(I); 2012 Code = bitc::FUNC_CODE_INST_PHI; 2013 // With the newer instruction encoding, forward references could give 2014 // negative valued IDs. This is most common for PHIs, so we use 2015 // signed VBRs. 2016 SmallVector<uint64_t, 128> Vals64; 2017 Vals64.push_back(VE.getTypeID(PN.getType())); 2018 for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) { 2019 pushValueSigned(PN.getIncomingValue(i), InstID, Vals64, VE); 2020 Vals64.push_back(VE.getValueID(PN.getIncomingBlock(i))); 2021 } 2022 // Emit a Vals64 vector and exit. 2023 Stream.EmitRecord(Code, Vals64, AbbrevToUse); 2024 Vals64.clear(); 2025 return; 2026 } 2027 2028 case Instruction::LandingPad: { 2029 const LandingPadInst &LP = cast<LandingPadInst>(I); 2030 Code = bitc::FUNC_CODE_INST_LANDINGPAD; 2031 Vals.push_back(VE.getTypeID(LP.getType())); 2032 Vals.push_back(LP.isCleanup()); 2033 Vals.push_back(LP.getNumClauses()); 2034 for (unsigned I = 0, E = LP.getNumClauses(); I != E; ++I) { 2035 if (LP.isCatch(I)) 2036 Vals.push_back(LandingPadInst::Catch); 2037 else 2038 Vals.push_back(LandingPadInst::Filter); 2039 PushValueAndType(LP.getClause(I), InstID, Vals, VE); 2040 } 2041 break; 2042 } 2043 2044 case Instruction::Alloca: { 2045 Code = bitc::FUNC_CODE_INST_ALLOCA; 2046 const AllocaInst &AI = cast<AllocaInst>(I); 2047 Vals.push_back(VE.getTypeID(AI.getAllocatedType())); 2048 Vals.push_back(VE.getTypeID(I.getOperand(0)->getType())); 2049 Vals.push_back(VE.getValueID(I.getOperand(0))); // size. 2050 unsigned AlignRecord = Log2_32(AI.getAlignment()) + 1; 2051 assert(Log2_32(Value::MaximumAlignment) + 1 < 1 << 5 && 2052 "not enough bits for maximum alignment"); 2053 assert(AlignRecord < 1 << 5 && "alignment greater than 1 << 64"); 2054 AlignRecord |= AI.isUsedWithInAlloca() << 5; 2055 AlignRecord |= 1 << 6; 2056 // Reserve bit 7 for SwiftError flag. 2057 // AlignRecord |= AI.isSwiftError() << 7; 2058 Vals.push_back(AlignRecord); 2059 break; 2060 } 2061 2062 case Instruction::Load: 2063 if (cast<LoadInst>(I).isAtomic()) { 2064 Code = bitc::FUNC_CODE_INST_LOADATOMIC; 2065 PushValueAndType(I.getOperand(0), InstID, Vals, VE); 2066 } else { 2067 Code = bitc::FUNC_CODE_INST_LOAD; 2068 if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE)) // ptr 2069 AbbrevToUse = FUNCTION_INST_LOAD_ABBREV; 2070 } 2071 Vals.push_back(VE.getTypeID(I.getType())); 2072 Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1); 2073 Vals.push_back(cast<LoadInst>(I).isVolatile()); 2074 if (cast<LoadInst>(I).isAtomic()) { 2075 Vals.push_back(GetEncodedOrdering(cast<LoadInst>(I).getOrdering())); 2076 Vals.push_back(GetEncodedSynchScope(cast<LoadInst>(I).getSynchScope())); 2077 } 2078 break; 2079 case Instruction::Store: 2080 if (cast<StoreInst>(I).isAtomic()) 2081 Code = bitc::FUNC_CODE_INST_STOREATOMIC; 2082 else 2083 Code = bitc::FUNC_CODE_INST_STORE; 2084 PushValueAndType(I.getOperand(1), InstID, Vals, VE); // ptrty + ptr 2085 PushValueAndType(I.getOperand(0), InstID, Vals, VE); // valty + val 2086 Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1); 2087 Vals.push_back(cast<StoreInst>(I).isVolatile()); 2088 if (cast<StoreInst>(I).isAtomic()) { 2089 Vals.push_back(GetEncodedOrdering(cast<StoreInst>(I).getOrdering())); 2090 Vals.push_back(GetEncodedSynchScope(cast<StoreInst>(I).getSynchScope())); 2091 } 2092 break; 2093 case Instruction::AtomicCmpXchg: 2094 Code = bitc::FUNC_CODE_INST_CMPXCHG; 2095 PushValueAndType(I.getOperand(0), InstID, Vals, VE); // ptrty + ptr 2096 PushValueAndType(I.getOperand(1), InstID, Vals, VE); // cmp. 2097 pushValue(I.getOperand(2), InstID, Vals, VE); // newval. 2098 Vals.push_back(cast<AtomicCmpXchgInst>(I).isVolatile()); 2099 Vals.push_back(GetEncodedOrdering( 2100 cast<AtomicCmpXchgInst>(I).getSuccessOrdering())); 2101 Vals.push_back(GetEncodedSynchScope( 2102 cast<AtomicCmpXchgInst>(I).getSynchScope())); 2103 Vals.push_back(GetEncodedOrdering( 2104 cast<AtomicCmpXchgInst>(I).getFailureOrdering())); 2105 Vals.push_back(cast<AtomicCmpXchgInst>(I).isWeak()); 2106 break; 2107 case Instruction::AtomicRMW: 2108 Code = bitc::FUNC_CODE_INST_ATOMICRMW; 2109 PushValueAndType(I.getOperand(0), InstID, Vals, VE); // ptrty + ptr 2110 pushValue(I.getOperand(1), InstID, Vals, VE); // val. 2111 Vals.push_back(GetEncodedRMWOperation( 2112 cast<AtomicRMWInst>(I).getOperation())); 2113 Vals.push_back(cast<AtomicRMWInst>(I).isVolatile()); 2114 Vals.push_back(GetEncodedOrdering(cast<AtomicRMWInst>(I).getOrdering())); 2115 Vals.push_back(GetEncodedSynchScope( 2116 cast<AtomicRMWInst>(I).getSynchScope())); 2117 break; 2118 case Instruction::Fence: 2119 Code = bitc::FUNC_CODE_INST_FENCE; 2120 Vals.push_back(GetEncodedOrdering(cast<FenceInst>(I).getOrdering())); 2121 Vals.push_back(GetEncodedSynchScope(cast<FenceInst>(I).getSynchScope())); 2122 break; 2123 case Instruction::Call: { 2124 const CallInst &CI = cast<CallInst>(I); 2125 FunctionType *FTy = CI.getFunctionType(); 2126 2127 if (CI.hasOperandBundles()) 2128 WriteOperandBundles(Stream, &CI, InstID, VE); 2129 2130 Code = bitc::FUNC_CODE_INST_CALL; 2131 2132 Vals.push_back(VE.getAttributeID(CI.getAttributes())); 2133 Vals.push_back((CI.getCallingConv() << 1) | unsigned(CI.isTailCall()) | 2134 unsigned(CI.isMustTailCall()) << 14 | 1 << 15 | 2135 unsigned(CI.isNoTailCall()) << 16); 2136 Vals.push_back(VE.getTypeID(FTy)); 2137 PushValueAndType(CI.getCalledValue(), InstID, Vals, VE); // Callee 2138 2139 // Emit value #'s for the fixed parameters. 2140 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) { 2141 // Check for labels (can happen with asm labels). 2142 if (FTy->getParamType(i)->isLabelTy()) 2143 Vals.push_back(VE.getValueID(CI.getArgOperand(i))); 2144 else 2145 pushValue(CI.getArgOperand(i), InstID, Vals, VE); // fixed param. 2146 } 2147 2148 // Emit type/value pairs for varargs params. 2149 if (FTy->isVarArg()) { 2150 for (unsigned i = FTy->getNumParams(), e = CI.getNumArgOperands(); 2151 i != e; ++i) 2152 PushValueAndType(CI.getArgOperand(i), InstID, Vals, VE); // varargs 2153 } 2154 break; 2155 } 2156 case Instruction::VAArg: 2157 Code = bitc::FUNC_CODE_INST_VAARG; 2158 Vals.push_back(VE.getTypeID(I.getOperand(0)->getType())); // valistty 2159 pushValue(I.getOperand(0), InstID, Vals, VE); // valist. 2160 Vals.push_back(VE.getTypeID(I.getType())); // restype. 2161 break; 2162 } 2163 2164 Stream.EmitRecord(Code, Vals, AbbrevToUse); 2165 Vals.clear(); 2166 } 2167 2168 enum StringEncoding { SE_Char6, SE_Fixed7, SE_Fixed8 }; 2169 2170 /// Determine the encoding to use for the given string name and length. 2171 static StringEncoding getStringEncoding(const char *Str, unsigned StrLen) { 2172 bool isChar6 = true; 2173 for (const char *C = Str, *E = C + StrLen; C != E; ++C) { 2174 if (isChar6) 2175 isChar6 = BitCodeAbbrevOp::isChar6(*C); 2176 if ((unsigned char)*C & 128) 2177 // don't bother scanning the rest. 2178 return SE_Fixed8; 2179 } 2180 if (isChar6) 2181 return SE_Char6; 2182 else 2183 return SE_Fixed7; 2184 } 2185 2186 /// Emit names for globals/functions etc. The VSTOffsetPlaceholder, 2187 /// BitcodeStartBit and FunctionIndex are only passed for the module-level 2188 /// VST, where we are including a function bitcode index and need to 2189 /// backpatch the VST forward declaration record. 2190 static void WriteValueSymbolTable( 2191 const ValueSymbolTable &VST, const ValueEnumerator &VE, 2192 BitstreamWriter &Stream, uint64_t VSTOffsetPlaceholder = 0, 2193 uint64_t BitcodeStartBit = 0, 2194 DenseMap<const Function *, std::unique_ptr<FunctionInfo>> *FunctionIndex = 2195 nullptr) { 2196 if (VST.empty()) { 2197 // WriteValueSymbolTableForwardDecl should have returned early as 2198 // well. Ensure this handling remains in sync by asserting that 2199 // the placeholder offset is not set. 2200 assert(VSTOffsetPlaceholder == 0); 2201 return; 2202 } 2203 2204 if (VSTOffsetPlaceholder > 0) { 2205 // Get the offset of the VST we are writing, and backpatch it into 2206 // the VST forward declaration record. 2207 uint64_t VSTOffset = Stream.GetCurrentBitNo(); 2208 // The BitcodeStartBit was the stream offset of the actual bitcode 2209 // (e.g. excluding any initial darwin header). 2210 VSTOffset -= BitcodeStartBit; 2211 assert((VSTOffset & 31) == 0 && "VST block not 32-bit aligned"); 2212 Stream.BackpatchWord(VSTOffsetPlaceholder, VSTOffset / 32); 2213 } 2214 2215 Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4); 2216 2217 // For the module-level VST, add abbrev Ids for the VST_CODE_FNENTRY 2218 // records, which are not used in the per-function VSTs. 2219 unsigned FnEntry8BitAbbrev; 2220 unsigned FnEntry7BitAbbrev; 2221 unsigned FnEntry6BitAbbrev; 2222 if (VSTOffsetPlaceholder > 0) { 2223 // 8-bit fixed-width VST_FNENTRY function strings. 2224 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2225 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_FNENTRY)); 2226 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // value id 2227 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // funcoffset 2228 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2229 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); 2230 FnEntry8BitAbbrev = Stream.EmitAbbrev(Abbv); 2231 2232 // 7-bit fixed width VST_FNENTRY function strings. 2233 Abbv = new BitCodeAbbrev(); 2234 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_FNENTRY)); 2235 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // value id 2236 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // funcoffset 2237 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2238 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); 2239 FnEntry7BitAbbrev = Stream.EmitAbbrev(Abbv); 2240 2241 // 6-bit char6 VST_FNENTRY function strings. 2242 Abbv = new BitCodeAbbrev(); 2243 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_FNENTRY)); 2244 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // value id 2245 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // funcoffset 2246 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2247 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 2248 FnEntry6BitAbbrev = Stream.EmitAbbrev(Abbv); 2249 } 2250 2251 // FIXME: Set up the abbrev, we know how many values there are! 2252 // FIXME: We know if the type names can use 7-bit ascii. 2253 SmallVector<unsigned, 64> NameVals; 2254 2255 for (const ValueName &Name : VST) { 2256 // Figure out the encoding to use for the name. 2257 StringEncoding Bits = 2258 getStringEncoding(Name.getKeyData(), Name.getKeyLength()); 2259 2260 unsigned AbbrevToUse = VST_ENTRY_8_ABBREV; 2261 NameVals.push_back(VE.getValueID(Name.getValue())); 2262 2263 Function *F = dyn_cast<Function>(Name.getValue()); 2264 if (!F) { 2265 // If value is an alias, need to get the aliased base object to 2266 // see if it is a function. 2267 auto *GA = dyn_cast<GlobalAlias>(Name.getValue()); 2268 if (GA && GA->getBaseObject()) 2269 F = dyn_cast<Function>(GA->getBaseObject()); 2270 } 2271 2272 // VST_ENTRY: [valueid, namechar x N] 2273 // VST_FNENTRY: [valueid, funcoffset, namechar x N] 2274 // VST_BBENTRY: [bbid, namechar x N] 2275 unsigned Code; 2276 if (isa<BasicBlock>(Name.getValue())) { 2277 Code = bitc::VST_CODE_BBENTRY; 2278 if (Bits == SE_Char6) 2279 AbbrevToUse = VST_BBENTRY_6_ABBREV; 2280 } else if (F && !F->isDeclaration()) { 2281 // Must be the module-level VST, where we pass in the Index and 2282 // have a VSTOffsetPlaceholder. The function-level VST should not 2283 // contain any Function symbols. 2284 assert(FunctionIndex); 2285 assert(VSTOffsetPlaceholder > 0); 2286 2287 // Save the word offset of the function (from the start of the 2288 // actual bitcode written to the stream). 2289 assert(FunctionIndex->count(F) == 1); 2290 uint64_t BitcodeIndex = 2291 (*FunctionIndex)[F]->bitcodeIndex() - BitcodeStartBit; 2292 assert((BitcodeIndex & 31) == 0 && "function block not 32-bit aligned"); 2293 NameVals.push_back(BitcodeIndex / 32); 2294 2295 Code = bitc::VST_CODE_FNENTRY; 2296 AbbrevToUse = FnEntry8BitAbbrev; 2297 if (Bits == SE_Char6) 2298 AbbrevToUse = FnEntry6BitAbbrev; 2299 else if (Bits == SE_Fixed7) 2300 AbbrevToUse = FnEntry7BitAbbrev; 2301 } else { 2302 Code = bitc::VST_CODE_ENTRY; 2303 if (Bits == SE_Char6) 2304 AbbrevToUse = VST_ENTRY_6_ABBREV; 2305 else if (Bits == SE_Fixed7) 2306 AbbrevToUse = VST_ENTRY_7_ABBREV; 2307 } 2308 2309 for (const auto P : Name.getKey()) 2310 NameVals.push_back((unsigned char)P); 2311 2312 // Emit the finished record. 2313 Stream.EmitRecord(Code, NameVals, AbbrevToUse); 2314 NameVals.clear(); 2315 } 2316 Stream.ExitBlock(); 2317 } 2318 2319 /// Emit function names and summary offsets for the combined index 2320 /// used by ThinLTO. 2321 static void WriteCombinedValueSymbolTable(const FunctionInfoIndex &Index, 2322 BitstreamWriter &Stream) { 2323 Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4); 2324 2325 // 8-bit fixed-width VST_COMBINED_FNENTRY function strings. 2326 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2327 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_COMBINED_FNENTRY)); 2328 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // funcoffset 2329 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2330 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); 2331 unsigned FnEntry8BitAbbrev = Stream.EmitAbbrev(Abbv); 2332 2333 // 7-bit fixed width VST_COMBINED_FNENTRY function strings. 2334 Abbv = new BitCodeAbbrev(); 2335 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_COMBINED_FNENTRY)); 2336 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // funcoffset 2337 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2338 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); 2339 unsigned FnEntry7BitAbbrev = Stream.EmitAbbrev(Abbv); 2340 2341 // 6-bit char6 VST_COMBINED_FNENTRY function strings. 2342 Abbv = new BitCodeAbbrev(); 2343 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_COMBINED_FNENTRY)); 2344 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // funcoffset 2345 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2346 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 2347 unsigned FnEntry6BitAbbrev = Stream.EmitAbbrev(Abbv); 2348 2349 // FIXME: We know if the type names can use 7-bit ascii. 2350 SmallVector<unsigned, 64> NameVals; 2351 2352 for (const auto &FII : Index) { 2353 for (const auto &FI : FII.getValue()) { 2354 NameVals.push_back(FI->bitcodeIndex()); 2355 2356 StringRef FuncName = FII.first(); 2357 2358 // Figure out the encoding to use for the name. 2359 StringEncoding Bits = getStringEncoding(FuncName.data(), FuncName.size()); 2360 2361 // VST_COMBINED_FNENTRY: [funcsumoffset, namechar x N] 2362 unsigned AbbrevToUse = FnEntry8BitAbbrev; 2363 if (Bits == SE_Char6) 2364 AbbrevToUse = FnEntry6BitAbbrev; 2365 else if (Bits == SE_Fixed7) 2366 AbbrevToUse = FnEntry7BitAbbrev; 2367 2368 for (const auto P : FuncName) 2369 NameVals.push_back((unsigned char)P); 2370 2371 // Emit the finished record. 2372 Stream.EmitRecord(bitc::VST_CODE_COMBINED_FNENTRY, NameVals, AbbrevToUse); 2373 NameVals.clear(); 2374 } 2375 } 2376 Stream.ExitBlock(); 2377 } 2378 2379 static void WriteUseList(ValueEnumerator &VE, UseListOrder &&Order, 2380 BitstreamWriter &Stream) { 2381 assert(Order.Shuffle.size() >= 2 && "Shuffle too small"); 2382 unsigned Code; 2383 if (isa<BasicBlock>(Order.V)) 2384 Code = bitc::USELIST_CODE_BB; 2385 else 2386 Code = bitc::USELIST_CODE_DEFAULT; 2387 2388 SmallVector<uint64_t, 64> Record(Order.Shuffle.begin(), Order.Shuffle.end()); 2389 Record.push_back(VE.getValueID(Order.V)); 2390 Stream.EmitRecord(Code, Record); 2391 } 2392 2393 static void WriteUseListBlock(const Function *F, ValueEnumerator &VE, 2394 BitstreamWriter &Stream) { 2395 assert(VE.shouldPreserveUseListOrder() && 2396 "Expected to be preserving use-list order"); 2397 2398 auto hasMore = [&]() { 2399 return !VE.UseListOrders.empty() && VE.UseListOrders.back().F == F; 2400 }; 2401 if (!hasMore()) 2402 // Nothing to do. 2403 return; 2404 2405 Stream.EnterSubblock(bitc::USELIST_BLOCK_ID, 3); 2406 while (hasMore()) { 2407 WriteUseList(VE, std::move(VE.UseListOrders.back()), Stream); 2408 VE.UseListOrders.pop_back(); 2409 } 2410 Stream.ExitBlock(); 2411 } 2412 2413 /// \brief Save information for the given function into the function index. 2414 /// 2415 /// At a minimum this saves the bitcode index of the function record that 2416 /// was just written. However, if we are emitting function summary information, 2417 /// for example for ThinLTO, then a \a FunctionSummary object is created 2418 /// to hold the provided summary information. 2419 static void SaveFunctionInfo( 2420 const Function &F, 2421 DenseMap<const Function *, std::unique_ptr<FunctionInfo>> &FunctionIndex, 2422 unsigned NumInsts, uint64_t BitcodeIndex, bool EmitFunctionSummary) { 2423 std::unique_ptr<FunctionSummary> FuncSummary; 2424 if (EmitFunctionSummary) { 2425 FuncSummary = llvm::make_unique<FunctionSummary>(NumInsts); 2426 FuncSummary->setLocalFunction(F.hasLocalLinkage()); 2427 } 2428 FunctionIndex[&F] = 2429 llvm::make_unique<FunctionInfo>(BitcodeIndex, std::move(FuncSummary)); 2430 } 2431 2432 /// Emit a function body to the module stream. 2433 static void WriteFunction( 2434 const Function &F, ValueEnumerator &VE, BitstreamWriter &Stream, 2435 DenseMap<const Function *, std::unique_ptr<FunctionInfo>> &FunctionIndex, 2436 bool EmitFunctionSummary) { 2437 // Save the bitcode index of the start of this function block for recording 2438 // in the VST. 2439 uint64_t BitcodeIndex = Stream.GetCurrentBitNo(); 2440 2441 Stream.EnterSubblock(bitc::FUNCTION_BLOCK_ID, 4); 2442 VE.incorporateFunction(F); 2443 2444 SmallVector<unsigned, 64> Vals; 2445 2446 // Emit the number of basic blocks, so the reader can create them ahead of 2447 // time. 2448 Vals.push_back(VE.getBasicBlocks().size()); 2449 Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals); 2450 Vals.clear(); 2451 2452 // If there are function-local constants, emit them now. 2453 unsigned CstStart, CstEnd; 2454 VE.getFunctionConstantRange(CstStart, CstEnd); 2455 WriteConstants(CstStart, CstEnd, VE, Stream, false); 2456 2457 // If there is function-local metadata, emit it now. 2458 WriteFunctionLocalMetadata(F, VE, Stream); 2459 2460 // Keep a running idea of what the instruction ID is. 2461 unsigned InstID = CstEnd; 2462 2463 bool NeedsMetadataAttachment = F.hasMetadata(); 2464 2465 DILocation *LastDL = nullptr; 2466 unsigned NumInsts = 0; 2467 2468 // Finally, emit all the instructions, in order. 2469 for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) 2470 for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); 2471 I != E; ++I) { 2472 WriteInstruction(*I, InstID, VE, Stream, Vals); 2473 2474 if (!isa<DbgInfoIntrinsic>(I)) 2475 ++NumInsts; 2476 2477 if (!I->getType()->isVoidTy()) 2478 ++InstID; 2479 2480 // If the instruction has metadata, write a metadata attachment later. 2481 NeedsMetadataAttachment |= I->hasMetadataOtherThanDebugLoc(); 2482 2483 // If the instruction has a debug location, emit it. 2484 DILocation *DL = I->getDebugLoc(); 2485 if (!DL) 2486 continue; 2487 2488 if (DL == LastDL) { 2489 // Just repeat the same debug loc as last time. 2490 Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals); 2491 continue; 2492 } 2493 2494 Vals.push_back(DL->getLine()); 2495 Vals.push_back(DL->getColumn()); 2496 Vals.push_back(VE.getMetadataOrNullID(DL->getScope())); 2497 Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt())); 2498 Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals); 2499 Vals.clear(); 2500 2501 LastDL = DL; 2502 } 2503 2504 // Emit names for all the instructions etc. 2505 WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream); 2506 2507 if (NeedsMetadataAttachment) 2508 WriteMetadataAttachment(F, VE, Stream); 2509 if (VE.shouldPreserveUseListOrder()) 2510 WriteUseListBlock(&F, VE, Stream); 2511 VE.purgeFunction(); 2512 Stream.ExitBlock(); 2513 2514 SaveFunctionInfo(F, FunctionIndex, NumInsts, BitcodeIndex, 2515 EmitFunctionSummary); 2516 } 2517 2518 // Emit blockinfo, which defines the standard abbreviations etc. 2519 static void WriteBlockInfo(const ValueEnumerator &VE, BitstreamWriter &Stream) { 2520 // We only want to emit block info records for blocks that have multiple 2521 // instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK. 2522 // Other blocks can define their abbrevs inline. 2523 Stream.EnterBlockInfoBlock(2); 2524 2525 { // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings. 2526 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2527 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); 2528 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2529 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2530 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); 2531 if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID, 2532 Abbv) != VST_ENTRY_8_ABBREV) 2533 llvm_unreachable("Unexpected abbrev ordering!"); 2534 } 2535 2536 { // 7-bit fixed width VST_ENTRY strings. 2537 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2538 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY)); 2539 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2540 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2541 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); 2542 if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID, 2543 Abbv) != VST_ENTRY_7_ABBREV) 2544 llvm_unreachable("Unexpected abbrev ordering!"); 2545 } 2546 { // 6-bit char6 VST_ENTRY strings. 2547 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2548 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY)); 2549 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2550 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2551 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 2552 if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID, 2553 Abbv) != VST_ENTRY_6_ABBREV) 2554 llvm_unreachable("Unexpected abbrev ordering!"); 2555 } 2556 { // 6-bit char6 VST_BBENTRY strings. 2557 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2558 Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY)); 2559 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2560 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2561 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 2562 if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID, 2563 Abbv) != VST_BBENTRY_6_ABBREV) 2564 llvm_unreachable("Unexpected abbrev ordering!"); 2565 } 2566 2567 2568 2569 { // SETTYPE abbrev for CONSTANTS_BLOCK. 2570 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2571 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE)); 2572 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2573 VE.computeBitsRequiredForTypeIndicies())); 2574 if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID, 2575 Abbv) != CONSTANTS_SETTYPE_ABBREV) 2576 llvm_unreachable("Unexpected abbrev ordering!"); 2577 } 2578 2579 { // INTEGER abbrev for CONSTANTS_BLOCK. 2580 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2581 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER)); 2582 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2583 if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID, 2584 Abbv) != CONSTANTS_INTEGER_ABBREV) 2585 llvm_unreachable("Unexpected abbrev ordering!"); 2586 } 2587 2588 { // CE_CAST abbrev for CONSTANTS_BLOCK. 2589 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2590 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST)); 2591 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // cast opc 2592 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // typeid 2593 VE.computeBitsRequiredForTypeIndicies())); 2594 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // value id 2595 2596 if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID, 2597 Abbv) != CONSTANTS_CE_CAST_Abbrev) 2598 llvm_unreachable("Unexpected abbrev ordering!"); 2599 } 2600 { // NULL abbrev for CONSTANTS_BLOCK. 2601 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2602 Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL)); 2603 if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID, 2604 Abbv) != CONSTANTS_NULL_Abbrev) 2605 llvm_unreachable("Unexpected abbrev ordering!"); 2606 } 2607 2608 // FIXME: This should only use space for first class types! 2609 2610 { // INST_LOAD abbrev for FUNCTION_BLOCK. 2611 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2612 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD)); 2613 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr 2614 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // dest ty 2615 VE.computeBitsRequiredForTypeIndicies())); 2616 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align 2617 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile 2618 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, 2619 Abbv) != FUNCTION_INST_LOAD_ABBREV) 2620 llvm_unreachable("Unexpected abbrev ordering!"); 2621 } 2622 { // INST_BINOP abbrev for FUNCTION_BLOCK. 2623 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2624 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP)); 2625 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS 2626 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS 2627 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc 2628 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, 2629 Abbv) != FUNCTION_INST_BINOP_ABBREV) 2630 llvm_unreachable("Unexpected abbrev ordering!"); 2631 } 2632 { // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK. 2633 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2634 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP)); 2635 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS 2636 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS 2637 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc 2638 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); // flags 2639 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, 2640 Abbv) != FUNCTION_INST_BINOP_FLAGS_ABBREV) 2641 llvm_unreachable("Unexpected abbrev ordering!"); 2642 } 2643 { // INST_CAST abbrev for FUNCTION_BLOCK. 2644 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2645 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST)); 2646 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // OpVal 2647 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // dest ty 2648 VE.computeBitsRequiredForTypeIndicies())); 2649 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc 2650 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, 2651 Abbv) != FUNCTION_INST_CAST_ABBREV) 2652 llvm_unreachable("Unexpected abbrev ordering!"); 2653 } 2654 2655 { // INST_RET abbrev for FUNCTION_BLOCK. 2656 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2657 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET)); 2658 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, 2659 Abbv) != FUNCTION_INST_RET_VOID_ABBREV) 2660 llvm_unreachable("Unexpected abbrev ordering!"); 2661 } 2662 { // INST_RET abbrev for FUNCTION_BLOCK. 2663 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2664 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET)); 2665 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID 2666 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, 2667 Abbv) != FUNCTION_INST_RET_VAL_ABBREV) 2668 llvm_unreachable("Unexpected abbrev ordering!"); 2669 } 2670 { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK. 2671 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2672 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE)); 2673 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, 2674 Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV) 2675 llvm_unreachable("Unexpected abbrev ordering!"); 2676 } 2677 { 2678 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2679 Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_GEP)); 2680 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); 2681 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // dest ty 2682 Log2_32_Ceil(VE.getTypes().size() + 1))); 2683 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2684 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 2685 if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, Abbv) != 2686 FUNCTION_INST_GEP_ABBREV) 2687 llvm_unreachable("Unexpected abbrev ordering!"); 2688 } 2689 2690 Stream.ExitBlock(); 2691 } 2692 2693 /// Write the module path strings, currently only used when generating 2694 /// a combined index file. 2695 static void WriteModStrings(const FunctionInfoIndex &I, 2696 BitstreamWriter &Stream) { 2697 Stream.EnterSubblock(bitc::MODULE_STRTAB_BLOCK_ID, 3); 2698 2699 // TODO: See which abbrev sizes we actually need to emit 2700 2701 // 8-bit fixed-width MST_ENTRY strings. 2702 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2703 Abbv->Add(BitCodeAbbrevOp(bitc::MST_CODE_ENTRY)); 2704 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2705 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2706 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); 2707 unsigned Abbrev8Bit = Stream.EmitAbbrev(Abbv); 2708 2709 // 7-bit fixed width MST_ENTRY strings. 2710 Abbv = new BitCodeAbbrev(); 2711 Abbv->Add(BitCodeAbbrevOp(bitc::MST_CODE_ENTRY)); 2712 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2713 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2714 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); 2715 unsigned Abbrev7Bit = Stream.EmitAbbrev(Abbv); 2716 2717 // 6-bit char6 MST_ENTRY strings. 2718 Abbv = new BitCodeAbbrev(); 2719 Abbv->Add(BitCodeAbbrevOp(bitc::MST_CODE_ENTRY)); 2720 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); 2721 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2722 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 2723 unsigned Abbrev6Bit = Stream.EmitAbbrev(Abbv); 2724 2725 SmallVector<unsigned, 64> NameVals; 2726 for (const StringMapEntry<uint64_t> &MPSE : I.modPathStringEntries()) { 2727 StringEncoding Bits = 2728 getStringEncoding(MPSE.getKey().data(), MPSE.getKey().size()); 2729 unsigned AbbrevToUse = Abbrev8Bit; 2730 if (Bits == SE_Char6) 2731 AbbrevToUse = Abbrev6Bit; 2732 else if (Bits == SE_Fixed7) 2733 AbbrevToUse = Abbrev7Bit; 2734 2735 NameVals.push_back(MPSE.getValue()); 2736 2737 for (const auto P : MPSE.getKey()) 2738 NameVals.push_back((unsigned char)P); 2739 2740 // Emit the finished record. 2741 Stream.EmitRecord(bitc::MST_CODE_ENTRY, NameVals, AbbrevToUse); 2742 NameVals.clear(); 2743 } 2744 Stream.ExitBlock(); 2745 } 2746 2747 // Helper to emit a single function summary record. 2748 static void WritePerModuleFunctionSummaryRecord( 2749 SmallVector<unsigned, 64> &NameVals, FunctionSummary *FS, unsigned ValueID, 2750 unsigned FSAbbrev, BitstreamWriter &Stream) { 2751 assert(FS); 2752 NameVals.push_back(ValueID); 2753 NameVals.push_back(FS->isLocalFunction()); 2754 NameVals.push_back(FS->instCount()); 2755 2756 // Emit the finished record. 2757 Stream.EmitRecord(bitc::FS_CODE_PERMODULE_ENTRY, NameVals, FSAbbrev); 2758 NameVals.clear(); 2759 } 2760 2761 /// Emit the per-module function summary section alongside the rest of 2762 /// the module's bitcode. 2763 static void WritePerModuleFunctionSummary( 2764 DenseMap<const Function *, std::unique_ptr<FunctionInfo>> &FunctionIndex, 2765 const Module *M, const ValueEnumerator &VE, BitstreamWriter &Stream) { 2766 Stream.EnterSubblock(bitc::FUNCTION_SUMMARY_BLOCK_ID, 3); 2767 2768 // Abbrev for FS_CODE_PERMODULE_ENTRY. 2769 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2770 Abbv->Add(BitCodeAbbrevOp(bitc::FS_CODE_PERMODULE_ENTRY)); 2771 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // valueid 2772 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // islocal 2773 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // instcount 2774 unsigned FSAbbrev = Stream.EmitAbbrev(Abbv); 2775 2776 SmallVector<unsigned, 64> NameVals; 2777 for (auto &I : FunctionIndex) { 2778 // Skip anonymous functions. We will emit a function summary for 2779 // any aliases below. 2780 if (!I.first->hasName()) 2781 continue; 2782 2783 WritePerModuleFunctionSummaryRecord( 2784 NameVals, I.second->functionSummary(), 2785 VE.getValueID(M->getValueSymbolTable().lookup(I.first->getName())), 2786 FSAbbrev, Stream); 2787 } 2788 2789 for (const GlobalAlias &A : M->aliases()) { 2790 if (!A.getBaseObject()) 2791 continue; 2792 const Function *F = dyn_cast<Function>(A.getBaseObject()); 2793 if (!F || F->isDeclaration()) 2794 continue; 2795 2796 assert(FunctionIndex.count(F) == 1); 2797 WritePerModuleFunctionSummaryRecord( 2798 NameVals, FunctionIndex[F]->functionSummary(), 2799 VE.getValueID(M->getValueSymbolTable().lookup(A.getName())), FSAbbrev, 2800 Stream); 2801 } 2802 2803 Stream.ExitBlock(); 2804 } 2805 2806 /// Emit the combined function summary section into the combined index 2807 /// file. 2808 static void WriteCombinedFunctionSummary(const FunctionInfoIndex &I, 2809 BitstreamWriter &Stream) { 2810 Stream.EnterSubblock(bitc::FUNCTION_SUMMARY_BLOCK_ID, 3); 2811 2812 // Abbrev for FS_CODE_COMBINED_ENTRY. 2813 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2814 Abbv->Add(BitCodeAbbrevOp(bitc::FS_CODE_COMBINED_ENTRY)); 2815 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // modid 2816 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // instcount 2817 unsigned FSAbbrev = Stream.EmitAbbrev(Abbv); 2818 2819 SmallVector<unsigned, 64> NameVals; 2820 for (const auto &FII : I) { 2821 for (auto &FI : FII.getValue()) { 2822 FunctionSummary *FS = FI->functionSummary(); 2823 assert(FS); 2824 2825 NameVals.push_back(I.getModuleId(FS->modulePath())); 2826 NameVals.push_back(FS->instCount()); 2827 2828 // Record the starting offset of this summary entry for use 2829 // in the VST entry. Add the current code size since the 2830 // reader will invoke readRecord after the abbrev id read. 2831 FI->setBitcodeIndex(Stream.GetCurrentBitNo() + Stream.GetAbbrevIDWidth()); 2832 2833 // Emit the finished record. 2834 Stream.EmitRecord(bitc::FS_CODE_COMBINED_ENTRY, NameVals, FSAbbrev); 2835 NameVals.clear(); 2836 } 2837 } 2838 2839 Stream.ExitBlock(); 2840 } 2841 2842 // Create the "IDENTIFICATION_BLOCK_ID" containing a single string with the 2843 // current llvm version, and a record for the epoch number. 2844 static void WriteIdentificationBlock(const Module *M, BitstreamWriter &Stream) { 2845 Stream.EnterSubblock(bitc::IDENTIFICATION_BLOCK_ID, 5); 2846 2847 // Write the "user readable" string identifying the bitcode producer 2848 BitCodeAbbrev *Abbv = new BitCodeAbbrev(); 2849 Abbv->Add(BitCodeAbbrevOp(bitc::IDENTIFICATION_CODE_STRING)); 2850 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); 2851 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6)); 2852 auto StringAbbrev = Stream.EmitAbbrev(Abbv); 2853 WriteStringRecord(bitc::IDENTIFICATION_CODE_STRING, 2854 "LLVM" LLVM_VERSION_STRING, StringAbbrev, Stream); 2855 2856 // Write the epoch version 2857 Abbv = new BitCodeAbbrev(); 2858 Abbv->Add(BitCodeAbbrevOp(bitc::IDENTIFICATION_CODE_EPOCH)); 2859 Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); 2860 auto EpochAbbrev = Stream.EmitAbbrev(Abbv); 2861 SmallVector<unsigned, 1> Vals = {bitc::BITCODE_CURRENT_EPOCH}; 2862 Stream.EmitRecord(bitc::IDENTIFICATION_CODE_EPOCH, Vals, EpochAbbrev); 2863 Stream.ExitBlock(); 2864 } 2865 2866 /// WriteModule - Emit the specified module to the bitstream. 2867 static void WriteModule(const Module *M, BitstreamWriter &Stream, 2868 bool ShouldPreserveUseListOrder, 2869 uint64_t BitcodeStartBit, bool EmitFunctionSummary) { 2870 Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3); 2871 2872 SmallVector<unsigned, 1> Vals; 2873 unsigned CurVersion = 1; 2874 Vals.push_back(CurVersion); 2875 Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals); 2876 2877 // Analyze the module, enumerating globals, functions, etc. 2878 ValueEnumerator VE(*M, ShouldPreserveUseListOrder); 2879 2880 // Emit blockinfo, which defines the standard abbreviations etc. 2881 WriteBlockInfo(VE, Stream); 2882 2883 // Emit information about attribute groups. 2884 WriteAttributeGroupTable(VE, Stream); 2885 2886 // Emit information about parameter attributes. 2887 WriteAttributeTable(VE, Stream); 2888 2889 // Emit information describing all of the types in the module. 2890 WriteTypeTable(VE, Stream); 2891 2892 writeComdats(VE, Stream); 2893 2894 // Emit top-level description of module, including target triple, inline asm, 2895 // descriptors for global variables, and function prototype info. 2896 uint64_t VSTOffsetPlaceholder = WriteModuleInfo(M, VE, Stream); 2897 2898 // Emit constants. 2899 WriteModuleConstants(VE, Stream); 2900 2901 // Emit metadata. 2902 WriteModuleMetadata(M, VE, Stream); 2903 2904 // Emit metadata. 2905 WriteModuleMetadataStore(M, Stream); 2906 2907 // Emit module-level use-lists. 2908 if (VE.shouldPreserveUseListOrder()) 2909 WriteUseListBlock(nullptr, VE, Stream); 2910 2911 WriteOperandBundleTags(M, Stream); 2912 2913 // Emit function bodies. 2914 DenseMap<const Function *, std::unique_ptr<FunctionInfo>> FunctionIndex; 2915 for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F) 2916 if (!F->isDeclaration()) 2917 WriteFunction(*F, VE, Stream, FunctionIndex, EmitFunctionSummary); 2918 2919 // Need to write after the above call to WriteFunction which populates 2920 // the summary information in the index. 2921 if (EmitFunctionSummary) 2922 WritePerModuleFunctionSummary(FunctionIndex, M, VE, Stream); 2923 2924 WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream, 2925 VSTOffsetPlaceholder, BitcodeStartBit, &FunctionIndex); 2926 2927 Stream.ExitBlock(); 2928 } 2929 2930 /// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a 2931 /// header and trailer to make it compatible with the system archiver. To do 2932 /// this we emit the following header, and then emit a trailer that pads the 2933 /// file out to be a multiple of 16 bytes. 2934 /// 2935 /// struct bc_header { 2936 /// uint32_t Magic; // 0x0B17C0DE 2937 /// uint32_t Version; // Version, currently always 0. 2938 /// uint32_t BitcodeOffset; // Offset to traditional bitcode file. 2939 /// uint32_t BitcodeSize; // Size of traditional bitcode file. 2940 /// uint32_t CPUType; // CPU specifier. 2941 /// ... potentially more later ... 2942 /// }; 2943 enum { 2944 DarwinBCSizeFieldOffset = 3*4, // Offset to bitcode_size. 2945 DarwinBCHeaderSize = 5*4 2946 }; 2947 2948 static void WriteInt32ToBuffer(uint32_t Value, SmallVectorImpl<char> &Buffer, 2949 uint32_t &Position) { 2950 support::endian::write32le(&Buffer[Position], Value); 2951 Position += 4; 2952 } 2953 2954 static void EmitDarwinBCHeaderAndTrailer(SmallVectorImpl<char> &Buffer, 2955 const Triple &TT) { 2956 unsigned CPUType = ~0U; 2957 2958 // Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*, arm-*, thumb-*, 2959 // armv[0-9]-*, thumbv[0-9]-*, armv5te-*, or armv6t2-*. The CPUType is a magic 2960 // number from /usr/include/mach/machine.h. It is ok to reproduce the 2961 // specific constants here because they are implicitly part of the Darwin ABI. 2962 enum { 2963 DARWIN_CPU_ARCH_ABI64 = 0x01000000, 2964 DARWIN_CPU_TYPE_X86 = 7, 2965 DARWIN_CPU_TYPE_ARM = 12, 2966 DARWIN_CPU_TYPE_POWERPC = 18 2967 }; 2968 2969 Triple::ArchType Arch = TT.getArch(); 2970 if (Arch == Triple::x86_64) 2971 CPUType = DARWIN_CPU_TYPE_X86 | DARWIN_CPU_ARCH_ABI64; 2972 else if (Arch == Triple::x86) 2973 CPUType = DARWIN_CPU_TYPE_X86; 2974 else if (Arch == Triple::ppc) 2975 CPUType = DARWIN_CPU_TYPE_POWERPC; 2976 else if (Arch == Triple::ppc64) 2977 CPUType = DARWIN_CPU_TYPE_POWERPC | DARWIN_CPU_ARCH_ABI64; 2978 else if (Arch == Triple::arm || Arch == Triple::thumb) 2979 CPUType = DARWIN_CPU_TYPE_ARM; 2980 2981 // Traditional Bitcode starts after header. 2982 assert(Buffer.size() >= DarwinBCHeaderSize && 2983 "Expected header size to be reserved"); 2984 unsigned BCOffset = DarwinBCHeaderSize; 2985 unsigned BCSize = Buffer.size()-DarwinBCHeaderSize; 2986 2987 // Write the magic and version. 2988 unsigned Position = 0; 2989 WriteInt32ToBuffer(0x0B17C0DE , Buffer, Position); 2990 WriteInt32ToBuffer(0 , Buffer, Position); // Version. 2991 WriteInt32ToBuffer(BCOffset , Buffer, Position); 2992 WriteInt32ToBuffer(BCSize , Buffer, Position); 2993 WriteInt32ToBuffer(CPUType , Buffer, Position); 2994 2995 // If the file is not a multiple of 16 bytes, insert dummy padding. 2996 while (Buffer.size() & 15) 2997 Buffer.push_back(0); 2998 } 2999 3000 /// Helper to write the header common to all bitcode files. 3001 static void WriteBitcodeHeader(BitstreamWriter &Stream) { 3002 // Emit the file header. 3003 Stream.Emit((unsigned)'B', 8); 3004 Stream.Emit((unsigned)'C', 8); 3005 Stream.Emit(0x0, 4); 3006 Stream.Emit(0xC, 4); 3007 Stream.Emit(0xE, 4); 3008 Stream.Emit(0xD, 4); 3009 } 3010 3011 /// WriteBitcodeToFile - Write the specified module to the specified output 3012 /// stream. 3013 void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out, 3014 bool ShouldPreserveUseListOrder, 3015 bool EmitFunctionSummary) { 3016 SmallVector<char, 0> Buffer; 3017 Buffer.reserve(256*1024); 3018 3019 // If this is darwin or another generic macho target, reserve space for the 3020 // header. 3021 Triple TT(M->getTargetTriple()); 3022 if (TT.isOSDarwin()) 3023 Buffer.insert(Buffer.begin(), DarwinBCHeaderSize, 0); 3024 3025 // Emit the module into the buffer. 3026 { 3027 BitstreamWriter Stream(Buffer); 3028 // Save the start bit of the actual bitcode, in case there is space 3029 // saved at the start for the darwin header above. The reader stream 3030 // will start at the bitcode, and we need the offset of the VST 3031 // to line up. 3032 uint64_t BitcodeStartBit = Stream.GetCurrentBitNo(); 3033 3034 // Emit the file header. 3035 WriteBitcodeHeader(Stream); 3036 3037 WriteIdentificationBlock(M, Stream); 3038 3039 // Emit the module. 3040 WriteModule(M, Stream, ShouldPreserveUseListOrder, BitcodeStartBit, 3041 EmitFunctionSummary); 3042 } 3043 3044 if (TT.isOSDarwin()) 3045 EmitDarwinBCHeaderAndTrailer(Buffer, TT); 3046 3047 // Write the generated bitstream to "Out". 3048 Out.write((char*)&Buffer.front(), Buffer.size()); 3049 } 3050 3051 // Write the specified function summary index to the given raw output stream, 3052 // where it will be written in a new bitcode block. This is used when 3053 // writing the combined index file for ThinLTO. 3054 void llvm::WriteFunctionSummaryToFile(const FunctionInfoIndex &Index, 3055 raw_ostream &Out) { 3056 SmallVector<char, 0> Buffer; 3057 Buffer.reserve(256 * 1024); 3058 3059 BitstreamWriter Stream(Buffer); 3060 3061 // Emit the bitcode header. 3062 WriteBitcodeHeader(Stream); 3063 3064 Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3); 3065 3066 SmallVector<unsigned, 1> Vals; 3067 unsigned CurVersion = 1; 3068 Vals.push_back(CurVersion); 3069 Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals); 3070 3071 // Write the module paths in the combined index. 3072 WriteModStrings(Index, Stream); 3073 3074 // Write the function summary combined index records. 3075 WriteCombinedFunctionSummary(Index, Stream); 3076 3077 // Need a special VST writer for the combined index (we don't have a 3078 // real VST and real values when this is invoked). 3079 WriteCombinedValueSymbolTable(Index, Stream); 3080 3081 Stream.ExitBlock(); 3082 3083 Out.write((char *)&Buffer.front(), Buffer.size()); 3084 } 3085