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 "llvm/Bitcode/BitstreamWriter.h"
16 #include "llvm/Bitcode/LLVMBitCodes.h"
17 #include "ValueEnumerator.h"
18 #include "llvm/Constants.h"
19 #include "llvm/DerivedTypes.h"
20 #include "llvm/InlineAsm.h"
21 #include "llvm/Instructions.h"
22 #include "llvm/Metadata.h"
23 #include "llvm/Module.h"
24 #include "llvm/Operator.h"
25 #include "llvm/TypeSymbolTable.h"
26 #include "llvm/ValueSymbolTable.h"
27 #include "llvm/Support/ErrorHandling.h"
28 #include "llvm/Support/MathExtras.h"
29 #include "llvm/Support/raw_ostream.h"
30 #include "llvm/System/Program.h"
33 /// These are manifest constants used by the bitcode writer. They do not need to
34 /// be kept in sync with the reader, but need to be consistent within this file.
38 // VALUE_SYMTAB_BLOCK abbrev id's.
39 VST_ENTRY_8_ABBREV
= bitc::FIRST_APPLICATION_ABBREV
,
44 // CONSTANTS_BLOCK abbrev id's.
45 CONSTANTS_SETTYPE_ABBREV
= bitc::FIRST_APPLICATION_ABBREV
,
46 CONSTANTS_INTEGER_ABBREV
,
47 CONSTANTS_CE_CAST_Abbrev
,
48 CONSTANTS_NULL_Abbrev
,
50 // FUNCTION_BLOCK abbrev id's.
51 FUNCTION_INST_LOAD_ABBREV
= bitc::FIRST_APPLICATION_ABBREV
,
52 FUNCTION_INST_BINOP_ABBREV
,
53 FUNCTION_INST_BINOP_FLAGS_ABBREV
,
54 FUNCTION_INST_CAST_ABBREV
,
55 FUNCTION_INST_RET_VOID_ABBREV
,
56 FUNCTION_INST_RET_VAL_ABBREV
,
57 FUNCTION_INST_UNREACHABLE_ABBREV
61 static unsigned GetEncodedCastOpcode(unsigned Opcode
) {
63 default: llvm_unreachable("Unknown cast instruction!");
64 case Instruction::Trunc
: return bitc::CAST_TRUNC
;
65 case Instruction::ZExt
: return bitc::CAST_ZEXT
;
66 case Instruction::SExt
: return bitc::CAST_SEXT
;
67 case Instruction::FPToUI
: return bitc::CAST_FPTOUI
;
68 case Instruction::FPToSI
: return bitc::CAST_FPTOSI
;
69 case Instruction::UIToFP
: return bitc::CAST_UITOFP
;
70 case Instruction::SIToFP
: return bitc::CAST_SITOFP
;
71 case Instruction::FPTrunc
: return bitc::CAST_FPTRUNC
;
72 case Instruction::FPExt
: return bitc::CAST_FPEXT
;
73 case Instruction::PtrToInt
: return bitc::CAST_PTRTOINT
;
74 case Instruction::IntToPtr
: return bitc::CAST_INTTOPTR
;
75 case Instruction::BitCast
: return bitc::CAST_BITCAST
;
79 static unsigned GetEncodedBinaryOpcode(unsigned Opcode
) {
81 default: llvm_unreachable("Unknown binary instruction!");
82 case Instruction::Add
:
83 case Instruction::FAdd
: return bitc::BINOP_ADD
;
84 case Instruction::Sub
:
85 case Instruction::FSub
: return bitc::BINOP_SUB
;
86 case Instruction::Mul
:
87 case Instruction::FMul
: return bitc::BINOP_MUL
;
88 case Instruction::UDiv
: return bitc::BINOP_UDIV
;
89 case Instruction::FDiv
:
90 case Instruction::SDiv
: return bitc::BINOP_SDIV
;
91 case Instruction::URem
: return bitc::BINOP_UREM
;
92 case Instruction::FRem
:
93 case Instruction::SRem
: return bitc::BINOP_SREM
;
94 case Instruction::Shl
: return bitc::BINOP_SHL
;
95 case Instruction::LShr
: return bitc::BINOP_LSHR
;
96 case Instruction::AShr
: return bitc::BINOP_ASHR
;
97 case Instruction::And
: return bitc::BINOP_AND
;
98 case Instruction::Or
: return bitc::BINOP_OR
;
99 case Instruction::Xor
: return bitc::BINOP_XOR
;
105 static void WriteStringRecord(unsigned Code
, const std::string
&Str
,
106 unsigned AbbrevToUse
, BitstreamWriter
&Stream
) {
107 SmallVector
<unsigned, 64> Vals
;
109 // Code: [strchar x N]
110 for (unsigned i
= 0, e
= Str
.size(); i
!= e
; ++i
)
111 Vals
.push_back(Str
[i
]);
113 // Emit the finished record.
114 Stream
.EmitRecord(Code
, Vals
, AbbrevToUse
);
117 // Emit information about parameter attributes.
118 static void WriteAttributeTable(const ValueEnumerator
&VE
,
119 BitstreamWriter
&Stream
) {
120 const std::vector
<AttrListPtr
> &Attrs
= VE
.getAttributes();
121 if (Attrs
.empty()) return;
123 Stream
.EnterSubblock(bitc::PARAMATTR_BLOCK_ID
, 3);
125 SmallVector
<uint64_t, 64> Record
;
126 for (unsigned i
= 0, e
= Attrs
.size(); i
!= e
; ++i
) {
127 const AttrListPtr
&A
= Attrs
[i
];
128 for (unsigned i
= 0, e
= A
.getNumSlots(); i
!= e
; ++i
) {
129 const AttributeWithIndex
&PAWI
= A
.getSlot(i
);
130 Record
.push_back(PAWI
.Index
);
132 // FIXME: remove in LLVM 3.0
133 // Store the alignment in the bitcode as a 16-bit raw value instead of a
134 // 5-bit log2 encoded value. Shift the bits above the alignment up by
136 uint64_t FauxAttr
= PAWI
.Attrs
& 0xffff;
137 if (PAWI
.Attrs
& Attribute::Alignment
)
138 FauxAttr
|= (1ull<<16)<<(((PAWI
.Attrs
& Attribute::Alignment
)-1) >> 16);
139 FauxAttr
|= (PAWI
.Attrs
& (0x3FFull
<< 21)) << 11;
141 Record
.push_back(FauxAttr
);
144 Stream
.EmitRecord(bitc::PARAMATTR_CODE_ENTRY
, Record
);
151 /// WriteTypeTable - Write out the type table for a module.
152 static void WriteTypeTable(const ValueEnumerator
&VE
, BitstreamWriter
&Stream
) {
153 const ValueEnumerator::TypeList
&TypeList
= VE
.getTypes();
155 Stream
.EnterSubblock(bitc::TYPE_BLOCK_ID
, 4 /*count from # abbrevs */);
156 SmallVector
<uint64_t, 64> TypeVals
;
158 // Abbrev for TYPE_CODE_POINTER.
159 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
160 Abbv
->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER
));
161 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
162 Log2_32_Ceil(VE
.getTypes().size()+1)));
163 Abbv
->Add(BitCodeAbbrevOp(0)); // Addrspace = 0
164 unsigned PtrAbbrev
= Stream
.EmitAbbrev(Abbv
);
166 // Abbrev for TYPE_CODE_FUNCTION.
167 Abbv
= new BitCodeAbbrev();
168 Abbv
->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION
));
169 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 1)); // isvararg
170 Abbv
->Add(BitCodeAbbrevOp(0)); // FIXME: DEAD value, remove in LLVM 3.0
171 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
172 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
173 Log2_32_Ceil(VE
.getTypes().size()+1)));
174 unsigned FunctionAbbrev
= Stream
.EmitAbbrev(Abbv
);
176 // Abbrev for TYPE_CODE_STRUCT.
177 Abbv
= new BitCodeAbbrev();
178 Abbv
->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT
));
179 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 1)); // ispacked
180 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
181 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
182 Log2_32_Ceil(VE
.getTypes().size()+1)));
183 unsigned StructAbbrev
= Stream
.EmitAbbrev(Abbv
);
185 // Abbrev for TYPE_CODE_ARRAY.
186 Abbv
= new BitCodeAbbrev();
187 Abbv
->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY
));
188 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 8)); // size
189 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
190 Log2_32_Ceil(VE
.getTypes().size()+1)));
191 unsigned ArrayAbbrev
= Stream
.EmitAbbrev(Abbv
);
193 // Emit an entry count so the reader can reserve space.
194 TypeVals
.push_back(TypeList
.size());
195 Stream
.EmitRecord(bitc::TYPE_CODE_NUMENTRY
, TypeVals
);
198 // Loop over all of the types, emitting each in turn.
199 for (unsigned i
= 0, e
= TypeList
.size(); i
!= e
; ++i
) {
200 const Type
*T
= TypeList
[i
].first
;
204 switch (T
->getTypeID()) {
205 default: llvm_unreachable("Unknown type!");
206 case Type::VoidTyID
: Code
= bitc::TYPE_CODE_VOID
; break;
207 case Type::FloatTyID
: Code
= bitc::TYPE_CODE_FLOAT
; break;
208 case Type::DoubleTyID
: Code
= bitc::TYPE_CODE_DOUBLE
; break;
209 case Type::X86_FP80TyID
: Code
= bitc::TYPE_CODE_X86_FP80
; break;
210 case Type::FP128TyID
: Code
= bitc::TYPE_CODE_FP128
; break;
211 case Type::PPC_FP128TyID
: Code
= bitc::TYPE_CODE_PPC_FP128
; break;
212 case Type::LabelTyID
: Code
= bitc::TYPE_CODE_LABEL
; break;
213 case Type::OpaqueTyID
: Code
= bitc::TYPE_CODE_OPAQUE
; break;
214 case Type::MetadataTyID
: Code
= bitc::TYPE_CODE_METADATA
; break;
215 case Type::IntegerTyID
:
217 Code
= bitc::TYPE_CODE_INTEGER
;
218 TypeVals
.push_back(cast
<IntegerType
>(T
)->getBitWidth());
220 case Type::PointerTyID
: {
221 const PointerType
*PTy
= cast
<PointerType
>(T
);
222 // POINTER: [pointee type, address space]
223 Code
= bitc::TYPE_CODE_POINTER
;
224 TypeVals
.push_back(VE
.getTypeID(PTy
->getElementType()));
225 unsigned AddressSpace
= PTy
->getAddressSpace();
226 TypeVals
.push_back(AddressSpace
);
227 if (AddressSpace
== 0) AbbrevToUse
= PtrAbbrev
;
230 case Type::FunctionTyID
: {
231 const FunctionType
*FT
= cast
<FunctionType
>(T
);
232 // FUNCTION: [isvararg, attrid, retty, paramty x N]
233 Code
= bitc::TYPE_CODE_FUNCTION
;
234 TypeVals
.push_back(FT
->isVarArg());
235 TypeVals
.push_back(0); // FIXME: DEAD: remove in llvm 3.0
236 TypeVals
.push_back(VE
.getTypeID(FT
->getReturnType()));
237 for (unsigned i
= 0, e
= FT
->getNumParams(); i
!= e
; ++i
)
238 TypeVals
.push_back(VE
.getTypeID(FT
->getParamType(i
)));
239 AbbrevToUse
= FunctionAbbrev
;
242 case Type::StructTyID
: {
243 const StructType
*ST
= cast
<StructType
>(T
);
244 // STRUCT: [ispacked, eltty x N]
245 Code
= bitc::TYPE_CODE_STRUCT
;
246 TypeVals
.push_back(ST
->isPacked());
247 // Output all of the element types.
248 for (StructType::element_iterator I
= ST
->element_begin(),
249 E
= ST
->element_end(); I
!= E
; ++I
)
250 TypeVals
.push_back(VE
.getTypeID(*I
));
251 AbbrevToUse
= StructAbbrev
;
254 case Type::ArrayTyID
: {
255 const ArrayType
*AT
= cast
<ArrayType
>(T
);
256 // ARRAY: [numelts, eltty]
257 Code
= bitc::TYPE_CODE_ARRAY
;
258 TypeVals
.push_back(AT
->getNumElements());
259 TypeVals
.push_back(VE
.getTypeID(AT
->getElementType()));
260 AbbrevToUse
= ArrayAbbrev
;
263 case Type::VectorTyID
: {
264 const VectorType
*VT
= cast
<VectorType
>(T
);
265 // VECTOR [numelts, eltty]
266 Code
= bitc::TYPE_CODE_VECTOR
;
267 TypeVals
.push_back(VT
->getNumElements());
268 TypeVals
.push_back(VE
.getTypeID(VT
->getElementType()));
273 // Emit the finished record.
274 Stream
.EmitRecord(Code
, TypeVals
, AbbrevToUse
);
281 static unsigned getEncodedLinkage(const GlobalValue
*GV
) {
282 switch (GV
->getLinkage()) {
283 default: llvm_unreachable("Invalid linkage!");
284 case GlobalValue::GhostLinkage
: // Map ghost linkage onto external.
285 case GlobalValue::ExternalLinkage
: return 0;
286 case GlobalValue::WeakAnyLinkage
: return 1;
287 case GlobalValue::AppendingLinkage
: return 2;
288 case GlobalValue::InternalLinkage
: return 3;
289 case GlobalValue::LinkOnceAnyLinkage
: return 4;
290 case GlobalValue::DLLImportLinkage
: return 5;
291 case GlobalValue::DLLExportLinkage
: return 6;
292 case GlobalValue::ExternalWeakLinkage
: return 7;
293 case GlobalValue::CommonLinkage
: return 8;
294 case GlobalValue::PrivateLinkage
: return 9;
295 case GlobalValue::WeakODRLinkage
: return 10;
296 case GlobalValue::LinkOnceODRLinkage
: return 11;
297 case GlobalValue::AvailableExternallyLinkage
: return 12;
298 case GlobalValue::LinkerPrivateLinkage
: return 13;
302 static unsigned getEncodedVisibility(const GlobalValue
*GV
) {
303 switch (GV
->getVisibility()) {
304 default: llvm_unreachable("Invalid visibility!");
305 case GlobalValue::DefaultVisibility
: return 0;
306 case GlobalValue::HiddenVisibility
: return 1;
307 case GlobalValue::ProtectedVisibility
: return 2;
311 // Emit top-level description of module, including target triple, inline asm,
312 // descriptors for global variables, and function prototype info.
313 static void WriteModuleInfo(const Module
*M
, const ValueEnumerator
&VE
,
314 BitstreamWriter
&Stream
) {
315 // Emit the list of dependent libraries for the Module.
316 for (Module::lib_iterator I
= M
->lib_begin(), E
= M
->lib_end(); I
!= E
; ++I
)
317 WriteStringRecord(bitc::MODULE_CODE_DEPLIB
, *I
, 0/*TODO*/, Stream
);
319 // Emit various pieces of data attached to a module.
320 if (!M
->getTargetTriple().empty())
321 WriteStringRecord(bitc::MODULE_CODE_TRIPLE
, M
->getTargetTriple(),
323 if (!M
->getDataLayout().empty())
324 WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT
, M
->getDataLayout(),
326 if (!M
->getModuleInlineAsm().empty())
327 WriteStringRecord(bitc::MODULE_CODE_ASM
, M
->getModuleInlineAsm(),
330 // Emit information about sections and GC, computing how many there are. Also
331 // compute the maximum alignment value.
332 std::map
<std::string
, unsigned> SectionMap
;
333 std::map
<std::string
, unsigned> GCMap
;
334 unsigned MaxAlignment
= 0;
335 unsigned MaxGlobalType
= 0;
336 for (Module::const_global_iterator GV
= M
->global_begin(),E
= M
->global_end();
338 MaxAlignment
= std::max(MaxAlignment
, GV
->getAlignment());
339 MaxGlobalType
= std::max(MaxGlobalType
, VE
.getTypeID(GV
->getType()));
341 if (!GV
->hasSection()) continue;
342 // Give section names unique ID's.
343 unsigned &Entry
= SectionMap
[GV
->getSection()];
344 if (Entry
!= 0) continue;
345 WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME
, GV
->getSection(),
347 Entry
= SectionMap
.size();
349 for (Module::const_iterator F
= M
->begin(), E
= M
->end(); F
!= E
; ++F
) {
350 MaxAlignment
= std::max(MaxAlignment
, F
->getAlignment());
351 if (F
->hasSection()) {
352 // Give section names unique ID's.
353 unsigned &Entry
= SectionMap
[F
->getSection()];
355 WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME
, F
->getSection(),
357 Entry
= SectionMap
.size();
361 // Same for GC names.
362 unsigned &Entry
= GCMap
[F
->getGC()];
364 WriteStringRecord(bitc::MODULE_CODE_GCNAME
, F
->getGC(),
366 Entry
= GCMap
.size();
371 // Emit abbrev for globals, now that we know # sections and max alignment.
372 unsigned SimpleGVarAbbrev
= 0;
373 if (!M
->global_empty()) {
374 // Add an abbrev for common globals with no visibility or thread localness.
375 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
376 Abbv
->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR
));
377 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
378 Log2_32_Ceil(MaxGlobalType
+1)));
379 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 1)); // Constant.
380 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // Initializer.
381 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 4)); // Linkage.
382 if (MaxAlignment
== 0) // Alignment.
383 Abbv
->Add(BitCodeAbbrevOp(0));
385 unsigned MaxEncAlignment
= Log2_32(MaxAlignment
)+1;
386 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
387 Log2_32_Ceil(MaxEncAlignment
+1)));
389 if (SectionMap
.empty()) // Section.
390 Abbv
->Add(BitCodeAbbrevOp(0));
392 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
393 Log2_32_Ceil(SectionMap
.size()+1)));
394 // Don't bother emitting vis + thread local.
395 SimpleGVarAbbrev
= Stream
.EmitAbbrev(Abbv
);
398 // Emit the global variable information.
399 SmallVector
<unsigned, 64> Vals
;
400 for (Module::const_global_iterator GV
= M
->global_begin(),E
= M
->global_end();
402 unsigned AbbrevToUse
= 0;
404 // GLOBALVAR: [type, isconst, initid,
405 // linkage, alignment, section, visibility, threadlocal]
406 Vals
.push_back(VE
.getTypeID(GV
->getType()));
407 Vals
.push_back(GV
->isConstant());
408 Vals
.push_back(GV
->isDeclaration() ? 0 :
409 (VE
.getValueID(GV
->getInitializer()) + 1));
410 Vals
.push_back(getEncodedLinkage(GV
));
411 Vals
.push_back(Log2_32(GV
->getAlignment())+1);
412 Vals
.push_back(GV
->hasSection() ? SectionMap
[GV
->getSection()] : 0);
413 if (GV
->isThreadLocal() ||
414 GV
->getVisibility() != GlobalValue::DefaultVisibility
) {
415 Vals
.push_back(getEncodedVisibility(GV
));
416 Vals
.push_back(GV
->isThreadLocal());
418 AbbrevToUse
= SimpleGVarAbbrev
;
421 Stream
.EmitRecord(bitc::MODULE_CODE_GLOBALVAR
, Vals
, AbbrevToUse
);
425 // Emit the function proto information.
426 for (Module::const_iterator F
= M
->begin(), E
= M
->end(); F
!= E
; ++F
) {
427 // FUNCTION: [type, callingconv, isproto, paramattr,
428 // linkage, alignment, section, visibility, gc]
429 Vals
.push_back(VE
.getTypeID(F
->getType()));
430 Vals
.push_back(F
->getCallingConv());
431 Vals
.push_back(F
->isDeclaration());
432 Vals
.push_back(getEncodedLinkage(F
));
433 Vals
.push_back(VE
.getAttributeID(F
->getAttributes()));
434 Vals
.push_back(Log2_32(F
->getAlignment())+1);
435 Vals
.push_back(F
->hasSection() ? SectionMap
[F
->getSection()] : 0);
436 Vals
.push_back(getEncodedVisibility(F
));
437 Vals
.push_back(F
->hasGC() ? GCMap
[F
->getGC()] : 0);
439 unsigned AbbrevToUse
= 0;
440 Stream
.EmitRecord(bitc::MODULE_CODE_FUNCTION
, Vals
, AbbrevToUse
);
445 // Emit the alias information.
446 for (Module::const_alias_iterator AI
= M
->alias_begin(), E
= M
->alias_end();
448 Vals
.push_back(VE
.getTypeID(AI
->getType()));
449 Vals
.push_back(VE
.getValueID(AI
->getAliasee()));
450 Vals
.push_back(getEncodedLinkage(AI
));
451 Vals
.push_back(getEncodedVisibility(AI
));
452 unsigned AbbrevToUse
= 0;
453 Stream
.EmitRecord(bitc::MODULE_CODE_ALIAS
, Vals
, AbbrevToUse
);
458 static uint64_t GetOptimizationFlags(const Value
*V
) {
461 if (const OverflowingBinaryOperator
*OBO
=
462 dyn_cast
<OverflowingBinaryOperator
>(V
)) {
463 if (OBO
->hasNoSignedWrap())
464 Flags
|= 1 << bitc::OBO_NO_SIGNED_WRAP
;
465 if (OBO
->hasNoUnsignedWrap())
466 Flags
|= 1 << bitc::OBO_NO_UNSIGNED_WRAP
;
467 } else if (const SDivOperator
*Div
= dyn_cast
<SDivOperator
>(V
)) {
469 Flags
|= 1 << bitc::SDIV_EXACT
;
475 static void WriteMDNode(const MDNode
*N
,
476 const ValueEnumerator
&VE
,
477 BitstreamWriter
&Stream
,
478 SmallVector
<uint64_t, 64> &Record
) {
479 for (unsigned i
= 0, e
= N
->getNumElements(); i
!= e
; ++i
) {
480 if (N
->getElement(i
)) {
481 Record
.push_back(VE
.getTypeID(N
->getElement(i
)->getType()));
482 Record
.push_back(VE
.getValueID(N
->getElement(i
)));
484 Record
.push_back(VE
.getTypeID(Type::getVoidTy(N
->getContext())));
488 Stream
.EmitRecord(bitc::METADATA_NODE
, Record
, 0);
492 static void WriteModuleMetadata(const ValueEnumerator
&VE
,
493 BitstreamWriter
&Stream
) {
494 const ValueEnumerator::ValueList
&Vals
= VE
.getMDValues();
495 bool StartedMetadataBlock
= false;
496 unsigned MDSAbbrev
= 0;
497 SmallVector
<uint64_t, 64> Record
;
498 for (unsigned i
= 0, e
= Vals
.size(); i
!= e
; ++i
) {
500 if (const MDNode
*N
= dyn_cast
<MDNode
>(Vals
[i
].first
)) {
501 if (!StartedMetadataBlock
) {
502 Stream
.EnterSubblock(bitc::METADATA_BLOCK_ID
, 3);
503 StartedMetadataBlock
= true;
505 WriteMDNode(N
, VE
, Stream
, Record
);
506 } else if (const MDString
*MDS
= dyn_cast
<MDString
>(Vals
[i
].first
)) {
507 if (!StartedMetadataBlock
) {
508 Stream
.EnterSubblock(bitc::METADATA_BLOCK_ID
, 3);
510 // Abbrev for METADATA_STRING.
511 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
512 Abbv
->Add(BitCodeAbbrevOp(bitc::METADATA_STRING
));
513 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
514 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 8));
515 MDSAbbrev
= Stream
.EmitAbbrev(Abbv
);
516 StartedMetadataBlock
= true;
519 // Code: [strchar x N]
520 const char *StrBegin
= MDS
->begin();
521 for (unsigned i
= 0, e
= MDS
->length(); i
!= e
; ++i
)
522 Record
.push_back(StrBegin
[i
]);
524 // Emit the finished record.
525 Stream
.EmitRecord(bitc::METADATA_STRING
, Record
, MDSAbbrev
);
527 } else if (const NamedMDNode
*NMD
= dyn_cast
<NamedMDNode
>(Vals
[i
].first
)) {
528 if (!StartedMetadataBlock
) {
529 Stream
.EnterSubblock(bitc::METADATA_BLOCK_ID
, 3);
530 StartedMetadataBlock
= true;
534 std::string Str
= NMD
->getNameStr();
535 const char *StrBegin
= Str
.c_str();
536 for (unsigned i
= 0, e
= Str
.length(); i
!= e
; ++i
)
537 Record
.push_back(StrBegin
[i
]);
538 Stream
.EmitRecord(bitc::METADATA_NAME
, Record
, 0/*TODO*/);
541 // Write named metadata elements.
542 for (unsigned i
= 0, e
= NMD
->getNumElements(); i
!= e
; ++i
) {
543 if (NMD
->getElement(i
))
544 Record
.push_back(VE
.getValueID(NMD
->getElement(i
)));
548 Stream
.EmitRecord(bitc::METADATA_NAMED_NODE
, Record
, 0);
553 if (StartedMetadataBlock
)
557 static void WriteConstants(unsigned FirstVal
, unsigned LastVal
,
558 const ValueEnumerator
&VE
,
559 BitstreamWriter
&Stream
, bool isGlobal
) {
560 if (FirstVal
== LastVal
) return;
562 Stream
.EnterSubblock(bitc::CONSTANTS_BLOCK_ID
, 4);
564 unsigned AggregateAbbrev
= 0;
565 unsigned String8Abbrev
= 0;
566 unsigned CString7Abbrev
= 0;
567 unsigned CString6Abbrev
= 0;
568 // If this is a constant pool for the module, emit module-specific abbrevs.
570 // Abbrev for CST_CODE_AGGREGATE.
571 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
572 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE
));
573 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
574 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, Log2_32_Ceil(LastVal
+1)));
575 AggregateAbbrev
= Stream
.EmitAbbrev(Abbv
);
577 // Abbrev for CST_CODE_STRING.
578 Abbv
= new BitCodeAbbrev();
579 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING
));
580 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
581 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 8));
582 String8Abbrev
= Stream
.EmitAbbrev(Abbv
);
583 // Abbrev for CST_CODE_CSTRING.
584 Abbv
= new BitCodeAbbrev();
585 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING
));
586 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
587 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 7));
588 CString7Abbrev
= Stream
.EmitAbbrev(Abbv
);
589 // Abbrev for CST_CODE_CSTRING.
590 Abbv
= new BitCodeAbbrev();
591 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING
));
592 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
593 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6
));
594 CString6Abbrev
= Stream
.EmitAbbrev(Abbv
);
597 SmallVector
<uint64_t, 64> Record
;
599 const ValueEnumerator::ValueList
&Vals
= VE
.getValues();
600 const Type
*LastTy
= 0;
601 for (unsigned i
= FirstVal
; i
!= LastVal
; ++i
) {
602 const Value
*V
= Vals
[i
].first
;
603 // If we need to switch types, do so now.
604 if (V
->getType() != LastTy
) {
605 LastTy
= V
->getType();
606 Record
.push_back(VE
.getTypeID(LastTy
));
607 Stream
.EmitRecord(bitc::CST_CODE_SETTYPE
, Record
,
608 CONSTANTS_SETTYPE_ABBREV
);
612 if (const InlineAsm
*IA
= dyn_cast
<InlineAsm
>(V
)) {
613 Record
.push_back(unsigned(IA
->hasSideEffects()));
615 // Add the asm string.
616 const std::string
&AsmStr
= IA
->getAsmString();
617 Record
.push_back(AsmStr
.size());
618 for (unsigned i
= 0, e
= AsmStr
.size(); i
!= e
; ++i
)
619 Record
.push_back(AsmStr
[i
]);
621 // Add the constraint string.
622 const std::string
&ConstraintStr
= IA
->getConstraintString();
623 Record
.push_back(ConstraintStr
.size());
624 for (unsigned i
= 0, e
= ConstraintStr
.size(); i
!= e
; ++i
)
625 Record
.push_back(ConstraintStr
[i
]);
626 Stream
.EmitRecord(bitc::CST_CODE_INLINEASM
, Record
);
630 const Constant
*C
= cast
<Constant
>(V
);
632 unsigned AbbrevToUse
= 0;
633 if (C
->isNullValue()) {
634 Code
= bitc::CST_CODE_NULL
;
635 } else if (isa
<UndefValue
>(C
)) {
636 Code
= bitc::CST_CODE_UNDEF
;
637 } else if (const ConstantInt
*IV
= dyn_cast
<ConstantInt
>(C
)) {
638 if (IV
->getBitWidth() <= 64) {
639 int64_t V
= IV
->getSExtValue();
641 Record
.push_back(V
<< 1);
643 Record
.push_back((-V
<< 1) | 1);
644 Code
= bitc::CST_CODE_INTEGER
;
645 AbbrevToUse
= CONSTANTS_INTEGER_ABBREV
;
646 } else { // Wide integers, > 64 bits in size.
647 // We have an arbitrary precision integer value to write whose
648 // bit width is > 64. However, in canonical unsigned integer
649 // format it is likely that the high bits are going to be zero.
650 // So, we only write the number of active words.
651 unsigned NWords
= IV
->getValue().getActiveWords();
652 const uint64_t *RawWords
= IV
->getValue().getRawData();
653 for (unsigned i
= 0; i
!= NWords
; ++i
) {
654 int64_t V
= RawWords
[i
];
656 Record
.push_back(V
<< 1);
658 Record
.push_back((-V
<< 1) | 1);
660 Code
= bitc::CST_CODE_WIDE_INTEGER
;
662 } else if (const ConstantFP
*CFP
= dyn_cast
<ConstantFP
>(C
)) {
663 Code
= bitc::CST_CODE_FLOAT
;
664 const Type
*Ty
= CFP
->getType();
665 if (Ty
== Type::getFloatTy(Ty
->getContext()) ||
666 Ty
== Type::getDoubleTy(Ty
->getContext())) {
667 Record
.push_back(CFP
->getValueAPF().bitcastToAPInt().getZExtValue());
668 } else if (Ty
== Type::getX86_FP80Ty(Ty
->getContext())) {
669 // api needed to prevent premature destruction
670 // bits are not in the same order as a normal i80 APInt, compensate.
671 APInt api
= CFP
->getValueAPF().bitcastToAPInt();
672 const uint64_t *p
= api
.getRawData();
673 Record
.push_back((p
[1] << 48) | (p
[0] >> 16));
674 Record
.push_back(p
[0] & 0xffffLL
);
675 } else if (Ty
== Type::getFP128Ty(Ty
->getContext()) ||
676 Ty
== Type::getPPC_FP128Ty(Ty
->getContext())) {
677 APInt api
= CFP
->getValueAPF().bitcastToAPInt();
678 const uint64_t *p
= api
.getRawData();
679 Record
.push_back(p
[0]);
680 Record
.push_back(p
[1]);
682 assert (0 && "Unknown FP type!");
684 } else if (isa
<ConstantArray
>(C
) && cast
<ConstantArray
>(C
)->isString()) {
685 // Emit constant strings specially.
686 unsigned NumOps
= C
->getNumOperands();
687 // If this is a null-terminated string, use the denser CSTRING encoding.
688 if (C
->getOperand(NumOps
-1)->isNullValue()) {
689 Code
= bitc::CST_CODE_CSTRING
;
690 --NumOps
; // Don't encode the null, which isn't allowed by char6.
692 Code
= bitc::CST_CODE_STRING
;
693 AbbrevToUse
= String8Abbrev
;
695 bool isCStr7
= Code
== bitc::CST_CODE_CSTRING
;
696 bool isCStrChar6
= Code
== bitc::CST_CODE_CSTRING
;
697 for (unsigned i
= 0; i
!= NumOps
; ++i
) {
698 unsigned char V
= cast
<ConstantInt
>(C
->getOperand(i
))->getZExtValue();
700 isCStr7
&= (V
& 128) == 0;
702 isCStrChar6
= BitCodeAbbrevOp::isChar6(V
);
706 AbbrevToUse
= CString6Abbrev
;
708 AbbrevToUse
= CString7Abbrev
;
709 } else if (isa
<ConstantArray
>(C
) || isa
<ConstantStruct
>(V
) ||
710 isa
<ConstantVector
>(V
)) {
711 Code
= bitc::CST_CODE_AGGREGATE
;
712 for (unsigned i
= 0, e
= C
->getNumOperands(); i
!= e
; ++i
)
713 Record
.push_back(VE
.getValueID(C
->getOperand(i
)));
714 AbbrevToUse
= AggregateAbbrev
;
715 } else if (const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(C
)) {
716 switch (CE
->getOpcode()) {
718 if (Instruction::isCast(CE
->getOpcode())) {
719 Code
= bitc::CST_CODE_CE_CAST
;
720 Record
.push_back(GetEncodedCastOpcode(CE
->getOpcode()));
721 Record
.push_back(VE
.getTypeID(C
->getOperand(0)->getType()));
722 Record
.push_back(VE
.getValueID(C
->getOperand(0)));
723 AbbrevToUse
= CONSTANTS_CE_CAST_Abbrev
;
725 assert(CE
->getNumOperands() == 2 && "Unknown constant expr!");
726 Code
= bitc::CST_CODE_CE_BINOP
;
727 Record
.push_back(GetEncodedBinaryOpcode(CE
->getOpcode()));
728 Record
.push_back(VE
.getValueID(C
->getOperand(0)));
729 Record
.push_back(VE
.getValueID(C
->getOperand(1)));
730 uint64_t Flags
= GetOptimizationFlags(CE
);
732 Record
.push_back(Flags
);
735 case Instruction::GetElementPtr
:
736 Code
= bitc::CST_CODE_CE_GEP
;
737 if (cast
<GEPOperator
>(C
)->isInBounds())
738 Code
= bitc::CST_CODE_CE_INBOUNDS_GEP
;
739 for (unsigned i
= 0, e
= CE
->getNumOperands(); i
!= e
; ++i
) {
740 Record
.push_back(VE
.getTypeID(C
->getOperand(i
)->getType()));
741 Record
.push_back(VE
.getValueID(C
->getOperand(i
)));
744 case Instruction::Select
:
745 Code
= bitc::CST_CODE_CE_SELECT
;
746 Record
.push_back(VE
.getValueID(C
->getOperand(0)));
747 Record
.push_back(VE
.getValueID(C
->getOperand(1)));
748 Record
.push_back(VE
.getValueID(C
->getOperand(2)));
750 case Instruction::ExtractElement
:
751 Code
= bitc::CST_CODE_CE_EXTRACTELT
;
752 Record
.push_back(VE
.getTypeID(C
->getOperand(0)->getType()));
753 Record
.push_back(VE
.getValueID(C
->getOperand(0)));
754 Record
.push_back(VE
.getValueID(C
->getOperand(1)));
756 case Instruction::InsertElement
:
757 Code
= bitc::CST_CODE_CE_INSERTELT
;
758 Record
.push_back(VE
.getValueID(C
->getOperand(0)));
759 Record
.push_back(VE
.getValueID(C
->getOperand(1)));
760 Record
.push_back(VE
.getValueID(C
->getOperand(2)));
762 case Instruction::ShuffleVector
:
763 // If the return type and argument types are the same, this is a
764 // standard shufflevector instruction. If the types are different,
765 // then the shuffle is widening or truncating the input vectors, and
766 // the argument type must also be encoded.
767 if (C
->getType() == C
->getOperand(0)->getType()) {
768 Code
= bitc::CST_CODE_CE_SHUFFLEVEC
;
770 Code
= bitc::CST_CODE_CE_SHUFVEC_EX
;
771 Record
.push_back(VE
.getTypeID(C
->getOperand(0)->getType()));
773 Record
.push_back(VE
.getValueID(C
->getOperand(0)));
774 Record
.push_back(VE
.getValueID(C
->getOperand(1)));
775 Record
.push_back(VE
.getValueID(C
->getOperand(2)));
777 case Instruction::ICmp
:
778 case Instruction::FCmp
:
779 Code
= bitc::CST_CODE_CE_CMP
;
780 Record
.push_back(VE
.getTypeID(C
->getOperand(0)->getType()));
781 Record
.push_back(VE
.getValueID(C
->getOperand(0)));
782 Record
.push_back(VE
.getValueID(C
->getOperand(1)));
783 Record
.push_back(CE
->getPredicate());
787 llvm_unreachable("Unknown constant!");
789 Stream
.EmitRecord(Code
, Record
, AbbrevToUse
);
796 static void WriteModuleConstants(const ValueEnumerator
&VE
,
797 BitstreamWriter
&Stream
) {
798 const ValueEnumerator::ValueList
&Vals
= VE
.getValues();
800 // Find the first constant to emit, which is the first non-globalvalue value.
801 // We know globalvalues have been emitted by WriteModuleInfo.
802 for (unsigned i
= 0, e
= Vals
.size(); i
!= e
; ++i
) {
803 if (!isa
<GlobalValue
>(Vals
[i
].first
)) {
804 WriteConstants(i
, Vals
.size(), VE
, Stream
, true);
810 /// PushValueAndType - The file has to encode both the value and type id for
811 /// many values, because we need to know what type to create for forward
812 /// references. However, most operands are not forward references, so this type
813 /// field is not needed.
815 /// This function adds V's value ID to Vals. If the value ID is higher than the
816 /// instruction ID, then it is a forward reference, and it also includes the
818 static bool PushValueAndType(const Value
*V
, unsigned InstID
,
819 SmallVector
<unsigned, 64> &Vals
,
820 ValueEnumerator
&VE
) {
821 unsigned ValID
= VE
.getValueID(V
);
822 Vals
.push_back(ValID
);
823 if (ValID
>= InstID
) {
824 Vals
.push_back(VE
.getTypeID(V
->getType()));
830 /// WriteInstruction - Emit an instruction to the specified stream.
831 static void WriteInstruction(const Instruction
&I
, unsigned InstID
,
832 ValueEnumerator
&VE
, BitstreamWriter
&Stream
,
833 SmallVector
<unsigned, 64> &Vals
) {
835 unsigned AbbrevToUse
= 0;
836 switch (I
.getOpcode()) {
838 if (Instruction::isCast(I
.getOpcode())) {
839 Code
= bitc::FUNC_CODE_INST_CAST
;
840 if (!PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
))
841 AbbrevToUse
= FUNCTION_INST_CAST_ABBREV
;
842 Vals
.push_back(VE
.getTypeID(I
.getType()));
843 Vals
.push_back(GetEncodedCastOpcode(I
.getOpcode()));
845 assert(isa
<BinaryOperator
>(I
) && "Unknown instruction!");
846 Code
= bitc::FUNC_CODE_INST_BINOP
;
847 if (!PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
))
848 AbbrevToUse
= FUNCTION_INST_BINOP_ABBREV
;
849 Vals
.push_back(VE
.getValueID(I
.getOperand(1)));
850 Vals
.push_back(GetEncodedBinaryOpcode(I
.getOpcode()));
851 uint64_t Flags
= GetOptimizationFlags(&I
);
853 if (AbbrevToUse
== FUNCTION_INST_BINOP_ABBREV
)
854 AbbrevToUse
= FUNCTION_INST_BINOP_FLAGS_ABBREV
;
855 Vals
.push_back(Flags
);
860 case Instruction::GetElementPtr
:
861 Code
= bitc::FUNC_CODE_INST_GEP
;
862 if (cast
<GEPOperator
>(&I
)->isInBounds())
863 Code
= bitc::FUNC_CODE_INST_INBOUNDS_GEP
;
864 for (unsigned i
= 0, e
= I
.getNumOperands(); i
!= e
; ++i
)
865 PushValueAndType(I
.getOperand(i
), InstID
, Vals
, VE
);
867 case Instruction::ExtractValue
: {
868 Code
= bitc::FUNC_CODE_INST_EXTRACTVAL
;
869 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
870 const ExtractValueInst
*EVI
= cast
<ExtractValueInst
>(&I
);
871 for (const unsigned *i
= EVI
->idx_begin(), *e
= EVI
->idx_end(); i
!= e
; ++i
)
875 case Instruction::InsertValue
: {
876 Code
= bitc::FUNC_CODE_INST_INSERTVAL
;
877 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
878 PushValueAndType(I
.getOperand(1), InstID
, Vals
, VE
);
879 const InsertValueInst
*IVI
= cast
<InsertValueInst
>(&I
);
880 for (const unsigned *i
= IVI
->idx_begin(), *e
= IVI
->idx_end(); i
!= e
; ++i
)
884 case Instruction::Select
:
885 Code
= bitc::FUNC_CODE_INST_VSELECT
;
886 PushValueAndType(I
.getOperand(1), InstID
, Vals
, VE
);
887 Vals
.push_back(VE
.getValueID(I
.getOperand(2)));
888 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
890 case Instruction::ExtractElement
:
891 Code
= bitc::FUNC_CODE_INST_EXTRACTELT
;
892 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
893 Vals
.push_back(VE
.getValueID(I
.getOperand(1)));
895 case Instruction::InsertElement
:
896 Code
= bitc::FUNC_CODE_INST_INSERTELT
;
897 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
898 Vals
.push_back(VE
.getValueID(I
.getOperand(1)));
899 Vals
.push_back(VE
.getValueID(I
.getOperand(2)));
901 case Instruction::ShuffleVector
:
902 Code
= bitc::FUNC_CODE_INST_SHUFFLEVEC
;
903 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
904 Vals
.push_back(VE
.getValueID(I
.getOperand(1)));
905 Vals
.push_back(VE
.getValueID(I
.getOperand(2)));
907 case Instruction::ICmp
:
908 case Instruction::FCmp
:
909 // compare returning Int1Ty or vector of Int1Ty
910 Code
= bitc::FUNC_CODE_INST_CMP2
;
911 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
912 Vals
.push_back(VE
.getValueID(I
.getOperand(1)));
913 Vals
.push_back(cast
<CmpInst
>(I
).getPredicate());
916 case Instruction::Ret
:
918 Code
= bitc::FUNC_CODE_INST_RET
;
919 unsigned NumOperands
= I
.getNumOperands();
920 if (NumOperands
== 0)
921 AbbrevToUse
= FUNCTION_INST_RET_VOID_ABBREV
;
922 else if (NumOperands
== 1) {
923 if (!PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
))
924 AbbrevToUse
= FUNCTION_INST_RET_VAL_ABBREV
;
926 for (unsigned i
= 0, e
= NumOperands
; i
!= e
; ++i
)
927 PushValueAndType(I
.getOperand(i
), InstID
, Vals
, VE
);
931 case Instruction::Br
:
933 Code
= bitc::FUNC_CODE_INST_BR
;
934 BranchInst
&II(cast
<BranchInst
>(I
));
935 Vals
.push_back(VE
.getValueID(II
.getSuccessor(0)));
936 if (II
.isConditional()) {
937 Vals
.push_back(VE
.getValueID(II
.getSuccessor(1)));
938 Vals
.push_back(VE
.getValueID(II
.getCondition()));
942 case Instruction::Switch
:
943 Code
= bitc::FUNC_CODE_INST_SWITCH
;
944 Vals
.push_back(VE
.getTypeID(I
.getOperand(0)->getType()));
945 for (unsigned i
= 0, e
= I
.getNumOperands(); i
!= e
; ++i
)
946 Vals
.push_back(VE
.getValueID(I
.getOperand(i
)));
948 case Instruction::Invoke
: {
949 const InvokeInst
*II
= cast
<InvokeInst
>(&I
);
950 const Value
*Callee(II
->getCalledValue());
951 const PointerType
*PTy
= cast
<PointerType
>(Callee
->getType());
952 const FunctionType
*FTy
= cast
<FunctionType
>(PTy
->getElementType());
953 Code
= bitc::FUNC_CODE_INST_INVOKE
;
955 Vals
.push_back(VE
.getAttributeID(II
->getAttributes()));
956 Vals
.push_back(II
->getCallingConv());
957 Vals
.push_back(VE
.getValueID(II
->getNormalDest()));
958 Vals
.push_back(VE
.getValueID(II
->getUnwindDest()));
959 PushValueAndType(Callee
, InstID
, Vals
, VE
);
961 // Emit value #'s for the fixed parameters.
962 for (unsigned i
= 0, e
= FTy
->getNumParams(); i
!= e
; ++i
)
963 Vals
.push_back(VE
.getValueID(I
.getOperand(i
+3))); // fixed param.
965 // Emit type/value pairs for varargs params.
966 if (FTy
->isVarArg()) {
967 for (unsigned i
= 3+FTy
->getNumParams(), e
= I
.getNumOperands();
969 PushValueAndType(I
.getOperand(i
), InstID
, Vals
, VE
); // vararg
973 case Instruction::Unwind
:
974 Code
= bitc::FUNC_CODE_INST_UNWIND
;
976 case Instruction::Unreachable
:
977 Code
= bitc::FUNC_CODE_INST_UNREACHABLE
;
978 AbbrevToUse
= FUNCTION_INST_UNREACHABLE_ABBREV
;
981 case Instruction::PHI
:
982 Code
= bitc::FUNC_CODE_INST_PHI
;
983 Vals
.push_back(VE
.getTypeID(I
.getType()));
984 for (unsigned i
= 0, e
= I
.getNumOperands(); i
!= e
; ++i
)
985 Vals
.push_back(VE
.getValueID(I
.getOperand(i
)));
988 case Instruction::Malloc
:
989 Code
= bitc::FUNC_CODE_INST_MALLOC
;
990 Vals
.push_back(VE
.getTypeID(I
.getType()));
991 Vals
.push_back(VE
.getValueID(I
.getOperand(0))); // size.
992 Vals
.push_back(Log2_32(cast
<MallocInst
>(I
).getAlignment())+1);
995 case Instruction::Free
:
996 Code
= bitc::FUNC_CODE_INST_FREE
;
997 PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
);
1000 case Instruction::Alloca
:
1001 Code
= bitc::FUNC_CODE_INST_ALLOCA
;
1002 Vals
.push_back(VE
.getTypeID(I
.getType()));
1003 Vals
.push_back(VE
.getValueID(I
.getOperand(0))); // size.
1004 Vals
.push_back(Log2_32(cast
<AllocaInst
>(I
).getAlignment())+1);
1007 case Instruction::Load
:
1008 Code
= bitc::FUNC_CODE_INST_LOAD
;
1009 if (!PushValueAndType(I
.getOperand(0), InstID
, Vals
, VE
)) // ptr
1010 AbbrevToUse
= FUNCTION_INST_LOAD_ABBREV
;
1012 Vals
.push_back(Log2_32(cast
<LoadInst
>(I
).getAlignment())+1);
1013 Vals
.push_back(cast
<LoadInst
>(I
).isVolatile());
1015 case Instruction::Store
:
1016 Code
= bitc::FUNC_CODE_INST_STORE2
;
1017 PushValueAndType(I
.getOperand(1), InstID
, Vals
, VE
); // ptrty + ptr
1018 Vals
.push_back(VE
.getValueID(I
.getOperand(0))); // val.
1019 Vals
.push_back(Log2_32(cast
<StoreInst
>(I
).getAlignment())+1);
1020 Vals
.push_back(cast
<StoreInst
>(I
).isVolatile());
1022 case Instruction::Call
: {
1023 const PointerType
*PTy
= cast
<PointerType
>(I
.getOperand(0)->getType());
1024 const FunctionType
*FTy
= cast
<FunctionType
>(PTy
->getElementType());
1026 Code
= bitc::FUNC_CODE_INST_CALL
;
1028 const CallInst
*CI
= cast
<CallInst
>(&I
);
1029 Vals
.push_back(VE
.getAttributeID(CI
->getAttributes()));
1030 Vals
.push_back((CI
->getCallingConv() << 1) | unsigned(CI
->isTailCall()));
1031 PushValueAndType(CI
->getOperand(0), InstID
, Vals
, VE
); // Callee
1033 // Emit value #'s for the fixed parameters.
1034 for (unsigned i
= 0, e
= FTy
->getNumParams(); i
!= e
; ++i
)
1035 Vals
.push_back(VE
.getValueID(I
.getOperand(i
+1))); // fixed param.
1037 // Emit type/value pairs for varargs params.
1038 if (FTy
->isVarArg()) {
1039 unsigned NumVarargs
= I
.getNumOperands()-1-FTy
->getNumParams();
1040 for (unsigned i
= I
.getNumOperands()-NumVarargs
, e
= I
.getNumOperands();
1042 PushValueAndType(I
.getOperand(i
), InstID
, Vals
, VE
); // varargs
1046 case Instruction::VAArg
:
1047 Code
= bitc::FUNC_CODE_INST_VAARG
;
1048 Vals
.push_back(VE
.getTypeID(I
.getOperand(0)->getType())); // valistty
1049 Vals
.push_back(VE
.getValueID(I
.getOperand(0))); // valist.
1050 Vals
.push_back(VE
.getTypeID(I
.getType())); // restype.
1054 Stream
.EmitRecord(Code
, Vals
, AbbrevToUse
);
1058 // Emit names for globals/functions etc.
1059 static void WriteValueSymbolTable(const ValueSymbolTable
&VST
,
1060 const ValueEnumerator
&VE
,
1061 BitstreamWriter
&Stream
) {
1062 if (VST
.empty()) return;
1063 Stream
.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID
, 4);
1065 // FIXME: Set up the abbrev, we know how many values there are!
1066 // FIXME: We know if the type names can use 7-bit ascii.
1067 SmallVector
<unsigned, 64> NameVals
;
1069 for (ValueSymbolTable::const_iterator SI
= VST
.begin(), SE
= VST
.end();
1072 const ValueName
&Name
= *SI
;
1074 // Figure out the encoding to use for the name.
1076 bool isChar6
= true;
1077 for (const char *C
= Name
.getKeyData(), *E
= C
+Name
.getKeyLength();
1080 isChar6
= BitCodeAbbrevOp::isChar6(*C
);
1081 if ((unsigned char)*C
& 128) {
1083 break; // don't bother scanning the rest.
1087 unsigned AbbrevToUse
= VST_ENTRY_8_ABBREV
;
1089 // VST_ENTRY: [valueid, namechar x N]
1090 // VST_BBENTRY: [bbid, namechar x N]
1092 if (isa
<BasicBlock
>(SI
->getValue())) {
1093 Code
= bitc::VST_CODE_BBENTRY
;
1095 AbbrevToUse
= VST_BBENTRY_6_ABBREV
;
1097 Code
= bitc::VST_CODE_ENTRY
;
1099 AbbrevToUse
= VST_ENTRY_6_ABBREV
;
1101 AbbrevToUse
= VST_ENTRY_7_ABBREV
;
1104 NameVals
.push_back(VE
.getValueID(SI
->getValue()));
1105 for (const char *P
= Name
.getKeyData(),
1106 *E
= Name
.getKeyData()+Name
.getKeyLength(); P
!= E
; ++P
)
1107 NameVals
.push_back((unsigned char)*P
);
1109 // Emit the finished record.
1110 Stream
.EmitRecord(Code
, NameVals
, AbbrevToUse
);
1116 /// WriteFunction - Emit a function body to the module stream.
1117 static void WriteFunction(const Function
&F
, ValueEnumerator
&VE
,
1118 BitstreamWriter
&Stream
) {
1119 Stream
.EnterSubblock(bitc::FUNCTION_BLOCK_ID
, 4);
1120 VE
.incorporateFunction(F
);
1122 SmallVector
<unsigned, 64> Vals
;
1124 // Emit the number of basic blocks, so the reader can create them ahead of
1126 Vals
.push_back(VE
.getBasicBlocks().size());
1127 Stream
.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS
, Vals
);
1130 // If there are function-local constants, emit them now.
1131 unsigned CstStart
, CstEnd
;
1132 VE
.getFunctionConstantRange(CstStart
, CstEnd
);
1133 WriteConstants(CstStart
, CstEnd
, VE
, Stream
, false);
1135 // Keep a running idea of what the instruction ID is.
1136 unsigned InstID
= CstEnd
;
1138 // Finally, emit all the instructions, in order.
1139 for (Function::const_iterator BB
= F
.begin(), E
= F
.end(); BB
!= E
; ++BB
)
1140 for (BasicBlock::const_iterator I
= BB
->begin(), E
= BB
->end();
1142 WriteInstruction(*I
, InstID
, VE
, Stream
, Vals
);
1143 if (I
->getType() != Type::getVoidTy(F
.getContext()))
1147 // Emit names for all the instructions etc.
1148 WriteValueSymbolTable(F
.getValueSymbolTable(), VE
, Stream
);
1154 /// WriteTypeSymbolTable - Emit a block for the specified type symtab.
1155 static void WriteTypeSymbolTable(const TypeSymbolTable
&TST
,
1156 const ValueEnumerator
&VE
,
1157 BitstreamWriter
&Stream
) {
1158 if (TST
.empty()) return;
1160 Stream
.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID
, 3);
1162 // 7-bit fixed width VST_CODE_ENTRY strings.
1163 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1164 Abbv
->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY
));
1165 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
1166 Log2_32_Ceil(VE
.getTypes().size()+1)));
1167 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
1168 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 7));
1169 unsigned V7Abbrev
= Stream
.EmitAbbrev(Abbv
);
1171 SmallVector
<unsigned, 64> NameVals
;
1173 for (TypeSymbolTable::const_iterator TI
= TST
.begin(), TE
= TST
.end();
1175 // TST_ENTRY: [typeid, namechar x N]
1176 NameVals
.push_back(VE
.getTypeID(TI
->second
));
1178 const std::string
&Str
= TI
->first
;
1180 for (unsigned i
= 0, e
= Str
.size(); i
!= e
; ++i
) {
1181 NameVals
.push_back((unsigned char)Str
[i
]);
1186 // Emit the finished record.
1187 Stream
.EmitRecord(bitc::VST_CODE_ENTRY
, NameVals
, is7Bit
? V7Abbrev
: 0);
1194 // Emit blockinfo, which defines the standard abbreviations etc.
1195 static void WriteBlockInfo(const ValueEnumerator
&VE
, BitstreamWriter
&Stream
) {
1196 // We only want to emit block info records for blocks that have multiple
1197 // instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK. Other
1198 // blocks can defined their abbrevs inline.
1199 Stream
.EnterBlockInfoBlock(2);
1201 { // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings.
1202 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1203 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 3));
1204 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 8));
1205 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
1206 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 8));
1207 if (Stream
.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID
,
1208 Abbv
) != VST_ENTRY_8_ABBREV
)
1209 llvm_unreachable("Unexpected abbrev ordering!");
1212 { // 7-bit fixed width VST_ENTRY strings.
1213 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1214 Abbv
->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY
));
1215 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 8));
1216 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
1217 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 7));
1218 if (Stream
.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID
,
1219 Abbv
) != VST_ENTRY_7_ABBREV
)
1220 llvm_unreachable("Unexpected abbrev ordering!");
1222 { // 6-bit char6 VST_ENTRY strings.
1223 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1224 Abbv
->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY
));
1225 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 8));
1226 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
1227 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6
));
1228 if (Stream
.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID
,
1229 Abbv
) != VST_ENTRY_6_ABBREV
)
1230 llvm_unreachable("Unexpected abbrev ordering!");
1232 { // 6-bit char6 VST_BBENTRY strings.
1233 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1234 Abbv
->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY
));
1235 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 8));
1236 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array
));
1237 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6
));
1238 if (Stream
.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID
,
1239 Abbv
) != VST_BBENTRY_6_ABBREV
)
1240 llvm_unreachable("Unexpected abbrev ordering!");
1245 { // SETTYPE abbrev for CONSTANTS_BLOCK.
1246 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1247 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE
));
1248 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
,
1249 Log2_32_Ceil(VE
.getTypes().size()+1)));
1250 if (Stream
.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID
,
1251 Abbv
) != CONSTANTS_SETTYPE_ABBREV
)
1252 llvm_unreachable("Unexpected abbrev ordering!");
1255 { // INTEGER abbrev for CONSTANTS_BLOCK.
1256 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1257 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER
));
1258 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 8));
1259 if (Stream
.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID
,
1260 Abbv
) != CONSTANTS_INTEGER_ABBREV
)
1261 llvm_unreachable("Unexpected abbrev ordering!");
1264 { // CE_CAST abbrev for CONSTANTS_BLOCK.
1265 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1266 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST
));
1267 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 4)); // cast opc
1268 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, // typeid
1269 Log2_32_Ceil(VE
.getTypes().size()+1)));
1270 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 8)); // value id
1272 if (Stream
.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID
,
1273 Abbv
) != CONSTANTS_CE_CAST_Abbrev
)
1274 llvm_unreachable("Unexpected abbrev ordering!");
1276 { // NULL abbrev for CONSTANTS_BLOCK.
1277 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1278 Abbv
->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL
));
1279 if (Stream
.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID
,
1280 Abbv
) != CONSTANTS_NULL_Abbrev
)
1281 llvm_unreachable("Unexpected abbrev ordering!");
1284 // FIXME: This should only use space for first class types!
1286 { // INST_LOAD abbrev for FUNCTION_BLOCK.
1287 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1288 Abbv
->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD
));
1289 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // Ptr
1290 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 4)); // Align
1291 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 1)); // volatile
1292 if (Stream
.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID
,
1293 Abbv
) != FUNCTION_INST_LOAD_ABBREV
)
1294 llvm_unreachable("Unexpected abbrev ordering!");
1296 { // INST_BINOP abbrev for FUNCTION_BLOCK.
1297 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1298 Abbv
->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP
));
1299 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // LHS
1300 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // RHS
1301 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 4)); // opc
1302 if (Stream
.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID
,
1303 Abbv
) != FUNCTION_INST_BINOP_ABBREV
)
1304 llvm_unreachable("Unexpected abbrev ordering!");
1306 { // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK.
1307 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1308 Abbv
->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP
));
1309 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // LHS
1310 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // RHS
1311 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 4)); // opc
1312 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 7)); // flags
1313 if (Stream
.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID
,
1314 Abbv
) != FUNCTION_INST_BINOP_FLAGS_ABBREV
)
1315 llvm_unreachable("Unexpected abbrev ordering!");
1317 { // INST_CAST abbrev for FUNCTION_BLOCK.
1318 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1319 Abbv
->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST
));
1320 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // OpVal
1321 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, // dest ty
1322 Log2_32_Ceil(VE
.getTypes().size()+1)));
1323 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed
, 4)); // opc
1324 if (Stream
.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID
,
1325 Abbv
) != FUNCTION_INST_CAST_ABBREV
)
1326 llvm_unreachable("Unexpected abbrev ordering!");
1329 { // INST_RET abbrev for FUNCTION_BLOCK.
1330 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1331 Abbv
->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET
));
1332 if (Stream
.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID
,
1333 Abbv
) != FUNCTION_INST_RET_VOID_ABBREV
)
1334 llvm_unreachable("Unexpected abbrev ordering!");
1336 { // INST_RET abbrev for FUNCTION_BLOCK.
1337 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1338 Abbv
->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET
));
1339 Abbv
->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR
, 6)); // ValID
1340 if (Stream
.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID
,
1341 Abbv
) != FUNCTION_INST_RET_VAL_ABBREV
)
1342 llvm_unreachable("Unexpected abbrev ordering!");
1344 { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK.
1345 BitCodeAbbrev
*Abbv
= new BitCodeAbbrev();
1346 Abbv
->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE
));
1347 if (Stream
.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID
,
1348 Abbv
) != FUNCTION_INST_UNREACHABLE_ABBREV
)
1349 llvm_unreachable("Unexpected abbrev ordering!");
1356 /// WriteModule - Emit the specified module to the bitstream.
1357 static void WriteModule(const Module
*M
, BitstreamWriter
&Stream
) {
1358 Stream
.EnterSubblock(bitc::MODULE_BLOCK_ID
, 3);
1360 // Emit the version number if it is non-zero.
1362 SmallVector
<unsigned, 1> Vals
;
1363 Vals
.push_back(CurVersion
);
1364 Stream
.EmitRecord(bitc::MODULE_CODE_VERSION
, Vals
);
1367 // Analyze the module, enumerating globals, functions, etc.
1368 ValueEnumerator
VE(M
);
1370 // Emit blockinfo, which defines the standard abbreviations etc.
1371 WriteBlockInfo(VE
, Stream
);
1373 // Emit information about parameter attributes.
1374 WriteAttributeTable(VE
, Stream
);
1376 // Emit information describing all of the types in the module.
1377 WriteTypeTable(VE
, Stream
);
1379 // Emit top-level description of module, including target triple, inline asm,
1380 // descriptors for global variables, and function prototype info.
1381 WriteModuleInfo(M
, VE
, Stream
);
1384 WriteModuleConstants(VE
, Stream
);
1387 WriteModuleMetadata(VE
, Stream
);
1389 // Emit function bodies.
1390 for (Module::const_iterator I
= M
->begin(), E
= M
->end(); I
!= E
; ++I
)
1391 if (!I
->isDeclaration())
1392 WriteFunction(*I
, VE
, Stream
);
1394 // Emit the type symbol table information.
1395 WriteTypeSymbolTable(M
->getTypeSymbolTable(), VE
, Stream
);
1397 // Emit names for globals/functions etc.
1398 WriteValueSymbolTable(M
->getValueSymbolTable(), VE
, Stream
);
1403 /// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a
1404 /// header and trailer to make it compatible with the system archiver. To do
1405 /// this we emit the following header, and then emit a trailer that pads the
1406 /// file out to be a multiple of 16 bytes.
1408 /// struct bc_header {
1409 /// uint32_t Magic; // 0x0B17C0DE
1410 /// uint32_t Version; // Version, currently always 0.
1411 /// uint32_t BitcodeOffset; // Offset to traditional bitcode file.
1412 /// uint32_t BitcodeSize; // Size of traditional bitcode file.
1413 /// uint32_t CPUType; // CPU specifier.
1414 /// ... potentially more later ...
1417 DarwinBCSizeFieldOffset
= 3*4, // Offset to bitcode_size.
1418 DarwinBCHeaderSize
= 5*4
1421 static void EmitDarwinBCHeader(BitstreamWriter
&Stream
,
1422 const std::string
&TT
) {
1423 unsigned CPUType
= ~0U;
1425 // Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*. The CPUType is a
1426 // magic number from /usr/include/mach/machine.h. It is ok to reproduce the
1427 // specific constants here because they are implicitly part of the Darwin ABI.
1429 DARWIN_CPU_ARCH_ABI64
= 0x01000000,
1430 DARWIN_CPU_TYPE_X86
= 7,
1431 DARWIN_CPU_TYPE_POWERPC
= 18
1434 if (TT
.find("x86_64-") == 0)
1435 CPUType
= DARWIN_CPU_TYPE_X86
| DARWIN_CPU_ARCH_ABI64
;
1436 else if (TT
.size() >= 5 && TT
[0] == 'i' && TT
[2] == '8' && TT
[3] == '6' &&
1437 TT
[4] == '-' && TT
[1] - '3' < 6)
1438 CPUType
= DARWIN_CPU_TYPE_X86
;
1439 else if (TT
.find("powerpc-") == 0)
1440 CPUType
= DARWIN_CPU_TYPE_POWERPC
;
1441 else if (TT
.find("powerpc64-") == 0)
1442 CPUType
= DARWIN_CPU_TYPE_POWERPC
| DARWIN_CPU_ARCH_ABI64
;
1444 // Traditional Bitcode starts after header.
1445 unsigned BCOffset
= DarwinBCHeaderSize
;
1447 Stream
.Emit(0x0B17C0DE, 32);
1448 Stream
.Emit(0 , 32); // Version.
1449 Stream
.Emit(BCOffset
, 32);
1450 Stream
.Emit(0 , 32); // Filled in later.
1451 Stream
.Emit(CPUType
, 32);
1454 /// EmitDarwinBCTrailer - Emit the darwin epilog after the bitcode file and
1455 /// finalize the header.
1456 static void EmitDarwinBCTrailer(BitstreamWriter
&Stream
, unsigned BufferSize
) {
1457 // Update the size field in the header.
1458 Stream
.BackpatchWord(DarwinBCSizeFieldOffset
, BufferSize
-DarwinBCHeaderSize
);
1460 // If the file is not a multiple of 16 bytes, insert dummy padding.
1461 while (BufferSize
& 15) {
1468 /// WriteBitcodeToFile - Write the specified module to the specified output
1470 void llvm::WriteBitcodeToFile(const Module
*M
, raw_ostream
&Out
) {
1471 std::vector
<unsigned char> Buffer
;
1472 BitstreamWriter
Stream(Buffer
);
1474 Buffer
.reserve(256*1024);
1476 WriteBitcodeToStream( M
, Stream
);
1478 // If writing to stdout, set binary mode.
1479 if (&llvm::outs() == &Out
)
1480 sys::Program::ChangeStdoutToBinary();
1482 // Write the generated bitstream to "Out".
1483 Out
.write((char*)&Buffer
.front(), Buffer
.size());
1485 // Make sure it hits disk now.
1489 /// WriteBitcodeToStream - Write the specified module to the specified output
1491 void llvm::WriteBitcodeToStream(const Module
*M
, BitstreamWriter
&Stream
) {
1492 // If this is darwin, emit a file header and trailer if needed.
1493 bool isDarwin
= M
->getTargetTriple().find("-darwin") != std::string::npos
;
1495 EmitDarwinBCHeader(Stream
, M
->getTargetTriple());
1497 // Emit the file header.
1498 Stream
.Emit((unsigned)'B', 8);
1499 Stream
.Emit((unsigned)'C', 8);
1500 Stream
.Emit(0x0, 4);
1501 Stream
.Emit(0xC, 4);
1502 Stream
.Emit(0xE, 4);
1503 Stream
.Emit(0xD, 4);
1506 WriteModule(M
, Stream
);
1509 EmitDarwinBCTrailer(Stream
, Stream
.getBuffer().size());