1 //===- BitcodeReader.cpp - Internal BitcodeReader implementation ----------===//
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 // This header defines the BitcodeReader class.
12 //===----------------------------------------------------------------------===//
14 #include "llvm/Bitcode/ReaderWriter.h"
15 #include "BitcodeReader.h"
16 #include "llvm/Constants.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/InlineAsm.h"
19 #include "llvm/IntrinsicInst.h"
20 #include "llvm/Module.h"
21 #include "llvm/Operator.h"
22 #include "llvm/AutoUpgrade.h"
23 #include "llvm/ADT/SmallString.h"
24 #include "llvm/ADT/SmallVector.h"
25 #include "llvm/Support/MathExtras.h"
26 #include "llvm/Support/MemoryBuffer.h"
27 #include "llvm/OperandTraits.h"
30 void BitcodeReader::FreeState() {
34 std::vector
<Type
*>().swap(TypeList
);
38 std::vector
<AttrListPtr
>().swap(MAttributes
);
39 std::vector
<BasicBlock
*>().swap(FunctionBBs
);
40 std::vector
<Function
*>().swap(FunctionsWithBodies
);
41 DeferredFunctionInfo
.clear();
45 //===----------------------------------------------------------------------===//
46 // Helper functions to implement forward reference resolution, etc.
47 //===----------------------------------------------------------------------===//
49 /// ConvertToString - Convert a string from a record into an std::string, return
51 template<typename StrTy
>
52 static bool ConvertToString(SmallVector
<uint64_t, 64> &Record
, unsigned Idx
,
54 if (Idx
> Record
.size())
57 for (unsigned i
= Idx
, e
= Record
.size(); i
!= e
; ++i
)
58 Result
+= (char)Record
[i
];
62 static GlobalValue::LinkageTypes
GetDecodedLinkage(unsigned Val
) {
64 default: // Map unknown/new linkages to external
65 case 0: return GlobalValue::ExternalLinkage
;
66 case 1: return GlobalValue::WeakAnyLinkage
;
67 case 2: return GlobalValue::AppendingLinkage
;
68 case 3: return GlobalValue::InternalLinkage
;
69 case 4: return GlobalValue::LinkOnceAnyLinkage
;
70 case 5: return GlobalValue::DLLImportLinkage
;
71 case 6: return GlobalValue::DLLExportLinkage
;
72 case 7: return GlobalValue::ExternalWeakLinkage
;
73 case 8: return GlobalValue::CommonLinkage
;
74 case 9: return GlobalValue::PrivateLinkage
;
75 case 10: return GlobalValue::WeakODRLinkage
;
76 case 11: return GlobalValue::LinkOnceODRLinkage
;
77 case 12: return GlobalValue::AvailableExternallyLinkage
;
78 case 13: return GlobalValue::LinkerPrivateLinkage
;
79 case 14: return GlobalValue::LinkerPrivateWeakLinkage
;
80 case 15: return GlobalValue::LinkerPrivateWeakDefAutoLinkage
;
84 static GlobalValue::VisibilityTypes
GetDecodedVisibility(unsigned Val
) {
86 default: // Map unknown visibilities to default.
87 case 0: return GlobalValue::DefaultVisibility
;
88 case 1: return GlobalValue::HiddenVisibility
;
89 case 2: return GlobalValue::ProtectedVisibility
;
93 static int GetDecodedCastOpcode(unsigned Val
) {
96 case bitc::CAST_TRUNC
: return Instruction::Trunc
;
97 case bitc::CAST_ZEXT
: return Instruction::ZExt
;
98 case bitc::CAST_SEXT
: return Instruction::SExt
;
99 case bitc::CAST_FPTOUI
: return Instruction::FPToUI
;
100 case bitc::CAST_FPTOSI
: return Instruction::FPToSI
;
101 case bitc::CAST_UITOFP
: return Instruction::UIToFP
;
102 case bitc::CAST_SITOFP
: return Instruction::SIToFP
;
103 case bitc::CAST_FPTRUNC
: return Instruction::FPTrunc
;
104 case bitc::CAST_FPEXT
: return Instruction::FPExt
;
105 case bitc::CAST_PTRTOINT
: return Instruction::PtrToInt
;
106 case bitc::CAST_INTTOPTR
: return Instruction::IntToPtr
;
107 case bitc::CAST_BITCAST
: return Instruction::BitCast
;
110 static int GetDecodedBinaryOpcode(unsigned Val
, const Type
*Ty
) {
113 case bitc::BINOP_ADD
:
114 return Ty
->isFPOrFPVectorTy() ? Instruction::FAdd
: Instruction::Add
;
115 case bitc::BINOP_SUB
:
116 return Ty
->isFPOrFPVectorTy() ? Instruction::FSub
: Instruction::Sub
;
117 case bitc::BINOP_MUL
:
118 return Ty
->isFPOrFPVectorTy() ? Instruction::FMul
: Instruction::Mul
;
119 case bitc::BINOP_UDIV
: return Instruction::UDiv
;
120 case bitc::BINOP_SDIV
:
121 return Ty
->isFPOrFPVectorTy() ? Instruction::FDiv
: Instruction::SDiv
;
122 case bitc::BINOP_UREM
: return Instruction::URem
;
123 case bitc::BINOP_SREM
:
124 return Ty
->isFPOrFPVectorTy() ? Instruction::FRem
: Instruction::SRem
;
125 case bitc::BINOP_SHL
: return Instruction::Shl
;
126 case bitc::BINOP_LSHR
: return Instruction::LShr
;
127 case bitc::BINOP_ASHR
: return Instruction::AShr
;
128 case bitc::BINOP_AND
: return Instruction::And
;
129 case bitc::BINOP_OR
: return Instruction::Or
;
130 case bitc::BINOP_XOR
: return Instruction::Xor
;
136 /// @brief A class for maintaining the slot number definition
137 /// as a placeholder for the actual definition for forward constants defs.
138 class ConstantPlaceHolder
: public ConstantExpr
{
139 void operator=(const ConstantPlaceHolder
&); // DO NOT IMPLEMENT
141 // allocate space for exactly one operand
142 void *operator new(size_t s
) {
143 return User::operator new(s
, 1);
145 explicit ConstantPlaceHolder(const Type
*Ty
, LLVMContext
& Context
)
146 : ConstantExpr(Ty
, Instruction::UserOp1
, &Op
<0>(), 1) {
147 Op
<0>() = UndefValue::get(Type::getInt32Ty(Context
));
150 /// @brief Methods to support type inquiry through isa, cast, and dyn_cast.
151 //static inline bool classof(const ConstantPlaceHolder *) { return true; }
152 static bool classof(const Value
*V
) {
153 return isa
<ConstantExpr
>(V
) &&
154 cast
<ConstantExpr
>(V
)->getOpcode() == Instruction::UserOp1
;
158 /// Provide fast operand accessors
159 //DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
163 // FIXME: can we inherit this from ConstantExpr?
165 struct OperandTraits
<ConstantPlaceHolder
> :
166 public FixedNumOperandTraits
<ConstantPlaceHolder
, 1> {
171 void BitcodeReaderValueList::AssignValue(Value
*V
, unsigned Idx
) {
180 WeakVH
&OldV
= ValuePtrs
[Idx
];
186 // Handle constants and non-constants (e.g. instrs) differently for
188 if (Constant
*PHC
= dyn_cast
<Constant
>(&*OldV
)) {
189 ResolveConstants
.push_back(std::make_pair(PHC
, Idx
));
192 // If there was a forward reference to this value, replace it.
193 Value
*PrevVal
= OldV
;
194 OldV
->replaceAllUsesWith(V
);
200 Constant
*BitcodeReaderValueList::getConstantFwdRef(unsigned Idx
,
205 if (Value
*V
= ValuePtrs
[Idx
]) {
206 assert(Ty
== V
->getType() && "Type mismatch in constant table!");
207 return cast
<Constant
>(V
);
210 // Create and return a placeholder, which will later be RAUW'd.
211 Constant
*C
= new ConstantPlaceHolder(Ty
, Context
);
216 Value
*BitcodeReaderValueList::getValueFwdRef(unsigned Idx
, const Type
*Ty
) {
220 if (Value
*V
= ValuePtrs
[Idx
]) {
221 assert((Ty
== 0 || Ty
== V
->getType()) && "Type mismatch in value table!");
225 // No type specified, must be invalid reference.
226 if (Ty
== 0) return 0;
228 // Create and return a placeholder, which will later be RAUW'd.
229 Value
*V
= new Argument(Ty
);
234 /// ResolveConstantForwardRefs - Once all constants are read, this method bulk
235 /// resolves any forward references. The idea behind this is that we sometimes
236 /// get constants (such as large arrays) which reference *many* forward ref
237 /// constants. Replacing each of these causes a lot of thrashing when
238 /// building/reuniquing the constant. Instead of doing this, we look at all the
239 /// uses and rewrite all the place holders at once for any constant that uses
241 void BitcodeReaderValueList::ResolveConstantForwardRefs() {
242 // Sort the values by-pointer so that they are efficient to look up with a
244 std::sort(ResolveConstants
.begin(), ResolveConstants
.end());
246 SmallVector
<Constant
*, 64> NewOps
;
248 while (!ResolveConstants
.empty()) {
249 Value
*RealVal
= operator[](ResolveConstants
.back().second
);
250 Constant
*Placeholder
= ResolveConstants
.back().first
;
251 ResolveConstants
.pop_back();
253 // Loop over all users of the placeholder, updating them to reference the
254 // new value. If they reference more than one placeholder, update them all
256 while (!Placeholder
->use_empty()) {
257 Value::use_iterator UI
= Placeholder
->use_begin();
260 // If the using object isn't uniqued, just update the operands. This
261 // handles instructions and initializers for global variables.
262 if (!isa
<Constant
>(U
) || isa
<GlobalValue
>(U
)) {
263 UI
.getUse().set(RealVal
);
267 // Otherwise, we have a constant that uses the placeholder. Replace that
268 // constant with a new constant that has *all* placeholder uses updated.
269 Constant
*UserC
= cast
<Constant
>(U
);
270 for (User::op_iterator I
= UserC
->op_begin(), E
= UserC
->op_end();
273 if (!isa
<ConstantPlaceHolder
>(*I
)) {
274 // Not a placeholder reference.
276 } else if (*I
== Placeholder
) {
277 // Common case is that it just references this one placeholder.
280 // Otherwise, look up the placeholder in ResolveConstants.
281 ResolveConstantsTy::iterator It
=
282 std::lower_bound(ResolveConstants
.begin(), ResolveConstants
.end(),
283 std::pair
<Constant
*, unsigned>(cast
<Constant
>(*I
),
285 assert(It
!= ResolveConstants
.end() && It
->first
== *I
);
286 NewOp
= operator[](It
->second
);
289 NewOps
.push_back(cast
<Constant
>(NewOp
));
292 // Make the new constant.
294 if (ConstantArray
*UserCA
= dyn_cast
<ConstantArray
>(UserC
)) {
295 NewC
= ConstantArray::get(UserCA
->getType(), NewOps
);
296 } else if (ConstantStruct
*UserCS
= dyn_cast
<ConstantStruct
>(UserC
)) {
297 NewC
= ConstantStruct::get(UserCS
->getType(), NewOps
);
298 } else if (isa
<ConstantVector
>(UserC
)) {
299 NewC
= ConstantVector::get(NewOps
);
301 assert(isa
<ConstantExpr
>(UserC
) && "Must be a ConstantExpr.");
302 NewC
= cast
<ConstantExpr
>(UserC
)->getWithOperands(NewOps
);
305 UserC
->replaceAllUsesWith(NewC
);
306 UserC
->destroyConstant();
310 // Update all ValueHandles, they should be the only users at this point.
311 Placeholder
->replaceAllUsesWith(RealVal
);
316 void BitcodeReaderMDValueList::AssignValue(Value
*V
, unsigned Idx
) {
325 WeakVH
&OldV
= MDValuePtrs
[Idx
];
331 // If there was a forward reference to this value, replace it.
332 MDNode
*PrevVal
= cast
<MDNode
>(OldV
);
333 OldV
->replaceAllUsesWith(V
);
334 MDNode::deleteTemporary(PrevVal
);
335 // Deleting PrevVal sets Idx value in MDValuePtrs to null. Set new
337 MDValuePtrs
[Idx
] = V
;
340 Value
*BitcodeReaderMDValueList::getValueFwdRef(unsigned Idx
) {
344 if (Value
*V
= MDValuePtrs
[Idx
]) {
345 assert(V
->getType()->isMetadataTy() && "Type mismatch in value table!");
349 // Create and return a placeholder, which will later be RAUW'd.
350 Value
*V
= MDNode::getTemporary(Context
, ArrayRef
<Value
*>());
351 MDValuePtrs
[Idx
] = V
;
355 Type
*BitcodeReader::getTypeByID(unsigned ID
) {
356 // The type table size is always specified correctly.
357 if (ID
>= TypeList
.size())
360 if (Type
*Ty
= TypeList
[ID
])
363 // If we have a forward reference, the only possible case is when it is to a
364 // named struct. Just create a placeholder for now.
365 return TypeList
[ID
] = StructType::createNamed(Context
, "");
368 /// FIXME: Remove in LLVM 3.1, only used by ParseOldTypeTable.
369 Type
*BitcodeReader::getTypeByIDOrNull(unsigned ID
) {
370 if (ID
>= TypeList
.size())
371 TypeList
.resize(ID
+1);
377 //===----------------------------------------------------------------------===//
378 // Functions for parsing blocks from the bitcode file
379 //===----------------------------------------------------------------------===//
381 bool BitcodeReader::ParseAttributeBlock() {
382 if (Stream
.EnterSubBlock(bitc::PARAMATTR_BLOCK_ID
))
383 return Error("Malformed block record");
385 if (!MAttributes
.empty())
386 return Error("Multiple PARAMATTR blocks found!");
388 SmallVector
<uint64_t, 64> Record
;
390 SmallVector
<AttributeWithIndex
, 8> Attrs
;
392 // Read all the records.
394 unsigned Code
= Stream
.ReadCode();
395 if (Code
== bitc::END_BLOCK
) {
396 if (Stream
.ReadBlockEnd())
397 return Error("Error at end of PARAMATTR block");
401 if (Code
== bitc::ENTER_SUBBLOCK
) {
402 // No known subblocks, always skip them.
403 Stream
.ReadSubBlockID();
404 if (Stream
.SkipBlock())
405 return Error("Malformed block record");
409 if (Code
== bitc::DEFINE_ABBREV
) {
410 Stream
.ReadAbbrevRecord();
416 switch (Stream
.ReadRecord(Code
, Record
)) {
417 default: // Default behavior: ignore.
419 case bitc::PARAMATTR_CODE_ENTRY
: { // ENTRY: [paramidx0, attr0, ...]
420 if (Record
.size() & 1)
421 return Error("Invalid ENTRY record");
423 // FIXME : Remove this autoupgrade code in LLVM 3.0.
424 // If Function attributes are using index 0 then transfer them
425 // to index ~0. Index 0 is used for return value attributes but used to be
426 // used for function attributes.
427 Attributes RetAttribute
= Attribute::None
;
428 Attributes FnAttribute
= Attribute::None
;
429 for (unsigned i
= 0, e
= Record
.size(); i
!= e
; i
+= 2) {
430 // FIXME: remove in LLVM 3.0
431 // The alignment is stored as a 16-bit raw value from bits 31--16.
432 // We shift the bits above 31 down by 11 bits.
434 unsigned Alignment
= (Record
[i
+1] & (0xffffull
<< 16)) >> 16;
435 if (Alignment
&& !isPowerOf2_32(Alignment
))
436 return Error("Alignment is not a power of two.");
438 Attributes ReconstitutedAttr
= Record
[i
+1] & 0xffff;
440 ReconstitutedAttr
|= Attribute::constructAlignmentFromInt(Alignment
);
441 ReconstitutedAttr
|= (Record
[i
+1] & (0xffffull
<< 32)) >> 11;
442 Record
[i
+1] = ReconstitutedAttr
;
445 RetAttribute
= Record
[i
+1];
446 else if (Record
[i
] == ~0U)
447 FnAttribute
= Record
[i
+1];
450 unsigned OldRetAttrs
= (Attribute::NoUnwind
|Attribute::NoReturn
|
451 Attribute::ReadOnly
|Attribute::ReadNone
);
453 if (FnAttribute
== Attribute::None
&& RetAttribute
!= Attribute::None
&&
454 (RetAttribute
& OldRetAttrs
) != 0) {
455 if (FnAttribute
== Attribute::None
) { // add a slot so they get added.
456 Record
.push_back(~0U);
460 FnAttribute
|= RetAttribute
& OldRetAttrs
;
461 RetAttribute
&= ~OldRetAttrs
;
464 for (unsigned i
= 0, e
= Record
.size(); i
!= e
; i
+= 2) {
465 if (Record
[i
] == 0) {
466 if (RetAttribute
!= Attribute::None
)
467 Attrs
.push_back(AttributeWithIndex::get(0, RetAttribute
));
468 } else if (Record
[i
] == ~0U) {
469 if (FnAttribute
!= Attribute::None
)
470 Attrs
.push_back(AttributeWithIndex::get(~0U, FnAttribute
));
471 } else if (Record
[i
+1] != Attribute::None
)
472 Attrs
.push_back(AttributeWithIndex::get(Record
[i
], Record
[i
+1]));
475 MAttributes
.push_back(AttrListPtr::get(Attrs
.begin(), Attrs
.end()));
483 bool BitcodeReader::ParseTypeTable() {
484 if (Stream
.EnterSubBlock(bitc::TYPE_BLOCK_ID_NEW
))
485 return Error("Malformed block record");
487 return ParseTypeTableBody();
490 bool BitcodeReader::ParseTypeTableBody() {
491 if (!TypeList
.empty())
492 return Error("Multiple TYPE_BLOCKs found!");
494 SmallVector
<uint64_t, 64> Record
;
495 unsigned NumRecords
= 0;
497 SmallString
<64> TypeName
;
499 // Read all the records for this type table.
501 unsigned Code
= Stream
.ReadCode();
502 if (Code
== bitc::END_BLOCK
) {
503 if (NumRecords
!= TypeList
.size())
504 return Error("Invalid type forward reference in TYPE_BLOCK");
505 if (Stream
.ReadBlockEnd())
506 return Error("Error at end of type table block");
510 if (Code
== bitc::ENTER_SUBBLOCK
) {
511 // No known subblocks, always skip them.
512 Stream
.ReadSubBlockID();
513 if (Stream
.SkipBlock())
514 return Error("Malformed block record");
518 if (Code
== bitc::DEFINE_ABBREV
) {
519 Stream
.ReadAbbrevRecord();
526 switch (Stream
.ReadRecord(Code
, Record
)) {
527 default: return Error("unknown type in type table");
528 case bitc::TYPE_CODE_NUMENTRY
: // TYPE_CODE_NUMENTRY: [numentries]
529 // TYPE_CODE_NUMENTRY contains a count of the number of types in the
530 // type list. This allows us to reserve space.
531 if (Record
.size() < 1)
532 return Error("Invalid TYPE_CODE_NUMENTRY record");
533 TypeList
.resize(Record
[0]);
535 case bitc::TYPE_CODE_VOID
: // VOID
536 ResultTy
= Type::getVoidTy(Context
);
538 case bitc::TYPE_CODE_FLOAT
: // FLOAT
539 ResultTy
= Type::getFloatTy(Context
);
541 case bitc::TYPE_CODE_DOUBLE
: // DOUBLE
542 ResultTy
= Type::getDoubleTy(Context
);
544 case bitc::TYPE_CODE_X86_FP80
: // X86_FP80
545 ResultTy
= Type::getX86_FP80Ty(Context
);
547 case bitc::TYPE_CODE_FP128
: // FP128
548 ResultTy
= Type::getFP128Ty(Context
);
550 case bitc::TYPE_CODE_PPC_FP128
: // PPC_FP128
551 ResultTy
= Type::getPPC_FP128Ty(Context
);
553 case bitc::TYPE_CODE_LABEL
: // LABEL
554 ResultTy
= Type::getLabelTy(Context
);
556 case bitc::TYPE_CODE_METADATA
: // METADATA
557 ResultTy
= Type::getMetadataTy(Context
);
559 case bitc::TYPE_CODE_X86_MMX
: // X86_MMX
560 ResultTy
= Type::getX86_MMXTy(Context
);
562 case bitc::TYPE_CODE_INTEGER
: // INTEGER: [width]
563 if (Record
.size() < 1)
564 return Error("Invalid Integer type record");
566 ResultTy
= IntegerType::get(Context
, Record
[0]);
568 case bitc::TYPE_CODE_POINTER
: { // POINTER: [pointee type] or
569 // [pointee type, address space]
570 if (Record
.size() < 1)
571 return Error("Invalid POINTER type record");
572 unsigned AddressSpace
= 0;
573 if (Record
.size() == 2)
574 AddressSpace
= Record
[1];
575 ResultTy
= getTypeByID(Record
[0]);
576 if (ResultTy
== 0) return Error("invalid element type in pointer type");
577 ResultTy
= PointerType::get(ResultTy
, AddressSpace
);
580 case bitc::TYPE_CODE_FUNCTION
: {
581 // FIXME: attrid is dead, remove it in LLVM 3.0
582 // FUNCTION: [vararg, attrid, retty, paramty x N]
583 if (Record
.size() < 3)
584 return Error("Invalid FUNCTION type record");
585 std::vector
<const Type
*> ArgTys
;
586 for (unsigned i
= 3, e
= Record
.size(); i
!= e
; ++i
) {
587 if (Type
*T
= getTypeByID(Record
[i
]))
593 ResultTy
= getTypeByID(Record
[2]);
594 if (ResultTy
== 0 || ArgTys
.size() < Record
.size()-3)
595 return Error("invalid type in function type");
597 ResultTy
= FunctionType::get(ResultTy
, ArgTys
, Record
[0]);
600 case bitc::TYPE_CODE_STRUCT_ANON
: { // STRUCT: [ispacked, eltty x N]
601 if (Record
.size() < 1)
602 return Error("Invalid STRUCT type record");
603 std::vector
<Type
*> EltTys
;
604 for (unsigned i
= 1, e
= Record
.size(); i
!= e
; ++i
) {
605 if (Type
*T
= getTypeByID(Record
[i
]))
610 if (EltTys
.size() != Record
.size()-1)
611 return Error("invalid type in struct type");
612 ResultTy
= StructType::get(Context
, EltTys
, Record
[0]);
615 case bitc::TYPE_CODE_STRUCT_NAME
: // STRUCT_NAME: [strchr x N]
616 if (ConvertToString(Record
, 0, TypeName
))
617 return Error("Invalid STRUCT_NAME record");
620 case bitc::TYPE_CODE_STRUCT_NAMED
: { // STRUCT: [ispacked, eltty x N]
621 if (Record
.size() < 1)
622 return Error("Invalid STRUCT type record");
624 if (NumRecords
>= TypeList
.size())
625 return Error("invalid TYPE table");
627 // Check to see if this was forward referenced, if so fill in the temp.
628 StructType
*Res
= cast_or_null
<StructType
>(TypeList
[NumRecords
]);
630 Res
->setName(TypeName
);
631 TypeList
[NumRecords
] = 0;
632 } else // Otherwise, create a new struct.
633 Res
= StructType::createNamed(Context
, TypeName
);
636 SmallVector
<Type
*, 8> EltTys
;
637 for (unsigned i
= 1, e
= Record
.size(); i
!= e
; ++i
) {
638 if (Type
*T
= getTypeByID(Record
[i
]))
643 if (EltTys
.size() != Record
.size()-1)
644 return Error("invalid STRUCT type record");
645 Res
->setBody(EltTys
, Record
[0]);
649 case bitc::TYPE_CODE_OPAQUE
: { // OPAQUE: []
650 if (Record
.size() != 1)
651 return Error("Invalid OPAQUE type record");
653 if (NumRecords
>= TypeList
.size())
654 return Error("invalid TYPE table");
656 // Check to see if this was forward referenced, if so fill in the temp.
657 StructType
*Res
= cast_or_null
<StructType
>(TypeList
[NumRecords
]);
659 Res
->setName(TypeName
);
660 TypeList
[NumRecords
] = 0;
661 } else // Otherwise, create a new struct with no body.
662 Res
= StructType::createNamed(Context
, TypeName
);
667 case bitc::TYPE_CODE_ARRAY
: // ARRAY: [numelts, eltty]
668 if (Record
.size() < 2)
669 return Error("Invalid ARRAY type record");
670 if ((ResultTy
= getTypeByID(Record
[1])))
671 ResultTy
= ArrayType::get(ResultTy
, Record
[0]);
673 return Error("Invalid ARRAY type element");
675 case bitc::TYPE_CODE_VECTOR
: // VECTOR: [numelts, eltty]
676 if (Record
.size() < 2)
677 return Error("Invalid VECTOR type record");
678 if ((ResultTy
= getTypeByID(Record
[1])))
679 ResultTy
= VectorType::get(ResultTy
, Record
[0]);
681 return Error("Invalid ARRAY type element");
685 if (NumRecords
>= TypeList
.size())
686 return Error("invalid TYPE table");
687 assert(ResultTy
&& "Didn't read a type?");
688 assert(TypeList
[NumRecords
] == 0 && "Already read type?");
689 TypeList
[NumRecords
++] = ResultTy
;
693 // FIXME: Remove in LLVM 3.1
694 bool BitcodeReader::ParseOldTypeTable() {
695 if (Stream
.EnterSubBlock(bitc::TYPE_BLOCK_ID_OLD
))
696 return Error("Malformed block record");
698 if (!TypeList
.empty())
699 return Error("Multiple TYPE_BLOCKs found!");
702 // While horrible, we have no good ordering of types in the bc file. Just
703 // iteratively parse types out of the bc file in multiple passes until we get
704 // them all. Do this by saving a cursor for the start of the type block.
705 BitstreamCursor
StartOfTypeBlockCursor(Stream
);
707 unsigned NumTypesRead
= 0;
709 SmallVector
<uint64_t, 64> Record
;
711 unsigned NextTypeID
= 0;
712 bool ReadAnyTypes
= false;
714 // Read all the records for this type table.
716 unsigned Code
= Stream
.ReadCode();
717 if (Code
== bitc::END_BLOCK
) {
718 if (NextTypeID
!= TypeList
.size())
719 return Error("Invalid type forward reference in TYPE_BLOCK_ID_OLD");
721 // If we haven't read all of the types yet, iterate again.
722 if (NumTypesRead
!= TypeList
.size()) {
723 // If we didn't successfully read any types in this pass, then we must
724 // have an unhandled forward reference.
726 return Error("Obsolete bitcode contains unhandled recursive type");
728 Stream
= StartOfTypeBlockCursor
;
732 if (Stream
.ReadBlockEnd())
733 return Error("Error at end of type table block");
737 if (Code
== bitc::ENTER_SUBBLOCK
) {
738 // No known subblocks, always skip them.
739 Stream
.ReadSubBlockID();
740 if (Stream
.SkipBlock())
741 return Error("Malformed block record");
745 if (Code
== bitc::DEFINE_ABBREV
) {
746 Stream
.ReadAbbrevRecord();
753 switch (Stream
.ReadRecord(Code
, Record
)) {
754 default: return Error("unknown type in type table");
755 case bitc::TYPE_CODE_NUMENTRY
: // TYPE_CODE_NUMENTRY: [numentries]
756 // TYPE_CODE_NUMENTRY contains a count of the number of types in the
757 // type list. This allows us to reserve space.
758 if (Record
.size() < 1)
759 return Error("Invalid TYPE_CODE_NUMENTRY record");
760 TypeList
.resize(Record
[0]);
762 case bitc::TYPE_CODE_VOID
: // VOID
763 ResultTy
= Type::getVoidTy(Context
);
765 case bitc::TYPE_CODE_FLOAT
: // FLOAT
766 ResultTy
= Type::getFloatTy(Context
);
768 case bitc::TYPE_CODE_DOUBLE
: // DOUBLE
769 ResultTy
= Type::getDoubleTy(Context
);
771 case bitc::TYPE_CODE_X86_FP80
: // X86_FP80
772 ResultTy
= Type::getX86_FP80Ty(Context
);
774 case bitc::TYPE_CODE_FP128
: // FP128
775 ResultTy
= Type::getFP128Ty(Context
);
777 case bitc::TYPE_CODE_PPC_FP128
: // PPC_FP128
778 ResultTy
= Type::getPPC_FP128Ty(Context
);
780 case bitc::TYPE_CODE_LABEL
: // LABEL
781 ResultTy
= Type::getLabelTy(Context
);
783 case bitc::TYPE_CODE_METADATA
: // METADATA
784 ResultTy
= Type::getMetadataTy(Context
);
786 case bitc::TYPE_CODE_X86_MMX
: // X86_MMX
787 ResultTy
= Type::getX86_MMXTy(Context
);
789 case bitc::TYPE_CODE_INTEGER
: // INTEGER: [width]
790 if (Record
.size() < 1)
791 return Error("Invalid Integer type record");
792 ResultTy
= IntegerType::get(Context
, Record
[0]);
794 case bitc::TYPE_CODE_OPAQUE
: // OPAQUE
795 if (NextTypeID
< TypeList
.size() && TypeList
[NextTypeID
] == 0)
796 ResultTy
= StructType::createNamed(Context
, "");
798 case bitc::TYPE_CODE_STRUCT_OLD
: {// STRUCT_OLD
799 if (NextTypeID
>= TypeList
.size()) break;
800 // If we already read it, don't reprocess.
801 if (TypeList
[NextTypeID
] &&
802 !cast
<StructType
>(TypeList
[NextTypeID
])->isOpaque())
806 if (TypeList
[NextTypeID
] == 0)
807 TypeList
[NextTypeID
] = StructType::createNamed(Context
, "");
809 std::vector
<Type
*> EltTys
;
810 for (unsigned i
= 1, e
= Record
.size(); i
!= e
; ++i
) {
811 if (Type
*Elt
= getTypeByIDOrNull(Record
[i
]))
812 EltTys
.push_back(Elt
);
817 if (EltTys
.size() != Record
.size()-1)
818 break; // Not all elements are ready.
820 cast
<StructType
>(TypeList
[NextTypeID
])->setBody(EltTys
, Record
[0]);
821 ResultTy
= TypeList
[NextTypeID
];
822 TypeList
[NextTypeID
] = 0;
825 case bitc::TYPE_CODE_POINTER
: { // POINTER: [pointee type] or
826 // [pointee type, address space]
827 if (Record
.size() < 1)
828 return Error("Invalid POINTER type record");
829 unsigned AddressSpace
= 0;
830 if (Record
.size() == 2)
831 AddressSpace
= Record
[1];
832 if ((ResultTy
= getTypeByIDOrNull(Record
[0])))
833 ResultTy
= PointerType::get(ResultTy
, AddressSpace
);
836 case bitc::TYPE_CODE_FUNCTION
: {
837 // FIXME: attrid is dead, remove it in LLVM 3.0
838 // FUNCTION: [vararg, attrid, retty, paramty x N]
839 if (Record
.size() < 3)
840 return Error("Invalid FUNCTION type record");
841 std::vector
<const Type
*> ArgTys
;
842 for (unsigned i
= 3, e
= Record
.size(); i
!= e
; ++i
) {
843 if (Type
*Elt
= getTypeByIDOrNull(Record
[i
]))
844 ArgTys
.push_back(Elt
);
848 if (ArgTys
.size()+3 != Record
.size())
849 break; // Something was null.
850 if ((ResultTy
= getTypeByIDOrNull(Record
[2])))
851 ResultTy
= FunctionType::get(ResultTy
, ArgTys
, Record
[0]);
854 case bitc::TYPE_CODE_ARRAY
: // ARRAY: [numelts, eltty]
855 if (Record
.size() < 2)
856 return Error("Invalid ARRAY type record");
857 if ((ResultTy
= getTypeByIDOrNull(Record
[1])))
858 ResultTy
= ArrayType::get(ResultTy
, Record
[0]);
860 case bitc::TYPE_CODE_VECTOR
: // VECTOR: [numelts, eltty]
861 if (Record
.size() < 2)
862 return Error("Invalid VECTOR type record");
863 if ((ResultTy
= getTypeByIDOrNull(Record
[1])))
864 ResultTy
= VectorType::get(ResultTy
, Record
[0]);
868 if (NextTypeID
>= TypeList
.size())
869 return Error("invalid TYPE table");
871 if (ResultTy
&& TypeList
[NextTypeID
] == 0) {
875 TypeList
[NextTypeID
] = ResultTy
;
883 bool BitcodeReader::ParseOldTypeSymbolTable() {
884 if (Stream
.EnterSubBlock(bitc::TYPE_SYMTAB_BLOCK_ID_OLD
))
885 return Error("Malformed block record");
887 SmallVector
<uint64_t, 64> Record
;
889 // Read all the records for this type table.
890 std::string TypeName
;
892 unsigned Code
= Stream
.ReadCode();
893 if (Code
== bitc::END_BLOCK
) {
894 if (Stream
.ReadBlockEnd())
895 return Error("Error at end of type symbol table block");
899 if (Code
== bitc::ENTER_SUBBLOCK
) {
900 // No known subblocks, always skip them.
901 Stream
.ReadSubBlockID();
902 if (Stream
.SkipBlock())
903 return Error("Malformed block record");
907 if (Code
== bitc::DEFINE_ABBREV
) {
908 Stream
.ReadAbbrevRecord();
914 switch (Stream
.ReadRecord(Code
, Record
)) {
915 default: // Default behavior: unknown type.
917 case bitc::TST_CODE_ENTRY
: // TST_ENTRY: [typeid, namechar x N]
918 if (ConvertToString(Record
, 1, TypeName
))
919 return Error("Invalid TST_ENTRY record");
920 unsigned TypeID
= Record
[0];
921 if (TypeID
>= TypeList
.size())
922 return Error("Invalid Type ID in TST_ENTRY record");
924 // Only apply the type name to a struct type with no name.
925 if (StructType
*STy
= dyn_cast
<StructType
>(TypeList
[TypeID
]))
926 if (!STy
->isAnonymous() && !STy
->hasName())
927 STy
->setName(TypeName
);
934 bool BitcodeReader::ParseValueSymbolTable() {
935 if (Stream
.EnterSubBlock(bitc::VALUE_SYMTAB_BLOCK_ID
))
936 return Error("Malformed block record");
938 SmallVector
<uint64_t, 64> Record
;
940 // Read all the records for this value table.
941 SmallString
<128> ValueName
;
943 unsigned Code
= Stream
.ReadCode();
944 if (Code
== bitc::END_BLOCK
) {
945 if (Stream
.ReadBlockEnd())
946 return Error("Error at end of value symbol table block");
949 if (Code
== bitc::ENTER_SUBBLOCK
) {
950 // No known subblocks, always skip them.
951 Stream
.ReadSubBlockID();
952 if (Stream
.SkipBlock())
953 return Error("Malformed block record");
957 if (Code
== bitc::DEFINE_ABBREV
) {
958 Stream
.ReadAbbrevRecord();
964 switch (Stream
.ReadRecord(Code
, Record
)) {
965 default: // Default behavior: unknown type.
967 case bitc::VST_CODE_ENTRY
: { // VST_ENTRY: [valueid, namechar x N]
968 if (ConvertToString(Record
, 1, ValueName
))
969 return Error("Invalid VST_ENTRY record");
970 unsigned ValueID
= Record
[0];
971 if (ValueID
>= ValueList
.size())
972 return Error("Invalid Value ID in VST_ENTRY record");
973 Value
*V
= ValueList
[ValueID
];
975 V
->setName(StringRef(ValueName
.data(), ValueName
.size()));
979 case bitc::VST_CODE_BBENTRY
: {
980 if (ConvertToString(Record
, 1, ValueName
))
981 return Error("Invalid VST_BBENTRY record");
982 BasicBlock
*BB
= getBasicBlock(Record
[0]);
984 return Error("Invalid BB ID in VST_BBENTRY record");
986 BB
->setName(StringRef(ValueName
.data(), ValueName
.size()));
994 bool BitcodeReader::ParseMetadata() {
995 unsigned NextMDValueNo
= MDValueList
.size();
997 if (Stream
.EnterSubBlock(bitc::METADATA_BLOCK_ID
))
998 return Error("Malformed block record");
1000 SmallVector
<uint64_t, 64> Record
;
1002 // Read all the records.
1004 unsigned Code
= Stream
.ReadCode();
1005 if (Code
== bitc::END_BLOCK
) {
1006 if (Stream
.ReadBlockEnd())
1007 return Error("Error at end of PARAMATTR block");
1011 if (Code
== bitc::ENTER_SUBBLOCK
) {
1012 // No known subblocks, always skip them.
1013 Stream
.ReadSubBlockID();
1014 if (Stream
.SkipBlock())
1015 return Error("Malformed block record");
1019 if (Code
== bitc::DEFINE_ABBREV
) {
1020 Stream
.ReadAbbrevRecord();
1024 bool IsFunctionLocal
= false;
1027 Code
= Stream
.ReadRecord(Code
, Record
);
1029 default: // Default behavior: ignore.
1031 case bitc::METADATA_NAME
: {
1032 // Read named of the named metadata.
1033 unsigned NameLength
= Record
.size();
1034 SmallString
<8> Name
;
1035 Name
.resize(NameLength
);
1036 for (unsigned i
= 0; i
!= NameLength
; ++i
)
1037 Name
[i
] = Record
[i
];
1039 Code
= Stream
.ReadCode();
1041 // METADATA_NAME is always followed by METADATA_NAMED_NODE.
1042 unsigned NextBitCode
= Stream
.ReadRecord(Code
, Record
);
1043 assert(NextBitCode
== bitc::METADATA_NAMED_NODE
); (void)NextBitCode
;
1045 // Read named metadata elements.
1046 unsigned Size
= Record
.size();
1047 NamedMDNode
*NMD
= TheModule
->getOrInsertNamedMetadata(Name
);
1048 for (unsigned i
= 0; i
!= Size
; ++i
) {
1049 MDNode
*MD
= dyn_cast
<MDNode
>(MDValueList
.getValueFwdRef(Record
[i
]));
1051 return Error("Malformed metadata record");
1052 NMD
->addOperand(MD
);
1056 case bitc::METADATA_FN_NODE
:
1057 IsFunctionLocal
= true;
1059 case bitc::METADATA_NODE
: {
1060 if (Record
.size() % 2 == 1)
1061 return Error("Invalid METADATA_NODE record");
1063 unsigned Size
= Record
.size();
1064 SmallVector
<Value
*, 8> Elts
;
1065 for (unsigned i
= 0; i
!= Size
; i
+= 2) {
1066 const Type
*Ty
= getTypeByID(Record
[i
]);
1067 if (!Ty
) return Error("Invalid METADATA_NODE record");
1068 if (Ty
->isMetadataTy())
1069 Elts
.push_back(MDValueList
.getValueFwdRef(Record
[i
+1]));
1070 else if (!Ty
->isVoidTy())
1071 Elts
.push_back(ValueList
.getValueFwdRef(Record
[i
+1], Ty
));
1073 Elts
.push_back(NULL
);
1075 Value
*V
= MDNode::getWhenValsUnresolved(Context
, Elts
, IsFunctionLocal
);
1076 IsFunctionLocal
= false;
1077 MDValueList
.AssignValue(V
, NextMDValueNo
++);
1080 case bitc::METADATA_STRING
: {
1081 unsigned MDStringLength
= Record
.size();
1082 SmallString
<8> String
;
1083 String
.resize(MDStringLength
);
1084 for (unsigned i
= 0; i
!= MDStringLength
; ++i
)
1085 String
[i
] = Record
[i
];
1086 Value
*V
= MDString::get(Context
,
1087 StringRef(String
.data(), String
.size()));
1088 MDValueList
.AssignValue(V
, NextMDValueNo
++);
1091 case bitc::METADATA_KIND
: {
1092 unsigned RecordLength
= Record
.size();
1093 if (Record
.empty() || RecordLength
< 2)
1094 return Error("Invalid METADATA_KIND record");
1095 SmallString
<8> Name
;
1096 Name
.resize(RecordLength
-1);
1097 unsigned Kind
= Record
[0];
1098 for (unsigned i
= 1; i
!= RecordLength
; ++i
)
1099 Name
[i
-1] = Record
[i
];
1101 unsigned NewKind
= TheModule
->getMDKindID(Name
.str());
1102 if (!MDKindMap
.insert(std::make_pair(Kind
, NewKind
)).second
)
1103 return Error("Conflicting METADATA_KIND records");
1110 /// DecodeSignRotatedValue - Decode a signed value stored with the sign bit in
1111 /// the LSB for dense VBR encoding.
1112 static uint64_t DecodeSignRotatedValue(uint64_t V
) {
1117 // There is no such thing as -0 with integers. "-0" really means MININT.
1121 /// ResolveGlobalAndAliasInits - Resolve all of the initializers for global
1122 /// values and aliases that we can.
1123 bool BitcodeReader::ResolveGlobalAndAliasInits() {
1124 std::vector
<std::pair
<GlobalVariable
*, unsigned> > GlobalInitWorklist
;
1125 std::vector
<std::pair
<GlobalAlias
*, unsigned> > AliasInitWorklist
;
1127 GlobalInitWorklist
.swap(GlobalInits
);
1128 AliasInitWorklist
.swap(AliasInits
);
1130 while (!GlobalInitWorklist
.empty()) {
1131 unsigned ValID
= GlobalInitWorklist
.back().second
;
1132 if (ValID
>= ValueList
.size()) {
1133 // Not ready to resolve this yet, it requires something later in the file.
1134 GlobalInits
.push_back(GlobalInitWorklist
.back());
1136 if (Constant
*C
= dyn_cast
<Constant
>(ValueList
[ValID
]))
1137 GlobalInitWorklist
.back().first
->setInitializer(C
);
1139 return Error("Global variable initializer is not a constant!");
1141 GlobalInitWorklist
.pop_back();
1144 while (!AliasInitWorklist
.empty()) {
1145 unsigned ValID
= AliasInitWorklist
.back().second
;
1146 if (ValID
>= ValueList
.size()) {
1147 AliasInits
.push_back(AliasInitWorklist
.back());
1149 if (Constant
*C
= dyn_cast
<Constant
>(ValueList
[ValID
]))
1150 AliasInitWorklist
.back().first
->setAliasee(C
);
1152 return Error("Alias initializer is not a constant!");
1154 AliasInitWorklist
.pop_back();
1159 bool BitcodeReader::ParseConstants() {
1160 if (Stream
.EnterSubBlock(bitc::CONSTANTS_BLOCK_ID
))
1161 return Error("Malformed block record");
1163 SmallVector
<uint64_t, 64> Record
;
1165 // Read all the records for this value table.
1166 const Type
*CurTy
= Type::getInt32Ty(Context
);
1167 unsigned NextCstNo
= ValueList
.size();
1169 unsigned Code
= Stream
.ReadCode();
1170 if (Code
== bitc::END_BLOCK
)
1173 if (Code
== bitc::ENTER_SUBBLOCK
) {
1174 // No known subblocks, always skip them.
1175 Stream
.ReadSubBlockID();
1176 if (Stream
.SkipBlock())
1177 return Error("Malformed block record");
1181 if (Code
== bitc::DEFINE_ABBREV
) {
1182 Stream
.ReadAbbrevRecord();
1189 unsigned BitCode
= Stream
.ReadRecord(Code
, Record
);
1191 default: // Default behavior: unknown constant
1192 case bitc::CST_CODE_UNDEF
: // UNDEF
1193 V
= UndefValue::get(CurTy
);
1195 case bitc::CST_CODE_SETTYPE
: // SETTYPE: [typeid]
1197 return Error("Malformed CST_SETTYPE record");
1198 if (Record
[0] >= TypeList
.size())
1199 return Error("Invalid Type ID in CST_SETTYPE record");
1200 CurTy
= TypeList
[Record
[0]];
1201 continue; // Skip the ValueList manipulation.
1202 case bitc::CST_CODE_NULL
: // NULL
1203 V
= Constant::getNullValue(CurTy
);
1205 case bitc::CST_CODE_INTEGER
: // INTEGER: [intval]
1206 if (!CurTy
->isIntegerTy() || Record
.empty())
1207 return Error("Invalid CST_INTEGER record");
1208 V
= ConstantInt::get(CurTy
, DecodeSignRotatedValue(Record
[0]));
1210 case bitc::CST_CODE_WIDE_INTEGER
: {// WIDE_INTEGER: [n x intval]
1211 if (!CurTy
->isIntegerTy() || Record
.empty())
1212 return Error("Invalid WIDE_INTEGER record");
1214 unsigned NumWords
= Record
.size();
1215 SmallVector
<uint64_t, 8> Words
;
1216 Words
.resize(NumWords
);
1217 for (unsigned i
= 0; i
!= NumWords
; ++i
)
1218 Words
[i
] = DecodeSignRotatedValue(Record
[i
]);
1219 V
= ConstantInt::get(Context
,
1220 APInt(cast
<IntegerType
>(CurTy
)->getBitWidth(),
1221 NumWords
, &Words
[0]));
1224 case bitc::CST_CODE_FLOAT
: { // FLOAT: [fpval]
1226 return Error("Invalid FLOAT record");
1227 if (CurTy
->isFloatTy())
1228 V
= ConstantFP::get(Context
, APFloat(APInt(32, (uint32_t)Record
[0])));
1229 else if (CurTy
->isDoubleTy())
1230 V
= ConstantFP::get(Context
, APFloat(APInt(64, Record
[0])));
1231 else if (CurTy
->isX86_FP80Ty()) {
1232 // Bits are not stored the same way as a normal i80 APInt, compensate.
1233 uint64_t Rearrange
[2];
1234 Rearrange
[0] = (Record
[1] & 0xffffLL
) | (Record
[0] << 16);
1235 Rearrange
[1] = Record
[0] >> 48;
1236 V
= ConstantFP::get(Context
, APFloat(APInt(80, 2, Rearrange
)));
1237 } else if (CurTy
->isFP128Ty())
1238 V
= ConstantFP::get(Context
, APFloat(APInt(128, 2, &Record
[0]), true));
1239 else if (CurTy
->isPPC_FP128Ty())
1240 V
= ConstantFP::get(Context
, APFloat(APInt(128, 2, &Record
[0])));
1242 V
= UndefValue::get(CurTy
);
1246 case bitc::CST_CODE_AGGREGATE
: {// AGGREGATE: [n x value number]
1248 return Error("Invalid CST_AGGREGATE record");
1250 unsigned Size
= Record
.size();
1251 std::vector
<Constant
*> Elts
;
1253 if (const StructType
*STy
= dyn_cast
<StructType
>(CurTy
)) {
1254 for (unsigned i
= 0; i
!= Size
; ++i
)
1255 Elts
.push_back(ValueList
.getConstantFwdRef(Record
[i
],
1256 STy
->getElementType(i
)));
1257 V
= ConstantStruct::get(STy
, Elts
);
1258 } else if (const ArrayType
*ATy
= dyn_cast
<ArrayType
>(CurTy
)) {
1259 const Type
*EltTy
= ATy
->getElementType();
1260 for (unsigned i
= 0; i
!= Size
; ++i
)
1261 Elts
.push_back(ValueList
.getConstantFwdRef(Record
[i
], EltTy
));
1262 V
= ConstantArray::get(ATy
, Elts
);
1263 } else if (const VectorType
*VTy
= dyn_cast
<VectorType
>(CurTy
)) {
1264 const Type
*EltTy
= VTy
->getElementType();
1265 for (unsigned i
= 0; i
!= Size
; ++i
)
1266 Elts
.push_back(ValueList
.getConstantFwdRef(Record
[i
], EltTy
));
1267 V
= ConstantVector::get(Elts
);
1269 V
= UndefValue::get(CurTy
);
1273 case bitc::CST_CODE_STRING
: { // STRING: [values]
1275 return Error("Invalid CST_AGGREGATE record");
1277 const ArrayType
*ATy
= cast
<ArrayType
>(CurTy
);
1278 const Type
*EltTy
= ATy
->getElementType();
1280 unsigned Size
= Record
.size();
1281 std::vector
<Constant
*> Elts
;
1282 for (unsigned i
= 0; i
!= Size
; ++i
)
1283 Elts
.push_back(ConstantInt::get(EltTy
, Record
[i
]));
1284 V
= ConstantArray::get(ATy
, Elts
);
1287 case bitc::CST_CODE_CSTRING
: { // CSTRING: [values]
1289 return Error("Invalid CST_AGGREGATE record");
1291 const ArrayType
*ATy
= cast
<ArrayType
>(CurTy
);
1292 const Type
*EltTy
= ATy
->getElementType();
1294 unsigned Size
= Record
.size();
1295 std::vector
<Constant
*> Elts
;
1296 for (unsigned i
= 0; i
!= Size
; ++i
)
1297 Elts
.push_back(ConstantInt::get(EltTy
, Record
[i
]));
1298 Elts
.push_back(Constant::getNullValue(EltTy
));
1299 V
= ConstantArray::get(ATy
, Elts
);
1302 case bitc::CST_CODE_CE_BINOP
: { // CE_BINOP: [opcode, opval, opval]
1303 if (Record
.size() < 3) return Error("Invalid CE_BINOP record");
1304 int Opc
= GetDecodedBinaryOpcode(Record
[0], CurTy
);
1306 V
= UndefValue::get(CurTy
); // Unknown binop.
1308 Constant
*LHS
= ValueList
.getConstantFwdRef(Record
[1], CurTy
);
1309 Constant
*RHS
= ValueList
.getConstantFwdRef(Record
[2], CurTy
);
1311 if (Record
.size() >= 4) {
1312 if (Opc
== Instruction::Add
||
1313 Opc
== Instruction::Sub
||
1314 Opc
== Instruction::Mul
||
1315 Opc
== Instruction::Shl
) {
1316 if (Record
[3] & (1 << bitc::OBO_NO_SIGNED_WRAP
))
1317 Flags
|= OverflowingBinaryOperator::NoSignedWrap
;
1318 if (Record
[3] & (1 << bitc::OBO_NO_UNSIGNED_WRAP
))
1319 Flags
|= OverflowingBinaryOperator::NoUnsignedWrap
;
1320 } else if (Opc
== Instruction::SDiv
||
1321 Opc
== Instruction::UDiv
||
1322 Opc
== Instruction::LShr
||
1323 Opc
== Instruction::AShr
) {
1324 if (Record
[3] & (1 << bitc::PEO_EXACT
))
1325 Flags
|= SDivOperator::IsExact
;
1328 V
= ConstantExpr::get(Opc
, LHS
, RHS
, Flags
);
1332 case bitc::CST_CODE_CE_CAST
: { // CE_CAST: [opcode, opty, opval]
1333 if (Record
.size() < 3) return Error("Invalid CE_CAST record");
1334 int Opc
= GetDecodedCastOpcode(Record
[0]);
1336 V
= UndefValue::get(CurTy
); // Unknown cast.
1338 const Type
*OpTy
= getTypeByID(Record
[1]);
1339 if (!OpTy
) return Error("Invalid CE_CAST record");
1340 Constant
*Op
= ValueList
.getConstantFwdRef(Record
[2], OpTy
);
1341 V
= ConstantExpr::getCast(Opc
, Op
, CurTy
);
1345 case bitc::CST_CODE_CE_INBOUNDS_GEP
:
1346 case bitc::CST_CODE_CE_GEP
: { // CE_GEP: [n x operands]
1347 if (Record
.size() & 1) return Error("Invalid CE_GEP record");
1348 SmallVector
<Constant
*, 16> Elts
;
1349 for (unsigned i
= 0, e
= Record
.size(); i
!= e
; i
+= 2) {
1350 const Type
*ElTy
= getTypeByID(Record
[i
]);
1351 if (!ElTy
) return Error("Invalid CE_GEP record");
1352 Elts
.push_back(ValueList
.getConstantFwdRef(Record
[i
+1], ElTy
));
1354 if (BitCode
== bitc::CST_CODE_CE_INBOUNDS_GEP
)
1355 V
= ConstantExpr::getInBoundsGetElementPtr(Elts
[0], &Elts
[1],
1358 V
= ConstantExpr::getGetElementPtr(Elts
[0], &Elts
[1],
1362 case bitc::CST_CODE_CE_SELECT
: // CE_SELECT: [opval#, opval#, opval#]
1363 if (Record
.size() < 3) return Error("Invalid CE_SELECT record");
1364 V
= ConstantExpr::getSelect(ValueList
.getConstantFwdRef(Record
[0],
1365 Type::getInt1Ty(Context
)),
1366 ValueList
.getConstantFwdRef(Record
[1],CurTy
),
1367 ValueList
.getConstantFwdRef(Record
[2],CurTy
));
1369 case bitc::CST_CODE_CE_EXTRACTELT
: { // CE_EXTRACTELT: [opty, opval, opval]
1370 if (Record
.size() < 3) return Error("Invalid CE_EXTRACTELT record");
1371 const VectorType
*OpTy
=
1372 dyn_cast_or_null
<VectorType
>(getTypeByID(Record
[0]));
1373 if (OpTy
== 0) return Error("Invalid CE_EXTRACTELT record");
1374 Constant
*Op0
= ValueList
.getConstantFwdRef(Record
[1], OpTy
);
1375 Constant
*Op1
= ValueList
.getConstantFwdRef(Record
[2], Type::getInt32Ty(Context
));
1376 V
= ConstantExpr::getExtractElement(Op0
, Op1
);
1379 case bitc::CST_CODE_CE_INSERTELT
: { // CE_INSERTELT: [opval, opval, opval]
1380 const VectorType
*OpTy
= dyn_cast
<VectorType
>(CurTy
);
1381 if (Record
.size() < 3 || OpTy
== 0)
1382 return Error("Invalid CE_INSERTELT record");
1383 Constant
*Op0
= ValueList
.getConstantFwdRef(Record
[0], OpTy
);
1384 Constant
*Op1
= ValueList
.getConstantFwdRef(Record
[1],
1385 OpTy
->getElementType());
1386 Constant
*Op2
= ValueList
.getConstantFwdRef(Record
[2], Type::getInt32Ty(Context
));
1387 V
= ConstantExpr::getInsertElement(Op0
, Op1
, Op2
);
1390 case bitc::CST_CODE_CE_SHUFFLEVEC
: { // CE_SHUFFLEVEC: [opval, opval, opval]
1391 const VectorType
*OpTy
= dyn_cast
<VectorType
>(CurTy
);
1392 if (Record
.size() < 3 || OpTy
== 0)
1393 return Error("Invalid CE_SHUFFLEVEC record");
1394 Constant
*Op0
= ValueList
.getConstantFwdRef(Record
[0], OpTy
);
1395 Constant
*Op1
= ValueList
.getConstantFwdRef(Record
[1], OpTy
);
1396 const Type
*ShufTy
= VectorType::get(Type::getInt32Ty(Context
),
1397 OpTy
->getNumElements());
1398 Constant
*Op2
= ValueList
.getConstantFwdRef(Record
[2], ShufTy
);
1399 V
= ConstantExpr::getShuffleVector(Op0
, Op1
, Op2
);
1402 case bitc::CST_CODE_CE_SHUFVEC_EX
: { // [opty, opval, opval, opval]
1403 const VectorType
*RTy
= dyn_cast
<VectorType
>(CurTy
);
1404 const VectorType
*OpTy
=
1405 dyn_cast_or_null
<VectorType
>(getTypeByID(Record
[0]));
1406 if (Record
.size() < 4 || RTy
== 0 || OpTy
== 0)
1407 return Error("Invalid CE_SHUFVEC_EX record");
1408 Constant
*Op0
= ValueList
.getConstantFwdRef(Record
[1], OpTy
);
1409 Constant
*Op1
= ValueList
.getConstantFwdRef(Record
[2], OpTy
);
1410 const Type
*ShufTy
= VectorType::get(Type::getInt32Ty(Context
),
1411 RTy
->getNumElements());
1412 Constant
*Op2
= ValueList
.getConstantFwdRef(Record
[3], ShufTy
);
1413 V
= ConstantExpr::getShuffleVector(Op0
, Op1
, Op2
);
1416 case bitc::CST_CODE_CE_CMP
: { // CE_CMP: [opty, opval, opval, pred]
1417 if (Record
.size() < 4) return Error("Invalid CE_CMP record");
1418 const Type
*OpTy
= getTypeByID(Record
[0]);
1419 if (OpTy
== 0) return Error("Invalid CE_CMP record");
1420 Constant
*Op0
= ValueList
.getConstantFwdRef(Record
[1], OpTy
);
1421 Constant
*Op1
= ValueList
.getConstantFwdRef(Record
[2], OpTy
);
1423 if (OpTy
->isFPOrFPVectorTy())
1424 V
= ConstantExpr::getFCmp(Record
[3], Op0
, Op1
);
1426 V
= ConstantExpr::getICmp(Record
[3], Op0
, Op1
);
1429 case bitc::CST_CODE_INLINEASM
: {
1430 if (Record
.size() < 2) return Error("Invalid INLINEASM record");
1431 std::string AsmStr
, ConstrStr
;
1432 bool HasSideEffects
= Record
[0] & 1;
1433 bool IsAlignStack
= Record
[0] >> 1;
1434 unsigned AsmStrSize
= Record
[1];
1435 if (2+AsmStrSize
>= Record
.size())
1436 return Error("Invalid INLINEASM record");
1437 unsigned ConstStrSize
= Record
[2+AsmStrSize
];
1438 if (3+AsmStrSize
+ConstStrSize
> Record
.size())
1439 return Error("Invalid INLINEASM record");
1441 for (unsigned i
= 0; i
!= AsmStrSize
; ++i
)
1442 AsmStr
+= (char)Record
[2+i
];
1443 for (unsigned i
= 0; i
!= ConstStrSize
; ++i
)
1444 ConstrStr
+= (char)Record
[3+AsmStrSize
+i
];
1445 const PointerType
*PTy
= cast
<PointerType
>(CurTy
);
1446 V
= InlineAsm::get(cast
<FunctionType
>(PTy
->getElementType()),
1447 AsmStr
, ConstrStr
, HasSideEffects
, IsAlignStack
);
1450 case bitc::CST_CODE_BLOCKADDRESS
:{
1451 if (Record
.size() < 3) return Error("Invalid CE_BLOCKADDRESS record");
1452 const Type
*FnTy
= getTypeByID(Record
[0]);
1453 if (FnTy
== 0) return Error("Invalid CE_BLOCKADDRESS record");
1455 dyn_cast_or_null
<Function
>(ValueList
.getConstantFwdRef(Record
[1],FnTy
));
1456 if (Fn
== 0) return Error("Invalid CE_BLOCKADDRESS record");
1458 GlobalVariable
*FwdRef
= new GlobalVariable(*Fn
->getParent(),
1459 Type::getInt8Ty(Context
),
1460 false, GlobalValue::InternalLinkage
,
1462 BlockAddrFwdRefs
[Fn
].push_back(std::make_pair(Record
[2], FwdRef
));
1468 ValueList
.AssignValue(V
, NextCstNo
);
1472 if (NextCstNo
!= ValueList
.size())
1473 return Error("Invalid constant reference!");
1475 if (Stream
.ReadBlockEnd())
1476 return Error("Error at end of constants block");
1478 // Once all the constants have been read, go through and resolve forward
1480 ValueList
.ResolveConstantForwardRefs();
1484 /// RememberAndSkipFunctionBody - When we see the block for a function body,
1485 /// remember where it is and then skip it. This lets us lazily deserialize the
1487 bool BitcodeReader::RememberAndSkipFunctionBody() {
1488 // Get the function we are talking about.
1489 if (FunctionsWithBodies
.empty())
1490 return Error("Insufficient function protos");
1492 Function
*Fn
= FunctionsWithBodies
.back();
1493 FunctionsWithBodies
.pop_back();
1495 // Save the current stream state.
1496 uint64_t CurBit
= Stream
.GetCurrentBitNo();
1497 DeferredFunctionInfo
[Fn
] = CurBit
;
1499 // Skip over the function block for now.
1500 if (Stream
.SkipBlock())
1501 return Error("Malformed block record");
1505 bool BitcodeReader::ParseModule() {
1506 if (Stream
.EnterSubBlock(bitc::MODULE_BLOCK_ID
))
1507 return Error("Malformed block record");
1509 SmallVector
<uint64_t, 64> Record
;
1510 std::vector
<std::string
> SectionTable
;
1511 std::vector
<std::string
> GCTable
;
1513 // Read all the records for this module.
1514 while (!Stream
.AtEndOfStream()) {
1515 unsigned Code
= Stream
.ReadCode();
1516 if (Code
== bitc::END_BLOCK
) {
1517 if (Stream
.ReadBlockEnd())
1518 return Error("Error at end of module block");
1520 // Patch the initializers for globals and aliases up.
1521 ResolveGlobalAndAliasInits();
1522 if (!GlobalInits
.empty() || !AliasInits
.empty())
1523 return Error("Malformed global initializer set");
1524 if (!FunctionsWithBodies
.empty())
1525 return Error("Too few function bodies found");
1527 // Look for intrinsic functions which need to be upgraded at some point
1528 for (Module::iterator FI
= TheModule
->begin(), FE
= TheModule
->end();
1531 if (UpgradeIntrinsicFunction(FI
, NewFn
))
1532 UpgradedIntrinsics
.push_back(std::make_pair(FI
, NewFn
));
1535 // Look for global variables which need to be renamed.
1536 for (Module::global_iterator
1537 GI
= TheModule
->global_begin(), GE
= TheModule
->global_end();
1539 UpgradeGlobalVariable(GI
);
1541 // Force deallocation of memory for these vectors to favor the client that
1542 // want lazy deserialization.
1543 std::vector
<std::pair
<GlobalVariable
*, unsigned> >().swap(GlobalInits
);
1544 std::vector
<std::pair
<GlobalAlias
*, unsigned> >().swap(AliasInits
);
1545 std::vector
<Function
*>().swap(FunctionsWithBodies
);
1549 if (Code
== bitc::ENTER_SUBBLOCK
) {
1550 switch (Stream
.ReadSubBlockID()) {
1551 default: // Skip unknown content.
1552 if (Stream
.SkipBlock())
1553 return Error("Malformed block record");
1555 case bitc::BLOCKINFO_BLOCK_ID
:
1556 if (Stream
.ReadBlockInfoBlock())
1557 return Error("Malformed BlockInfoBlock");
1559 case bitc::PARAMATTR_BLOCK_ID
:
1560 if (ParseAttributeBlock())
1563 case bitc::TYPE_BLOCK_ID_NEW
:
1564 if (ParseTypeTable())
1567 case bitc::TYPE_BLOCK_ID_OLD
:
1568 if (ParseOldTypeTable())
1571 case bitc::TYPE_SYMTAB_BLOCK_ID_OLD
:
1572 if (ParseOldTypeSymbolTable())
1575 case bitc::VALUE_SYMTAB_BLOCK_ID
:
1576 if (ParseValueSymbolTable())
1579 case bitc::CONSTANTS_BLOCK_ID
:
1580 if (ParseConstants() || ResolveGlobalAndAliasInits())
1583 case bitc::METADATA_BLOCK_ID
:
1584 if (ParseMetadata())
1587 case bitc::FUNCTION_BLOCK_ID
:
1588 // If this is the first function body we've seen, reverse the
1589 // FunctionsWithBodies list.
1590 if (!HasReversedFunctionsWithBodies
) {
1591 std::reverse(FunctionsWithBodies
.begin(), FunctionsWithBodies
.end());
1592 HasReversedFunctionsWithBodies
= true;
1595 if (RememberAndSkipFunctionBody())
1602 if (Code
== bitc::DEFINE_ABBREV
) {
1603 Stream
.ReadAbbrevRecord();
1608 switch (Stream
.ReadRecord(Code
, Record
)) {
1609 default: break; // Default behavior, ignore unknown content.
1610 case bitc::MODULE_CODE_VERSION
: // VERSION: [version#]
1611 if (Record
.size() < 1)
1612 return Error("Malformed MODULE_CODE_VERSION");
1613 // Only version #0 is supported so far.
1615 return Error("Unknown bitstream version!");
1617 case bitc::MODULE_CODE_TRIPLE
: { // TRIPLE: [strchr x N]
1619 if (ConvertToString(Record
, 0, S
))
1620 return Error("Invalid MODULE_CODE_TRIPLE record");
1621 TheModule
->setTargetTriple(S
);
1624 case bitc::MODULE_CODE_DATALAYOUT
: { // DATALAYOUT: [strchr x N]
1626 if (ConvertToString(Record
, 0, S
))
1627 return Error("Invalid MODULE_CODE_DATALAYOUT record");
1628 TheModule
->setDataLayout(S
);
1631 case bitc::MODULE_CODE_ASM
: { // ASM: [strchr x N]
1633 if (ConvertToString(Record
, 0, S
))
1634 return Error("Invalid MODULE_CODE_ASM record");
1635 TheModule
->setModuleInlineAsm(S
);
1638 case bitc::MODULE_CODE_DEPLIB
: { // DEPLIB: [strchr x N]
1640 if (ConvertToString(Record
, 0, S
))
1641 return Error("Invalid MODULE_CODE_DEPLIB record");
1642 TheModule
->addLibrary(S
);
1645 case bitc::MODULE_CODE_SECTIONNAME
: { // SECTIONNAME: [strchr x N]
1647 if (ConvertToString(Record
, 0, S
))
1648 return Error("Invalid MODULE_CODE_SECTIONNAME record");
1649 SectionTable
.push_back(S
);
1652 case bitc::MODULE_CODE_GCNAME
: { // SECTIONNAME: [strchr x N]
1654 if (ConvertToString(Record
, 0, S
))
1655 return Error("Invalid MODULE_CODE_GCNAME record");
1656 GCTable
.push_back(S
);
1659 // GLOBALVAR: [pointer type, isconst, initid,
1660 // linkage, alignment, section, visibility, threadlocal,
1662 case bitc::MODULE_CODE_GLOBALVAR
: {
1663 if (Record
.size() < 6)
1664 return Error("Invalid MODULE_CODE_GLOBALVAR record");
1665 const Type
*Ty
= getTypeByID(Record
[0]);
1666 if (!Ty
) return Error("Invalid MODULE_CODE_GLOBALVAR record");
1667 if (!Ty
->isPointerTy())
1668 return Error("Global not a pointer type!");
1669 unsigned AddressSpace
= cast
<PointerType
>(Ty
)->getAddressSpace();
1670 Ty
= cast
<PointerType
>(Ty
)->getElementType();
1672 bool isConstant
= Record
[1];
1673 GlobalValue::LinkageTypes Linkage
= GetDecodedLinkage(Record
[3]);
1674 unsigned Alignment
= (1 << Record
[4]) >> 1;
1675 std::string Section
;
1677 if (Record
[5]-1 >= SectionTable
.size())
1678 return Error("Invalid section ID");
1679 Section
= SectionTable
[Record
[5]-1];
1681 GlobalValue::VisibilityTypes Visibility
= GlobalValue::DefaultVisibility
;
1682 if (Record
.size() > 6)
1683 Visibility
= GetDecodedVisibility(Record
[6]);
1684 bool isThreadLocal
= false;
1685 if (Record
.size() > 7)
1686 isThreadLocal
= Record
[7];
1688 bool UnnamedAddr
= false;
1689 if (Record
.size() > 8)
1690 UnnamedAddr
= Record
[8];
1692 GlobalVariable
*NewGV
=
1693 new GlobalVariable(*TheModule
, Ty
, isConstant
, Linkage
, 0, "", 0,
1694 isThreadLocal
, AddressSpace
);
1695 NewGV
->setAlignment(Alignment
);
1696 if (!Section
.empty())
1697 NewGV
->setSection(Section
);
1698 NewGV
->setVisibility(Visibility
);
1699 NewGV
->setThreadLocal(isThreadLocal
);
1700 NewGV
->setUnnamedAddr(UnnamedAddr
);
1702 ValueList
.push_back(NewGV
);
1704 // Remember which value to use for the global initializer.
1705 if (unsigned InitID
= Record
[2])
1706 GlobalInits
.push_back(std::make_pair(NewGV
, InitID
-1));
1709 // FUNCTION: [type, callingconv, isproto, linkage, paramattr,
1710 // alignment, section, visibility, gc, unnamed_addr]
1711 case bitc::MODULE_CODE_FUNCTION
: {
1712 if (Record
.size() < 8)
1713 return Error("Invalid MODULE_CODE_FUNCTION record");
1714 const Type
*Ty
= getTypeByID(Record
[0]);
1715 if (!Ty
) return Error("Invalid MODULE_CODE_FUNCTION record");
1716 if (!Ty
->isPointerTy())
1717 return Error("Function not a pointer type!");
1718 const FunctionType
*FTy
=
1719 dyn_cast
<FunctionType
>(cast
<PointerType
>(Ty
)->getElementType());
1721 return Error("Function not a pointer to function type!");
1723 Function
*Func
= Function::Create(FTy
, GlobalValue::ExternalLinkage
,
1726 Func
->setCallingConv(static_cast<CallingConv::ID
>(Record
[1]));
1727 bool isProto
= Record
[2];
1728 Func
->setLinkage(GetDecodedLinkage(Record
[3]));
1729 Func
->setAttributes(getAttributes(Record
[4]));
1731 Func
->setAlignment((1 << Record
[5]) >> 1);
1733 if (Record
[6]-1 >= SectionTable
.size())
1734 return Error("Invalid section ID");
1735 Func
->setSection(SectionTable
[Record
[6]-1]);
1737 Func
->setVisibility(GetDecodedVisibility(Record
[7]));
1738 if (Record
.size() > 8 && Record
[8]) {
1739 if (Record
[8]-1 > GCTable
.size())
1740 return Error("Invalid GC ID");
1741 Func
->setGC(GCTable
[Record
[8]-1].c_str());
1743 bool UnnamedAddr
= false;
1744 if (Record
.size() > 9)
1745 UnnamedAddr
= Record
[9];
1746 Func
->setUnnamedAddr(UnnamedAddr
);
1747 ValueList
.push_back(Func
);
1749 // If this is a function with a body, remember the prototype we are
1750 // creating now, so that we can match up the body with them later.
1752 FunctionsWithBodies
.push_back(Func
);
1755 // ALIAS: [alias type, aliasee val#, linkage]
1756 // ALIAS: [alias type, aliasee val#, linkage, visibility]
1757 case bitc::MODULE_CODE_ALIAS
: {
1758 if (Record
.size() < 3)
1759 return Error("Invalid MODULE_ALIAS record");
1760 const Type
*Ty
= getTypeByID(Record
[0]);
1761 if (!Ty
) return Error("Invalid MODULE_ALIAS record");
1762 if (!Ty
->isPointerTy())
1763 return Error("Function not a pointer type!");
1765 GlobalAlias
*NewGA
= new GlobalAlias(Ty
, GetDecodedLinkage(Record
[2]),
1767 // Old bitcode files didn't have visibility field.
1768 if (Record
.size() > 3)
1769 NewGA
->setVisibility(GetDecodedVisibility(Record
[3]));
1770 ValueList
.push_back(NewGA
);
1771 AliasInits
.push_back(std::make_pair(NewGA
, Record
[1]));
1774 /// MODULE_CODE_PURGEVALS: [numvals]
1775 case bitc::MODULE_CODE_PURGEVALS
:
1776 // Trim down the value list to the specified size.
1777 if (Record
.size() < 1 || Record
[0] > ValueList
.size())
1778 return Error("Invalid MODULE_PURGEVALS record");
1779 ValueList
.shrinkTo(Record
[0]);
1785 return Error("Premature end of bitstream");
1788 bool BitcodeReader::ParseBitcodeInto(Module
*M
) {
1791 unsigned char *BufPtr
= (unsigned char *)Buffer
->getBufferStart();
1792 unsigned char *BufEnd
= BufPtr
+Buffer
->getBufferSize();
1794 if (Buffer
->getBufferSize() & 3) {
1795 if (!isRawBitcode(BufPtr
, BufEnd
) && !isBitcodeWrapper(BufPtr
, BufEnd
))
1796 return Error("Invalid bitcode signature");
1798 return Error("Bitcode stream should be a multiple of 4 bytes in length");
1801 // If we have a wrapper header, parse it and ignore the non-bc file contents.
1802 // The magic number is 0x0B17C0DE stored in little endian.
1803 if (isBitcodeWrapper(BufPtr
, BufEnd
))
1804 if (SkipBitcodeWrapperHeader(BufPtr
, BufEnd
))
1805 return Error("Invalid bitcode wrapper header");
1807 StreamFile
.init(BufPtr
, BufEnd
);
1808 Stream
.init(StreamFile
);
1810 // Sniff for the signature.
1811 if (Stream
.Read(8) != 'B' ||
1812 Stream
.Read(8) != 'C' ||
1813 Stream
.Read(4) != 0x0 ||
1814 Stream
.Read(4) != 0xC ||
1815 Stream
.Read(4) != 0xE ||
1816 Stream
.Read(4) != 0xD)
1817 return Error("Invalid bitcode signature");
1819 // We expect a number of well-defined blocks, though we don't necessarily
1820 // need to understand them all.
1821 while (!Stream
.AtEndOfStream()) {
1822 unsigned Code
= Stream
.ReadCode();
1824 if (Code
!= bitc::ENTER_SUBBLOCK
) {
1826 // The ranlib in xcode 4 will align archive members by appending newlines to the
1827 // end of them. If this file size is a multiple of 4 but not 8, we have to read and
1828 // ignore these final 4 bytes :-(
1829 if (Stream
.GetAbbrevIDWidth() == 2 && Code
== 2 &&
1830 Stream
.Read(6) == 2 && Stream
.Read(24) == 0xa0a0a &&
1831 Stream
.AtEndOfStream())
1834 return Error("Invalid record at top-level");
1837 unsigned BlockID
= Stream
.ReadSubBlockID();
1839 // We only know the MODULE subblock ID.
1841 case bitc::BLOCKINFO_BLOCK_ID
:
1842 if (Stream
.ReadBlockInfoBlock())
1843 return Error("Malformed BlockInfoBlock");
1845 case bitc::MODULE_BLOCK_ID
:
1846 // Reject multiple MODULE_BLOCK's in a single bitstream.
1848 return Error("Multiple MODULE_BLOCKs in same stream");
1854 if (Stream
.SkipBlock())
1855 return Error("Malformed block record");
1863 bool BitcodeReader::ParseModuleTriple(std::string
&Triple
) {
1864 if (Stream
.EnterSubBlock(bitc::MODULE_BLOCK_ID
))
1865 return Error("Malformed block record");
1867 SmallVector
<uint64_t, 64> Record
;
1869 // Read all the records for this module.
1870 while (!Stream
.AtEndOfStream()) {
1871 unsigned Code
= Stream
.ReadCode();
1872 if (Code
== bitc::END_BLOCK
) {
1873 if (Stream
.ReadBlockEnd())
1874 return Error("Error at end of module block");
1879 if (Code
== bitc::ENTER_SUBBLOCK
) {
1880 switch (Stream
.ReadSubBlockID()) {
1881 default: // Skip unknown content.
1882 if (Stream
.SkipBlock())
1883 return Error("Malformed block record");
1889 if (Code
== bitc::DEFINE_ABBREV
) {
1890 Stream
.ReadAbbrevRecord();
1895 switch (Stream
.ReadRecord(Code
, Record
)) {
1896 default: break; // Default behavior, ignore unknown content.
1897 case bitc::MODULE_CODE_VERSION
: // VERSION: [version#]
1898 if (Record
.size() < 1)
1899 return Error("Malformed MODULE_CODE_VERSION");
1900 // Only version #0 is supported so far.
1902 return Error("Unknown bitstream version!");
1904 case bitc::MODULE_CODE_TRIPLE
: { // TRIPLE: [strchr x N]
1906 if (ConvertToString(Record
, 0, S
))
1907 return Error("Invalid MODULE_CODE_TRIPLE record");
1915 return Error("Premature end of bitstream");
1918 bool BitcodeReader::ParseTriple(std::string
&Triple
) {
1919 if (Buffer
->getBufferSize() & 3)
1920 return Error("Bitcode stream should be a multiple of 4 bytes in length");
1922 unsigned char *BufPtr
= (unsigned char *)Buffer
->getBufferStart();
1923 unsigned char *BufEnd
= BufPtr
+Buffer
->getBufferSize();
1925 // If we have a wrapper header, parse it and ignore the non-bc file contents.
1926 // The magic number is 0x0B17C0DE stored in little endian.
1927 if (isBitcodeWrapper(BufPtr
, BufEnd
))
1928 if (SkipBitcodeWrapperHeader(BufPtr
, BufEnd
))
1929 return Error("Invalid bitcode wrapper header");
1931 StreamFile
.init(BufPtr
, BufEnd
);
1932 Stream
.init(StreamFile
);
1934 // Sniff for the signature.
1935 if (Stream
.Read(8) != 'B' ||
1936 Stream
.Read(8) != 'C' ||
1937 Stream
.Read(4) != 0x0 ||
1938 Stream
.Read(4) != 0xC ||
1939 Stream
.Read(4) != 0xE ||
1940 Stream
.Read(4) != 0xD)
1941 return Error("Invalid bitcode signature");
1943 // We expect a number of well-defined blocks, though we don't necessarily
1944 // need to understand them all.
1945 while (!Stream
.AtEndOfStream()) {
1946 unsigned Code
= Stream
.ReadCode();
1948 if (Code
!= bitc::ENTER_SUBBLOCK
)
1949 return Error("Invalid record at top-level");
1951 unsigned BlockID
= Stream
.ReadSubBlockID();
1953 // We only know the MODULE subblock ID.
1955 case bitc::MODULE_BLOCK_ID
:
1956 if (ParseModuleTriple(Triple
))
1960 if (Stream
.SkipBlock())
1961 return Error("Malformed block record");
1969 /// ParseMetadataAttachment - Parse metadata attachments.
1970 bool BitcodeReader::ParseMetadataAttachment() {
1971 if (Stream
.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID
))
1972 return Error("Malformed block record");
1974 SmallVector
<uint64_t, 64> Record
;
1976 unsigned Code
= Stream
.ReadCode();
1977 if (Code
== bitc::END_BLOCK
) {
1978 if (Stream
.ReadBlockEnd())
1979 return Error("Error at end of PARAMATTR block");
1982 if (Code
== bitc::DEFINE_ABBREV
) {
1983 Stream
.ReadAbbrevRecord();
1986 // Read a metadata attachment record.
1988 switch (Stream
.ReadRecord(Code
, Record
)) {
1989 default: // Default behavior: ignore.
1991 case bitc::METADATA_ATTACHMENT
: {
1992 unsigned RecordLength
= Record
.size();
1993 if (Record
.empty() || (RecordLength
- 1) % 2 == 1)
1994 return Error ("Invalid METADATA_ATTACHMENT reader!");
1995 Instruction
*Inst
= InstructionList
[Record
[0]];
1996 for (unsigned i
= 1; i
!= RecordLength
; i
= i
+2) {
1997 unsigned Kind
= Record
[i
];
1998 DenseMap
<unsigned, unsigned>::iterator I
=
1999 MDKindMap
.find(Kind
);
2000 if (I
== MDKindMap
.end())
2001 return Error("Invalid metadata kind ID");
2002 Value
*Node
= MDValueList
.getValueFwdRef(Record
[i
+1]);
2003 Inst
->setMetadata(I
->second
, cast
<MDNode
>(Node
));
2012 /// ParseFunctionBody - Lazily parse the specified function body block.
2013 bool BitcodeReader::ParseFunctionBody(Function
*F
) {
2014 if (Stream
.EnterSubBlock(bitc::FUNCTION_BLOCK_ID
))
2015 return Error("Malformed block record");
2017 InstructionList
.clear();
2018 unsigned ModuleValueListSize
= ValueList
.size();
2019 unsigned ModuleMDValueListSize
= MDValueList
.size();
2021 // Add all the function arguments to the value table.
2022 for(Function::arg_iterator I
= F
->arg_begin(), E
= F
->arg_end(); I
!= E
; ++I
)
2023 ValueList
.push_back(I
);
2025 unsigned NextValueNo
= ValueList
.size();
2026 BasicBlock
*CurBB
= 0;
2027 unsigned CurBBNo
= 0;
2031 // Read all the records.
2032 SmallVector
<uint64_t, 64> Record
;
2034 unsigned Code
= Stream
.ReadCode();
2035 if (Code
== bitc::END_BLOCK
) {
2036 if (Stream
.ReadBlockEnd())
2037 return Error("Error at end of function block");
2041 if (Code
== bitc::ENTER_SUBBLOCK
) {
2042 switch (Stream
.ReadSubBlockID()) {
2043 default: // Skip unknown content.
2044 if (Stream
.SkipBlock())
2045 return Error("Malformed block record");
2047 case bitc::CONSTANTS_BLOCK_ID
:
2048 if (ParseConstants()) return true;
2049 NextValueNo
= ValueList
.size();
2051 case bitc::VALUE_SYMTAB_BLOCK_ID
:
2052 if (ParseValueSymbolTable()) return true;
2054 case bitc::METADATA_ATTACHMENT_ID
:
2055 if (ParseMetadataAttachment()) return true;
2057 case bitc::METADATA_BLOCK_ID
:
2058 if (ParseMetadata()) return true;
2064 if (Code
== bitc::DEFINE_ABBREV
) {
2065 Stream
.ReadAbbrevRecord();
2072 unsigned BitCode
= Stream
.ReadRecord(Code
, Record
);
2074 default: // Default behavior: reject
2075 return Error("Unknown instruction");
2076 case bitc::FUNC_CODE_DECLAREBLOCKS
: // DECLAREBLOCKS: [nblocks]
2077 if (Record
.size() < 1 || Record
[0] == 0)
2078 return Error("Invalid DECLAREBLOCKS record");
2079 // Create all the basic blocks for the function.
2080 FunctionBBs
.resize(Record
[0]);
2081 for (unsigned i
= 0, e
= FunctionBBs
.size(); i
!= e
; ++i
)
2082 FunctionBBs
[i
] = BasicBlock::Create(Context
, "", F
);
2083 CurBB
= FunctionBBs
[0];
2086 case bitc::FUNC_CODE_DEBUG_LOC_AGAIN
: // DEBUG_LOC_AGAIN
2087 // This record indicates that the last instruction is at the same
2088 // location as the previous instruction with a location.
2091 // Get the last instruction emitted.
2092 if (CurBB
&& !CurBB
->empty())
2094 else if (CurBBNo
&& FunctionBBs
[CurBBNo
-1] &&
2095 !FunctionBBs
[CurBBNo
-1]->empty())
2096 I
= &FunctionBBs
[CurBBNo
-1]->back();
2098 if (I
== 0) return Error("Invalid DEBUG_LOC_AGAIN record");
2099 I
->setDebugLoc(LastLoc
);
2103 case bitc::FUNC_CODE_DEBUG_LOC
: { // DEBUG_LOC: [line, col, scope, ia]
2104 I
= 0; // Get the last instruction emitted.
2105 if (CurBB
&& !CurBB
->empty())
2107 else if (CurBBNo
&& FunctionBBs
[CurBBNo
-1] &&
2108 !FunctionBBs
[CurBBNo
-1]->empty())
2109 I
= &FunctionBBs
[CurBBNo
-1]->back();
2110 if (I
== 0 || Record
.size() < 4)
2111 return Error("Invalid FUNC_CODE_DEBUG_LOC record");
2113 unsigned Line
= Record
[0], Col
= Record
[1];
2114 unsigned ScopeID
= Record
[2], IAID
= Record
[3];
2116 MDNode
*Scope
= 0, *IA
= 0;
2117 if (ScopeID
) Scope
= cast
<MDNode
>(MDValueList
.getValueFwdRef(ScopeID
-1));
2118 if (IAID
) IA
= cast
<MDNode
>(MDValueList
.getValueFwdRef(IAID
-1));
2119 LastLoc
= DebugLoc::get(Line
, Col
, Scope
, IA
);
2120 I
->setDebugLoc(LastLoc
);
2125 case bitc::FUNC_CODE_INST_BINOP
: { // BINOP: [opval, ty, opval, opcode]
2128 if (getValueTypePair(Record
, OpNum
, NextValueNo
, LHS
) ||
2129 getValue(Record
, OpNum
, LHS
->getType(), RHS
) ||
2130 OpNum
+1 > Record
.size())
2131 return Error("Invalid BINOP record");
2133 int Opc
= GetDecodedBinaryOpcode(Record
[OpNum
++], LHS
->getType());
2134 if (Opc
== -1) return Error("Invalid BINOP record");
2135 I
= BinaryOperator::Create((Instruction::BinaryOps
)Opc
, LHS
, RHS
);
2136 InstructionList
.push_back(I
);
2137 if (OpNum
< Record
.size()) {
2138 if (Opc
== Instruction::Add
||
2139 Opc
== Instruction::Sub
||
2140 Opc
== Instruction::Mul
||
2141 Opc
== Instruction::Shl
) {
2142 if (Record
[OpNum
] & (1 << bitc::OBO_NO_SIGNED_WRAP
))
2143 cast
<BinaryOperator
>(I
)->setHasNoSignedWrap(true);
2144 if (Record
[OpNum
] & (1 << bitc::OBO_NO_UNSIGNED_WRAP
))
2145 cast
<BinaryOperator
>(I
)->setHasNoUnsignedWrap(true);
2146 } else if (Opc
== Instruction::SDiv
||
2147 Opc
== Instruction::UDiv
||
2148 Opc
== Instruction::LShr
||
2149 Opc
== Instruction::AShr
) {
2150 if (Record
[OpNum
] & (1 << bitc::PEO_EXACT
))
2151 cast
<BinaryOperator
>(I
)->setIsExact(true);
2156 case bitc::FUNC_CODE_INST_CAST
: { // CAST: [opval, opty, destty, castopc]
2159 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Op
) ||
2160 OpNum
+2 != Record
.size())
2161 return Error("Invalid CAST record");
2163 const Type
*ResTy
= getTypeByID(Record
[OpNum
]);
2164 int Opc
= GetDecodedCastOpcode(Record
[OpNum
+1]);
2165 if (Opc
== -1 || ResTy
== 0)
2166 return Error("Invalid CAST record");
2167 I
= CastInst::Create((Instruction::CastOps
)Opc
, Op
, ResTy
);
2168 InstructionList
.push_back(I
);
2171 case bitc::FUNC_CODE_INST_INBOUNDS_GEP
:
2172 case bitc::FUNC_CODE_INST_GEP
: { // GEP: [n x operands]
2175 if (getValueTypePair(Record
, OpNum
, NextValueNo
, BasePtr
))
2176 return Error("Invalid GEP record");
2178 SmallVector
<Value
*, 16> GEPIdx
;
2179 while (OpNum
!= Record
.size()) {
2181 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Op
))
2182 return Error("Invalid GEP record");
2183 GEPIdx
.push_back(Op
);
2186 I
= GetElementPtrInst::Create(BasePtr
, GEPIdx
.begin(), GEPIdx
.end());
2187 InstructionList
.push_back(I
);
2188 if (BitCode
== bitc::FUNC_CODE_INST_INBOUNDS_GEP
)
2189 cast
<GetElementPtrInst
>(I
)->setIsInBounds(true);
2193 case bitc::FUNC_CODE_INST_EXTRACTVAL
: {
2194 // EXTRACTVAL: [opty, opval, n x indices]
2197 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Agg
))
2198 return Error("Invalid EXTRACTVAL record");
2200 SmallVector
<unsigned, 4> EXTRACTVALIdx
;
2201 for (unsigned RecSize
= Record
.size();
2202 OpNum
!= RecSize
; ++OpNum
) {
2203 uint64_t Index
= Record
[OpNum
];
2204 if ((unsigned)Index
!= Index
)
2205 return Error("Invalid EXTRACTVAL index");
2206 EXTRACTVALIdx
.push_back((unsigned)Index
);
2209 I
= ExtractValueInst::Create(Agg
,
2210 EXTRACTVALIdx
.begin(), EXTRACTVALIdx
.end());
2211 InstructionList
.push_back(I
);
2215 case bitc::FUNC_CODE_INST_INSERTVAL
: {
2216 // INSERTVAL: [opty, opval, opty, opval, n x indices]
2219 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Agg
))
2220 return Error("Invalid INSERTVAL record");
2222 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Val
))
2223 return Error("Invalid INSERTVAL record");
2225 SmallVector
<unsigned, 4> INSERTVALIdx
;
2226 for (unsigned RecSize
= Record
.size();
2227 OpNum
!= RecSize
; ++OpNum
) {
2228 uint64_t Index
= Record
[OpNum
];
2229 if ((unsigned)Index
!= Index
)
2230 return Error("Invalid INSERTVAL index");
2231 INSERTVALIdx
.push_back((unsigned)Index
);
2234 I
= InsertValueInst::Create(Agg
, Val
,
2235 INSERTVALIdx
.begin(), INSERTVALIdx
.end());
2236 InstructionList
.push_back(I
);
2240 case bitc::FUNC_CODE_INST_SELECT
: { // SELECT: [opval, ty, opval, opval]
2241 // obsolete form of select
2242 // handles select i1 ... in old bitcode
2244 Value
*TrueVal
, *FalseVal
, *Cond
;
2245 if (getValueTypePair(Record
, OpNum
, NextValueNo
, TrueVal
) ||
2246 getValue(Record
, OpNum
, TrueVal
->getType(), FalseVal
) ||
2247 getValue(Record
, OpNum
, Type::getInt1Ty(Context
), Cond
))
2248 return Error("Invalid SELECT record");
2250 I
= SelectInst::Create(Cond
, TrueVal
, FalseVal
);
2251 InstructionList
.push_back(I
);
2255 case bitc::FUNC_CODE_INST_VSELECT
: {// VSELECT: [ty,opval,opval,predty,pred]
2256 // new form of select
2257 // handles select i1 or select [N x i1]
2259 Value
*TrueVal
, *FalseVal
, *Cond
;
2260 if (getValueTypePair(Record
, OpNum
, NextValueNo
, TrueVal
) ||
2261 getValue(Record
, OpNum
, TrueVal
->getType(), FalseVal
) ||
2262 getValueTypePair(Record
, OpNum
, NextValueNo
, Cond
))
2263 return Error("Invalid SELECT record");
2265 // select condition can be either i1 or [N x i1]
2266 if (const VectorType
* vector_type
=
2267 dyn_cast
<const VectorType
>(Cond
->getType())) {
2269 if (vector_type
->getElementType() != Type::getInt1Ty(Context
))
2270 return Error("Invalid SELECT condition type");
2273 if (Cond
->getType() != Type::getInt1Ty(Context
))
2274 return Error("Invalid SELECT condition type");
2277 I
= SelectInst::Create(Cond
, TrueVal
, FalseVal
);
2278 InstructionList
.push_back(I
);
2282 case bitc::FUNC_CODE_INST_EXTRACTELT
: { // EXTRACTELT: [opty, opval, opval]
2285 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Vec
) ||
2286 getValue(Record
, OpNum
, Type::getInt32Ty(Context
), Idx
))
2287 return Error("Invalid EXTRACTELT record");
2288 I
= ExtractElementInst::Create(Vec
, Idx
);
2289 InstructionList
.push_back(I
);
2293 case bitc::FUNC_CODE_INST_INSERTELT
: { // INSERTELT: [ty, opval,opval,opval]
2295 Value
*Vec
, *Elt
, *Idx
;
2296 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Vec
) ||
2297 getValue(Record
, OpNum
,
2298 cast
<VectorType
>(Vec
->getType())->getElementType(), Elt
) ||
2299 getValue(Record
, OpNum
, Type::getInt32Ty(Context
), Idx
))
2300 return Error("Invalid INSERTELT record");
2301 I
= InsertElementInst::Create(Vec
, Elt
, Idx
);
2302 InstructionList
.push_back(I
);
2306 case bitc::FUNC_CODE_INST_SHUFFLEVEC
: {// SHUFFLEVEC: [opval,ty,opval,opval]
2308 Value
*Vec1
, *Vec2
, *Mask
;
2309 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Vec1
) ||
2310 getValue(Record
, OpNum
, Vec1
->getType(), Vec2
))
2311 return Error("Invalid SHUFFLEVEC record");
2313 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Mask
))
2314 return Error("Invalid SHUFFLEVEC record");
2315 I
= new ShuffleVectorInst(Vec1
, Vec2
, Mask
);
2316 InstructionList
.push_back(I
);
2320 case bitc::FUNC_CODE_INST_CMP
: // CMP: [opty, opval, opval, pred]
2321 // Old form of ICmp/FCmp returning bool
2322 // Existed to differentiate between icmp/fcmp and vicmp/vfcmp which were
2323 // both legal on vectors but had different behaviour.
2324 case bitc::FUNC_CODE_INST_CMP2
: { // CMP2: [opty, opval, opval, pred]
2325 // FCmp/ICmp returning bool or vector of bool
2329 if (getValueTypePair(Record
, OpNum
, NextValueNo
, LHS
) ||
2330 getValue(Record
, OpNum
, LHS
->getType(), RHS
) ||
2331 OpNum
+1 != Record
.size())
2332 return Error("Invalid CMP record");
2334 if (LHS
->getType()->isFPOrFPVectorTy())
2335 I
= new FCmpInst((FCmpInst::Predicate
)Record
[OpNum
], LHS
, RHS
);
2337 I
= new ICmpInst((ICmpInst::Predicate
)Record
[OpNum
], LHS
, RHS
);
2338 InstructionList
.push_back(I
);
2342 case bitc::FUNC_CODE_INST_RET
: // RET: [opty,opval<optional>]
2344 unsigned Size
= Record
.size();
2346 I
= ReturnInst::Create(Context
);
2347 InstructionList
.push_back(I
);
2353 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Op
))
2354 return Error("Invalid RET record");
2355 if (OpNum
!= Record
.size())
2356 return Error("Invalid RET record");
2358 I
= ReturnInst::Create(Context
, Op
);
2359 InstructionList
.push_back(I
);
2362 case bitc::FUNC_CODE_INST_BR
: { // BR: [bb#, bb#, opval] or [bb#]
2363 if (Record
.size() != 1 && Record
.size() != 3)
2364 return Error("Invalid BR record");
2365 BasicBlock
*TrueDest
= getBasicBlock(Record
[0]);
2367 return Error("Invalid BR record");
2369 if (Record
.size() == 1) {
2370 I
= BranchInst::Create(TrueDest
);
2371 InstructionList
.push_back(I
);
2374 BasicBlock
*FalseDest
= getBasicBlock(Record
[1]);
2375 Value
*Cond
= getFnValueByID(Record
[2], Type::getInt1Ty(Context
));
2376 if (FalseDest
== 0 || Cond
== 0)
2377 return Error("Invalid BR record");
2378 I
= BranchInst::Create(TrueDest
, FalseDest
, Cond
);
2379 InstructionList
.push_back(I
);
2383 case bitc::FUNC_CODE_INST_SWITCH
: { // SWITCH: [opty, op0, op1, ...]
2384 if (Record
.size() < 3 || (Record
.size() & 1) == 0)
2385 return Error("Invalid SWITCH record");
2386 const Type
*OpTy
= getTypeByID(Record
[0]);
2387 Value
*Cond
= getFnValueByID(Record
[1], OpTy
);
2388 BasicBlock
*Default
= getBasicBlock(Record
[2]);
2389 if (OpTy
== 0 || Cond
== 0 || Default
== 0)
2390 return Error("Invalid SWITCH record");
2391 unsigned NumCases
= (Record
.size()-3)/2;
2392 SwitchInst
*SI
= SwitchInst::Create(Cond
, Default
, NumCases
);
2393 InstructionList
.push_back(SI
);
2394 for (unsigned i
= 0, e
= NumCases
; i
!= e
; ++i
) {
2395 ConstantInt
*CaseVal
=
2396 dyn_cast_or_null
<ConstantInt
>(getFnValueByID(Record
[3+i
*2], OpTy
));
2397 BasicBlock
*DestBB
= getBasicBlock(Record
[1+3+i
*2]);
2398 if (CaseVal
== 0 || DestBB
== 0) {
2400 return Error("Invalid SWITCH record!");
2402 SI
->addCase(CaseVal
, DestBB
);
2407 case bitc::FUNC_CODE_INST_INDIRECTBR
: { // INDIRECTBR: [opty, op0, op1, ...]
2408 if (Record
.size() < 2)
2409 return Error("Invalid INDIRECTBR record");
2410 const Type
*OpTy
= getTypeByID(Record
[0]);
2411 Value
*Address
= getFnValueByID(Record
[1], OpTy
);
2412 if (OpTy
== 0 || Address
== 0)
2413 return Error("Invalid INDIRECTBR record");
2414 unsigned NumDests
= Record
.size()-2;
2415 IndirectBrInst
*IBI
= IndirectBrInst::Create(Address
, NumDests
);
2416 InstructionList
.push_back(IBI
);
2417 for (unsigned i
= 0, e
= NumDests
; i
!= e
; ++i
) {
2418 if (BasicBlock
*DestBB
= getBasicBlock(Record
[2+i
])) {
2419 IBI
->addDestination(DestBB
);
2422 return Error("Invalid INDIRECTBR record!");
2429 case bitc::FUNC_CODE_INST_INVOKE
: {
2430 // INVOKE: [attrs, cc, normBB, unwindBB, fnty, op0,op1,op2, ...]
2431 if (Record
.size() < 4) return Error("Invalid INVOKE record");
2432 AttrListPtr PAL
= getAttributes(Record
[0]);
2433 unsigned CCInfo
= Record
[1];
2434 BasicBlock
*NormalBB
= getBasicBlock(Record
[2]);
2435 BasicBlock
*UnwindBB
= getBasicBlock(Record
[3]);
2439 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Callee
))
2440 return Error("Invalid INVOKE record");
2442 const PointerType
*CalleeTy
= dyn_cast
<PointerType
>(Callee
->getType());
2443 const FunctionType
*FTy
= !CalleeTy
? 0 :
2444 dyn_cast
<FunctionType
>(CalleeTy
->getElementType());
2446 // Check that the right number of fixed parameters are here.
2447 if (FTy
== 0 || NormalBB
== 0 || UnwindBB
== 0 ||
2448 Record
.size() < OpNum
+FTy
->getNumParams())
2449 return Error("Invalid INVOKE record");
2451 SmallVector
<Value
*, 16> Ops
;
2452 for (unsigned i
= 0, e
= FTy
->getNumParams(); i
!= e
; ++i
, ++OpNum
) {
2453 Ops
.push_back(getFnValueByID(Record
[OpNum
], FTy
->getParamType(i
)));
2454 if (Ops
.back() == 0) return Error("Invalid INVOKE record");
2457 if (!FTy
->isVarArg()) {
2458 if (Record
.size() != OpNum
)
2459 return Error("Invalid INVOKE record");
2461 // Read type/value pairs for varargs params.
2462 while (OpNum
!= Record
.size()) {
2464 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Op
))
2465 return Error("Invalid INVOKE record");
2470 I
= InvokeInst::Create(Callee
, NormalBB
, UnwindBB
,
2471 Ops
.begin(), Ops
.end());
2472 InstructionList
.push_back(I
);
2473 cast
<InvokeInst
>(I
)->setCallingConv(
2474 static_cast<CallingConv::ID
>(CCInfo
));
2475 cast
<InvokeInst
>(I
)->setAttributes(PAL
);
2478 case bitc::FUNC_CODE_INST_UNWIND
: // UNWIND
2479 I
= new UnwindInst(Context
);
2480 InstructionList
.push_back(I
);
2482 case bitc::FUNC_CODE_INST_UNREACHABLE
: // UNREACHABLE
2483 I
= new UnreachableInst(Context
);
2484 InstructionList
.push_back(I
);
2486 case bitc::FUNC_CODE_INST_PHI
: { // PHI: [ty, val0,bb0, ...]
2487 if (Record
.size() < 1 || ((Record
.size()-1)&1))
2488 return Error("Invalid PHI record");
2489 const Type
*Ty
= getTypeByID(Record
[0]);
2490 if (!Ty
) return Error("Invalid PHI record");
2492 PHINode
*PN
= PHINode::Create(Ty
, (Record
.size()-1)/2);
2493 InstructionList
.push_back(PN
);
2495 for (unsigned i
= 0, e
= Record
.size()-1; i
!= e
; i
+= 2) {
2496 Value
*V
= getFnValueByID(Record
[1+i
], Ty
);
2497 BasicBlock
*BB
= getBasicBlock(Record
[2+i
]);
2498 if (!V
|| !BB
) return Error("Invalid PHI record");
2499 PN
->addIncoming(V
, BB
);
2505 case bitc::FUNC_CODE_INST_ALLOCA
: { // ALLOCA: [instty, opty, op, align]
2506 if (Record
.size() != 4)
2507 return Error("Invalid ALLOCA record");
2508 const PointerType
*Ty
=
2509 dyn_cast_or_null
<PointerType
>(getTypeByID(Record
[0]));
2510 const Type
*OpTy
= getTypeByID(Record
[1]);
2511 Value
*Size
= getFnValueByID(Record
[2], OpTy
);
2512 unsigned Align
= Record
[3];
2513 if (!Ty
|| !Size
) return Error("Invalid ALLOCA record");
2514 I
= new AllocaInst(Ty
->getElementType(), Size
, (1 << Align
) >> 1);
2515 InstructionList
.push_back(I
);
2518 case bitc::FUNC_CODE_INST_LOAD
: { // LOAD: [opty, op, align, vol]
2521 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Op
) ||
2522 OpNum
+2 != Record
.size())
2523 return Error("Invalid LOAD record");
2525 I
= new LoadInst(Op
, "", Record
[OpNum
+1], (1 << Record
[OpNum
]) >> 1);
2526 InstructionList
.push_back(I
);
2529 case bitc::FUNC_CODE_INST_STORE
: { // STORE2:[ptrty, ptr, val, align, vol]
2532 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Ptr
) ||
2533 getValue(Record
, OpNum
,
2534 cast
<PointerType
>(Ptr
->getType())->getElementType(), Val
) ||
2535 OpNum
+2 != Record
.size())
2536 return Error("Invalid STORE record");
2538 I
= new StoreInst(Val
, Ptr
, Record
[OpNum
+1], (1 << Record
[OpNum
]) >> 1);
2539 InstructionList
.push_back(I
);
2542 case bitc::FUNC_CODE_INST_CALL
: {
2543 // CALL: [paramattrs, cc, fnty, fnid, arg0, arg1...]
2544 if (Record
.size() < 3)
2545 return Error("Invalid CALL record");
2547 AttrListPtr PAL
= getAttributes(Record
[0]);
2548 unsigned CCInfo
= Record
[1];
2552 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Callee
))
2553 return Error("Invalid CALL record");
2555 const PointerType
*OpTy
= dyn_cast
<PointerType
>(Callee
->getType());
2556 const FunctionType
*FTy
= 0;
2557 if (OpTy
) FTy
= dyn_cast
<FunctionType
>(OpTy
->getElementType());
2558 if (!FTy
|| Record
.size() < FTy
->getNumParams()+OpNum
)
2559 return Error("Invalid CALL record");
2561 SmallVector
<Value
*, 16> Args
;
2562 // Read the fixed params.
2563 for (unsigned i
= 0, e
= FTy
->getNumParams(); i
!= e
; ++i
, ++OpNum
) {
2564 if (FTy
->getParamType(i
)->isLabelTy())
2565 Args
.push_back(getBasicBlock(Record
[OpNum
]));
2567 Args
.push_back(getFnValueByID(Record
[OpNum
], FTy
->getParamType(i
)));
2568 if (Args
.back() == 0) return Error("Invalid CALL record");
2571 // Read type/value pairs for varargs params.
2572 if (!FTy
->isVarArg()) {
2573 if (OpNum
!= Record
.size())
2574 return Error("Invalid CALL record");
2576 while (OpNum
!= Record
.size()) {
2578 if (getValueTypePair(Record
, OpNum
, NextValueNo
, Op
))
2579 return Error("Invalid CALL record");
2584 I
= CallInst::Create(Callee
, Args
.begin(), Args
.end());
2585 InstructionList
.push_back(I
);
2586 cast
<CallInst
>(I
)->setCallingConv(
2587 static_cast<CallingConv::ID
>(CCInfo
>>1));
2588 cast
<CallInst
>(I
)->setTailCall(CCInfo
& 1);
2589 cast
<CallInst
>(I
)->setAttributes(PAL
);
2592 case bitc::FUNC_CODE_INST_VAARG
: { // VAARG: [valistty, valist, instty]
2593 if (Record
.size() < 3)
2594 return Error("Invalid VAARG record");
2595 const Type
*OpTy
= getTypeByID(Record
[0]);
2596 Value
*Op
= getFnValueByID(Record
[1], OpTy
);
2597 const Type
*ResTy
= getTypeByID(Record
[2]);
2598 if (!OpTy
|| !Op
|| !ResTy
)
2599 return Error("Invalid VAARG record");
2600 I
= new VAArgInst(Op
, ResTy
);
2601 InstructionList
.push_back(I
);
2606 // Add instruction to end of current BB. If there is no current BB, reject
2610 return Error("Invalid instruction with no BB");
2612 CurBB
->getInstList().push_back(I
);
2614 // If this was a terminator instruction, move to the next block.
2615 if (isa
<TerminatorInst
>(I
)) {
2617 CurBB
= CurBBNo
< FunctionBBs
.size() ? FunctionBBs
[CurBBNo
] : 0;
2620 // Non-void values get registered in the value table for future use.
2621 if (I
&& !I
->getType()->isVoidTy())
2622 ValueList
.AssignValue(I
, NextValueNo
++);
2625 // Check the function list for unresolved values.
2626 if (Argument
*A
= dyn_cast
<Argument
>(ValueList
.back())) {
2627 if (A
->getParent() == 0) {
2628 // We found at least one unresolved value. Nuke them all to avoid leaks.
2629 for (unsigned i
= ModuleValueListSize
, e
= ValueList
.size(); i
!= e
; ++i
){
2630 if ((A
= dyn_cast
<Argument
>(ValueList
[i
])) && A
->getParent() == 0) {
2631 A
->replaceAllUsesWith(UndefValue::get(A
->getType()));
2635 return Error("Never resolved value found in function!");
2639 // FIXME: Check for unresolved forward-declared metadata references
2640 // and clean up leaks.
2642 // See if anything took the address of blocks in this function. If so,
2643 // resolve them now.
2644 DenseMap
<Function
*, std::vector
<BlockAddrRefTy
> >::iterator BAFRI
=
2645 BlockAddrFwdRefs
.find(F
);
2646 if (BAFRI
!= BlockAddrFwdRefs
.end()) {
2647 std::vector
<BlockAddrRefTy
> &RefList
= BAFRI
->second
;
2648 for (unsigned i
= 0, e
= RefList
.size(); i
!= e
; ++i
) {
2649 unsigned BlockIdx
= RefList
[i
].first
;
2650 if (BlockIdx
>= FunctionBBs
.size())
2651 return Error("Invalid blockaddress block #");
2653 GlobalVariable
*FwdRef
= RefList
[i
].second
;
2654 FwdRef
->replaceAllUsesWith(BlockAddress::get(F
, FunctionBBs
[BlockIdx
]));
2655 FwdRef
->eraseFromParent();
2658 BlockAddrFwdRefs
.erase(BAFRI
);
2661 // Trim the value list down to the size it was before we parsed this function.
2662 ValueList
.shrinkTo(ModuleValueListSize
);
2663 MDValueList
.shrinkTo(ModuleMDValueListSize
);
2664 std::vector
<BasicBlock
*>().swap(FunctionBBs
);
2668 //===----------------------------------------------------------------------===//
2669 // GVMaterializer implementation
2670 //===----------------------------------------------------------------------===//
2673 bool BitcodeReader::isMaterializable(const GlobalValue
*GV
) const {
2674 if (const Function
*F
= dyn_cast
<Function
>(GV
)) {
2675 return F
->isDeclaration() &&
2676 DeferredFunctionInfo
.count(const_cast<Function
*>(F
));
2681 bool BitcodeReader::Materialize(GlobalValue
*GV
, std::string
*ErrInfo
) {
2682 Function
*F
= dyn_cast
<Function
>(GV
);
2683 // If it's not a function or is already material, ignore the request.
2684 if (!F
|| !F
->isMaterializable()) return false;
2686 DenseMap
<Function
*, uint64_t>::iterator DFII
= DeferredFunctionInfo
.find(F
);
2687 assert(DFII
!= DeferredFunctionInfo
.end() && "Deferred function not found!");
2689 // Move the bit stream to the saved position of the deferred function body.
2690 Stream
.JumpToBit(DFII
->second
);
2692 if (ParseFunctionBody(F
)) {
2693 if (ErrInfo
) *ErrInfo
= ErrorString
;
2697 // Upgrade any old intrinsic calls in the function.
2698 for (UpgradedIntrinsicMap::iterator I
= UpgradedIntrinsics
.begin(),
2699 E
= UpgradedIntrinsics
.end(); I
!= E
; ++I
) {
2700 if (I
->first
!= I
->second
) {
2701 for (Value::use_iterator UI
= I
->first
->use_begin(),
2702 UE
= I
->first
->use_end(); UI
!= UE
; ) {
2703 if (CallInst
* CI
= dyn_cast
<CallInst
>(*UI
++))
2704 UpgradeIntrinsicCall(CI
, I
->second
);
2712 bool BitcodeReader::isDematerializable(const GlobalValue
*GV
) const {
2713 const Function
*F
= dyn_cast
<Function
>(GV
);
2714 if (!F
|| F
->isDeclaration())
2716 return DeferredFunctionInfo
.count(const_cast<Function
*>(F
));
2719 void BitcodeReader::Dematerialize(GlobalValue
*GV
) {
2720 Function
*F
= dyn_cast
<Function
>(GV
);
2721 // If this function isn't dematerializable, this is a noop.
2722 if (!F
|| !isDematerializable(F
))
2725 assert(DeferredFunctionInfo
.count(F
) && "No info to read function later?");
2727 // Just forget the function body, we can remat it later.
2732 bool BitcodeReader::MaterializeModule(Module
*M
, std::string
*ErrInfo
) {
2733 assert(M
== TheModule
&&
2734 "Can only Materialize the Module this BitcodeReader is attached to.");
2735 // Iterate over the module, deserializing any functions that are still on
2737 for (Module::iterator F
= TheModule
->begin(), E
= TheModule
->end();
2739 if (F
->isMaterializable() &&
2740 Materialize(F
, ErrInfo
))
2743 // Upgrade any intrinsic calls that slipped through (should not happen!) and
2744 // delete the old functions to clean up. We can't do this unless the entire
2745 // module is materialized because there could always be another function body
2746 // with calls to the old function.
2747 for (std::vector
<std::pair
<Function
*, Function
*> >::iterator I
=
2748 UpgradedIntrinsics
.begin(), E
= UpgradedIntrinsics
.end(); I
!= E
; ++I
) {
2749 if (I
->first
!= I
->second
) {
2750 for (Value::use_iterator UI
= I
->first
->use_begin(),
2751 UE
= I
->first
->use_end(); UI
!= UE
; ) {
2752 if (CallInst
* CI
= dyn_cast
<CallInst
>(*UI
++))
2753 UpgradeIntrinsicCall(CI
, I
->second
);
2755 if (!I
->first
->use_empty())
2756 I
->first
->replaceAllUsesWith(I
->second
);
2757 I
->first
->eraseFromParent();
2760 std::vector
<std::pair
<Function
*, Function
*> >().swap(UpgradedIntrinsics
);
2762 // Check debug info intrinsics.
2763 CheckDebugInfoIntrinsics(TheModule
);
2769 //===----------------------------------------------------------------------===//
2770 // External interface
2771 //===----------------------------------------------------------------------===//
2773 /// getLazyBitcodeModule - lazy function-at-a-time loading from a file.
2775 Module
*llvm::getLazyBitcodeModule(MemoryBuffer
*Buffer
,
2776 LLVMContext
& Context
,
2777 std::string
*ErrMsg
) {
2778 Module
*M
= new Module(Buffer
->getBufferIdentifier(), Context
);
2779 BitcodeReader
*R
= new BitcodeReader(Buffer
, Context
);
2780 M
->setMaterializer(R
);
2781 if (R
->ParseBitcodeInto(M
)) {
2783 *ErrMsg
= R
->getErrorString();
2785 delete M
; // Also deletes R.
2788 // Have the BitcodeReader dtor delete 'Buffer'.
2789 R
->setBufferOwned(true);
2793 /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
2794 /// If an error occurs, return null and fill in *ErrMsg if non-null.
2795 Module
*llvm::ParseBitcodeFile(MemoryBuffer
*Buffer
, LLVMContext
& Context
,
2796 std::string
*ErrMsg
){
2797 Module
*M
= getLazyBitcodeModule(Buffer
, Context
, ErrMsg
);
2800 // Don't let the BitcodeReader dtor delete 'Buffer', regardless of whether
2801 // there was an error.
2802 static_cast<BitcodeReader
*>(M
->getMaterializer())->setBufferOwned(false);
2804 // Read in the entire module, and destroy the BitcodeReader.
2805 if (M
->MaterializeAllPermanently(ErrMsg
)) {
2813 std::string
llvm::getBitcodeTargetTriple(MemoryBuffer
*Buffer
,
2814 LLVMContext
& Context
,
2815 std::string
*ErrMsg
) {
2816 BitcodeReader
*R
= new BitcodeReader(Buffer
, Context
);
2817 // Don't let the BitcodeReader dtor delete 'Buffer'.
2818 R
->setBufferOwned(false);
2820 std::string
Triple("");
2821 if (R
->ParseTriple(Triple
))
2823 *ErrMsg
= R
->getErrorString();