1
//===--- Bitcode/Writer/BitcodeWriter.cpp - Bitcode Writer ----------------===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// Bitcode writer implementation.
12
//===----------------------------------------------------------------------===//
14
#include "llvm/Bitcode/ReaderWriter.h"
15
#include "ValueEnumerator.h"
16
#include "llvm/ADT/Triple.h"
17
#include "llvm/Bitcode/BitstreamWriter.h"
18
#include "llvm/Bitcode/LLVMBitCodes.h"
19
#include "llvm/IR/Constants.h"
20
#include "llvm/IR/DebugInfoMetadata.h"
21
#include "llvm/IR/DerivedTypes.h"
22
#include "llvm/IR/InlineAsm.h"
23
#include "llvm/IR/Instructions.h"
24
#include "llvm/IR/Module.h"
25
#include "llvm/IR/Operator.h"
26
#include "llvm/IR/UseListOrder.h"
27
#include "llvm/IR/ValueSymbolTable.h"
28
#include "llvm/Support/CommandLine.h"
29
#include "llvm/Support/ErrorHandling.h"
30
#include "llvm/Support/MathExtras.h"
31
#include "llvm/Support/Program.h"
32
#include "llvm/Support/raw_ostream.h"
37
/// These are manifest constants used by the bitcode writer. They do not need to
38
/// be kept in sync with the reader, but need to be consistent within this file.
40
// VALUE_SYMTAB_BLOCK abbrev id's.
41
VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
46
// CONSTANTS_BLOCK abbrev id's.
47
CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
48
CONSTANTS_INTEGER_ABBREV,
49
CONSTANTS_CE_CAST_Abbrev,
50
CONSTANTS_NULL_Abbrev,
52
// FUNCTION_BLOCK abbrev id's.
53
FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
54
FUNCTION_INST_BINOP_ABBREV,
55
FUNCTION_INST_BINOP_FLAGS_ABBREV,
56
FUNCTION_INST_CAST_ABBREV,
57
FUNCTION_INST_RET_VOID_ABBREV,
58
FUNCTION_INST_RET_VAL_ABBREV,
59
FUNCTION_INST_UNREACHABLE_ABBREV,
60
FUNCTION_INST_GEP_ABBREV,
63
static unsigned GetEncodedCastOpcode(unsigned Opcode) {
65
default: llvm_unreachable("Unknown cast instruction!");
66
case Instruction::Trunc : return bitc::CAST_TRUNC;
67
case Instruction::ZExt : return bitc::CAST_ZEXT;
68
case Instruction::SExt : return bitc::CAST_SEXT;
69
case Instruction::FPToUI : return bitc::CAST_FPTOUI;
70
case Instruction::FPToSI : return bitc::CAST_FPTOSI;
71
case Instruction::UIToFP : return bitc::CAST_UITOFP;
72
case Instruction::SIToFP : return bitc::CAST_SITOFP;
73
case Instruction::FPTrunc : return bitc::CAST_FPTRUNC;
74
case Instruction::FPExt : return bitc::CAST_FPEXT;
75
case Instruction::PtrToInt: return bitc::CAST_PTRTOINT;
76
case Instruction::IntToPtr: return bitc::CAST_INTTOPTR;
77
case Instruction::BitCast : return bitc::CAST_BITCAST;
78
case Instruction::AddrSpaceCast: return bitc::CAST_ADDRSPACECAST;
82
static unsigned GetEncodedBinaryOpcode(unsigned Opcode) {
84
default: llvm_unreachable("Unknown binary instruction!");
85
case Instruction::Add:
86
case Instruction::FAdd: return bitc::BINOP_ADD;
87
case Instruction::Sub:
88
case Instruction::FSub: return bitc::BINOP_SUB;
89
case Instruction::Mul:
90
case Instruction::FMul: return bitc::BINOP_MUL;
91
case Instruction::UDiv: return bitc::BINOP_UDIV;
92
case Instruction::FDiv:
93
case Instruction::SDiv: return bitc::BINOP_SDIV;
94
case Instruction::URem: return bitc::BINOP_UREM;
95
case Instruction::FRem:
96
case Instruction::SRem: return bitc::BINOP_SREM;
97
case Instruction::Shl: return bitc::BINOP_SHL;
98
case Instruction::LShr: return bitc::BINOP_LSHR;
99
case Instruction::AShr: return bitc::BINOP_ASHR;
100
case Instruction::And: return bitc::BINOP_AND;
101
case Instruction::Or: return bitc::BINOP_OR;
102
case Instruction::Xor: return bitc::BINOP_XOR;
106
static unsigned GetEncodedRMWOperation(AtomicRMWInst::BinOp Op) {
108
default: llvm_unreachable("Unknown RMW operation!");
109
case AtomicRMWInst::Xchg: return bitc::RMW_XCHG;
110
case AtomicRMWInst::Add: return bitc::RMW_ADD;
111
case AtomicRMWInst::Sub: return bitc::RMW_SUB;
112
case AtomicRMWInst::And: return bitc::RMW_AND;
113
case AtomicRMWInst::Nand: return bitc::RMW_NAND;
114
case AtomicRMWInst::Or: return bitc::RMW_OR;
115
case AtomicRMWInst::Xor: return bitc::RMW_XOR;
116
case AtomicRMWInst::Max: return bitc::RMW_MAX;
117
case AtomicRMWInst::Min: return bitc::RMW_MIN;
118
case AtomicRMWInst::UMax: return bitc::RMW_UMAX;
119
case AtomicRMWInst::UMin: return bitc::RMW_UMIN;
123
static unsigned GetEncodedOrdering(AtomicOrdering Ordering) {
125
case NotAtomic: return bitc::ORDERING_NOTATOMIC;
126
case Unordered: return bitc::ORDERING_UNORDERED;
127
case Monotonic: return bitc::ORDERING_MONOTONIC;
128
case Acquire: return bitc::ORDERING_ACQUIRE;
129
case Release: return bitc::ORDERING_RELEASE;
130
case AcquireRelease: return bitc::ORDERING_ACQREL;
131
case SequentiallyConsistent: return bitc::ORDERING_SEQCST;
133
llvm_unreachable("Invalid ordering");
136
static unsigned GetEncodedSynchScope(SynchronizationScope SynchScope) {
137
switch (SynchScope) {
138
case SingleThread: return bitc::SYNCHSCOPE_SINGLETHREAD;
139
case CrossThread: return bitc::SYNCHSCOPE_CROSSTHREAD;
141
llvm_unreachable("Invalid synch scope");
144
static void WriteStringRecord(unsigned Code, StringRef Str,
145
unsigned AbbrevToUse, BitstreamWriter &Stream) {
146
SmallVector<unsigned, 64> Vals;
148
// Code: [strchar x N]
149
for (unsigned i = 0, e = Str.size(); i != e; ++i) {
150
if (AbbrevToUse && !BitCodeAbbrevOp::isChar6(Str[i]))
152
Vals.push_back(Str[i]);
155
// Emit the finished record.
156
Stream.EmitRecord(Code, Vals, AbbrevToUse);
159
static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) {
161
case Attribute::Alignment:
162
return bitc::ATTR_KIND_ALIGNMENT;
163
case Attribute::AlwaysInline:
164
return bitc::ATTR_KIND_ALWAYS_INLINE;
165
case Attribute::ArgMemOnly:
166
return bitc::ATTR_KIND_ARGMEMONLY;
167
case Attribute::Builtin:
168
return bitc::ATTR_KIND_BUILTIN;
169
case Attribute::ByVal:
170
return bitc::ATTR_KIND_BY_VAL;
171
case Attribute::Convergent:
172
return bitc::ATTR_KIND_CONVERGENT;
173
case Attribute::InAlloca:
174
return bitc::ATTR_KIND_IN_ALLOCA;
175
case Attribute::Cold:
176
return bitc::ATTR_KIND_COLD;
177
case Attribute::InlineHint:
178
return bitc::ATTR_KIND_INLINE_HINT;
179
case Attribute::InReg:
180
return bitc::ATTR_KIND_IN_REG;
181
case Attribute::JumpTable:
182
return bitc::ATTR_KIND_JUMP_TABLE;
183
case Attribute::MinSize:
184
return bitc::ATTR_KIND_MIN_SIZE;
185
case Attribute::Naked:
186
return bitc::ATTR_KIND_NAKED;
187
case Attribute::Nest:
188
return bitc::ATTR_KIND_NEST;
189
case Attribute::NoAlias:
190
return bitc::ATTR_KIND_NO_ALIAS;
191
case Attribute::NoBuiltin:
192
return bitc::ATTR_KIND_NO_BUILTIN;
193
case Attribute::NoCapture:
194
return bitc::ATTR_KIND_NO_CAPTURE;
195
case Attribute::NoDuplicate:
196
return bitc::ATTR_KIND_NO_DUPLICATE;
197
case Attribute::NoImplicitFloat:
198
return bitc::ATTR_KIND_NO_IMPLICIT_FLOAT;
199
case Attribute::NoInline:
200
return bitc::ATTR_KIND_NO_INLINE;
201
case Attribute::NonLazyBind:
202
return bitc::ATTR_KIND_NON_LAZY_BIND;
203
case Attribute::NonNull:
204
return bitc::ATTR_KIND_NON_NULL;
205
case Attribute::Dereferenceable:
206
return bitc::ATTR_KIND_DEREFERENCEABLE;
207
case Attribute::DereferenceableOrNull:
208
return bitc::ATTR_KIND_DEREFERENCEABLE_OR_NULL;
209
case Attribute::NoRedZone:
210
return bitc::ATTR_KIND_NO_RED_ZONE;
211
case Attribute::NoReturn:
212
return bitc::ATTR_KIND_NO_RETURN;
213
case Attribute::NoUnwind:
214
return bitc::ATTR_KIND_NO_UNWIND;
215
case Attribute::OptimizeForSize:
216
return bitc::ATTR_KIND_OPTIMIZE_FOR_SIZE;
217
case Attribute::OptimizeNone:
218
return bitc::ATTR_KIND_OPTIMIZE_NONE;
219
case Attribute::ReadNone:
220
return bitc::ATTR_KIND_READ_NONE;
221
case Attribute::ReadOnly:
222
return bitc::ATTR_KIND_READ_ONLY;
223
case Attribute::Returned:
224
return bitc::ATTR_KIND_RETURNED;
225
case Attribute::ReturnsTwice:
226
return bitc::ATTR_KIND_RETURNS_TWICE;
227
case Attribute::SExt:
228
return bitc::ATTR_KIND_S_EXT;
229
case Attribute::StackAlignment:
230
return bitc::ATTR_KIND_STACK_ALIGNMENT;
231
case Attribute::StackProtect:
232
return bitc::ATTR_KIND_STACK_PROTECT;
233
case Attribute::StackProtectReq:
234
return bitc::ATTR_KIND_STACK_PROTECT_REQ;
235
case Attribute::StackProtectStrong:
236
return bitc::ATTR_KIND_STACK_PROTECT_STRONG;
237
case Attribute::SafeStack:
238
return bitc::ATTR_KIND_SAFESTACK;
239
case Attribute::StructRet:
240
return bitc::ATTR_KIND_STRUCT_RET;
241
case Attribute::SanitizeAddress:
242
return bitc::ATTR_KIND_SANITIZE_ADDRESS;
243
case Attribute::SanitizeThread:
244
return bitc::ATTR_KIND_SANITIZE_THREAD;
245
case Attribute::SanitizeMemory:
246
return bitc::ATTR_KIND_SANITIZE_MEMORY;
247
case Attribute::UWTable:
248
return bitc::ATTR_KIND_UW_TABLE;
249
case Attribute::ZExt:
250
return bitc::ATTR_KIND_Z_EXT;
251
case Attribute::EndAttrKinds:
252
llvm_unreachable("Can not encode end-attribute kinds marker.");
253
case Attribute::None:
254
llvm_unreachable("Can not encode none-attribute.");
257
llvm_unreachable("Trying to encode unknown attribute");
260
static void WriteAttributeGroupTable(const ValueEnumerator &VE,
261
BitstreamWriter &Stream) {
262
const std::vector<AttributeSet> &AttrGrps = VE.getAttributeGroups();
263
if (AttrGrps.empty()) return;
265
Stream.EnterSubblock(bitc::PARAMATTR_GROUP_BLOCK_ID, 3);
267
SmallVector<uint64_t, 64> Record;
268
for (unsigned i = 0, e = AttrGrps.size(); i != e; ++i) {
269
AttributeSet AS = AttrGrps[i];
270
for (unsigned i = 0, e = AS.getNumSlots(); i != e; ++i) {
271
AttributeSet A = AS.getSlotAttributes(i);
273
Record.push_back(VE.getAttributeGroupID(A));
274
Record.push_back(AS.getSlotIndex(i));
276
for (AttributeSet::iterator I = AS.begin(0), E = AS.end(0);
279
if (Attr.isEnumAttribute()) {
281
Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum()));
282
} else if (Attr.isIntAttribute()) {
284
Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum()));
285
Record.push_back(Attr.getValueAsInt());
287
StringRef Kind = Attr.getKindAsString();
288
StringRef Val = Attr.getValueAsString();
290
Record.push_back(Val.empty() ? 3 : 4);
291
Record.append(Kind.begin(), Kind.end());
294
Record.append(Val.begin(), Val.end());
300
Stream.EmitRecord(bitc::PARAMATTR_GRP_CODE_ENTRY, Record);
308
static void WriteAttributeTable(const ValueEnumerator &VE,
309
BitstreamWriter &Stream) {
310
const std::vector<AttributeSet> &Attrs = VE.getAttributes();
311
if (Attrs.empty()) return;
313
Stream.EnterSubblock(bitc::PARAMATTR_BLOCK_ID, 3);
315
SmallVector<uint64_t, 64> Record;
316
for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
317
const AttributeSet &A = Attrs[i];
318
for (unsigned i = 0, e = A.getNumSlots(); i != e; ++i)
319
Record.push_back(VE.getAttributeGroupID(A.getSlotAttributes(i)));
321
Stream.EmitRecord(bitc::PARAMATTR_CODE_ENTRY, Record);
328
/// WriteTypeTable - Write out the type table for a module.
329
static void WriteTypeTable(const ValueEnumerator &VE, BitstreamWriter &Stream) {
330
const ValueEnumerator::TypeList &TypeList = VE.getTypes();
332
Stream.EnterSubblock(bitc::TYPE_BLOCK_ID_NEW, 4 /*count from # abbrevs */);
333
SmallVector<uint64_t, 64> TypeVals;
335
uint64_t NumBits = VE.computeBitsRequiredForTypeIndicies();
337
// Abbrev for TYPE_CODE_POINTER.
338
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
339
Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER));
340
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
341
Abbv->Add(BitCodeAbbrevOp(0)); // Addrspace = 0
342
unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv);
344
// Abbrev for TYPE_CODE_FUNCTION.
345
Abbv = new BitCodeAbbrev();
346
Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION));
347
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // isvararg
348
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
349
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
351
unsigned FunctionAbbrev = Stream.EmitAbbrev(Abbv);
353
// Abbrev for TYPE_CODE_STRUCT_ANON.
354
Abbv = new BitCodeAbbrev();
355
Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_ANON));
356
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ispacked
357
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
358
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
360
unsigned StructAnonAbbrev = Stream.EmitAbbrev(Abbv);
362
// Abbrev for TYPE_CODE_STRUCT_NAME.
363
Abbv = new BitCodeAbbrev();
364
Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAME));
365
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
366
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
367
unsigned StructNameAbbrev = Stream.EmitAbbrev(Abbv);
369
// Abbrev for TYPE_CODE_STRUCT_NAMED.
370
Abbv = new BitCodeAbbrev();
371
Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAMED));
372
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ispacked
373
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
374
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
376
unsigned StructNamedAbbrev = Stream.EmitAbbrev(Abbv);
378
// Abbrev for TYPE_CODE_ARRAY.
379
Abbv = new BitCodeAbbrev();
380
Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY));
381
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // size
382
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
384
unsigned ArrayAbbrev = Stream.EmitAbbrev(Abbv);
386
// Emit an entry count so the reader can reserve space.
387
TypeVals.push_back(TypeList.size());
388
Stream.EmitRecord(bitc::TYPE_CODE_NUMENTRY, TypeVals);
391
// Loop over all of the types, emitting each in turn.
392
for (unsigned i = 0, e = TypeList.size(); i != e; ++i) {
393
Type *T = TypeList[i];
397
switch (T->getTypeID()) {
398
case Type::VoidTyID: Code = bitc::TYPE_CODE_VOID; break;
399
case Type::HalfTyID: Code = bitc::TYPE_CODE_HALF; break;
400
case Type::FloatTyID: Code = bitc::TYPE_CODE_FLOAT; break;
401
case Type::DoubleTyID: Code = bitc::TYPE_CODE_DOUBLE; break;
402
case Type::X86_FP80TyID: Code = bitc::TYPE_CODE_X86_FP80; break;
403
case Type::FP128TyID: Code = bitc::TYPE_CODE_FP128; break;
404
case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break;
405
case Type::LabelTyID: Code = bitc::TYPE_CODE_LABEL; break;
406
case Type::MetadataTyID: Code = bitc::TYPE_CODE_METADATA; break;
407
case Type::X86_MMXTyID: Code = bitc::TYPE_CODE_X86_MMX; break;
408
case Type::IntegerTyID:
410
Code = bitc::TYPE_CODE_INTEGER;
411
TypeVals.push_back(cast<IntegerType>(T)->getBitWidth());
413
case Type::PointerTyID: {
414
PointerType *PTy = cast<PointerType>(T);
415
// POINTER: [pointee type, address space]
416
Code = bitc::TYPE_CODE_POINTER;
417
TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
418
unsigned AddressSpace = PTy->getAddressSpace();
419
TypeVals.push_back(AddressSpace);
420
if (AddressSpace == 0) AbbrevToUse = PtrAbbrev;
423
case Type::FunctionTyID: {
424
FunctionType *FT = cast<FunctionType>(T);
425
// FUNCTION: [isvararg, retty, paramty x N]
426
Code = bitc::TYPE_CODE_FUNCTION;
427
TypeVals.push_back(FT->isVarArg());
428
TypeVals.push_back(VE.getTypeID(FT->getReturnType()));
429
for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i)
430
TypeVals.push_back(VE.getTypeID(FT->getParamType(i)));
431
AbbrevToUse = FunctionAbbrev;
434
case Type::StructTyID: {
435
StructType *ST = cast<StructType>(T);
436
// STRUCT: [ispacked, eltty x N]
437
TypeVals.push_back(ST->isPacked());
438
// Output all of the element types.
439
for (StructType::element_iterator I = ST->element_begin(),
440
E = ST->element_end(); I != E; ++I)
441
TypeVals.push_back(VE.getTypeID(*I));
443
if (ST->isLiteral()) {
444
Code = bitc::TYPE_CODE_STRUCT_ANON;
445
AbbrevToUse = StructAnonAbbrev;
447
if (ST->isOpaque()) {
448
Code = bitc::TYPE_CODE_OPAQUE;
450
Code = bitc::TYPE_CODE_STRUCT_NAMED;
451
AbbrevToUse = StructNamedAbbrev;
454
// Emit the name if it is present.
455
if (!ST->getName().empty())
456
WriteStringRecord(bitc::TYPE_CODE_STRUCT_NAME, ST->getName(),
457
StructNameAbbrev, Stream);
461
case Type::ArrayTyID: {
462
ArrayType *AT = cast<ArrayType>(T);
463
// ARRAY: [numelts, eltty]
464
Code = bitc::TYPE_CODE_ARRAY;
465
TypeVals.push_back(AT->getNumElements());
466
TypeVals.push_back(VE.getTypeID(AT->getElementType()));
467
AbbrevToUse = ArrayAbbrev;
470
case Type::VectorTyID: {
471
VectorType *VT = cast<VectorType>(T);
472
// VECTOR [numelts, eltty]
473
Code = bitc::TYPE_CODE_VECTOR;
474
TypeVals.push_back(VT->getNumElements());
475
TypeVals.push_back(VE.getTypeID(VT->getElementType()));
480
// Emit the finished record.
481
Stream.EmitRecord(Code, TypeVals, AbbrevToUse);
488
static unsigned getEncodedLinkage(const GlobalValue &GV) {
489
switch (GV.getLinkage()) {
490
case GlobalValue::ExternalLinkage:
492
case GlobalValue::WeakAnyLinkage:
494
case GlobalValue::AppendingLinkage:
496
case GlobalValue::InternalLinkage:
498
case GlobalValue::LinkOnceAnyLinkage:
500
case GlobalValue::ExternalWeakLinkage:
502
case GlobalValue::CommonLinkage:
504
case GlobalValue::PrivateLinkage:
506
case GlobalValue::WeakODRLinkage:
508
case GlobalValue::LinkOnceODRLinkage:
510
case GlobalValue::AvailableExternallyLinkage:
513
llvm_unreachable("Invalid linkage");
516
static unsigned getEncodedVisibility(const GlobalValue &GV) {
517
switch (GV.getVisibility()) {
518
case GlobalValue::DefaultVisibility: return 0;
519
case GlobalValue::HiddenVisibility: return 1;
520
case GlobalValue::ProtectedVisibility: return 2;
522
llvm_unreachable("Invalid visibility");
525
static unsigned getEncodedDLLStorageClass(const GlobalValue &GV) {
526
switch (GV.getDLLStorageClass()) {
527
case GlobalValue::DefaultStorageClass: return 0;
528
case GlobalValue::DLLImportStorageClass: return 1;
529
case GlobalValue::DLLExportStorageClass: return 2;
531
llvm_unreachable("Invalid DLL storage class");
534
static unsigned getEncodedThreadLocalMode(const GlobalValue &GV) {
535
switch (GV.getThreadLocalMode()) {
536
case GlobalVariable::NotThreadLocal: return 0;
537
case GlobalVariable::GeneralDynamicTLSModel: return 1;
538
case GlobalVariable::LocalDynamicTLSModel: return 2;
539
case GlobalVariable::InitialExecTLSModel: return 3;
540
case GlobalVariable::LocalExecTLSModel: return 4;
542
llvm_unreachable("Invalid TLS model");
545
static unsigned getEncodedComdatSelectionKind(const Comdat &C) {
546
switch (C.getSelectionKind()) {
548
return bitc::COMDAT_SELECTION_KIND_ANY;
549
case Comdat::ExactMatch:
550
return bitc::COMDAT_SELECTION_KIND_EXACT_MATCH;
551
case Comdat::Largest:
552
return bitc::COMDAT_SELECTION_KIND_LARGEST;
553
case Comdat::NoDuplicates:
554
return bitc::COMDAT_SELECTION_KIND_NO_DUPLICATES;
555
case Comdat::SameSize:
556
return bitc::COMDAT_SELECTION_KIND_SAME_SIZE;
558
llvm_unreachable("Invalid selection kind");
561
static void writeComdats(const ValueEnumerator &VE, BitstreamWriter &Stream) {
562
SmallVector<uint16_t, 64> Vals;
563
for (const Comdat *C : VE.getComdats()) {
564
// COMDAT: [selection_kind, name]
565
Vals.push_back(getEncodedComdatSelectionKind(*C));
566
size_t Size = C->getName().size();
567
assert(isUInt<16>(Size));
568
Vals.push_back(Size);
569
for (char Chr : C->getName())
570
Vals.push_back((unsigned char)Chr);
571
Stream.EmitRecord(bitc::MODULE_CODE_COMDAT, Vals, /*AbbrevToUse=*/0);
576
// Emit top-level description of module, including target triple, inline asm,
577
// descriptors for global variables, and function prototype info.
578
static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,
579
BitstreamWriter &Stream) {
580
// Emit various pieces of data attached to a module.
581
if (!M->getTargetTriple().empty())
582
WriteStringRecord(bitc::MODULE_CODE_TRIPLE, M->getTargetTriple(),
584
const std::string &DL = M->getDataLayoutStr();
586
WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT, DL, 0 /*TODO*/, Stream);
587
if (!M->getModuleInlineAsm().empty())
588
WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(),
591
// Emit information about sections and GC, computing how many there are. Also
592
// compute the maximum alignment value.
593
std::map<std::string, unsigned> SectionMap;
594
std::map<std::string, unsigned> GCMap;
595
unsigned MaxAlignment = 0;
596
unsigned MaxGlobalType = 0;
597
for (const GlobalValue &GV : M->globals()) {
598
MaxAlignment = std::max(MaxAlignment, GV.getAlignment());
599
MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV.getValueType()));
600
if (GV.hasSection()) {
601
// Give section names unique ID's.
602
unsigned &Entry = SectionMap[GV.getSection()];
604
WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, GV.getSection(),
606
Entry = SectionMap.size();
610
for (const Function &F : *M) {
611
MaxAlignment = std::max(MaxAlignment, F.getAlignment());
612
if (F.hasSection()) {
613
// Give section names unique ID's.
614
unsigned &Entry = SectionMap[F.getSection()];
616
WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F.getSection(),
618
Entry = SectionMap.size();
622
// Same for GC names.
623
unsigned &Entry = GCMap[F.getGC()];
625
WriteStringRecord(bitc::MODULE_CODE_GCNAME, F.getGC(),
627
Entry = GCMap.size();
632
// Emit abbrev for globals, now that we know # sections and max alignment.
633
unsigned SimpleGVarAbbrev = 0;
634
if (!M->global_empty()) {
635
// Add an abbrev for common globals with no visibility or thread localness.
636
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
637
Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR));
638
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
639
Log2_32_Ceil(MaxGlobalType+1)));
640
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // AddrSpace << 2
641
//| explicitType << 1
643
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Initializer.
644
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 5)); // Linkage.
645
if (MaxAlignment == 0) // Alignment.
646
Abbv->Add(BitCodeAbbrevOp(0));
648
unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1;
649
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
650
Log2_32_Ceil(MaxEncAlignment+1)));
652
if (SectionMap.empty()) // Section.
653
Abbv->Add(BitCodeAbbrevOp(0));
655
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
656
Log2_32_Ceil(SectionMap.size()+1)));
657
// Don't bother emitting vis + thread local.
658
SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv);
661
// Emit the global variable information.
662
SmallVector<unsigned, 64> Vals;
663
for (const GlobalVariable &GV : M->globals()) {
664
unsigned AbbrevToUse = 0;
666
// GLOBALVAR: [type, isconst, initid,
667
// linkage, alignment, section, visibility, threadlocal,
668
// unnamed_addr, externally_initialized, dllstorageclass,
670
Vals.push_back(VE.getTypeID(GV.getValueType()));
671
Vals.push_back(GV.getType()->getAddressSpace() << 2 | 2 | GV.isConstant());
672
Vals.push_back(GV.isDeclaration() ? 0 :
673
(VE.getValueID(GV.getInitializer()) + 1));
674
Vals.push_back(getEncodedLinkage(GV));
675
Vals.push_back(Log2_32(GV.getAlignment())+1);
676
Vals.push_back(GV.hasSection() ? SectionMap[GV.getSection()] : 0);
677
if (GV.isThreadLocal() ||
678
GV.getVisibility() != GlobalValue::DefaultVisibility ||
679
GV.hasUnnamedAddr() || GV.isExternallyInitialized() ||
680
GV.getDLLStorageClass() != GlobalValue::DefaultStorageClass ||
682
Vals.push_back(getEncodedVisibility(GV));
683
Vals.push_back(getEncodedThreadLocalMode(GV));
684
Vals.push_back(GV.hasUnnamedAddr());
685
Vals.push_back(GV.isExternallyInitialized());
686
Vals.push_back(getEncodedDLLStorageClass(GV));
687
Vals.push_back(GV.hasComdat() ? VE.getComdatID(GV.getComdat()) : 0);
689
AbbrevToUse = SimpleGVarAbbrev;
692
Stream.EmitRecord(bitc::MODULE_CODE_GLOBALVAR, Vals, AbbrevToUse);
696
// Emit the function proto information.
697
for (const Function &F : *M) {
698
// FUNCTION: [type, callingconv, isproto, linkage, paramattrs, alignment,
699
// section, visibility, gc, unnamed_addr, prologuedata,
700
// dllstorageclass, comdat, prefixdata, personalityfn]
701
Vals.push_back(VE.getTypeID(F.getFunctionType()));
702
Vals.push_back(F.getCallingConv());
703
Vals.push_back(F.isDeclaration());
704
Vals.push_back(getEncodedLinkage(F));
705
Vals.push_back(VE.getAttributeID(F.getAttributes()));
706
Vals.push_back(Log2_32(F.getAlignment())+1);
707
Vals.push_back(F.hasSection() ? SectionMap[F.getSection()] : 0);
708
Vals.push_back(getEncodedVisibility(F));
709
Vals.push_back(F.hasGC() ? GCMap[F.getGC()] : 0);
710
Vals.push_back(F.hasUnnamedAddr());
711
Vals.push_back(F.hasPrologueData() ? (VE.getValueID(F.getPrologueData()) + 1)
713
Vals.push_back(getEncodedDLLStorageClass(F));
714
Vals.push_back(F.hasComdat() ? VE.getComdatID(F.getComdat()) : 0);
715
Vals.push_back(F.hasPrefixData() ? (VE.getValueID(F.getPrefixData()) + 1)
718
F.hasPersonalityFn() ? (VE.getValueID(F.getPersonalityFn()) + 1) : 0);
720
unsigned AbbrevToUse = 0;
721
Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse);
725
// Emit the alias information.
726
for (const GlobalAlias &A : M->aliases()) {
727
// ALIAS: [alias type, aliasee val#, linkage, visibility]
728
Vals.push_back(VE.getTypeID(A.getType()));
729
Vals.push_back(VE.getValueID(A.getAliasee()));
730
Vals.push_back(getEncodedLinkage(A));
731
Vals.push_back(getEncodedVisibility(A));
732
Vals.push_back(getEncodedDLLStorageClass(A));
733
Vals.push_back(getEncodedThreadLocalMode(A));
734
Vals.push_back(A.hasUnnamedAddr());
735
unsigned AbbrevToUse = 0;
736
Stream.EmitRecord(bitc::MODULE_CODE_ALIAS, Vals, AbbrevToUse);
741
static uint64_t GetOptimizationFlags(const Value *V) {
744
if (const auto *OBO = dyn_cast<OverflowingBinaryOperator>(V)) {
745
if (OBO->hasNoSignedWrap())
746
Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP;
747
if (OBO->hasNoUnsignedWrap())
748
Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP;
749
} else if (const auto *PEO = dyn_cast<PossiblyExactOperator>(V)) {
751
Flags |= 1 << bitc::PEO_EXACT;
752
} else if (const auto *FPMO = dyn_cast<FPMathOperator>(V)) {
753
if (FPMO->hasUnsafeAlgebra())
754
Flags |= FastMathFlags::UnsafeAlgebra;
755
if (FPMO->hasNoNaNs())
756
Flags |= FastMathFlags::NoNaNs;
757
if (FPMO->hasNoInfs())
758
Flags |= FastMathFlags::NoInfs;
759
if (FPMO->hasNoSignedZeros())
760
Flags |= FastMathFlags::NoSignedZeros;
761
if (FPMO->hasAllowReciprocal())
762
Flags |= FastMathFlags::AllowReciprocal;
768
static void WriteValueAsMetadata(const ValueAsMetadata *MD,
769
const ValueEnumerator &VE,
770
BitstreamWriter &Stream,
771
SmallVectorImpl<uint64_t> &Record) {
772
// Mimic an MDNode with a value as one operand.
773
Value *V = MD->getValue();
774
Record.push_back(VE.getTypeID(V->getType()));
775
Record.push_back(VE.getValueID(V));
776
Stream.EmitRecord(bitc::METADATA_VALUE, Record, 0);
780
static void WriteMDTuple(const MDTuple *N, const ValueEnumerator &VE,
781
BitstreamWriter &Stream,
782
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
783
for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
784
Metadata *MD = N->getOperand(i);
785
assert(!(MD && isa<LocalAsMetadata>(MD)) &&
786
"Unexpected function-local metadata");
787
Record.push_back(VE.getMetadataOrNullID(MD));
789
Stream.EmitRecord(N->isDistinct() ? bitc::METADATA_DISTINCT_NODE
790
: bitc::METADATA_NODE,
795
static void WriteDILocation(const DILocation *N, const ValueEnumerator &VE,
796
BitstreamWriter &Stream,
797
SmallVectorImpl<uint64_t> &Record,
799
Record.push_back(N->isDistinct());
800
Record.push_back(N->getLine());
801
Record.push_back(N->getColumn());
802
Record.push_back(VE.getMetadataID(N->getScope()));
803
Record.push_back(VE.getMetadataOrNullID(N->getInlinedAt()));
805
Stream.EmitRecord(bitc::METADATA_LOCATION, Record, Abbrev);
809
static void WriteGenericDINode(const GenericDINode *N,
810
const ValueEnumerator &VE,
811
BitstreamWriter &Stream,
812
SmallVectorImpl<uint64_t> &Record,
814
Record.push_back(N->isDistinct());
815
Record.push_back(N->getTag());
816
Record.push_back(0); // Per-tag version field; unused for now.
818
for (auto &I : N->operands())
819
Record.push_back(VE.getMetadataOrNullID(I));
821
Stream.EmitRecord(bitc::METADATA_GENERIC_DEBUG, Record, Abbrev);
825
static uint64_t rotateSign(int64_t I) {
827
return I < 0 ? ~(U << 1) : U << 1;
830
static void WriteDISubrange(const DISubrange *N, const ValueEnumerator &,
831
BitstreamWriter &Stream,
832
SmallVectorImpl<uint64_t> &Record,
834
Record.push_back(N->isDistinct());
835
Record.push_back(N->getCount());
836
Record.push_back(rotateSign(N->getLowerBound()));
838
Stream.EmitRecord(bitc::METADATA_SUBRANGE, Record, Abbrev);
842
static void WriteDIEnumerator(const DIEnumerator *N, const ValueEnumerator &VE,
843
BitstreamWriter &Stream,
844
SmallVectorImpl<uint64_t> &Record,
846
Record.push_back(N->isDistinct());
847
Record.push_back(rotateSign(N->getValue()));
848
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
850
Stream.EmitRecord(bitc::METADATA_ENUMERATOR, Record, Abbrev);
854
static void WriteDIBasicType(const DIBasicType *N, const ValueEnumerator &VE,
855
BitstreamWriter &Stream,
856
SmallVectorImpl<uint64_t> &Record,
858
Record.push_back(N->isDistinct());
859
Record.push_back(N->getTag());
860
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
861
Record.push_back(N->getSizeInBits());
862
Record.push_back(N->getAlignInBits());
863
Record.push_back(N->getEncoding());
865
Stream.EmitRecord(bitc::METADATA_BASIC_TYPE, Record, Abbrev);
869
static void WriteDIDerivedType(const DIDerivedType *N,
870
const ValueEnumerator &VE,
871
BitstreamWriter &Stream,
872
SmallVectorImpl<uint64_t> &Record,
874
Record.push_back(N->isDistinct());
875
Record.push_back(N->getTag());
876
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
877
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
878
Record.push_back(N->getLine());
879
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
880
Record.push_back(VE.getMetadataOrNullID(N->getBaseType()));
881
Record.push_back(N->getSizeInBits());
882
Record.push_back(N->getAlignInBits());
883
Record.push_back(N->getOffsetInBits());
884
Record.push_back(N->getFlags());
885
Record.push_back(VE.getMetadataOrNullID(N->getExtraData()));
887
Stream.EmitRecord(bitc::METADATA_DERIVED_TYPE, Record, Abbrev);
891
static void WriteDICompositeType(const DICompositeType *N,
892
const ValueEnumerator &VE,
893
BitstreamWriter &Stream,
894
SmallVectorImpl<uint64_t> &Record,
896
Record.push_back(N->isDistinct());
897
Record.push_back(N->getTag());
898
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
899
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
900
Record.push_back(N->getLine());
901
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
902
Record.push_back(VE.getMetadataOrNullID(N->getBaseType()));
903
Record.push_back(N->getSizeInBits());
904
Record.push_back(N->getAlignInBits());
905
Record.push_back(N->getOffsetInBits());
906
Record.push_back(N->getFlags());
907
Record.push_back(VE.getMetadataOrNullID(N->getElements().get()));
908
Record.push_back(N->getRuntimeLang());
909
Record.push_back(VE.getMetadataOrNullID(N->getVTableHolder()));
910
Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get()));
911
Record.push_back(VE.getMetadataOrNullID(N->getRawIdentifier()));
913
Stream.EmitRecord(bitc::METADATA_COMPOSITE_TYPE, Record, Abbrev);
917
static void WriteDISubroutineType(const DISubroutineType *N,
918
const ValueEnumerator &VE,
919
BitstreamWriter &Stream,
920
SmallVectorImpl<uint64_t> &Record,
922
Record.push_back(N->isDistinct());
923
Record.push_back(N->getFlags());
924
Record.push_back(VE.getMetadataOrNullID(N->getTypeArray().get()));
926
Stream.EmitRecord(bitc::METADATA_SUBROUTINE_TYPE, Record, Abbrev);
930
static void WriteDIFile(const DIFile *N, const ValueEnumerator &VE,
931
BitstreamWriter &Stream,
932
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
933
Record.push_back(N->isDistinct());
934
Record.push_back(VE.getMetadataOrNullID(N->getRawFilename()));
935
Record.push_back(VE.getMetadataOrNullID(N->getRawDirectory()));
937
Stream.EmitRecord(bitc::METADATA_FILE, Record, Abbrev);
941
static void WriteDICompileUnit(const DICompileUnit *N,
942
const ValueEnumerator &VE,
943
BitstreamWriter &Stream,
944
SmallVectorImpl<uint64_t> &Record,
946
Record.push_back(N->isDistinct());
947
Record.push_back(N->getSourceLanguage());
948
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
949
Record.push_back(VE.getMetadataOrNullID(N->getRawProducer()));
950
Record.push_back(N->isOptimized());
951
Record.push_back(VE.getMetadataOrNullID(N->getRawFlags()));
952
Record.push_back(N->getRuntimeVersion());
953
Record.push_back(VE.getMetadataOrNullID(N->getRawSplitDebugFilename()));
954
Record.push_back(N->getEmissionKind());
955
Record.push_back(VE.getMetadataOrNullID(N->getEnumTypes().get()));
956
Record.push_back(VE.getMetadataOrNullID(N->getRetainedTypes().get()));
957
Record.push_back(VE.getMetadataOrNullID(N->getSubprograms().get()));
958
Record.push_back(VE.getMetadataOrNullID(N->getGlobalVariables().get()));
959
Record.push_back(VE.getMetadataOrNullID(N->getImportedEntities().get()));
960
Record.push_back(N->getDWOId());
962
Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev);
966
static void WriteDISubprogram(const DISubprogram *N, const ValueEnumerator &VE,
967
BitstreamWriter &Stream,
968
SmallVectorImpl<uint64_t> &Record,
970
Record.push_back(N->isDistinct());
971
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
972
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
973
Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName()));
974
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
975
Record.push_back(N->getLine());
976
Record.push_back(VE.getMetadataOrNullID(N->getType()));
977
Record.push_back(N->isLocalToUnit());
978
Record.push_back(N->isDefinition());
979
Record.push_back(N->getScopeLine());
980
Record.push_back(VE.getMetadataOrNullID(N->getContainingType()));
981
Record.push_back(N->getVirtuality());
982
Record.push_back(N->getVirtualIndex());
983
Record.push_back(N->getFlags());
984
Record.push_back(N->isOptimized());
985
Record.push_back(VE.getMetadataOrNullID(N->getRawFunction()));
986
Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get()));
987
Record.push_back(VE.getMetadataOrNullID(N->getDeclaration()));
988
Record.push_back(VE.getMetadataOrNullID(N->getVariables().get()));
990
Stream.EmitRecord(bitc::METADATA_SUBPROGRAM, Record, Abbrev);
994
static void WriteDILexicalBlock(const DILexicalBlock *N,
995
const ValueEnumerator &VE,
996
BitstreamWriter &Stream,
997
SmallVectorImpl<uint64_t> &Record,
999
Record.push_back(N->isDistinct());
1000
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
1001
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
1002
Record.push_back(N->getLine());
1003
Record.push_back(N->getColumn());
1005
Stream.EmitRecord(bitc::METADATA_LEXICAL_BLOCK, Record, Abbrev);
1009
static void WriteDILexicalBlockFile(const DILexicalBlockFile *N,
1010
const ValueEnumerator &VE,
1011
BitstreamWriter &Stream,
1012
SmallVectorImpl<uint64_t> &Record,
1014
Record.push_back(N->isDistinct());
1015
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
1016
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
1017
Record.push_back(N->getDiscriminator());
1019
Stream.EmitRecord(bitc::METADATA_LEXICAL_BLOCK_FILE, Record, Abbrev);
1023
static void WriteDINamespace(const DINamespace *N, const ValueEnumerator &VE,
1024
BitstreamWriter &Stream,
1025
SmallVectorImpl<uint64_t> &Record,
1027
Record.push_back(N->isDistinct());
1028
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
1029
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
1030
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
1031
Record.push_back(N->getLine());
1033
Stream.EmitRecord(bitc::METADATA_NAMESPACE, Record, Abbrev);
1037
static void WriteDIModule(const DIModule *N, const ValueEnumerator &VE,
1038
BitstreamWriter &Stream,
1039
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
1040
Record.push_back(N->isDistinct());
1041
for (auto &I : N->operands())
1042
Record.push_back(VE.getMetadataOrNullID(I));
1044
Stream.EmitRecord(bitc::METADATA_MODULE, Record, Abbrev);
1048
static void WriteDITemplateTypeParameter(const DITemplateTypeParameter *N,
1049
const ValueEnumerator &VE,
1050
BitstreamWriter &Stream,
1051
SmallVectorImpl<uint64_t> &Record,
1053
Record.push_back(N->isDistinct());
1054
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
1055
Record.push_back(VE.getMetadataOrNullID(N->getType()));
1057
Stream.EmitRecord(bitc::METADATA_TEMPLATE_TYPE, Record, Abbrev);
1061
static void WriteDITemplateValueParameter(const DITemplateValueParameter *N,
1062
const ValueEnumerator &VE,
1063
BitstreamWriter &Stream,
1064
SmallVectorImpl<uint64_t> &Record,
1066
Record.push_back(N->isDistinct());
1067
Record.push_back(N->getTag());
1068
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
1069
Record.push_back(VE.getMetadataOrNullID(N->getType()));
1070
Record.push_back(VE.getMetadataOrNullID(N->getValue()));
1072
Stream.EmitRecord(bitc::METADATA_TEMPLATE_VALUE, Record, Abbrev);
1076
static void WriteDIGlobalVariable(const DIGlobalVariable *N,
1077
const ValueEnumerator &VE,
1078
BitstreamWriter &Stream,
1079
SmallVectorImpl<uint64_t> &Record,
1081
Record.push_back(N->isDistinct());
1082
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
1083
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
1084
Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName()));
1085
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
1086
Record.push_back(N->getLine());
1087
Record.push_back(VE.getMetadataOrNullID(N->getType()));
1088
Record.push_back(N->isLocalToUnit());
1089
Record.push_back(N->isDefinition());
1090
Record.push_back(VE.getMetadataOrNullID(N->getRawVariable()));
1091
Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMemberDeclaration()));
1093
Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR, Record, Abbrev);
1097
static void WriteDILocalVariable(const DILocalVariable *N,
1098
const ValueEnumerator &VE,
1099
BitstreamWriter &Stream,
1100
SmallVectorImpl<uint64_t> &Record,
1102
Record.push_back(N->isDistinct());
1103
Record.push_back(N->getTag());
1104
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
1105
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
1106
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
1107
Record.push_back(N->getLine());
1108
Record.push_back(VE.getMetadataOrNullID(N->getType()));
1109
Record.push_back(N->getArg());
1110
Record.push_back(N->getFlags());
1112
Stream.EmitRecord(bitc::METADATA_LOCAL_VAR, Record, Abbrev);
1116
static void WriteDIExpression(const DIExpression *N, const ValueEnumerator &,
1117
BitstreamWriter &Stream,
1118
SmallVectorImpl<uint64_t> &Record,
1120
Record.reserve(N->getElements().size() + 1);
1122
Record.push_back(N->isDistinct());
1123
Record.append(N->elements_begin(), N->elements_end());
1125
Stream.EmitRecord(bitc::METADATA_EXPRESSION, Record, Abbrev);
1129
static void WriteDIObjCProperty(const DIObjCProperty *N,
1130
const ValueEnumerator &VE,
1131
BitstreamWriter &Stream,
1132
SmallVectorImpl<uint64_t> &Record,
1134
Record.push_back(N->isDistinct());
1135
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
1136
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
1137
Record.push_back(N->getLine());
1138
Record.push_back(VE.getMetadataOrNullID(N->getRawSetterName()));
1139
Record.push_back(VE.getMetadataOrNullID(N->getRawGetterName()));
1140
Record.push_back(N->getAttributes());
1141
Record.push_back(VE.getMetadataOrNullID(N->getType()));
1143
Stream.EmitRecord(bitc::METADATA_OBJC_PROPERTY, Record, Abbrev);
1147
static void WriteDIImportedEntity(const DIImportedEntity *N,
1148
const ValueEnumerator &VE,
1149
BitstreamWriter &Stream,
1150
SmallVectorImpl<uint64_t> &Record,
1152
Record.push_back(N->isDistinct());
1153
Record.push_back(N->getTag());
1154
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
1155
Record.push_back(VE.getMetadataOrNullID(N->getEntity()));
1156
Record.push_back(N->getLine());
1157
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
1159
Stream.EmitRecord(bitc::METADATA_IMPORTED_ENTITY, Record, Abbrev);
1163
static void WriteModuleMetadata(const Module *M,
1164
const ValueEnumerator &VE,
1165
BitstreamWriter &Stream) {
1166
const auto &MDs = VE.getMDs();
1167
if (MDs.empty() && M->named_metadata_empty())
1170
Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
1172
unsigned MDSAbbrev = 0;
1173
if (VE.hasMDString()) {
1174
// Abbrev for METADATA_STRING.
1175
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1176
Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_STRING));
1177
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1178
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
1179
MDSAbbrev = Stream.EmitAbbrev(Abbv);
1182
// Initialize MDNode abbreviations.
1183
#define HANDLE_MDNODE_LEAF(CLASS) unsigned CLASS##Abbrev = 0;
1184
#include "llvm/IR/Metadata.def"
1186
if (VE.hasDILocation()) {
1187
// Abbrev for METADATA_LOCATION.
1189
// Assume the column is usually under 128, and always output the inlined-at
1190
// location (it's never more expensive than building an array size 1).
1191
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1192
Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_LOCATION));
1193
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
1194
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
1195
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
1196
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
1197
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
1198
DILocationAbbrev = Stream.EmitAbbrev(Abbv);
1201
if (VE.hasGenericDINode()) {
1202
// Abbrev for METADATA_GENERIC_DEBUG.
1204
// Assume the column is usually under 128, and always output the inlined-at
1205
// location (it's never more expensive than building an array size 1).
1206
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1207
Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_GENERIC_DEBUG));
1208
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
1209
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
1210
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
1211
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
1212
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1213
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
1214
GenericDINodeAbbrev = Stream.EmitAbbrev(Abbv);
1217
unsigned NameAbbrev = 0;
1218
if (!M->named_metadata_empty()) {
1219
// Abbrev for METADATA_NAME.
1220
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1221
Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_NAME));
1222
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1223
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
1224
NameAbbrev = Stream.EmitAbbrev(Abbv);
1227
SmallVector<uint64_t, 64> Record;
1228
for (const Metadata *MD : MDs) {
1229
if (const MDNode *N = dyn_cast<MDNode>(MD)) {
1230
assert(N->isResolved() && "Expected forward references to be resolved");
1232
switch (N->getMetadataID()) {
1234
llvm_unreachable("Invalid MDNode subclass");
1235
#define HANDLE_MDNODE_LEAF(CLASS) \
1236
case Metadata::CLASS##Kind: \
1237
Write##CLASS(cast<CLASS>(N), VE, Stream, Record, CLASS##Abbrev); \
1239
#include "llvm/IR/Metadata.def"
1242
if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
1243
WriteValueAsMetadata(MDC, VE, Stream, Record);
1246
const MDString *MDS = cast<MDString>(MD);
1247
// Code: [strchar x N]
1248
Record.append(MDS->bytes_begin(), MDS->bytes_end());
1250
// Emit the finished record.
1251
Stream.EmitRecord(bitc::METADATA_STRING, Record, MDSAbbrev);
1255
// Write named metadata.
1256
for (const NamedMDNode &NMD : M->named_metadata()) {
1258
StringRef Str = NMD.getName();
1259
Record.append(Str.bytes_begin(), Str.bytes_end());
1260
Stream.EmitRecord(bitc::METADATA_NAME, Record, NameAbbrev);
1263
// Write named metadata operands.
1264
for (const MDNode *N : NMD.operands())
1265
Record.push_back(VE.getMetadataID(N));
1266
Stream.EmitRecord(bitc::METADATA_NAMED_NODE, Record, 0);
1273
static void WriteFunctionLocalMetadata(const Function &F,
1274
const ValueEnumerator &VE,
1275
BitstreamWriter &Stream) {
1276
bool StartedMetadataBlock = false;
1277
SmallVector<uint64_t, 64> Record;
1278
const SmallVectorImpl<const LocalAsMetadata *> &MDs =
1279
VE.getFunctionLocalMDs();
1280
for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
1281
assert(MDs[i] && "Expected valid function-local metadata");
1282
if (!StartedMetadataBlock) {
1283
Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
1284
StartedMetadataBlock = true;
1286
WriteValueAsMetadata(MDs[i], VE, Stream, Record);
1289
if (StartedMetadataBlock)
1293
static void WriteMetadataAttachment(const Function &F,
1294
const ValueEnumerator &VE,
1295
BitstreamWriter &Stream) {
1296
Stream.EnterSubblock(bitc::METADATA_ATTACHMENT_ID, 3);
1298
SmallVector<uint64_t, 64> Record;
1300
// Write metadata attachments
1301
// METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
1302
SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
1303
F.getAllMetadata(MDs);
1305
for (const auto &I : MDs) {
1306
Record.push_back(I.first);
1307
Record.push_back(VE.getMetadataID(I.second));
1309
Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0);
1313
for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
1314
for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
1317
I->getAllMetadataOtherThanDebugLoc(MDs);
1319
// If no metadata, ignore instruction.
1320
if (MDs.empty()) continue;
1322
Record.push_back(VE.getInstructionID(I));
1324
for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
1325
Record.push_back(MDs[i].first);
1326
Record.push_back(VE.getMetadataID(MDs[i].second));
1328
Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0);
1335
static void WriteModuleMetadataStore(const Module *M, BitstreamWriter &Stream) {
1336
SmallVector<uint64_t, 64> Record;
1338
// Write metadata kinds
1339
// METADATA_KIND - [n x [id, name]]
1340
SmallVector<StringRef, 8> Names;
1341
M->getMDKindNames(Names);
1343
if (Names.empty()) return;
1345
Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
1347
for (unsigned MDKindID = 0, e = Names.size(); MDKindID != e; ++MDKindID) {
1348
Record.push_back(MDKindID);
1349
StringRef KName = Names[MDKindID];
1350
Record.append(KName.begin(), KName.end());
1352
Stream.EmitRecord(bitc::METADATA_KIND, Record, 0);
1359
static void emitSignedInt64(SmallVectorImpl<uint64_t> &Vals, uint64_t V) {
1360
if ((int64_t)V >= 0)
1361
Vals.push_back(V << 1);
1363
Vals.push_back((-V << 1) | 1);
1366
static void WriteConstants(unsigned FirstVal, unsigned LastVal,
1367
const ValueEnumerator &VE,
1368
BitstreamWriter &Stream, bool isGlobal) {
1369
if (FirstVal == LastVal) return;
1371
Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 4);
1373
unsigned AggregateAbbrev = 0;
1374
unsigned String8Abbrev = 0;
1375
unsigned CString7Abbrev = 0;
1376
unsigned CString6Abbrev = 0;
1377
// If this is a constant pool for the module, emit module-specific abbrevs.
1379
// Abbrev for CST_CODE_AGGREGATE.
1380
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1381
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE));
1382
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1383
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, Log2_32_Ceil(LastVal+1)));
1384
AggregateAbbrev = Stream.EmitAbbrev(Abbv);
1386
// Abbrev for CST_CODE_STRING.
1387
Abbv = new BitCodeAbbrev();
1388
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING));
1389
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1390
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
1391
String8Abbrev = Stream.EmitAbbrev(Abbv);
1392
// Abbrev for CST_CODE_CSTRING.
1393
Abbv = new BitCodeAbbrev();
1394
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
1395
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1396
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
1397
CString7Abbrev = Stream.EmitAbbrev(Abbv);
1398
// Abbrev for CST_CODE_CSTRING.
1399
Abbv = new BitCodeAbbrev();
1400
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
1401
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1402
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
1403
CString6Abbrev = Stream.EmitAbbrev(Abbv);
1406
SmallVector<uint64_t, 64> Record;
1408
const ValueEnumerator::ValueList &Vals = VE.getValues();
1409
Type *LastTy = nullptr;
1410
for (unsigned i = FirstVal; i != LastVal; ++i) {
1411
const Value *V = Vals[i].first;
1412
// If we need to switch types, do so now.
1413
if (V->getType() != LastTy) {
1414
LastTy = V->getType();
1415
Record.push_back(VE.getTypeID(LastTy));
1416
Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record,
1417
CONSTANTS_SETTYPE_ABBREV);
1421
if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
1422
Record.push_back(unsigned(IA->hasSideEffects()) |
1423
unsigned(IA->isAlignStack()) << 1 |
1424
unsigned(IA->getDialect()&1) << 2);
1426
// Add the asm string.
1427
const std::string &AsmStr = IA->getAsmString();
1428
Record.push_back(AsmStr.size());
1429
Record.append(AsmStr.begin(), AsmStr.end());
1431
// Add the constraint string.
1432
const std::string &ConstraintStr = IA->getConstraintString();
1433
Record.push_back(ConstraintStr.size());
1434
Record.append(ConstraintStr.begin(), ConstraintStr.end());
1435
Stream.EmitRecord(bitc::CST_CODE_INLINEASM, Record);
1439
const Constant *C = cast<Constant>(V);
1440
unsigned Code = -1U;
1441
unsigned AbbrevToUse = 0;
1442
if (C->isNullValue()) {
1443
Code = bitc::CST_CODE_NULL;
1444
} else if (isa<UndefValue>(C)) {
1445
Code = bitc::CST_CODE_UNDEF;
1446
} else if (const ConstantInt *IV = dyn_cast<ConstantInt>(C)) {
1447
if (IV->getBitWidth() <= 64) {
1448
uint64_t V = IV->getSExtValue();
1449
emitSignedInt64(Record, V);
1450
Code = bitc::CST_CODE_INTEGER;
1451
AbbrevToUse = CONSTANTS_INTEGER_ABBREV;
1452
} else { // Wide integers, > 64 bits in size.
1453
// We have an arbitrary precision integer value to write whose
1454
// bit width is > 64. However, in canonical unsigned integer
1455
// format it is likely that the high bits are going to be zero.
1456
// So, we only write the number of active words.
1457
unsigned NWords = IV->getValue().getActiveWords();
1458
const uint64_t *RawWords = IV->getValue().getRawData();
1459
for (unsigned i = 0; i != NWords; ++i) {
1460
emitSignedInt64(Record, RawWords[i]);
1462
Code = bitc::CST_CODE_WIDE_INTEGER;
1464
} else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
1465
Code = bitc::CST_CODE_FLOAT;
1466
Type *Ty = CFP->getType();
1467
if (Ty->isHalfTy() || Ty->isFloatTy() || Ty->isDoubleTy()) {
1468
Record.push_back(CFP->getValueAPF().bitcastToAPInt().getZExtValue());
1469
} else if (Ty->isX86_FP80Ty()) {
1470
// api needed to prevent premature destruction
1471
// bits are not in the same order as a normal i80 APInt, compensate.
1472
APInt api = CFP->getValueAPF().bitcastToAPInt();
1473
const uint64_t *p = api.getRawData();
1474
Record.push_back((p[1] << 48) | (p[0] >> 16));
1475
Record.push_back(p[0] & 0xffffLL);
1476
} else if (Ty->isFP128Ty() || Ty->isPPC_FP128Ty()) {
1477
APInt api = CFP->getValueAPF().bitcastToAPInt();
1478
const uint64_t *p = api.getRawData();
1479
Record.push_back(p[0]);
1480
Record.push_back(p[1]);
1482
assert (0 && "Unknown FP type!");
1484
} else if (isa<ConstantDataSequential>(C) &&
1485
cast<ConstantDataSequential>(C)->isString()) {
1486
const ConstantDataSequential *Str = cast<ConstantDataSequential>(C);
1487
// Emit constant strings specially.
1488
unsigned NumElts = Str->getNumElements();
1489
// If this is a null-terminated string, use the denser CSTRING encoding.
1490
if (Str->isCString()) {
1491
Code = bitc::CST_CODE_CSTRING;
1492
--NumElts; // Don't encode the null, which isn't allowed by char6.
1494
Code = bitc::CST_CODE_STRING;
1495
AbbrevToUse = String8Abbrev;
1497
bool isCStr7 = Code == bitc::CST_CODE_CSTRING;
1498
bool isCStrChar6 = Code == bitc::CST_CODE_CSTRING;
1499
for (unsigned i = 0; i != NumElts; ++i) {
1500
unsigned char V = Str->getElementAsInteger(i);
1501
Record.push_back(V);
1502
isCStr7 &= (V & 128) == 0;
1504
isCStrChar6 = BitCodeAbbrevOp::isChar6(V);
1508
AbbrevToUse = CString6Abbrev;
1510
AbbrevToUse = CString7Abbrev;
1511
} else if (const ConstantDataSequential *CDS =
1512
dyn_cast<ConstantDataSequential>(C)) {
1513
Code = bitc::CST_CODE_DATA;
1514
Type *EltTy = CDS->getType()->getElementType();
1515
if (isa<IntegerType>(EltTy)) {
1516
for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
1517
Record.push_back(CDS->getElementAsInteger(i));
1518
} else if (EltTy->isFloatTy()) {
1519
for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) {
1520
union { float F; uint32_t I; };
1521
F = CDS->getElementAsFloat(i);
1522
Record.push_back(I);
1525
assert(EltTy->isDoubleTy() && "Unknown ConstantData element type");
1526
for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) {
1527
union { double F; uint64_t I; };
1528
F = CDS->getElementAsDouble(i);
1529
Record.push_back(I);
1532
} else if (isa<ConstantArray>(C) || isa<ConstantStruct>(C) ||
1533
isa<ConstantVector>(C)) {
1534
Code = bitc::CST_CODE_AGGREGATE;
1535
for (const Value *Op : C->operands())
1536
Record.push_back(VE.getValueID(Op));
1537
AbbrevToUse = AggregateAbbrev;
1538
} else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
1539
switch (CE->getOpcode()) {
1541
if (Instruction::isCast(CE->getOpcode())) {
1542
Code = bitc::CST_CODE_CE_CAST;
1543
Record.push_back(GetEncodedCastOpcode(CE->getOpcode()));
1544
Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
1545
Record.push_back(VE.getValueID(C->getOperand(0)));
1546
AbbrevToUse = CONSTANTS_CE_CAST_Abbrev;
1548
assert(CE->getNumOperands() == 2 && "Unknown constant expr!");
1549
Code = bitc::CST_CODE_CE_BINOP;
1550
Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode()));
1551
Record.push_back(VE.getValueID(C->getOperand(0)));
1552
Record.push_back(VE.getValueID(C->getOperand(1)));
1553
uint64_t Flags = GetOptimizationFlags(CE);
1555
Record.push_back(Flags);
1558
case Instruction::GetElementPtr: {
1559
Code = bitc::CST_CODE_CE_GEP;
1560
const auto *GO = cast<GEPOperator>(C);
1561
if (GO->isInBounds())
1562
Code = bitc::CST_CODE_CE_INBOUNDS_GEP;
1563
Record.push_back(VE.getTypeID(GO->getSourceElementType()));
1564
for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) {
1565
Record.push_back(VE.getTypeID(C->getOperand(i)->getType()));
1566
Record.push_back(VE.getValueID(C->getOperand(i)));
1570
case Instruction::Select:
1571
Code = bitc::CST_CODE_CE_SELECT;
1572
Record.push_back(VE.getValueID(C->getOperand(0)));
1573
Record.push_back(VE.getValueID(C->getOperand(1)));
1574
Record.push_back(VE.getValueID(C->getOperand(2)));
1576
case Instruction::ExtractElement:
1577
Code = bitc::CST_CODE_CE_EXTRACTELT;
1578
Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
1579
Record.push_back(VE.getValueID(C->getOperand(0)));
1580
Record.push_back(VE.getTypeID(C->getOperand(1)->getType()));
1581
Record.push_back(VE.getValueID(C->getOperand(1)));
1583
case Instruction::InsertElement:
1584
Code = bitc::CST_CODE_CE_INSERTELT;
1585
Record.push_back(VE.getValueID(C->getOperand(0)));
1586
Record.push_back(VE.getValueID(C->getOperand(1)));
1587
Record.push_back(VE.getTypeID(C->getOperand(2)->getType()));
1588
Record.push_back(VE.getValueID(C->getOperand(2)));
1590
case Instruction::ShuffleVector:
1591
// If the return type and argument types are the same, this is a
1592
// standard shufflevector instruction. If the types are different,
1593
// then the shuffle is widening or truncating the input vectors, and
1594
// the argument type must also be encoded.
1595
if (C->getType() == C->getOperand(0)->getType()) {
1596
Code = bitc::CST_CODE_CE_SHUFFLEVEC;
1598
Code = bitc::CST_CODE_CE_SHUFVEC_EX;
1599
Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
1601
Record.push_back(VE.getValueID(C->getOperand(0)));
1602
Record.push_back(VE.getValueID(C->getOperand(1)));
1603
Record.push_back(VE.getValueID(C->getOperand(2)));
1605
case Instruction::ICmp:
1606
case Instruction::FCmp:
1607
Code = bitc::CST_CODE_CE_CMP;
1608
Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
1609
Record.push_back(VE.getValueID(C->getOperand(0)));
1610
Record.push_back(VE.getValueID(C->getOperand(1)));
1611
Record.push_back(CE->getPredicate());
1614
} else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
1615
Code = bitc::CST_CODE_BLOCKADDRESS;
1616
Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
1617
Record.push_back(VE.getValueID(BA->getFunction()));
1618
Record.push_back(VE.getGlobalBasicBlockID(BA->getBasicBlock()));
1623
llvm_unreachable("Unknown constant!");
1625
Stream.EmitRecord(Code, Record, AbbrevToUse);
1632
static void WriteModuleConstants(const ValueEnumerator &VE,
1633
BitstreamWriter &Stream) {
1634
const ValueEnumerator::ValueList &Vals = VE.getValues();
1636
// Find the first constant to emit, which is the first non-globalvalue value.
1637
// We know globalvalues have been emitted by WriteModuleInfo.
1638
for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
1639
if (!isa<GlobalValue>(Vals[i].first)) {
1640
WriteConstants(i, Vals.size(), VE, Stream, true);
1646
/// PushValueAndType - The file has to encode both the value and type id for
1647
/// many values, because we need to know what type to create for forward
1648
/// references. However, most operands are not forward references, so this type
1649
/// field is not needed.
1651
/// This function adds V's value ID to Vals. If the value ID is higher than the
1652
/// instruction ID, then it is a forward reference, and it also includes the
1653
/// type ID. The value ID that is written is encoded relative to the InstID.
1654
static bool PushValueAndType(const Value *V, unsigned InstID,
1655
SmallVectorImpl<unsigned> &Vals,
1656
ValueEnumerator &VE) {
1657
unsigned ValID = VE.getValueID(V);
1658
// Make encoding relative to the InstID.
1659
Vals.push_back(InstID - ValID);
1660
if (ValID >= InstID) {
1661
Vals.push_back(VE.getTypeID(V->getType()));
1667
/// pushValue - Like PushValueAndType, but where the type of the value is
1668
/// omitted (perhaps it was already encoded in an earlier operand).
1669
static void pushValue(const Value *V, unsigned InstID,
1670
SmallVectorImpl<unsigned> &Vals,
1671
ValueEnumerator &VE) {
1672
unsigned ValID = VE.getValueID(V);
1673
Vals.push_back(InstID - ValID);
1676
static void pushValueSigned(const Value *V, unsigned InstID,
1677
SmallVectorImpl<uint64_t> &Vals,
1678
ValueEnumerator &VE) {
1679
unsigned ValID = VE.getValueID(V);
1680
int64_t diff = ((int32_t)InstID - (int32_t)ValID);
1681
emitSignedInt64(Vals, diff);
1684
/// WriteInstruction - Emit an instruction to the specified stream.
1685
static void WriteInstruction(const Instruction &I, unsigned InstID,
1686
ValueEnumerator &VE, BitstreamWriter &Stream,
1687
SmallVectorImpl<unsigned> &Vals) {
1689
unsigned AbbrevToUse = 0;
1690
VE.setInstructionID(&I);
1691
switch (I.getOpcode()) {
1693
if (Instruction::isCast(I.getOpcode())) {
1694
Code = bitc::FUNC_CODE_INST_CAST;
1695
if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
1696
AbbrevToUse = FUNCTION_INST_CAST_ABBREV;
1697
Vals.push_back(VE.getTypeID(I.getType()));
1698
Vals.push_back(GetEncodedCastOpcode(I.getOpcode()));
1700
assert(isa<BinaryOperator>(I) && "Unknown instruction!");
1701
Code = bitc::FUNC_CODE_INST_BINOP;
1702
if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
1703
AbbrevToUse = FUNCTION_INST_BINOP_ABBREV;
1704
pushValue(I.getOperand(1), InstID, Vals, VE);
1705
Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode()));
1706
uint64_t Flags = GetOptimizationFlags(&I);
1708
if (AbbrevToUse == FUNCTION_INST_BINOP_ABBREV)
1709
AbbrevToUse = FUNCTION_INST_BINOP_FLAGS_ABBREV;
1710
Vals.push_back(Flags);
1715
case Instruction::GetElementPtr: {
1716
Code = bitc::FUNC_CODE_INST_GEP;
1717
AbbrevToUse = FUNCTION_INST_GEP_ABBREV;
1718
auto &GEPInst = cast<GetElementPtrInst>(I);
1719
Vals.push_back(GEPInst.isInBounds());
1720
Vals.push_back(VE.getTypeID(GEPInst.getSourceElementType()));
1721
for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
1722
PushValueAndType(I.getOperand(i), InstID, Vals, VE);
1725
case Instruction::ExtractValue: {
1726
Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
1727
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1728
const ExtractValueInst *EVI = cast<ExtractValueInst>(&I);
1729
Vals.append(EVI->idx_begin(), EVI->idx_end());
1732
case Instruction::InsertValue: {
1733
Code = bitc::FUNC_CODE_INST_INSERTVAL;
1734
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1735
PushValueAndType(I.getOperand(1), InstID, Vals, VE);
1736
const InsertValueInst *IVI = cast<InsertValueInst>(&I);
1737
Vals.append(IVI->idx_begin(), IVI->idx_end());
1740
case Instruction::Select:
1741
Code = bitc::FUNC_CODE_INST_VSELECT;
1742
PushValueAndType(I.getOperand(1), InstID, Vals, VE);
1743
pushValue(I.getOperand(2), InstID, Vals, VE);
1744
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1746
case Instruction::ExtractElement:
1747
Code = bitc::FUNC_CODE_INST_EXTRACTELT;
1748
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1749
PushValueAndType(I.getOperand(1), InstID, Vals, VE);
1751
case Instruction::InsertElement:
1752
Code = bitc::FUNC_CODE_INST_INSERTELT;
1753
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1754
pushValue(I.getOperand(1), InstID, Vals, VE);
1755
PushValueAndType(I.getOperand(2), InstID, Vals, VE);
1757
case Instruction::ShuffleVector:
1758
Code = bitc::FUNC_CODE_INST_SHUFFLEVEC;
1759
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1760
pushValue(I.getOperand(1), InstID, Vals, VE);
1761
pushValue(I.getOperand(2), InstID, Vals, VE);
1763
case Instruction::ICmp:
1764
case Instruction::FCmp: {
1765
// compare returning Int1Ty or vector of Int1Ty
1766
Code = bitc::FUNC_CODE_INST_CMP2;
1767
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1768
pushValue(I.getOperand(1), InstID, Vals, VE);
1769
Vals.push_back(cast<CmpInst>(I).getPredicate());
1770
uint64_t Flags = GetOptimizationFlags(&I);
1772
Vals.push_back(Flags);
1776
case Instruction::Ret:
1778
Code = bitc::FUNC_CODE_INST_RET;
1779
unsigned NumOperands = I.getNumOperands();
1780
if (NumOperands == 0)
1781
AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV;
1782
else if (NumOperands == 1) {
1783
if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
1784
AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV;
1786
for (unsigned i = 0, e = NumOperands; i != e; ++i)
1787
PushValueAndType(I.getOperand(i), InstID, Vals, VE);
1791
case Instruction::Br:
1793
Code = bitc::FUNC_CODE_INST_BR;
1794
const BranchInst &II = cast<BranchInst>(I);
1795
Vals.push_back(VE.getValueID(II.getSuccessor(0)));
1796
if (II.isConditional()) {
1797
Vals.push_back(VE.getValueID(II.getSuccessor(1)));
1798
pushValue(II.getCondition(), InstID, Vals, VE);
1802
case Instruction::Switch:
1804
Code = bitc::FUNC_CODE_INST_SWITCH;
1805
const SwitchInst &SI = cast<SwitchInst>(I);
1806
Vals.push_back(VE.getTypeID(SI.getCondition()->getType()));
1807
pushValue(SI.getCondition(), InstID, Vals, VE);
1808
Vals.push_back(VE.getValueID(SI.getDefaultDest()));
1809
for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end();
1811
Vals.push_back(VE.getValueID(i.getCaseValue()));
1812
Vals.push_back(VE.getValueID(i.getCaseSuccessor()));
1816
case Instruction::IndirectBr:
1817
Code = bitc::FUNC_CODE_INST_INDIRECTBR;
1818
Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
1819
// Encode the address operand as relative, but not the basic blocks.
1820
pushValue(I.getOperand(0), InstID, Vals, VE);
1821
for (unsigned i = 1, e = I.getNumOperands(); i != e; ++i)
1822
Vals.push_back(VE.getValueID(I.getOperand(i)));
1825
case Instruction::Invoke: {
1826
const InvokeInst *II = cast<InvokeInst>(&I);
1827
const Value *Callee = II->getCalledValue();
1828
FunctionType *FTy = II->getFunctionType();
1829
Code = bitc::FUNC_CODE_INST_INVOKE;
1831
Vals.push_back(VE.getAttributeID(II->getAttributes()));
1832
Vals.push_back(II->getCallingConv() | 1 << 13);
1833
Vals.push_back(VE.getValueID(II->getNormalDest()));
1834
Vals.push_back(VE.getValueID(II->getUnwindDest()));
1835
Vals.push_back(VE.getTypeID(FTy));
1836
PushValueAndType(Callee, InstID, Vals, VE);
1838
// Emit value #'s for the fixed parameters.
1839
for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
1840
pushValue(I.getOperand(i), InstID, Vals, VE); // fixed param.
1842
// Emit type/value pairs for varargs params.
1843
if (FTy->isVarArg()) {
1844
for (unsigned i = FTy->getNumParams(), e = I.getNumOperands()-3;
1846
PushValueAndType(I.getOperand(i), InstID, Vals, VE); // vararg
1850
case Instruction::Resume:
1851
Code = bitc::FUNC_CODE_INST_RESUME;
1852
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1854
case Instruction::Unreachable:
1855
Code = bitc::FUNC_CODE_INST_UNREACHABLE;
1856
AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV;
1859
case Instruction::PHI: {
1860
const PHINode &PN = cast<PHINode>(I);
1861
Code = bitc::FUNC_CODE_INST_PHI;
1862
// With the newer instruction encoding, forward references could give
1863
// negative valued IDs. This is most common for PHIs, so we use
1865
SmallVector<uint64_t, 128> Vals64;
1866
Vals64.push_back(VE.getTypeID(PN.getType()));
1867
for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
1868
pushValueSigned(PN.getIncomingValue(i), InstID, Vals64, VE);
1869
Vals64.push_back(VE.getValueID(PN.getIncomingBlock(i)));
1871
// Emit a Vals64 vector and exit.
1872
Stream.EmitRecord(Code, Vals64, AbbrevToUse);
1877
case Instruction::LandingPad: {
1878
const LandingPadInst &LP = cast<LandingPadInst>(I);
1879
Code = bitc::FUNC_CODE_INST_LANDINGPAD;
1880
Vals.push_back(VE.getTypeID(LP.getType()));
1881
Vals.push_back(LP.isCleanup());
1882
Vals.push_back(LP.getNumClauses());
1883
for (unsigned I = 0, E = LP.getNumClauses(); I != E; ++I) {
1885
Vals.push_back(LandingPadInst::Catch);
1887
Vals.push_back(LandingPadInst::Filter);
1888
PushValueAndType(LP.getClause(I), InstID, Vals, VE);
1893
case Instruction::Alloca: {
1894
Code = bitc::FUNC_CODE_INST_ALLOCA;
1895
const AllocaInst &AI = cast<AllocaInst>(I);
1896
Vals.push_back(VE.getTypeID(AI.getAllocatedType()));
1897
Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
1898
Vals.push_back(VE.getValueID(I.getOperand(0))); // size.
1899
unsigned AlignRecord = Log2_32(AI.getAlignment()) + 1;
1900
assert(Log2_32(Value::MaximumAlignment) + 1 < 1 << 5 &&
1901
"not enough bits for maximum alignment");
1902
assert(AlignRecord < 1 << 5 && "alignment greater than 1 << 64");
1903
AlignRecord |= AI.isUsedWithInAlloca() << 5;
1904
AlignRecord |= 1 << 6;
1905
Vals.push_back(AlignRecord);
1909
case Instruction::Load:
1910
if (cast<LoadInst>(I).isAtomic()) {
1911
Code = bitc::FUNC_CODE_INST_LOADATOMIC;
1912
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1914
Code = bitc::FUNC_CODE_INST_LOAD;
1915
if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE)) // ptr
1916
AbbrevToUse = FUNCTION_INST_LOAD_ABBREV;
1918
Vals.push_back(VE.getTypeID(I.getType()));
1919
Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1);
1920
Vals.push_back(cast<LoadInst>(I).isVolatile());
1921
if (cast<LoadInst>(I).isAtomic()) {
1922
Vals.push_back(GetEncodedOrdering(cast<LoadInst>(I).getOrdering()));
1923
Vals.push_back(GetEncodedSynchScope(cast<LoadInst>(I).getSynchScope()));
1926
case Instruction::Store:
1927
if (cast<StoreInst>(I).isAtomic())
1928
Code = bitc::FUNC_CODE_INST_STOREATOMIC;
1930
Code = bitc::FUNC_CODE_INST_STORE;
1931
PushValueAndType(I.getOperand(1), InstID, Vals, VE); // ptrty + ptr
1932
PushValueAndType(I.getOperand(0), InstID, Vals, VE); // valty + val
1933
Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1);
1934
Vals.push_back(cast<StoreInst>(I).isVolatile());
1935
if (cast<StoreInst>(I).isAtomic()) {
1936
Vals.push_back(GetEncodedOrdering(cast<StoreInst>(I).getOrdering()));
1937
Vals.push_back(GetEncodedSynchScope(cast<StoreInst>(I).getSynchScope()));
1940
case Instruction::AtomicCmpXchg:
1941
Code = bitc::FUNC_CODE_INST_CMPXCHG;
1942
PushValueAndType(I.getOperand(0), InstID, Vals, VE); // ptrty + ptr
1943
PushValueAndType(I.getOperand(1), InstID, Vals, VE); // cmp.
1944
pushValue(I.getOperand(2), InstID, Vals, VE); // newval.
1945
Vals.push_back(cast<AtomicCmpXchgInst>(I).isVolatile());
1946
Vals.push_back(GetEncodedOrdering(
1947
cast<AtomicCmpXchgInst>(I).getSuccessOrdering()));
1948
Vals.push_back(GetEncodedSynchScope(
1949
cast<AtomicCmpXchgInst>(I).getSynchScope()));
1950
Vals.push_back(GetEncodedOrdering(
1951
cast<AtomicCmpXchgInst>(I).getFailureOrdering()));
1952
Vals.push_back(cast<AtomicCmpXchgInst>(I).isWeak());
1954
case Instruction::AtomicRMW:
1955
Code = bitc::FUNC_CODE_INST_ATOMICRMW;
1956
PushValueAndType(I.getOperand(0), InstID, Vals, VE); // ptrty + ptr
1957
pushValue(I.getOperand(1), InstID, Vals, VE); // val.
1958
Vals.push_back(GetEncodedRMWOperation(
1959
cast<AtomicRMWInst>(I).getOperation()));
1960
Vals.push_back(cast<AtomicRMWInst>(I).isVolatile());
1961
Vals.push_back(GetEncodedOrdering(cast<AtomicRMWInst>(I).getOrdering()));
1962
Vals.push_back(GetEncodedSynchScope(
1963
cast<AtomicRMWInst>(I).getSynchScope()));
1965
case Instruction::Fence:
1966
Code = bitc::FUNC_CODE_INST_FENCE;
1967
Vals.push_back(GetEncodedOrdering(cast<FenceInst>(I).getOrdering()));
1968
Vals.push_back(GetEncodedSynchScope(cast<FenceInst>(I).getSynchScope()));
1970
case Instruction::Call: {
1971
const CallInst &CI = cast<CallInst>(I);
1972
FunctionType *FTy = CI.getFunctionType();
1974
Code = bitc::FUNC_CODE_INST_CALL;
1976
Vals.push_back(VE.getAttributeID(CI.getAttributes()));
1977
Vals.push_back((CI.getCallingConv() << 1) | unsigned(CI.isTailCall()) |
1978
unsigned(CI.isMustTailCall()) << 14 | 1 << 15);
1979
Vals.push_back(VE.getTypeID(FTy));
1980
PushValueAndType(CI.getCalledValue(), InstID, Vals, VE); // Callee
1982
// Emit value #'s for the fixed parameters.
1983
for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
1984
// Check for labels (can happen with asm labels).
1985
if (FTy->getParamType(i)->isLabelTy())
1986
Vals.push_back(VE.getValueID(CI.getArgOperand(i)));
1988
pushValue(CI.getArgOperand(i), InstID, Vals, VE); // fixed param.
1991
// Emit type/value pairs for varargs params.
1992
if (FTy->isVarArg()) {
1993
for (unsigned i = FTy->getNumParams(), e = CI.getNumArgOperands();
1995
PushValueAndType(CI.getArgOperand(i), InstID, Vals, VE); // varargs
1999
case Instruction::VAArg:
2000
Code = bitc::FUNC_CODE_INST_VAARG;
2001
Vals.push_back(VE.getTypeID(I.getOperand(0)->getType())); // valistty
2002
pushValue(I.getOperand(0), InstID, Vals, VE); // valist.
2003
Vals.push_back(VE.getTypeID(I.getType())); // restype.
2007
Stream.EmitRecord(Code, Vals, AbbrevToUse);
2011
// Emit names for globals/functions etc.
2012
static void WriteValueSymbolTable(const ValueSymbolTable &VST,
2013
const ValueEnumerator &VE,
2014
BitstreamWriter &Stream) {
2015
if (VST.empty()) return;
2016
Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4);
2018
// FIXME: Set up the abbrev, we know how many values there are!
2019
// FIXME: We know if the type names can use 7-bit ascii.
2020
SmallVector<unsigned, 64> NameVals;
2022
for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end();
2025
const ValueName &Name = *SI;
2027
// Figure out the encoding to use for the name.
2029
bool isChar6 = true;
2030
for (const char *C = Name.getKeyData(), *E = C+Name.getKeyLength();
2033
isChar6 = BitCodeAbbrevOp::isChar6(*C);
2034
if ((unsigned char)*C & 128) {
2036
break; // don't bother scanning the rest.
2040
unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
2042
// VST_ENTRY: [valueid, namechar x N]
2043
// VST_BBENTRY: [bbid, namechar x N]
2045
if (isa<BasicBlock>(SI->getValue())) {
2046
Code = bitc::VST_CODE_BBENTRY;
2048
AbbrevToUse = VST_BBENTRY_6_ABBREV;
2050
Code = bitc::VST_CODE_ENTRY;
2052
AbbrevToUse = VST_ENTRY_6_ABBREV;
2054
AbbrevToUse = VST_ENTRY_7_ABBREV;
2057
NameVals.push_back(VE.getValueID(SI->getValue()));
2058
for (const char *P = Name.getKeyData(),
2059
*E = Name.getKeyData()+Name.getKeyLength(); P != E; ++P)
2060
NameVals.push_back((unsigned char)*P);
2062
// Emit the finished record.
2063
Stream.EmitRecord(Code, NameVals, AbbrevToUse);
2069
static void WriteUseList(ValueEnumerator &VE, UseListOrder &&Order,
2070
BitstreamWriter &Stream) {
2071
assert(Order.Shuffle.size() >= 2 && "Shuffle too small");
2073
if (isa<BasicBlock>(Order.V))
2074
Code = bitc::USELIST_CODE_BB;
2076
Code = bitc::USELIST_CODE_DEFAULT;
2078
SmallVector<uint64_t, 64> Record(Order.Shuffle.begin(), Order.Shuffle.end());
2079
Record.push_back(VE.getValueID(Order.V));
2080
Stream.EmitRecord(Code, Record);
2083
static void WriteUseListBlock(const Function *F, ValueEnumerator &VE,
2084
BitstreamWriter &Stream) {
2085
assert(VE.shouldPreserveUseListOrder() &&
2086
"Expected to be preserving use-list order");
2088
auto hasMore = [&]() {
2089
return !VE.UseListOrders.empty() && VE.UseListOrders.back().F == F;
2095
Stream.EnterSubblock(bitc::USELIST_BLOCK_ID, 3);
2097
WriteUseList(VE, std::move(VE.UseListOrders.back()), Stream);
2098
VE.UseListOrders.pop_back();
2103
/// WriteFunction - Emit a function body to the module stream.
2104
static void WriteFunction(const Function &F, ValueEnumerator &VE,
2105
BitstreamWriter &Stream) {
2106
Stream.EnterSubblock(bitc::FUNCTION_BLOCK_ID, 4);
2107
VE.incorporateFunction(F);
2109
SmallVector<unsigned, 64> Vals;
2111
// Emit the number of basic blocks, so the reader can create them ahead of
2113
Vals.push_back(VE.getBasicBlocks().size());
2114
Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals);
2117
// If there are function-local constants, emit them now.
2118
unsigned CstStart, CstEnd;
2119
VE.getFunctionConstantRange(CstStart, CstEnd);
2120
WriteConstants(CstStart, CstEnd, VE, Stream, false);
2122
// If there is function-local metadata, emit it now.
2123
WriteFunctionLocalMetadata(F, VE, Stream);
2125
// Keep a running idea of what the instruction ID is.
2126
unsigned InstID = CstEnd;
2128
bool NeedsMetadataAttachment = F.hasMetadata();
2130
DILocation *LastDL = nullptr;
2132
// Finally, emit all the instructions, in order.
2133
for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
2134
for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
2136
WriteInstruction(*I, InstID, VE, Stream, Vals);
2138
if (!I->getType()->isVoidTy())
2141
// If the instruction has metadata, write a metadata attachment later.
2142
NeedsMetadataAttachment |= I->hasMetadataOtherThanDebugLoc();
2144
// If the instruction has a debug location, emit it.
2145
DILocation *DL = I->getDebugLoc();
2150
// Just repeat the same debug loc as last time.
2151
Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals);
2155
Vals.push_back(DL->getLine());
2156
Vals.push_back(DL->getColumn());
2157
Vals.push_back(VE.getMetadataOrNullID(DL->getScope()));
2158
Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt()));
2159
Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals);
2165
// Emit names for all the instructions etc.
2166
WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream);
2168
if (NeedsMetadataAttachment)
2169
WriteMetadataAttachment(F, VE, Stream);
2170
if (VE.shouldPreserveUseListOrder())
2171
WriteUseListBlock(&F, VE, Stream);
2176
// Emit blockinfo, which defines the standard abbreviations etc.
2177
static void WriteBlockInfo(const ValueEnumerator &VE, BitstreamWriter &Stream) {
2178
// We only want to emit block info records for blocks that have multiple
2179
// instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK.
2180
// Other blocks can define their abbrevs inline.
2181
Stream.EnterBlockInfoBlock(2);
2183
{ // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings.
2184
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2185
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2186
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
2187
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2188
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
2189
if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
2190
Abbv) != VST_ENTRY_8_ABBREV)
2191
llvm_unreachable("Unexpected abbrev ordering!");
2194
{ // 7-bit fixed width VST_ENTRY strings.
2195
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2196
Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
2197
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
2198
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2199
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
2200
if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
2201
Abbv) != VST_ENTRY_7_ABBREV)
2202
llvm_unreachable("Unexpected abbrev ordering!");
2204
{ // 6-bit char6 VST_ENTRY strings.
2205
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2206
Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
2207
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
2208
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2209
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
2210
if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
2211
Abbv) != VST_ENTRY_6_ABBREV)
2212
llvm_unreachable("Unexpected abbrev ordering!");
2214
{ // 6-bit char6 VST_BBENTRY strings.
2215
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2216
Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY));
2217
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
2218
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2219
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
2220
if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
2221
Abbv) != VST_BBENTRY_6_ABBREV)
2222
llvm_unreachable("Unexpected abbrev ordering!");
2227
{ // SETTYPE abbrev for CONSTANTS_BLOCK.
2228
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2229
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE));
2230
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
2231
VE.computeBitsRequiredForTypeIndicies()));
2232
if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
2233
Abbv) != CONSTANTS_SETTYPE_ABBREV)
2234
llvm_unreachable("Unexpected abbrev ordering!");
2237
{ // INTEGER abbrev for CONSTANTS_BLOCK.
2238
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2239
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER));
2240
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
2241
if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
2242
Abbv) != CONSTANTS_INTEGER_ABBREV)
2243
llvm_unreachable("Unexpected abbrev ordering!");
2246
{ // CE_CAST abbrev for CONSTANTS_BLOCK.
2247
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2248
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST));
2249
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // cast opc
2250
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // typeid
2251
VE.computeBitsRequiredForTypeIndicies()));
2252
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // value id
2254
if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
2255
Abbv) != CONSTANTS_CE_CAST_Abbrev)
2256
llvm_unreachable("Unexpected abbrev ordering!");
2258
{ // NULL abbrev for CONSTANTS_BLOCK.
2259
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2260
Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL));
2261
if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
2262
Abbv) != CONSTANTS_NULL_Abbrev)
2263
llvm_unreachable("Unexpected abbrev ordering!");
2266
// FIXME: This should only use space for first class types!
2268
{ // INST_LOAD abbrev for FUNCTION_BLOCK.
2269
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2270
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD));
2271
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr
2272
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // dest ty
2273
VE.computeBitsRequiredForTypeIndicies()));
2274
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align
2275
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile
2276
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
2277
Abbv) != FUNCTION_INST_LOAD_ABBREV)
2278
llvm_unreachable("Unexpected abbrev ordering!");
2280
{ // INST_BINOP abbrev for FUNCTION_BLOCK.
2281
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2282
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
2283
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
2284
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
2285
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
2286
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
2287
Abbv) != FUNCTION_INST_BINOP_ABBREV)
2288
llvm_unreachable("Unexpected abbrev ordering!");
2290
{ // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK.
2291
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2292
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
2293
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
2294
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
2295
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
2296
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); // flags
2297
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
2298
Abbv) != FUNCTION_INST_BINOP_FLAGS_ABBREV)
2299
llvm_unreachable("Unexpected abbrev ordering!");
2301
{ // INST_CAST abbrev for FUNCTION_BLOCK.
2302
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2303
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST));
2304
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // OpVal
2305
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // dest ty
2306
VE.computeBitsRequiredForTypeIndicies()));
2307
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
2308
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
2309
Abbv) != FUNCTION_INST_CAST_ABBREV)
2310
llvm_unreachable("Unexpected abbrev ordering!");
2313
{ // INST_RET abbrev for FUNCTION_BLOCK.
2314
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2315
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
2316
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
2317
Abbv) != FUNCTION_INST_RET_VOID_ABBREV)
2318
llvm_unreachable("Unexpected abbrev ordering!");
2320
{ // INST_RET abbrev for FUNCTION_BLOCK.
2321
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2322
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
2323
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID
2324
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
2325
Abbv) != FUNCTION_INST_RET_VAL_ABBREV)
2326
llvm_unreachable("Unexpected abbrev ordering!");
2328
{ // INST_UNREACHABLE abbrev for FUNCTION_BLOCK.
2329
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2330
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE));
2331
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
2332
Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV)
2333
llvm_unreachable("Unexpected abbrev ordering!");
2336
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
2337
Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_GEP));
2338
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2339
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // dest ty
2340
Log2_32_Ceil(VE.getTypes().size() + 1)));
2341
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2342
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2343
if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, Abbv) !=
2344
FUNCTION_INST_GEP_ABBREV)
2345
llvm_unreachable("Unexpected abbrev ordering!");
2351
/// WriteModule - Emit the specified module to the bitstream.
2352
static void WriteModule(const Module *M, BitstreamWriter &Stream,
2353
bool ShouldPreserveUseListOrder) {
2354
Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3);
2356
SmallVector<unsigned, 1> Vals;
2357
unsigned CurVersion = 1;
2358
Vals.push_back(CurVersion);
2359
Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals);
2361
// Analyze the module, enumerating globals, functions, etc.
2362
ValueEnumerator VE(*M, ShouldPreserveUseListOrder);
2364
// Emit blockinfo, which defines the standard abbreviations etc.
2365
WriteBlockInfo(VE, Stream);
2367
// Emit information about attribute groups.
2368
WriteAttributeGroupTable(VE, Stream);
2370
// Emit information about parameter attributes.
2371
WriteAttributeTable(VE, Stream);
2373
// Emit information describing all of the types in the module.
2374
WriteTypeTable(VE, Stream);
2376
writeComdats(VE, Stream);
2378
// Emit top-level description of module, including target triple, inline asm,
2379
// descriptors for global variables, and function prototype info.
2380
WriteModuleInfo(M, VE, Stream);
2383
WriteModuleConstants(VE, Stream);
2386
WriteModuleMetadata(M, VE, Stream);
2389
WriteModuleMetadataStore(M, Stream);
2391
// Emit names for globals/functions etc.
2392
WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream);
2394
// Emit module-level use-lists.
2395
if (VE.shouldPreserveUseListOrder())
2396
WriteUseListBlock(nullptr, VE, Stream);
2398
// Emit function bodies.
2399
for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F)
2400
if (!F->isDeclaration())
2401
WriteFunction(*F, VE, Stream);
2406
/// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a
2407
/// header and trailer to make it compatible with the system archiver. To do
2408
/// this we emit the following header, and then emit a trailer that pads the
2409
/// file out to be a multiple of 16 bytes.
2411
/// struct bc_header {
2412
/// uint32_t Magic; // 0x0B17C0DE
2413
/// uint32_t Version; // Version, currently always 0.
2414
/// uint32_t BitcodeOffset; // Offset to traditional bitcode file.
2415
/// uint32_t BitcodeSize; // Size of traditional bitcode file.
2416
/// uint32_t CPUType; // CPU specifier.
2417
/// ... potentially more later ...
2420
DarwinBCSizeFieldOffset = 3*4, // Offset to bitcode_size.
2421
DarwinBCHeaderSize = 5*4
2424
static void WriteInt32ToBuffer(uint32_t Value, SmallVectorImpl<char> &Buffer,
2425
uint32_t &Position) {
2426
support::endian::write32le(&Buffer[Position], Value);
2430
static void EmitDarwinBCHeaderAndTrailer(SmallVectorImpl<char> &Buffer,
2432
unsigned CPUType = ~0U;
2434
// Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*, arm-*, thumb-*,
2435
// armv[0-9]-*, thumbv[0-9]-*, armv5te-*, or armv6t2-*. The CPUType is a magic
2436
// number from /usr/include/mach/machine.h. It is ok to reproduce the
2437
// specific constants here because they are implicitly part of the Darwin ABI.
2439
DARWIN_CPU_ARCH_ABI64 = 0x01000000,
2440
DARWIN_CPU_TYPE_X86 = 7,
2441
DARWIN_CPU_TYPE_ARM = 12,
2442
DARWIN_CPU_TYPE_POWERPC = 18
2445
Triple::ArchType Arch = TT.getArch();
2446
if (Arch == Triple::x86_64)
2447
CPUType = DARWIN_CPU_TYPE_X86 | DARWIN_CPU_ARCH_ABI64;
2448
else if (Arch == Triple::x86)
2449
CPUType = DARWIN_CPU_TYPE_X86;
2450
else if (Arch == Triple::ppc)
2451
CPUType = DARWIN_CPU_TYPE_POWERPC;
2452
else if (Arch == Triple::ppc64)
2453
CPUType = DARWIN_CPU_TYPE_POWERPC | DARWIN_CPU_ARCH_ABI64;
2454
else if (Arch == Triple::arm || Arch == Triple::thumb)
2455
CPUType = DARWIN_CPU_TYPE_ARM;
2457
// Traditional Bitcode starts after header.
2458
assert(Buffer.size() >= DarwinBCHeaderSize &&
2459
"Expected header size to be reserved");
2460
unsigned BCOffset = DarwinBCHeaderSize;
2461
unsigned BCSize = Buffer.size()-DarwinBCHeaderSize;
2463
// Write the magic and version.
2464
unsigned Position = 0;
2465
WriteInt32ToBuffer(0x0B17C0DE , Buffer, Position);
2466
WriteInt32ToBuffer(0 , Buffer, Position); // Version.
2467
WriteInt32ToBuffer(BCOffset , Buffer, Position);
2468
WriteInt32ToBuffer(BCSize , Buffer, Position);
2469
WriteInt32ToBuffer(CPUType , Buffer, Position);
2471
// If the file is not a multiple of 16 bytes, insert dummy padding.
2472
while (Buffer.size() & 15)
2473
Buffer.push_back(0);
2476
/// WriteBitcodeToFile - Write the specified module to the specified output
2478
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out,
2479
bool ShouldPreserveUseListOrder) {
2480
SmallVector<char, 0> Buffer;
2481
Buffer.reserve(256*1024);
2483
// If this is darwin or another generic macho target, reserve space for the
2485
Triple TT(M->getTargetTriple());
2486
if (TT.isOSDarwin())
2487
Buffer.insert(Buffer.begin(), DarwinBCHeaderSize, 0);
2489
// Emit the module into the buffer.
2491
BitstreamWriter Stream(Buffer);
2493
// Emit the file header.
2494
Stream.Emit((unsigned)'B', 8);
2495
Stream.Emit((unsigned)'C', 8);
2496
Stream.Emit(0x0, 4);
2497
Stream.Emit(0xC, 4);
2498
Stream.Emit(0xE, 4);
2499
Stream.Emit(0xD, 4);
2502
WriteModule(M, Stream, ShouldPreserveUseListOrder);
2505
if (TT.isOSDarwin())
2506
EmitDarwinBCHeaderAndTrailer(Buffer, TT);
2508
// Write the generated bitstream to "Out".
2509
Out.write((char*)&Buffer.front(), Buffer.size());