LLVM 24.0.0git
BitcodeReader.cpp
Go to the documentation of this file.
1//===- BitcodeReader.cpp - Internal BitcodeReader implementation ----------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
10#include "MetadataLoader.h"
11#include "ValueList.h"
12#include "llvm/ADT/APFloat.h"
13#include "llvm/ADT/APInt.h"
14#include "llvm/ADT/ArrayRef.h"
15#include "llvm/ADT/DenseMap.h"
16#include "llvm/ADT/STLExtras.h"
19#include "llvm/ADT/StringRef.h"
20#include "llvm/ADT/Twine.h"
24#include "llvm/Config/llvm-config.h"
25#include "llvm/IR/Argument.h"
27#include "llvm/IR/Attributes.h"
28#include "llvm/IR/AutoUpgrade.h"
29#include "llvm/IR/BasicBlock.h"
30#include "llvm/IR/CallingConv.h"
31#include "llvm/IR/Comdat.h"
32#include "llvm/IR/Constant.h"
34#include "llvm/IR/Constants.h"
35#include "llvm/IR/DataLayout.h"
36#include "llvm/IR/DebugInfo.h"
38#include "llvm/IR/DebugLoc.h"
40#include "llvm/IR/Function.h"
43#include "llvm/IR/GlobalAlias.h"
44#include "llvm/IR/GlobalIFunc.h"
46#include "llvm/IR/GlobalValue.h"
48#include "llvm/IR/InlineAsm.h"
50#include "llvm/IR/InstrTypes.h"
51#include "llvm/IR/Instruction.h"
53#include "llvm/IR/Intrinsics.h"
54#include "llvm/IR/IntrinsicsAArch64.h"
55#include "llvm/IR/IntrinsicsARM.h"
56#include "llvm/IR/LLVMContext.h"
57#include "llvm/IR/Metadata.h"
58#include "llvm/IR/Module.h"
60#include "llvm/IR/Operator.h"
62#include "llvm/IR/Type.h"
63#include "llvm/IR/Value.h"
64#include "llvm/IR/Verifier.h"
69#include "llvm/Support/Debug.h"
70#include "llvm/Support/Error.h"
75#include "llvm/Support/ModRef.h"
79#include <algorithm>
80#include <cassert>
81#include <cstddef>
82#include <cstdint>
83#include <deque>
84#include <map>
85#include <memory>
86#include <optional>
87#include <string>
88#include <system_error>
89#include <tuple>
90#include <utility>
91#include <vector>
92
93using namespace llvm;
94
96 "print-summary-global-ids", cl::init(false), cl::Hidden,
98 "Print the global id for each value when reading the module summary"));
99
101 "expand-constant-exprs", cl::Hidden,
102 cl::desc(
103 "Expand constant expressions to instructions for testing purposes"));
104
105namespace {
106
107enum {
108 SWITCH_INST_MAGIC = 0x4B5 // May 2012 => 1205 => Hex
109};
110
111} // end anonymous namespace
112
113static Error error(const Twine &Message) {
116}
117
119 if (!Stream.canSkipToPos(4))
120 return createStringError(std::errc::illegal_byte_sequence,
121 "file too small to contain bitcode header");
122 for (unsigned C : {'B', 'C'})
123 if (Expected<SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
124 if (Res.get() != C)
125 return createStringError(std::errc::illegal_byte_sequence,
126 "file doesn't start with bitcode header");
127 } else
128 return Res.takeError();
129 for (unsigned C : {0x0, 0xC, 0xE, 0xD})
130 if (Expected<SimpleBitstreamCursor::word_t> Res = Stream.Read(4)) {
131 if (Res.get() != C)
132 return createStringError(std::errc::illegal_byte_sequence,
133 "file doesn't start with bitcode header");
134 } else
135 return Res.takeError();
136 return Error::success();
137}
138
140 const unsigned char *BufPtr = (const unsigned char *)Buffer.getBufferStart();
141 const unsigned char *BufEnd = BufPtr + Buffer.getBufferSize();
142
143 if (Buffer.getBufferSize() & 3)
144 return error("Invalid bitcode signature");
145
146 // If we have a wrapper header, parse it and ignore the non-bc file contents.
147 // The magic number is 0x0B17C0DE stored in little endian.
148 if (isBitcodeWrapper(BufPtr, BufEnd))
149 if (SkipBitcodeWrapperHeader(BufPtr, BufEnd, true))
150 return error("Invalid bitcode wrapper header");
151
152 BitstreamCursor Stream(ArrayRef<uint8_t>(BufPtr, BufEnd));
153 if (Error Err = hasInvalidBitcodeHeader(Stream))
154 return std::move(Err);
155
156 return std::move(Stream);
157}
158
159/// Convert a string from a record into an std::string, return true on failure.
160template <typename StrTy>
161static bool convertToString(ArrayRef<uint64_t> Record, unsigned Idx,
162 StrTy &Result) {
163 if (Idx > Record.size())
164 return true;
165
166 Result.append(Record.begin() + Idx, Record.end());
167 return false;
168}
169
170// Strip all the TBAA attachment for the module.
171static void stripTBAA(Module *M) {
172 for (auto &F : *M) {
173 if (F.isMaterializable())
174 continue;
175 for (auto &I : instructions(F))
176 I.setMetadata(LLVMContext::MD_tbaa, nullptr);
177 }
178}
179
180/// Read the "IDENTIFICATION_BLOCK_ID" block, do some basic enforcement on the
181/// "epoch" encoded in the bitcode, and return the producer name if any.
184 return std::move(Err);
185
186 // Read all the records.
188
189 std::string ProducerIdentification;
190
191 while (true) {
192 BitstreamEntry Entry;
193 if (Error E = Stream.advance().moveInto(Entry))
194 return std::move(E);
195
196 switch (Entry.Kind) {
197 default:
199 return error("Malformed block");
201 return ProducerIdentification;
203 // The interesting case.
204 break;
205 }
206
207 // Read a record.
208 Record.clear();
209 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
210 if (!MaybeBitCode)
211 return MaybeBitCode.takeError();
212 switch (MaybeBitCode.get()) {
213 default: // Default behavior: reject
214 return error("Invalid value");
215 case bitc::IDENTIFICATION_CODE_STRING: // IDENTIFICATION: [strchr x N]
216 convertToString(Record, 0, ProducerIdentification);
217 break;
218 case bitc::IDENTIFICATION_CODE_EPOCH: { // EPOCH: [epoch#]
219 unsigned epoch = (unsigned)Record[0];
220 if (epoch != bitc::BITCODE_CURRENT_EPOCH) {
221 return error(
222 Twine("Incompatible epoch: Bitcode '") + Twine(epoch) +
223 "' vs current: '" + Twine(bitc::BITCODE_CURRENT_EPOCH) + "'");
224 }
225 }
226 }
227 }
228}
229
231 // We expect a number of well-defined blocks, though we don't necessarily
232 // need to understand them all.
233 while (true) {
234 if (Stream.AtEndOfStream())
235 return "";
236
237 BitstreamEntry Entry;
238 if (Error E = Stream.advance().moveInto(Entry))
239 return std::move(E);
240
241 switch (Entry.Kind) {
244 return error("Malformed block");
245
247 if (Entry.ID == bitc::IDENTIFICATION_BLOCK_ID)
248 return readIdentificationBlock(Stream);
249
250 // Ignore other sub-blocks.
251 if (Error Err = Stream.SkipBlock())
252 return std::move(Err);
253 continue;
255 if (Error E = Stream.skipRecord(Entry.ID).takeError())
256 return std::move(E);
257 continue;
258 }
259 }
260}
261
263 if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
264 return std::move(Err);
265
267 // Read all the records for this module.
268
269 while (true) {
271 if (!MaybeEntry)
272 return MaybeEntry.takeError();
273 BitstreamEntry Entry = MaybeEntry.get();
274
275 switch (Entry.Kind) {
276 case BitstreamEntry::SubBlock: // Handled for us already.
278 return error("Malformed block");
280 return false;
282 // The interesting case.
283 break;
284 }
285
286 // Read a record.
287 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
288 if (!MaybeRecord)
289 return MaybeRecord.takeError();
290 switch (MaybeRecord.get()) {
291 default:
292 break; // Default behavior, ignore unknown content.
293 case bitc::MODULE_CODE_SECTIONNAME: { // SECTIONNAME: [strchr x N]
294 std::string S;
295 if (convertToString(Record, 0, S))
296 return error("Invalid section name record");
297
298 // Check for the i386 and other (x86_64, ARM) conventions
299
300 auto [Segment, Section] = StringRef(S).split(",");
301 Segment = Segment.trim();
302 Section = Section.trim();
303
304 if (Segment == "__DATA" && Section.starts_with("__objc_catlist"))
305 return true;
306 if (Segment == "__OBJC" && Section.starts_with("__category"))
307 return true;
308 if (Segment == "__TEXT" && Section.starts_with("__swift"))
309 return true;
310 break;
311 }
312 }
313 Record.clear();
314 }
315 llvm_unreachable("Exit infinite loop");
316}
317
319 // We expect a number of well-defined blocks, though we don't necessarily
320 // need to understand them all.
321 while (true) {
322 BitstreamEntry Entry;
323 if (Error E = Stream.advance().moveInto(Entry))
324 return std::move(E);
325
326 switch (Entry.Kind) {
328 return error("Malformed block");
330 return false;
331
333 if (Entry.ID == bitc::MODULE_BLOCK_ID)
334 return hasObjCCategoryInModule(Stream);
335
336 // Ignore other sub-blocks.
337 if (Error Err = Stream.SkipBlock())
338 return std::move(Err);
339 continue;
340
342 if (Error E = Stream.skipRecord(Entry.ID).takeError())
343 return std::move(E);
344 continue;
345 }
346 }
347}
348
350 if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
351 return std::move(Err);
352
354
355 std::string Triple;
356
357 // Read all the records for this module.
358 while (true) {
360 if (!MaybeEntry)
361 return MaybeEntry.takeError();
362 BitstreamEntry Entry = MaybeEntry.get();
363
364 switch (Entry.Kind) {
365 case BitstreamEntry::SubBlock: // Handled for us already.
367 return error("Malformed block");
369 return Triple;
371 // The interesting case.
372 break;
373 }
374
375 // Read a record.
376 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
377 if (!MaybeRecord)
378 return MaybeRecord.takeError();
379 switch (MaybeRecord.get()) {
380 default: break; // Default behavior, ignore unknown content.
381 case bitc::MODULE_CODE_TRIPLE: { // TRIPLE: [strchr x N]
382 std::string S;
383 if (convertToString(Record, 0, S))
384 return error("Invalid triple record");
385 Triple = S;
386 break;
387 }
388 }
389 Record.clear();
390 }
391 llvm_unreachable("Exit infinite loop");
392}
393
395 // We expect a number of well-defined blocks, though we don't necessarily
396 // need to understand them all.
397 while (true) {
398 Expected<BitstreamEntry> MaybeEntry = Stream.advance();
399 if (!MaybeEntry)
400 return MaybeEntry.takeError();
401 BitstreamEntry Entry = MaybeEntry.get();
402
403 switch (Entry.Kind) {
405 return error("Malformed block");
407 return "";
408
410 if (Entry.ID == bitc::MODULE_BLOCK_ID)
411 return readModuleTriple(Stream);
412
413 // Ignore other sub-blocks.
414 if (Error Err = Stream.SkipBlock())
415 return std::move(Err);
416 continue;
417
419 if (llvm::Expected<unsigned> Skipped = Stream.skipRecord(Entry.ID))
420 continue;
421 else
422 return Skipped.takeError();
423 }
424 }
425}
426
427namespace {
428
429class BitcodeReaderBase {
430protected:
431 BitcodeReaderBase(BitstreamCursor Stream, StringRef Strtab)
432 : Stream(std::move(Stream)), Strtab(Strtab) {
433 this->Stream.setBlockInfo(&BlockInfo);
434 }
435
436 BitstreamBlockInfo BlockInfo;
437 BitstreamCursor Stream;
438 StringRef Strtab;
439
440 /// In version 2 of the bitcode we store names of global values and comdats in
441 /// a string table rather than in the VST.
442 bool UseStrtab = false;
443
444 Expected<unsigned> parseVersionRecord(ArrayRef<uint64_t> Record);
445
446 /// If this module uses a string table, pop the reference to the string table
447 /// and return the referenced string and the rest of the record. Otherwise
448 /// just return the record itself.
449 std::pair<StringRef, ArrayRef<uint64_t>>
450 readNameFromStrtab(ArrayRef<uint64_t> Record);
451
452 Error readBlockInfo();
453
454 // Contains an arbitrary and optional string identifying the bitcode producer
455 std::string ProducerIdentification;
456
457 Error error(const Twine &Message);
458};
459
460} // end anonymous namespace
461
462Error BitcodeReaderBase::error(const Twine &Message) {
463 std::string FullMsg = Message.str();
464 if (!ProducerIdentification.empty())
465 FullMsg += " (Producer: '" + ProducerIdentification + "' Reader: 'LLVM " +
466 LLVM_VERSION_STRING "')";
467 return ::error(FullMsg);
468}
469
470Expected<unsigned>
471BitcodeReaderBase::parseVersionRecord(ArrayRef<uint64_t> Record) {
472 if (Record.empty())
473 return error("Invalid version record");
474 unsigned ModuleVersion = Record[0];
475 if (ModuleVersion > 2)
476 return error("Invalid value");
477 UseStrtab = ModuleVersion >= 2;
478 return ModuleVersion;
479}
480
481std::pair<StringRef, ArrayRef<uint64_t>>
482BitcodeReaderBase::readNameFromStrtab(ArrayRef<uint64_t> Record) {
483 if (!UseStrtab)
484 return {"", Record};
485 // Invalid reference. Let the caller complain about the record being empty.
486 if (Record[0] + Record[1] > Strtab.size())
487 return {"", {}};
488 return {StringRef(Strtab.data() + Record[0], Record[1]), Record.slice(2)};
489}
490
491namespace {
492
493/// This represents a constant expression or constant aggregate using a custom
494/// structure internal to the bitcode reader. Later, this structure will be
495/// expanded by materializeValue() either into a constant expression/aggregate,
496/// or into an instruction sequence at the point of use. This allows us to
497/// upgrade bitcode using constant expressions even if this kind of constant
498/// expression is no longer supported.
499class BitcodeConstant final : public Value,
500 TrailingObjects<BitcodeConstant, unsigned> {
501 friend TrailingObjects;
502
503 // Value subclass ID: Pick largest possible value to avoid any clashes.
504 static constexpr uint8_t SubclassID = 255;
505
506public:
507 // Opcodes used for non-expressions. This includes constant aggregates
508 // (struct, array, vector) that might need expansion, as well as non-leaf
509 // constants that don't need expansion (no_cfi, dso_local, blockaddress),
510 // but still go through BitcodeConstant to avoid different uselist orders
511 // between the two cases.
512 static constexpr uint8_t ConstantStructOpcode = 255;
513 static constexpr uint8_t ConstantArrayOpcode = 254;
514 static constexpr uint8_t ConstantVectorOpcode = 253;
515 static constexpr uint8_t NoCFIOpcode = 252;
516 static constexpr uint8_t DSOLocalEquivalentOpcode = 251;
517 static constexpr uint8_t BlockAddressOpcode = 250;
518 static constexpr uint8_t ConstantPtrAuthOpcode = 249;
519 static constexpr uint8_t FirstSpecialOpcode = ConstantPtrAuthOpcode;
520
521 // Separate struct to make passing different number of parameters to
522 // BitcodeConstant::create() more convenient.
523 struct ExtraInfo {
524 uint8_t Opcode;
525 uint8_t Flags;
526 unsigned BlockAddressBB = 0;
527 Type *SrcElemTy = nullptr;
528 std::optional<ConstantRange> InRange;
529
530 ExtraInfo(uint8_t Opcode, uint8_t Flags = 0, Type *SrcElemTy = nullptr,
531 std::optional<ConstantRange> InRange = std::nullopt)
532 : Opcode(Opcode), Flags(Flags), SrcElemTy(SrcElemTy),
533 InRange(std::move(InRange)) {}
534
535 ExtraInfo(uint8_t Opcode, uint8_t Flags, unsigned BlockAddressBB)
536 : Opcode(Opcode), Flags(Flags), BlockAddressBB(BlockAddressBB) {}
537 };
538
539 uint8_t Opcode;
540 uint8_t Flags;
541 unsigned NumOperands;
542 unsigned BlockAddressBB;
543 Type *SrcElemTy; // GEP source element type.
544 std::optional<ConstantRange> InRange; // GEP inrange attribute.
545
546private:
547 BitcodeConstant(Type *Ty, const ExtraInfo &Info, ArrayRef<unsigned> OpIDs)
548 : Value(Ty, SubclassID), Opcode(Info.Opcode), Flags(Info.Flags),
549 NumOperands(OpIDs.size()), BlockAddressBB(Info.BlockAddressBB),
550 SrcElemTy(Info.SrcElemTy), InRange(Info.InRange) {
551 llvm::uninitialized_copy(OpIDs, getTrailingObjects());
552 }
553
554 BitcodeConstant &operator=(const BitcodeConstant &) = delete;
555
556public:
557 static BitcodeConstant *create(BumpPtrAllocator &A, Type *Ty,
558 const ExtraInfo &Info,
559 ArrayRef<unsigned> OpIDs) {
560 void *Mem = A.Allocate(totalSizeToAlloc<unsigned>(OpIDs.size()),
561 alignof(BitcodeConstant));
562 return new (Mem) BitcodeConstant(Ty, Info, OpIDs);
563 }
564
565 static bool classof(const Value *V) { return V->getValueID() == SubclassID; }
566
567 ArrayRef<unsigned> getOperandIDs() const {
568 return ArrayRef(getTrailingObjects(), NumOperands);
569 }
570
571 std::optional<ConstantRange> getInRange() const {
572 assert(Opcode == Instruction::GetElementPtr);
573 return InRange;
574 }
575
576 const char *getOpcodeName() const {
577 return Instruction::getOpcodeName(Opcode);
578 }
579};
580
581class BitcodeReader : public BitcodeReaderBase, public GVMaterializer {
582 LLVMContext &Context;
583 Module *TheModule = nullptr;
584 std::optional<Triple> TargetTriple;
585 // Next offset to start scanning for lazy parsing of function bodies.
586 uint64_t NextUnreadBit = 0;
587 // Last function offset found in the VST.
588 uint64_t LastFunctionBlockBit = 0;
589 bool SeenValueSymbolTable = false;
590 uint64_t VSTOffset = 0;
591
592 std::vector<std::string> SectionTable;
593 std::vector<std::string> GCTable;
594
595 std::vector<Type *> TypeList;
596 /// Track type IDs of contained types. Order is the same as the contained
597 /// types of a Type*. This is used during upgrades of typed pointer IR in
598 /// opaque pointer mode.
599 DenseMap<unsigned, SmallVector<unsigned, 1>> ContainedTypeIDs;
600 /// In some cases, we need to create a type ID for a type that was not
601 /// explicitly encoded in the bitcode, or we don't know about at the current
602 /// point. For example, a global may explicitly encode the value type ID, but
603 /// not have a type ID for the pointer to value type, for which we create a
604 /// virtual type ID instead. This map stores the new type ID that was created
605 /// for the given pair of Type and contained type ID.
606 DenseMap<std::pair<Type *, unsigned>, unsigned> VirtualTypeIDs;
607 DenseMap<Function *, unsigned> FunctionTypeIDs;
608 /// Allocator for BitcodeConstants. This should come before ValueList,
609 /// because the ValueList might hold ValueHandles to these constants, so
610 /// ValueList must be destroyed before Alloc.
612 BitcodeReaderValueList ValueList;
613 std::optional<MetadataLoader> MDLoader;
614 std::vector<Comdat *> ComdatList;
615 DenseSet<GlobalObject *> ImplicitComdatObjects;
616 SmallVector<Instruction *, 64> InstructionList;
617
618 std::vector<std::pair<GlobalVariable *, unsigned>> GlobalInits;
619 std::vector<std::pair<GlobalValue *, unsigned>> IndirectSymbolInits;
620
621 struct FunctionOperandInfo {
622 Function *F;
623 unsigned PersonalityFn;
624 unsigned Prefix;
625 unsigned Prologue;
626 };
627 std::vector<FunctionOperandInfo> FunctionOperands;
628
629 /// The set of attributes by index. Index zero in the file is for null, and
630 /// is thus not represented here. As such all indices are off by one.
631 std::vector<AttributeList> MAttributes;
632
633 /// The set of attribute groups.
634 std::map<unsigned, AttributeList> MAttributeGroups;
635
636 /// While parsing a function body, this is a list of the basic blocks for the
637 /// function.
638 std::vector<BasicBlock*> FunctionBBs;
639
640 // When reading the module header, this list is populated with functions that
641 // have bodies later in the file.
642 std::vector<Function*> FunctionsWithBodies;
643
644 // When intrinsic functions are encountered which require upgrading they are
645 // stored here with their replacement function.
646 DenseMap<Function *, Function *> UpgradedIntrinsics;
647
648 // Several operations happen after the module header has been read, but
649 // before function bodies are processed. This keeps track of whether
650 // we've done this yet.
651 bool SeenFirstFunctionBody = false;
652
653 /// When function bodies are initially scanned, this map contains info about
654 /// where to find deferred function body in the stream.
655 DenseMap<Function*, uint64_t> DeferredFunctionInfo;
656
657 /// When Metadata block is initially scanned when parsing the module, we may
658 /// choose to defer parsing of the metadata. This vector contains info about
659 /// which Metadata blocks are deferred.
660 std::vector<uint64_t> DeferredMetadataInfo;
661
662 /// These are basic blocks forward-referenced by block addresses. They are
663 /// inserted lazily into functions when they're loaded. The basic block ID is
664 /// its index into the vector.
665 DenseMap<Function *, std::vector<BasicBlock *>> BasicBlockFwdRefs;
666 std::deque<Function *> BasicBlockFwdRefQueue;
667
668 /// These are Functions that contain BlockAddresses which refer a different
669 /// Function. When parsing the different Function, queue Functions that refer
670 /// to the different Function. Those Functions must be materialized in order
671 /// to resolve their BlockAddress constants before the different Function
672 /// gets moved into another Module.
673 std::vector<Function *> BackwardRefFunctions;
674
675 /// Indicates that we are using a new encoding for instruction operands where
676 /// most operands in the current FUNCTION_BLOCK are encoded relative to the
677 /// instruction number, for a more compact encoding. Some instruction
678 /// operands are not relative to the instruction ID: basic block numbers, and
679 /// types. Once the old style function blocks have been phased out, we would
680 /// not need this flag.
681 bool UseRelativeIDs = false;
682
683 /// True if all functions will be materialized, negating the need to process
684 /// (e.g.) blockaddress forward references.
685 bool WillMaterializeAllForwardRefs = false;
686
687 /// Tracks whether we have seen debug intrinsics or records in this bitcode;
688 /// seeing both in a single module is currently a fatal error.
689 bool SeenDebugIntrinsic = false;
690 bool SeenDebugRecord = false;
691
692 bool StripDebugInfo = false;
693 TBAAVerifier TBAAVerifyHelper;
694
695 std::vector<std::string> BundleTags;
697
698 std::optional<ValueTypeCallbackTy> ValueTypeCallback;
699
700 /// A list of GUIDs defined by this module. Indexed by ValueID.
701 std::vector<GlobalValue::GUID> GUIDList;
702
703 /// Mirrors ParserCallbacks::SkipDebugIntrinsicUpgrade. When set, debug
704 /// intrinsic calls (llvm.dbg.*) are not auto-upgraded to non-instruction
705 /// debug records by globalCleanup(); the caller is expected to perform the
706 /// upgrade manually after any custom processing.
707 bool SkipDebugIntrinsicUpgrade = false;
708
709public:
710 BitcodeReader(BitstreamCursor Stream, StringRef Strtab,
711 StringRef ProducerIdentification, LLVMContext &Context);
712
713 Error materializeForwardReferencedFunctions();
714
715 Error materialize(GlobalValue *GV) override;
716 Error materializeModule() override;
717 std::vector<StructType *> getIdentifiedStructTypes() const override;
718
719 /// Main interface to parsing a bitcode buffer.
720 /// \returns true if an error occurred.
721 Error parseBitcodeInto(Module *M, bool ShouldLazyLoadMetadata,
722 bool IsImporting, ParserCallbacks Callbacks = {});
723
724 static uint64_t decodeSignRotatedValue(uint64_t V);
725
726 /// Materialize any deferred Metadata block.
727 Error materializeMetadata() override;
728
729 void setStripDebugInfo() override;
730
731private:
732 std::vector<StructType *> IdentifiedStructTypes;
733 StructType *createIdentifiedStructType(LLVMContext &Context, StringRef Name);
734 StructType *createIdentifiedStructType(LLVMContext &Context);
735
736 static constexpr unsigned InvalidTypeID = ~0u;
737
738 Type *getTypeByID(unsigned ID);
739 Type *getPtrElementTypeByID(unsigned ID);
740 unsigned getContainedTypeID(unsigned ID, unsigned Idx = 0);
741 unsigned getVirtualTypeID(Type *Ty, ArrayRef<unsigned> ContainedTypeIDs = {});
742
743 void callValueTypeCallback(Value *F, unsigned TypeID);
744 Expected<Value *> materializeValue(unsigned ValID, BasicBlock *InsertBB);
745 Expected<Constant *> getValueForInitializer(unsigned ID);
746
747 Value *getFnValueByID(unsigned ID, Type *Ty, unsigned TyID,
748 BasicBlock *ConstExprInsertBB) {
749 if (Ty && Ty->isMetadataTy())
750 return MetadataAsValue::get(Ty->getContext(), getFnMetadataByID(ID));
751 return ValueList.getValueFwdRef(ID, Ty, TyID, ConstExprInsertBB);
752 }
753
754 Metadata *getFnMetadataByID(unsigned ID) {
755 return MDLoader->getMetadataFwdRefOrLoad(ID);
756 }
757
758 BasicBlock *getBasicBlock(unsigned ID) const {
759 if (ID >= FunctionBBs.size()) return nullptr; // Invalid ID
760 return FunctionBBs[ID];
761 }
762
763 AttributeList getAttributes(unsigned i) const {
764 if (i-1 < MAttributes.size())
765 return MAttributes[i-1];
766 return AttributeList();
767 }
768
769 /// Read a value/type pair out of the specified record from slot 'Slot'.
770 /// Increment Slot past the number of slots used in the record. Return true on
771 /// failure.
772 bool getValueTypePair(const SmallVectorImpl<uint64_t> &Record, unsigned &Slot,
773 unsigned InstNum, Value *&ResVal, unsigned &TypeID,
774 BasicBlock *ConstExprInsertBB) {
775 if (Slot == Record.size()) return true;
776 unsigned ValNo = (unsigned)Record[Slot++];
777 // Adjust the ValNo, if it was encoded relative to the InstNum.
778 if (UseRelativeIDs)
779 ValNo = InstNum - ValNo;
780 if (ValNo < InstNum) {
781 // If this is not a forward reference, just return the value we already
782 // have.
783 TypeID = ValueList.getTypeID(ValNo);
784 ResVal = getFnValueByID(ValNo, nullptr, TypeID, ConstExprInsertBB);
785 assert((!ResVal || ResVal->getType() == getTypeByID(TypeID)) &&
786 "Incorrect type ID stored for value");
787 return ResVal == nullptr;
788 }
789 if (Slot == Record.size())
790 return true;
791
792 TypeID = (unsigned)Record[Slot++];
793 ResVal = getFnValueByID(ValNo, getTypeByID(TypeID), TypeID,
794 ConstExprInsertBB);
795 return ResVal == nullptr;
796 }
797
798 bool getValueOrMetadata(const SmallVectorImpl<uint64_t> &Record,
799 unsigned &Slot, unsigned InstNum, Value *&ResVal,
800 BasicBlock *ConstExprInsertBB) {
801 if (Slot == Record.size())
802 return true;
803 unsigned ValID = Record[Slot++];
804 if (ValID != static_cast<unsigned>(bitc::OB_METADATA)) {
805 unsigned TypeId;
806 return getValueTypePair(Record, --Slot, InstNum, ResVal, TypeId,
807 ConstExprInsertBB);
808 }
809 if (Slot == Record.size())
810 return true;
811 unsigned ValNo = InstNum - (unsigned)Record[Slot++];
812 ResVal = MetadataAsValue::get(Context, getFnMetadataByID(ValNo));
813 return false;
814 }
815
816 /// Read a value out of the specified record from slot 'Slot'. Increment Slot
817 /// past the number of slots used by the value in the record. Return true if
818 /// there is an error.
819 bool popValue(const SmallVectorImpl<uint64_t> &Record, unsigned &Slot,
820 unsigned InstNum, Type *Ty, unsigned TyID, Value *&ResVal,
821 BasicBlock *ConstExprInsertBB) {
822 if (getValue(Record, Slot, InstNum, Ty, TyID, ResVal, ConstExprInsertBB))
823 return true;
824 // All values currently take a single record slot.
825 ++Slot;
826 return false;
827 }
828
829 /// Like popValue, but does not increment the Slot number.
830 bool getValue(const SmallVectorImpl<uint64_t> &Record, unsigned Slot,
831 unsigned InstNum, Type *Ty, unsigned TyID, Value *&ResVal,
832 BasicBlock *ConstExprInsertBB) {
833 ResVal = getValue(Record, Slot, InstNum, Ty, TyID, ConstExprInsertBB);
834 return ResVal == nullptr;
835 }
836
837 /// Version of getValue that returns ResVal directly, or 0 if there is an
838 /// error.
839 Value *getValue(const SmallVectorImpl<uint64_t> &Record, unsigned Slot,
840 unsigned InstNum, Type *Ty, unsigned TyID,
841 BasicBlock *ConstExprInsertBB) {
842 if (Slot == Record.size()) return nullptr;
843 unsigned ValNo = (unsigned)Record[Slot];
844 // Adjust the ValNo, if it was encoded relative to the InstNum.
845 if (UseRelativeIDs)
846 ValNo = InstNum - ValNo;
847 return getFnValueByID(ValNo, Ty, TyID, ConstExprInsertBB);
848 }
849
850 /// Like getValue, but decodes signed VBRs.
851 Value *getValueSigned(const SmallVectorImpl<uint64_t> &Record, unsigned Slot,
852 unsigned InstNum, Type *Ty, unsigned TyID,
853 BasicBlock *ConstExprInsertBB) {
854 if (Slot == Record.size()) return nullptr;
855 unsigned ValNo = (unsigned)decodeSignRotatedValue(Record[Slot]);
856 // Adjust the ValNo, if it was encoded relative to the InstNum.
857 if (UseRelativeIDs)
858 ValNo = InstNum - ValNo;
859 return getFnValueByID(ValNo, Ty, TyID, ConstExprInsertBB);
860 }
861
862 Expected<ConstantRange> readConstantRange(ArrayRef<uint64_t> Record,
863 unsigned &OpNum,
864 unsigned BitWidth) {
865 if (Record.size() - OpNum < 2)
866 return error("Too few records for range");
867 if (BitWidth > 64) {
868 unsigned LowerActiveWords = Record[OpNum];
869 unsigned UpperActiveWords = Record[OpNum++] >> 32;
870 if (Record.size() - OpNum < LowerActiveWords + UpperActiveWords)
871 return error("Too few records for range");
872 APInt Lower =
873 readWideAPInt(ArrayRef(&Record[OpNum], LowerActiveWords), BitWidth);
874 OpNum += LowerActiveWords;
875 APInt Upper =
876 readWideAPInt(ArrayRef(&Record[OpNum], UpperActiveWords), BitWidth);
877 OpNum += UpperActiveWords;
878 return ConstantRange(Lower, Upper);
879 } else {
880 int64_t Start = BitcodeReader::decodeSignRotatedValue(Record[OpNum++]);
881 int64_t End = BitcodeReader::decodeSignRotatedValue(Record[OpNum++]);
882 return ConstantRange(APInt(BitWidth, Start, true),
883 APInt(BitWidth, End, true));
884 }
885 }
886
887 Expected<ConstantRange>
888 readBitWidthAndConstantRange(ArrayRef<uint64_t> Record, unsigned &OpNum) {
889 if (Record.size() - OpNum < 1)
890 return error("Too few records for range");
891 unsigned BitWidth = Record[OpNum++];
892 return readConstantRange(Record, OpNum, BitWidth);
893 }
894
895 /// Cache target triple for for upgrading AArch64 memory effects.
896 const Triple &getTargetTriple() {
897 if (!TargetTriple) {
898 BitstreamCursor TripleStream(Stream.getBitcodeBytes());
899 if (Expected<std::string> TripleStr = readTriple(TripleStream))
900 TargetTriple.emplace(std::move(*TripleStr));
901 else {
902 consumeError(TripleStr.takeError());
903 TargetTriple.emplace();
904 }
905 }
906 return *TargetTriple;
907 }
908
909 /// Upgrades old-style typeless byval/sret/inalloca attributes by adding the
910 /// corresponding argument's pointee type. Also upgrades intrinsics that now
911 /// require an elementtype attribute.
912 Error propagateAttributeTypes(CallBase *CB, ArrayRef<unsigned> ArgsTys);
913
914 /// Converts alignment exponent (i.e. power of two (or zero)) to the
915 /// corresponding alignment to use. If alignment is too large, returns
916 /// a corresponding error code.
917 Error parseAlignmentValue(uint64_t Exponent, MaybeAlign &Alignment);
918 Error parseAttrKind(uint64_t Code, Attribute::AttrKind *Kind);
919 Error parseModule(uint64_t ResumeBit, bool ShouldLazyLoadMetadata = false,
920 ParserCallbacks Callbacks = {});
921
922 Error parseComdatRecord(ArrayRef<uint64_t> Record);
923 Error parseGlobalVarRecord(ArrayRef<uint64_t> Record);
924 Error parseFunctionRecord(ArrayRef<uint64_t> Record);
925 Error parseGlobalIndirectSymbolRecord(unsigned BitCode,
926 ArrayRef<uint64_t> Record);
927
928 Error parseAttributeBlock();
929 Error parseAttributeGroupBlock();
930 Error parseTypeTable();
931 Error parseTypeTableBody();
932 Error parseOperandBundleTags();
933 Error parseSyncScopeNames();
934
935 Expected<Value *> recordValue(SmallVectorImpl<uint64_t> &Record,
936 unsigned NameIndex, Triple &TT);
937 void setDeferredFunctionInfo(unsigned FuncBitcodeOffsetDelta, Function *F,
938 ArrayRef<uint64_t> Record);
939 Error parseValueSymbolTable(uint64_t Offset = 0);
940 Error parseGlobalValueSymbolTable();
941 Error parseConstants();
942 Error rememberAndSkipFunctionBodies();
943 Error rememberAndSkipFunctionBody();
944 /// Save the positions of the Metadata blocks and skip parsing the blocks.
945 Error rememberAndSkipMetadata();
946 Error typeCheckLoadStoreInst(Type *ValType, Type *PtrType);
947 Error parseFunctionBody(Function *F);
948 Error globalCleanup();
949 Error resolveGlobalAndIndirectSymbolInits();
950 Error parseUseLists();
951 Error findFunctionInStream(
952 Function *F,
953 DenseMap<Function *, uint64_t>::iterator DeferredFunctionInfoIterator);
954
955 SyncScope::ID getDecodedSyncScopeID(unsigned Val);
956};
957
958/// Class to manage reading and parsing function summary index bitcode
959/// files/sections.
960class ModuleSummaryIndexBitcodeReader : public BitcodeReaderBase {
961 /// The module index built during parsing.
962 ModuleSummaryIndex &TheIndex;
963
964 /// Indicates whether we have encountered a global value summary section
965 /// yet during parsing.
966 bool SeenGlobalValSummary = false;
967
968 /// Indicates whether we have already parsed the VST, used for error checking.
969 bool SeenValueSymbolTable = false;
970
971 /// Set to the offset of the VST recorded in the MODULE_CODE_VSTOFFSET record.
972 /// Used to enable on-demand parsing of the VST.
973 uint64_t VSTOffset = 0;
974
975 // Map to save ValueId to ValueInfo association that was recorded in the
976 // ValueSymbolTable. It is used after the VST is parsed to convert
977 // call graph edges read from the function summary from referencing
978 // callees by their ValueId to using the ValueInfo instead, which is how
979 // they are recorded in the summary index being built.
980 // We save a GUID which refers to the same global as the ValueInfo, but
981 // ignoring the linkage, i.e. for values other than local linkage they are
982 // identical (this is the second member). ValueInfo has the real GUID.
983 DenseMap<unsigned, std::pair<ValueInfo, GlobalValue::GUID>>
984 ValueIdToValueInfoMap;
985
986 /// Map populated during module path string table parsing, from the
987 /// module ID to a string reference owned by the index's module
988 /// path string table, used to correlate with combined index
989 /// summary records.
990 DenseMap<uint64_t, StringRef> ModuleIdMap;
991
992 /// Original source file name recorded in a bitcode record.
993 std::string SourceFileName;
994
995 /// The string identifier given to this module by the client, normally the
996 /// path to the bitcode file.
997 StringRef ModulePath;
998
999 /// Callback to ask whether a symbol is the prevailing copy when invoked
1000 /// during combined index building.
1001 std::function<bool(StringRef)> IsPrevailing = nullptr;
1002
1003 /// Callback invoked whenever a new ValueInfo is generated.
1004 std::function<void(ValueInfo)> OnValueInfo = nullptr;
1005
1006 /// Saves the stack ids from the STACK_IDS record to consult when adding
1007 /// ids from the lists in the callsite and alloc entries to the index.
1008 std::vector<uint64_t> StackIds;
1009
1010 /// Linearized radix tree of allocation contexts. See the description above
1011 /// the CallStackRadixTreeBuilder class in ProfileData/MemProf.h for format.
1012 std::vector<uint64_t> RadixArray;
1013
1014 /// Map from the module's stack id index to the index in the
1015 /// ModuleSummaryIndex's StackIds vector. Populated lazily from the StackIds
1016 /// list and used to avoid repeated hash lookups.
1017 std::vector<unsigned> StackIdToIndex;
1018
1019 /// A list of GUIDs defined by this module. Indexed by ValueID.
1020 std::vector<uint64_t> DefinedGUIDs;
1021
1022public:
1023 ModuleSummaryIndexBitcodeReader(
1024 BitstreamCursor Stream, StringRef Strtab, ModuleSummaryIndex &TheIndex,
1025 StringRef ModulePath,
1026 std::function<bool(StringRef)> IsPrevailing = nullptr,
1027 std::function<void(ValueInfo)> OnValueInfo = nullptr);
1028
1030
1031private:
1032 void setValueGUID(uint64_t ValueID, StringRef ValueName,
1034 StringRef SourceFileName);
1035 Error parseValueSymbolTable(
1037 DenseMap<unsigned, GlobalValue::LinkageTypes> &ValueIdToLinkageMap);
1038 SmallVector<ValueInfo, 0> makeRefList(ArrayRef<uint64_t> Record);
1040 makeCallList(ArrayRef<uint64_t> Record, bool IsOldProfileFormat,
1041 bool HasProfile, bool HasRelBF);
1042 Error parseEntireSummary(unsigned ID);
1043 Error parseModuleStringTable();
1044 void parseTypeIdCompatibleVtableSummaryRecord(ArrayRef<uint64_t> Record);
1045 void parseTypeIdCompatibleVtableInfo(ArrayRef<uint64_t> Record, size_t &Slot,
1047 std::vector<FunctionSummary::ParamAccess>
1048 parseParamAccesses(ArrayRef<uint64_t> Record);
1049 SmallVector<unsigned> parseAllocInfoContext(ArrayRef<uint64_t> Record,
1050 unsigned &I);
1051
1052 // Mark uninitialized stack ID mappings for lazy population.
1053 static constexpr unsigned UninitializedStackIdIndex =
1054 std::numeric_limits<unsigned>::max();
1055
1056 unsigned getStackIdIndex(unsigned LocalIndex) {
1057 unsigned &Index = StackIdToIndex[LocalIndex];
1058 // Add the stack id to the ModuleSummaryIndex map only when first requested
1059 // and cache the result in the local StackIdToIndex map.
1060 if (Index == UninitializedStackIdIndex)
1061 Index = TheIndex.addOrGetStackIdIndex(StackIds[LocalIndex]);
1062 return Index;
1063 }
1064
1065 template <bool AllowNullValueInfo = false>
1066 std::pair<ValueInfo, GlobalValue::GUID>
1067 getValueInfoFromValueId(unsigned ValueId);
1068
1069 void addThisModule();
1070 ModuleSummaryIndex::ModuleInfo *getThisModule();
1071};
1072
1073} // end anonymous namespace
1074
1076 Error Err) {
1077 if (Err) {
1078 std::error_code EC;
1079 handleAllErrors(std::move(Err), [&](ErrorInfoBase &EIB) {
1080 EC = EIB.convertToErrorCode();
1081 Ctx.emitError(EIB.message());
1082 });
1083 return EC;
1084 }
1085 return std::error_code();
1086}
1087
1088BitcodeReader::BitcodeReader(BitstreamCursor Stream, StringRef Strtab,
1089 StringRef ProducerIdentification,
1090 LLVMContext &Context)
1091 : BitcodeReaderBase(std::move(Stream), Strtab), Context(Context),
1092 ValueList(this->Stream.SizeInBytes(),
1093 [this](unsigned ValID, BasicBlock *InsertBB) {
1094 return materializeValue(ValID, InsertBB);
1095 }) {
1096 this->ProducerIdentification = std::string(ProducerIdentification);
1097}
1098
1099Error BitcodeReader::materializeForwardReferencedFunctions() {
1100 if (WillMaterializeAllForwardRefs)
1101 return Error::success();
1102
1103 // Prevent recursion.
1104 WillMaterializeAllForwardRefs = true;
1105
1106 while (!BasicBlockFwdRefQueue.empty()) {
1107 Function *F = BasicBlockFwdRefQueue.front();
1108 BasicBlockFwdRefQueue.pop_front();
1109 assert(F && "Expected valid function");
1110 if (!BasicBlockFwdRefs.count(F))
1111 // Already materialized.
1112 continue;
1113
1114 // Check for a function that isn't materializable to prevent an infinite
1115 // loop. When parsing a blockaddress stored in a global variable, there
1116 // isn't a trivial way to check if a function will have a body without a
1117 // linear search through FunctionsWithBodies, so just check it here.
1118 if (!F->isMaterializable())
1119 return error("Never resolved function from blockaddress");
1120
1121 // Try to materialize F.
1122 if (Error Err = materialize(F))
1123 return Err;
1124 }
1125 assert(BasicBlockFwdRefs.empty() && "Function missing from queue");
1126
1127 for (Function *F : BackwardRefFunctions)
1128 if (Error Err = materialize(F))
1129 return Err;
1130 BackwardRefFunctions.clear();
1131
1132 // Reset state.
1133 WillMaterializeAllForwardRefs = false;
1134 return Error::success();
1135}
1136
1137//===----------------------------------------------------------------------===//
1138// Helper functions to implement forward reference resolution, etc.
1139//===----------------------------------------------------------------------===//
1140
1141static bool hasImplicitComdat(size_t Val) {
1142 switch (Val) {
1143 default:
1144 return false;
1145 case 1: // Old WeakAnyLinkage
1146 case 4: // Old LinkOnceAnyLinkage
1147 case 10: // Old WeakODRLinkage
1148 case 11: // Old LinkOnceODRLinkage
1149 return true;
1150 }
1151}
1152
1154 switch (Val) {
1155 default: // Map unknown/new linkages to external
1156 case 0:
1158 case 2:
1160 case 3:
1162 case 5:
1163 return GlobalValue::ExternalLinkage; // Obsolete DLLImportLinkage
1164 case 6:
1165 return GlobalValue::ExternalLinkage; // Obsolete DLLExportLinkage
1166 case 7:
1168 case 8:
1170 case 9:
1172 case 12:
1174 case 13:
1175 return GlobalValue::PrivateLinkage; // Obsolete LinkerPrivateLinkage
1176 case 14:
1177 return GlobalValue::PrivateLinkage; // Obsolete LinkerPrivateWeakLinkage
1178 case 15:
1179 return GlobalValue::ExternalLinkage; // Obsolete LinkOnceODRAutoHideLinkage
1180 case 1: // Old value with implicit comdat.
1181 case 16:
1183 case 10: // Old value with implicit comdat.
1184 case 17:
1186 case 4: // Old value with implicit comdat.
1187 case 18:
1189 case 11: // Old value with implicit comdat.
1190 case 19:
1192 }
1193}
1194
1197 Flags.ReadNone = RawFlags & 0x1;
1198 Flags.ReadOnly = (RawFlags >> 1) & 0x1;
1199 Flags.NoRecurse = (RawFlags >> 2) & 0x1;
1200 Flags.ReturnDoesNotAlias = (RawFlags >> 3) & 0x1;
1201 Flags.NoInline = (RawFlags >> 4) & 0x1;
1202 Flags.AlwaysInline = (RawFlags >> 5) & 0x1;
1203 Flags.NoUnwind = (RawFlags >> 6) & 0x1;
1204 Flags.MayThrow = (RawFlags >> 7) & 0x1;
1205 Flags.HasUnknownCall = (RawFlags >> 8) & 0x1;
1206 Flags.MustBeUnreachable = (RawFlags >> 9) & 0x1;
1207 return Flags;
1208}
1209
1210// Decode the flags for GlobalValue in the summary. The bits for each attribute:
1211//
1212// linkage: [0,4), notEligibleToImport: 4, live: 5, local: 6, canAutoHide: 7,
1213// visibility: [8, 10).
1215 uint64_t Version) {
1216 // Summary were not emitted before LLVM 3.9, we don't need to upgrade Linkage
1217 // like getDecodedLinkage() above. Any future change to the linkage enum and
1218 // to getDecodedLinkage() will need to be taken into account here as above.
1219 auto Linkage = GlobalValue::LinkageTypes(RawFlags & 0xF); // 4 bits
1220 auto Visibility = GlobalValue::VisibilityTypes((RawFlags >> 8) & 3); // 2 bits
1221 auto IK = GlobalValueSummary::ImportKind((RawFlags >> 10) & 1); // 1 bit
1222 bool NoRenameOnPromotion = ((RawFlags >> 11) & 1); // 1 bit
1223 RawFlags = RawFlags >> 4;
1224 bool NotEligibleToImport = (RawFlags & 0x1) || Version < 3;
1225 // The Live flag wasn't introduced until version 3. For dead stripping
1226 // to work correctly on earlier versions, we must conservatively treat all
1227 // values as live.
1228 bool Live = (RawFlags & 0x2) || Version < 3;
1229 bool Local = (RawFlags & 0x4);
1230 bool AutoHide = (RawFlags & 0x8);
1231
1232 return GlobalValueSummary::GVFlags(Linkage, Visibility, NotEligibleToImport,
1233 Live, Local, AutoHide, IK,
1234 NoRenameOnPromotion);
1235}
1236
1237// Decode the flags for GlobalVariable in the summary
1240 (RawFlags & 0x1) ? true : false, (RawFlags & 0x2) ? true : false,
1241 (RawFlags & 0x4) ? true : false,
1242 (GlobalObject::VCallVisibility)(RawFlags >> 3));
1243}
1244
1245static std::pair<CalleeInfo::HotnessType, bool>
1247 CalleeInfo::HotnessType Hotness =
1248 static_cast<CalleeInfo::HotnessType>(RawFlags & 0x7); // 3 bits
1249 bool HasTailCall = (RawFlags & 0x8); // 1 bit
1250 return {Hotness, HasTailCall};
1251}
1252
1253// Deprecated, but still needed to read old bitcode files.
1254static void getDecodedRelBFCallEdgeInfo(uint64_t RawFlags, uint64_t &RelBF,
1255 bool &HasTailCall) {
1256 static constexpr unsigned RelBlockFreqBits = 28;
1257 static constexpr uint64_t RelBlockFreqMask = (1 << RelBlockFreqBits) - 1;
1258 RelBF = RawFlags & RelBlockFreqMask; // RelBlockFreqBits bits
1259 HasTailCall = (RawFlags & (1 << RelBlockFreqBits)); // 1 bit
1260}
1261
1263 switch (Val) {
1264 default: // Map unknown visibilities to default.
1265 case 0: return GlobalValue::DefaultVisibility;
1266 case 1: return GlobalValue::HiddenVisibility;
1267 case 2: return GlobalValue::ProtectedVisibility;
1268 }
1269}
1270
1273 switch (Val) {
1274 default: // Map unknown values to default.
1275 case 0: return GlobalValue::DefaultStorageClass;
1278 }
1279}
1280
1281static bool getDecodedDSOLocal(unsigned Val) {
1282 switch(Val) {
1283 default: // Map unknown values to preemptable.
1284 case 0: return false;
1285 case 1: return true;
1286 }
1287}
1288
1289static std::optional<CodeModel::Model> getDecodedCodeModel(unsigned Val) {
1290 switch (Val) {
1291 case 1:
1292 return CodeModel::Tiny;
1293 case 2:
1294 return CodeModel::Small;
1295 case 3:
1296 return CodeModel::Kernel;
1297 case 4:
1298 return CodeModel::Medium;
1299 case 5:
1300 return CodeModel::Large;
1301 }
1302
1303 return {};
1304}
1305
1307 switch (Val) {
1308 case 0: return GlobalVariable::NotThreadLocal;
1309 default: // Map unknown non-zero value to general dynamic.
1313 case 4: return GlobalVariable::LocalExecTLSModel;
1314 }
1315}
1316
1318 switch (Val) {
1319 default: // Map unknown to UnnamedAddr::None.
1320 case 0: return GlobalVariable::UnnamedAddr::None;
1323 }
1324}
1325
1326static int getDecodedCastOpcode(unsigned Val) {
1327 switch (Val) {
1328 default: return -1;
1329 case bitc::CAST_TRUNC : return Instruction::Trunc;
1330 case bitc::CAST_ZEXT : return Instruction::ZExt;
1331 case bitc::CAST_SEXT : return Instruction::SExt;
1332 case bitc::CAST_FPTOUI : return Instruction::FPToUI;
1333 case bitc::CAST_FPTOSI : return Instruction::FPToSI;
1334 case bitc::CAST_UITOFP : return Instruction::UIToFP;
1335 case bitc::CAST_SITOFP : return Instruction::SIToFP;
1336 case bitc::CAST_FPTRUNC : return Instruction::FPTrunc;
1337 case bitc::CAST_FPEXT : return Instruction::FPExt;
1338 case bitc::CAST_PTRTOADDR: return Instruction::PtrToAddr;
1339 case bitc::CAST_PTRTOINT: return Instruction::PtrToInt;
1340 case bitc::CAST_INTTOPTR: return Instruction::IntToPtr;
1341 case bitc::CAST_BITCAST : return Instruction::BitCast;
1342 case bitc::CAST_ADDRSPACECAST: return Instruction::AddrSpaceCast;
1343 }
1344}
1345
1346static int getDecodedUnaryOpcode(unsigned Val, Type *Ty) {
1347 bool IsFP = Ty->isFPOrFPVectorTy();
1348 // UnOps are only valid for int/fp or vector of int/fp types
1349 if (!IsFP && !Ty->isIntOrIntVectorTy())
1350 return -1;
1351
1352 switch (Val) {
1353 default:
1354 return -1;
1355 case bitc::UNOP_FNEG:
1356 return IsFP ? Instruction::FNeg : -1;
1357 }
1358}
1359
1360static int getDecodedBinaryOpcode(unsigned Val, Type *Ty) {
1361 bool IsFP = Ty->isFPOrFPVectorTy();
1362 // BinOps are only valid for int/fp or vector of int/fp types
1363 if (!IsFP && !Ty->isIntOrIntVectorTy())
1364 return -1;
1365
1366 switch (Val) {
1367 default:
1368 return -1;
1369 case bitc::BINOP_ADD:
1370 return IsFP ? Instruction::FAdd : Instruction::Add;
1371 case bitc::BINOP_SUB:
1372 return IsFP ? Instruction::FSub : Instruction::Sub;
1373 case bitc::BINOP_MUL:
1374 return IsFP ? Instruction::FMul : Instruction::Mul;
1375 case bitc::BINOP_UDIV:
1376 return IsFP ? -1 : Instruction::UDiv;
1377 case bitc::BINOP_SDIV:
1378 return IsFP ? Instruction::FDiv : Instruction::SDiv;
1379 case bitc::BINOP_UREM:
1380 return IsFP ? -1 : Instruction::URem;
1381 case bitc::BINOP_SREM:
1382 return IsFP ? Instruction::FRem : Instruction::SRem;
1383 case bitc::BINOP_SHL:
1384 return IsFP ? -1 : Instruction::Shl;
1385 case bitc::BINOP_LSHR:
1386 return IsFP ? -1 : Instruction::LShr;
1387 case bitc::BINOP_ASHR:
1388 return IsFP ? -1 : Instruction::AShr;
1389 case bitc::BINOP_AND:
1390 return IsFP ? -1 : Instruction::And;
1391 case bitc::BINOP_OR:
1392 return IsFP ? -1 : Instruction::Or;
1393 case bitc::BINOP_XOR:
1394 return IsFP ? -1 : Instruction::Xor;
1395 }
1396}
1397
1399 bool &IsElementwise) {
1400 IsElementwise = Val & bitc::RMW_ELEMENTWISE_FLAG;
1401 switch (Val & ~bitc::RMW_ELEMENTWISE_FLAG) {
1402 default: return AtomicRMWInst::BAD_BINOP;
1404 case bitc::RMW_ADD: return AtomicRMWInst::Add;
1405 case bitc::RMW_SUB: return AtomicRMWInst::Sub;
1406 case bitc::RMW_AND: return AtomicRMWInst::And;
1408 case bitc::RMW_OR: return AtomicRMWInst::Or;
1409 case bitc::RMW_XOR: return AtomicRMWInst::Xor;
1410 case bitc::RMW_MAX: return AtomicRMWInst::Max;
1411 case bitc::RMW_MIN: return AtomicRMWInst::Min;
1418 case bitc::RMW_FMAXIMUM:
1420 case bitc::RMW_FMINIMUM:
1432 case bitc::RMW_USUB_SAT:
1434 }
1435}
1436
1438 switch (Val) {
1445 default: // Map unknown orderings to sequentially-consistent.
1447 }
1448}
1449
1451 switch (Val) {
1452 default: // Map unknown selection kinds to any.
1454 return Comdat::Any;
1456 return Comdat::ExactMatch;
1458 return Comdat::Largest;
1460 return Comdat::NoDeduplicate;
1462 return Comdat::SameSize;
1463 }
1464}
1465
1467 FastMathFlags FMF;
1468 if (0 != (Val & bitc::UnsafeAlgebra))
1469 FMF.setFast();
1470 if (0 != (Val & bitc::AllowReassoc))
1471 FMF.setAllowReassoc();
1472 if (0 != (Val & bitc::NoNaNs))
1473 FMF.setNoNaNs();
1474 if (0 != (Val & bitc::NoInfs))
1475 FMF.setNoInfs();
1476 if (0 != (Val & bitc::NoSignedZeros))
1477 FMF.setNoSignedZeros();
1478 if (0 != (Val & bitc::AllowReciprocal))
1479 FMF.setAllowReciprocal();
1480 if (0 != (Val & bitc::AllowContract))
1481 FMF.setAllowContract(true);
1482 if (0 != (Val & bitc::ApproxFunc))
1483 FMF.setApproxFunc();
1484 return FMF;
1485}
1486
1487static void upgradeDLLImportExportLinkage(GlobalValue *GV, unsigned Val) {
1488 // A GlobalValue with local linkage cannot have a DLL storage class.
1489 if (GV->hasLocalLinkage())
1490 return;
1491 switch (Val) {
1494 }
1495}
1496
1497Type *BitcodeReader::getTypeByID(unsigned ID) {
1498 // The type table size is always specified correctly.
1499 if (ID >= TypeList.size())
1500 return nullptr;
1501
1502 if (Type *Ty = TypeList[ID])
1503 return Ty;
1504
1505 // If we have a forward reference, the only possible case is when it is to a
1506 // named struct. Just create a placeholder for now.
1507 return TypeList[ID] = createIdentifiedStructType(Context);
1508}
1509
1510unsigned BitcodeReader::getContainedTypeID(unsigned ID, unsigned Idx) {
1511 auto It = ContainedTypeIDs.find(ID);
1512 if (It == ContainedTypeIDs.end())
1513 return InvalidTypeID;
1514
1515 if (Idx >= It->second.size())
1516 return InvalidTypeID;
1517
1518 return It->second[Idx];
1519}
1520
1521Type *BitcodeReader::getPtrElementTypeByID(unsigned ID) {
1522 if (ID >= TypeList.size())
1523 return nullptr;
1524
1525 Type *Ty = TypeList[ID];
1526 if (!Ty->isPointerTy())
1527 return nullptr;
1528
1529 return getTypeByID(getContainedTypeID(ID, 0));
1530}
1531
1532unsigned BitcodeReader::getVirtualTypeID(Type *Ty,
1533 ArrayRef<unsigned> ChildTypeIDs) {
1534 unsigned ChildTypeID = ChildTypeIDs.empty() ? InvalidTypeID : ChildTypeIDs[0];
1535 auto CacheKey = std::make_pair(Ty, ChildTypeID);
1536 auto It = VirtualTypeIDs.find(CacheKey);
1537 if (It != VirtualTypeIDs.end()) {
1538 // The cmpxchg return value is the only place we need more than one
1539 // contained type ID, however the second one will always be the same (i1),
1540 // so we don't need to include it in the cache key. This asserts that the
1541 // contained types are indeed as expected and there are no collisions.
1542 assert((ChildTypeIDs.empty() ||
1543 ContainedTypeIDs[It->second] == ChildTypeIDs) &&
1544 "Incorrect cached contained type IDs");
1545 return It->second;
1546 }
1547
1548 unsigned TypeID = TypeList.size();
1549 TypeList.push_back(Ty);
1550 if (!ChildTypeIDs.empty())
1551 append_range(ContainedTypeIDs[TypeID], ChildTypeIDs);
1552 VirtualTypeIDs.insert({CacheKey, TypeID});
1553 return TypeID;
1554}
1555
1557 GEPNoWrapFlags NW;
1558 if (Flags & (1 << bitc::GEP_INBOUNDS))
1560 if (Flags & (1 << bitc::GEP_NUSW))
1562 if (Flags & (1 << bitc::GEP_NUW))
1564 return NW;
1565}
1566
1567static bool isConstExprSupported(const BitcodeConstant *BC) {
1568 uint8_t Opcode = BC->Opcode;
1569
1570 // These are not real constant expressions, always consider them supported.
1571 if (Opcode >= BitcodeConstant::FirstSpecialOpcode)
1572 return true;
1573
1574 // If -expand-constant-exprs is set, we want to consider all expressions
1575 // as unsupported.
1577 return false;
1578
1579 if (Instruction::isBinaryOp(Opcode))
1580 return ConstantExpr::isSupportedBinOp(Opcode);
1581
1582 if (Instruction::isCast(Opcode))
1583 return ConstantExpr::isSupportedCastOp(Opcode);
1584
1585 if (Opcode == Instruction::GetElementPtr)
1586 return ConstantExpr::isSupportedGetElementPtr(BC->SrcElemTy);
1587
1588 switch (Opcode) {
1589 case Instruction::FNeg:
1590 case Instruction::Select:
1591 case Instruction::ICmp:
1592 case Instruction::FCmp:
1593 return false;
1594 default:
1595 return true;
1596 }
1597}
1598
1599Expected<Value *> BitcodeReader::materializeValue(unsigned StartValID,
1600 BasicBlock *InsertBB) {
1601 // Quickly handle the case where there is no BitcodeConstant to resolve.
1602 if (StartValID < ValueList.size() && ValueList[StartValID] &&
1603 !isa<BitcodeConstant>(ValueList[StartValID]))
1604 return ValueList[StartValID];
1605
1606 SmallDenseMap<unsigned, Value *> MaterializedValues;
1607 SmallVector<unsigned> Worklist;
1608 Worklist.push_back(StartValID);
1609 while (!Worklist.empty()) {
1610 unsigned ValID = Worklist.back();
1611 if (MaterializedValues.count(ValID)) {
1612 // Duplicate expression that was already handled.
1613 Worklist.pop_back();
1614 continue;
1615 }
1616
1617 if (ValID >= ValueList.size() || !ValueList[ValID])
1618 return error("Invalid value ID");
1619
1620 Value *V = ValueList[ValID];
1621 auto *BC = dyn_cast<BitcodeConstant>(V);
1622 if (!BC) {
1623 MaterializedValues.insert({ValID, V});
1624 Worklist.pop_back();
1625 continue;
1626 }
1627
1628 // Iterate in reverse, so values will get popped from the worklist in
1629 // expected order.
1631 for (unsigned OpID : reverse(BC->getOperandIDs())) {
1632 auto It = MaterializedValues.find(OpID);
1633 if (It != MaterializedValues.end())
1634 Ops.push_back(It->second);
1635 else
1636 Worklist.push_back(OpID);
1637 }
1638
1639 // Some expressions have not been resolved yet, handle them first and then
1640 // revisit this one.
1641 if (Ops.size() != BC->getOperandIDs().size())
1642 continue;
1643 std::reverse(Ops.begin(), Ops.end());
1644
1645 SmallVector<Constant *> ConstOps;
1646 for (Value *Op : Ops)
1647 if (auto *C = dyn_cast<Constant>(Op))
1648 ConstOps.push_back(C);
1649
1650 // Materialize as constant expression if possible.
1651 if (isConstExprSupported(BC) && ConstOps.size() == Ops.size()) {
1652 Constant *C;
1653 if (Instruction::isCast(BC->Opcode)) {
1654 C = UpgradeBitCastExpr(BC->Opcode, ConstOps[0], BC->getType());
1655 if (!C)
1656 C = ConstantExpr::getCast(BC->Opcode, ConstOps[0], BC->getType());
1657 } else if (Instruction::isBinaryOp(BC->Opcode)) {
1658 C = ConstantExpr::get(BC->Opcode, ConstOps[0], ConstOps[1], BC->Flags);
1659 } else {
1660 switch (BC->Opcode) {
1661 case BitcodeConstant::ConstantPtrAuthOpcode: {
1662 auto *Key = dyn_cast<ConstantInt>(ConstOps[1]);
1663 if (!Key)
1664 return error("ptrauth key operand must be ConstantInt");
1665
1666 auto *Disc = dyn_cast<ConstantInt>(ConstOps[2]);
1667 if (!Disc)
1668 return error("ptrauth disc operand must be ConstantInt");
1669
1670 Constant *DeactivationSymbol =
1671 ConstOps.size() > 4 ? ConstOps[4]
1673 ConstOps[3]->getType()));
1674 if (!DeactivationSymbol->getType()->isPointerTy())
1675 return error(
1676 "ptrauth deactivation symbol operand must be a pointer");
1677
1678 C = ConstantPtrAuth::get(ConstOps[0], Key, Disc, ConstOps[3],
1679 DeactivationSymbol);
1680 break;
1681 }
1682 case BitcodeConstant::NoCFIOpcode: {
1683 auto *GV = dyn_cast<GlobalValue>(ConstOps[0]);
1684 if (!GV)
1685 return error("no_cfi operand must be GlobalValue");
1686 C = NoCFIValue::get(GV);
1687 break;
1688 }
1689 case BitcodeConstant::DSOLocalEquivalentOpcode: {
1690 auto *GV = dyn_cast<GlobalValue>(ConstOps[0]);
1691 if (!GV)
1692 return error("dso_local operand must be GlobalValue");
1694 break;
1695 }
1696 case BitcodeConstant::BlockAddressOpcode: {
1697 Function *Fn = dyn_cast<Function>(ConstOps[0]);
1698 if (!Fn)
1699 return error("blockaddress operand must be a function");
1700
1701 // If the function is already parsed we can insert the block address
1702 // right away.
1703 BasicBlock *BB;
1704 unsigned BBID = BC->BlockAddressBB;
1705 if (!BBID)
1706 // Invalid reference to entry block.
1707 return error("Invalid ID");
1708 if (!Fn->empty()) {
1709 Function::iterator BBI = Fn->begin(), BBE = Fn->end();
1710 for (size_t I = 0, E = BBID; I != E; ++I) {
1711 if (BBI == BBE)
1712 return error("Invalid ID");
1713 ++BBI;
1714 }
1715 BB = &*BBI;
1716 } else {
1717 // Otherwise insert a placeholder and remember it so it can be
1718 // inserted when the function is parsed.
1719 auto &FwdBBs = BasicBlockFwdRefs[Fn];
1720 if (FwdBBs.empty())
1721 BasicBlockFwdRefQueue.push_back(Fn);
1722 if (FwdBBs.size() < BBID + 1)
1723 FwdBBs.resize(BBID + 1);
1724 if (!FwdBBs[BBID])
1725 FwdBBs[BBID] = BasicBlock::Create(Context);
1726 BB = FwdBBs[BBID];
1727 }
1728 C = BlockAddress::get(Fn->getType(), BB);
1729 break;
1730 }
1731 case BitcodeConstant::ConstantStructOpcode: {
1732 auto *ST = cast<StructType>(BC->getType());
1733 if (ST->getNumElements() != ConstOps.size())
1734 return error("Invalid number of elements in struct initializer");
1735
1736 for (const auto [Ty, Op] : zip(ST->elements(), ConstOps))
1737 if (Op->getType() != Ty)
1738 return error("Incorrect type in struct initializer");
1739
1740 C = ConstantStruct::get(ST, ConstOps);
1741 break;
1742 }
1743 case BitcodeConstant::ConstantArrayOpcode: {
1744 auto *AT = cast<ArrayType>(BC->getType());
1745 if (AT->getNumElements() != ConstOps.size())
1746 return error("Invalid number of elements in array initializer");
1747
1748 for (Constant *Op : ConstOps)
1749 if (Op->getType() != AT->getElementType())
1750 return error("Incorrect type in array initializer");
1751
1752 C = ConstantArray::get(AT, ConstOps);
1753 break;
1754 }
1755 case BitcodeConstant::ConstantVectorOpcode: {
1756 auto *VT = cast<FixedVectorType>(BC->getType());
1757 if (VT->getNumElements() != ConstOps.size())
1758 return error("Invalid number of elements in vector initializer");
1759
1760 for (Constant *Op : ConstOps)
1761 if (Op->getType() != VT->getElementType())
1762 return error("Incorrect type in vector initializer");
1763
1764 C = ConstantVector::get(ConstOps);
1765 break;
1766 }
1767 case Instruction::GetElementPtr:
1769 BC->SrcElemTy, ConstOps[0], ArrayRef(ConstOps).drop_front(),
1770 toGEPNoWrapFlags(BC->Flags), BC->getInRange());
1771 break;
1772 case Instruction::ExtractElement:
1773 C = ConstantExpr::getExtractElement(ConstOps[0], ConstOps[1]);
1774 break;
1775 case Instruction::InsertElement:
1776 C = ConstantExpr::getInsertElement(ConstOps[0], ConstOps[1],
1777 ConstOps[2]);
1778 break;
1779 case Instruction::ShuffleVector: {
1780 SmallVector<int, 16> Mask;
1781 ShuffleVectorInst::getShuffleMask(ConstOps[2], Mask);
1782 C = ConstantExpr::getShuffleVector(ConstOps[0], ConstOps[1], Mask);
1783 break;
1784 }
1785 default:
1786 llvm_unreachable("Unhandled bitcode constant");
1787 }
1788 }
1789
1790 // Cache resolved constant.
1791 ValueList.replaceValueWithoutRAUW(ValID, C);
1792 MaterializedValues.insert({ValID, C});
1793 Worklist.pop_back();
1794 continue;
1795 }
1796
1797 if (!InsertBB)
1798 return error(Twine("Value referenced by initializer is an unsupported "
1799 "constant expression of type ") +
1800 BC->getOpcodeName());
1801
1802 // Materialize as instructions if necessary.
1803 Instruction *I;
1804 if (Instruction::isCast(BC->Opcode)) {
1805 I = CastInst::Create((Instruction::CastOps)BC->Opcode, Ops[0],
1806 BC->getType(), "constexpr", InsertBB);
1807 } else if (Instruction::isUnaryOp(BC->Opcode)) {
1809 "constexpr", InsertBB);
1810 } else if (Instruction::isBinaryOp(BC->Opcode)) {
1812 Ops[1], "constexpr", InsertBB);
1815 I->setHasNoSignedWrap();
1817 I->setHasNoUnsignedWrap();
1818 }
1820 (BC->Flags & PossiblyExactOperator::IsExact))
1821 I->setIsExact();
1822 } else {
1823 switch (BC->Opcode) {
1824 case BitcodeConstant::ConstantVectorOpcode: {
1825 Type *IdxTy = Type::getInt32Ty(BC->getContext());
1826 Value *V = PoisonValue::get(BC->getType());
1827 for (auto Pair : enumerate(Ops)) {
1828 Value *Idx = ConstantInt::get(IdxTy, Pair.index());
1829 V = InsertElementInst::Create(V, Pair.value(), Idx, "constexpr.ins",
1830 InsertBB);
1831 }
1832 I = cast<Instruction>(V);
1833 break;
1834 }
1835 case BitcodeConstant::ConstantStructOpcode:
1836 case BitcodeConstant::ConstantArrayOpcode: {
1837 Value *V = PoisonValue::get(BC->getType());
1838 for (auto Pair : enumerate(Ops))
1839 V = InsertValueInst::Create(V, Pair.value(), Pair.index(),
1840 "constexpr.ins", InsertBB);
1841 I = cast<Instruction>(V);
1842 break;
1843 }
1844 case Instruction::ICmp:
1845 case Instruction::FCmp:
1847 (CmpInst::Predicate)BC->Flags, Ops[0], Ops[1],
1848 "constexpr", InsertBB);
1849 break;
1850 case Instruction::GetElementPtr:
1851 I = GetElementPtrInst::Create(BC->SrcElemTy, Ops[0],
1852 ArrayRef(Ops).drop_front(), "constexpr",
1853 InsertBB);
1854 cast<GetElementPtrInst>(I)->setNoWrapFlags(toGEPNoWrapFlags(BC->Flags));
1855 break;
1856 case Instruction::Select:
1857 I = SelectInst::Create(Ops[0], Ops[1], Ops[2], "constexpr", InsertBB);
1858 break;
1859 case Instruction::ExtractElement:
1860 I = ExtractElementInst::Create(Ops[0], Ops[1], "constexpr", InsertBB);
1861 break;
1862 case Instruction::InsertElement:
1863 I = InsertElementInst::Create(Ops[0], Ops[1], Ops[2], "constexpr",
1864 InsertBB);
1865 break;
1866 case Instruction::ShuffleVector:
1867 I = new ShuffleVectorInst(Ops[0], Ops[1], Ops[2], "constexpr",
1868 InsertBB);
1869 break;
1870 default:
1871 llvm_unreachable("Unhandled bitcode constant");
1872 }
1873 }
1874
1875 MaterializedValues.insert({ValID, I});
1876 Worklist.pop_back();
1877 }
1878
1879 return MaterializedValues[StartValID];
1880}
1881
1882Expected<Constant *> BitcodeReader::getValueForInitializer(unsigned ID) {
1883 Expected<Value *> MaybeV = materializeValue(ID, /* InsertBB */ nullptr);
1884 if (!MaybeV)
1885 return MaybeV.takeError();
1886
1887 // Result must be Constant if InsertBB is nullptr.
1888 return cast<Constant>(MaybeV.get());
1889}
1890
1891StructType *BitcodeReader::createIdentifiedStructType(LLVMContext &Context,
1892 StringRef Name) {
1893 auto *Ret = StructType::create(Context, Name);
1894 IdentifiedStructTypes.push_back(Ret);
1895 return Ret;
1896}
1897
1898StructType *BitcodeReader::createIdentifiedStructType(LLVMContext &Context) {
1899 auto *Ret = StructType::create(Context);
1900 IdentifiedStructTypes.push_back(Ret);
1901 return Ret;
1902}
1903
1904//===----------------------------------------------------------------------===//
1905// Functions for parsing blocks from the bitcode file
1906//===----------------------------------------------------------------------===//
1907
1909 switch (Val) {
1913 llvm_unreachable("Synthetic enumerators which should never get here");
1914
1915 case Attribute::None: return 0;
1916 case Attribute::ZExt: return 1 << 0;
1917 case Attribute::SExt: return 1 << 1;
1918 case Attribute::NoReturn: return 1 << 2;
1919 case Attribute::InReg: return 1 << 3;
1920 case Attribute::StructRet: return 1 << 4;
1921 case Attribute::NoUnwind: return 1 << 5;
1922 case Attribute::NoAlias: return 1 << 6;
1923 case Attribute::ByVal: return 1 << 7;
1924 case Attribute::Nest: return 1 << 8;
1925 case Attribute::ReadNone: return 1 << 9;
1926 case Attribute::ReadOnly: return 1 << 10;
1927 case Attribute::NoInline: return 1 << 11;
1928 case Attribute::AlwaysInline: return 1 << 12;
1929 case Attribute::OptimizeForSize: return 1 << 13;
1930 case Attribute::StackProtect: return 1 << 14;
1931 case Attribute::StackProtectReq: return 1 << 15;
1932 case Attribute::Alignment: return 31 << 16;
1933 // 1ULL << 21 is NoCapture, which is upgraded separately.
1934 case Attribute::NoRedZone: return 1 << 22;
1935 case Attribute::NoImplicitFloat: return 1 << 23;
1936 case Attribute::Naked: return 1 << 24;
1937 case Attribute::InlineHint: return 1 << 25;
1938 case Attribute::StackAlignment: return 7 << 26;
1939 case Attribute::ReturnsTwice: return 1 << 29;
1940 case Attribute::UWTable: return 1 << 30;
1941 case Attribute::NonLazyBind: return 1U << 31;
1942 case Attribute::SanitizeAddress: return 1ULL << 32;
1943 case Attribute::MinSize: return 1ULL << 33;
1944 case Attribute::NoDuplicate: return 1ULL << 34;
1945 case Attribute::StackProtectStrong: return 1ULL << 35;
1946 case Attribute::SanitizeThread: return 1ULL << 36;
1947 case Attribute::SanitizeMemory: return 1ULL << 37;
1948 case Attribute::NoBuiltin: return 1ULL << 38;
1949 case Attribute::Returned: return 1ULL << 39;
1950 case Attribute::Cold: return 1ULL << 40;
1951 case Attribute::Builtin: return 1ULL << 41;
1952 case Attribute::OptimizeNone: return 1ULL << 42;
1953 case Attribute::InAlloca: return 1ULL << 43;
1954 case Attribute::NonNull: return 1ULL << 44;
1955 case Attribute::JumpTable: return 1ULL << 45;
1956 case Attribute::Convergent: return 1ULL << 46;
1957 case Attribute::SafeStack: return 1ULL << 47;
1958 case Attribute::NoRecurse: return 1ULL << 48;
1959 // 1ULL << 49 is InaccessibleMemOnly, which is upgraded separately.
1960 // 1ULL << 50 is InaccessibleMemOrArgMemOnly, which is upgraded separately.
1961 case Attribute::SwiftSelf: return 1ULL << 51;
1962 case Attribute::SwiftError: return 1ULL << 52;
1963 case Attribute::WriteOnly: return 1ULL << 53;
1964 case Attribute::Speculatable: return 1ULL << 54;
1965 case Attribute::StrictFP: return 1ULL << 55;
1966 case Attribute::SanitizeHWAddress: return 1ULL << 56;
1967 case Attribute::NoCfCheck: return 1ULL << 57;
1968 case Attribute::OptForFuzzing: return 1ULL << 58;
1969 case Attribute::ShadowCallStack: return 1ULL << 59;
1970 case Attribute::SpeculativeLoadHardening:
1971 return 1ULL << 60;
1972 case Attribute::ImmArg:
1973 return 1ULL << 61;
1974 case Attribute::WillReturn:
1975 return 1ULL << 62;
1976 case Attribute::NoFree:
1977 return 1ULL << 63;
1978 default:
1979 // Other attributes are not supported in the raw format,
1980 // as we ran out of space.
1981 return 0;
1982 }
1983 llvm_unreachable("Unsupported attribute type");
1984}
1985
1986static void addRawAttributeValue(AttrBuilder &B, uint64_t Val) {
1987 if (!Val) return;
1988
1990 I = Attribute::AttrKind(I + 1)) {
1991 if (uint64_t A = (Val & getRawAttributeMask(I))) {
1992 if (I == Attribute::Alignment)
1993 B.addAlignmentAttr(1ULL << ((A >> 16) - 1));
1994 else if (I == Attribute::StackAlignment)
1995 B.addStackAlignmentAttr(1ULL << ((A >> 26)-1));
1996 else if (Attribute::isTypeAttrKind(I))
1997 B.addTypeAttr(I, nullptr); // Type will be auto-upgraded.
1998 else
1999 B.addAttribute(I);
2000 }
2001 }
2002}
2003
2004/// This fills an AttrBuilder object with the LLVM attributes that have
2005/// been decoded from the given integer.
2006static void decodeLLVMAttributesForBitcode(AttrBuilder &B,
2007 uint64_t EncodedAttrs,
2008 uint64_t AttrIdx) {
2009 // The alignment is stored as a 16-bit raw value from bits 31--16. We shift
2010 // the bits above 31 down by 11 bits.
2011 unsigned Alignment = (EncodedAttrs & (0xffffULL << 16)) >> 16;
2012 assert((!Alignment || isPowerOf2_32(Alignment)) &&
2013 "Alignment must be a power of two.");
2014
2015 if (Alignment)
2016 B.addAlignmentAttr(Alignment);
2017
2018 uint64_t Attrs = ((EncodedAttrs & (0xfffffULL << 32)) >> 11) |
2019 (EncodedAttrs & 0xffff);
2020
2021 if (AttrIdx == AttributeList::FunctionIndex) {
2022 // Upgrade old memory attributes.
2024 if (Attrs & (1ULL << 9)) {
2025 // ReadNone
2026 Attrs &= ~(1ULL << 9);
2027 ME &= MemoryEffects::none();
2028 }
2029 if (Attrs & (1ULL << 10)) {
2030 // ReadOnly
2031 Attrs &= ~(1ULL << 10);
2033 }
2034 if (Attrs & (1ULL << 49)) {
2035 // InaccessibleMemOnly
2036 Attrs &= ~(1ULL << 49);
2038 }
2039 if (Attrs & (1ULL << 50)) {
2040 // InaccessibleMemOrArgMemOnly
2041 Attrs &= ~(1ULL << 50);
2043 }
2044 if (Attrs & (1ULL << 53)) {
2045 // WriteOnly
2046 Attrs &= ~(1ULL << 53);
2048 }
2049 if (ME != MemoryEffects::unknown())
2050 B.addMemoryAttr(ME);
2051 }
2052
2053 // Upgrade nocapture to captures(none).
2054 if (Attrs & (1ULL << 21)) {
2055 Attrs &= ~(1ULL << 21);
2056 B.addCapturesAttr(CaptureInfo::none());
2057 }
2058
2059 addRawAttributeValue(B, Attrs);
2060}
2061
2062Error BitcodeReader::parseAttributeBlock() {
2064 return Err;
2065
2066 if (!MAttributes.empty())
2067 return error("Invalid multiple blocks");
2068
2069 SmallVector<uint64_t, 64> Record;
2070
2072
2073 // Read all the records.
2074 while (true) {
2075 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2076 if (!MaybeEntry)
2077 return MaybeEntry.takeError();
2078 BitstreamEntry Entry = MaybeEntry.get();
2079
2080 switch (Entry.Kind) {
2081 case BitstreamEntry::SubBlock: // Handled for us already.
2083 return error("Malformed block");
2085 return Error::success();
2087 // The interesting case.
2088 break;
2089 }
2090
2091 // Read a record.
2092 Record.clear();
2093 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2094 if (!MaybeRecord)
2095 return MaybeRecord.takeError();
2096 switch (MaybeRecord.get()) {
2097 default: // Default behavior: ignore.
2098 break;
2099 case bitc::PARAMATTR_CODE_ENTRY_OLD: // ENTRY: [paramidx0, attr0, ...]
2100 // Deprecated, but still needed to read old bitcode files.
2101 if (Record.size() & 1)
2102 return error("Invalid parameter attribute record");
2103
2104 for (unsigned i = 0, e = Record.size(); i != e; i += 2) {
2105 AttrBuilder B(Context);
2106 decodeLLVMAttributesForBitcode(B, Record[i+1], Record[i]);
2107 Attrs.push_back(AttributeList::get(Context, Record[i], B));
2108 }
2109
2110 MAttributes.push_back(AttributeList::get(Context, Attrs));
2111 Attrs.clear();
2112 break;
2113 case bitc::PARAMATTR_CODE_ENTRY: // ENTRY: [attrgrp0, attrgrp1, ...]
2114 for (uint64_t Val : Record)
2115 Attrs.push_back(MAttributeGroups[Val]);
2116
2117 MAttributes.push_back(AttributeList::get(Context, Attrs));
2118 Attrs.clear();
2119 break;
2120 }
2121 }
2122}
2123
2124// Returns Attribute::None on unrecognized codes.
2126 switch (Code) {
2127 default:
2128 return Attribute::None;
2130 return Attribute::Alignment;
2132 return Attribute::AlwaysInline;
2134 return Attribute::Builtin;
2136 return Attribute::ByVal;
2138 return Attribute::InAlloca;
2140 return Attribute::Cold;
2142 return Attribute::Convergent;
2144 return Attribute::DisableSanitizerInstrumentation;
2146 return Attribute::ElementType;
2148 return Attribute::FnRetThunkExtern;
2150 return Attribute::Flatten;
2152 return Attribute::HybridPatchable;
2154 return Attribute::InlineHint;
2156 return Attribute::InReg;
2158 return Attribute::JumpTable;
2160 return Attribute::Memory;
2162 return Attribute::NoFPClass;
2164 return Attribute::MinSize;
2166 return Attribute::Naked;
2168 return Attribute::Nest;
2170 return Attribute::NoAlias;
2172 return Attribute::NoBuiltin;
2174 return Attribute::NoCallback;
2176 return Attribute::NoDivergenceSource;
2178 return Attribute::NoDuplicate;
2180 return Attribute::NoFree;
2182 return Attribute::NoFreeObj;
2184 return Attribute::NoImplicitFloat;
2186 return Attribute::NoInline;
2188 return Attribute::NoRecurse;
2190 return Attribute::NoMerge;
2192 return Attribute::NonLazyBind;
2194 return Attribute::NonNull;
2196 return Attribute::Dereferenceable;
2198 return Attribute::DereferenceableOrNull;
2200 return Attribute::AllocAlign;
2202 return Attribute::AllocKind;
2204 return Attribute::AllocSize;
2206 return Attribute::AllocatedPointer;
2208 return Attribute::NoRedZone;
2210 return Attribute::NoReturn;
2212 return Attribute::NoSync;
2214 return Attribute::NoCfCheck;
2216 return Attribute::NoProfile;
2218 return Attribute::SkipProfile;
2220 return Attribute::NoUnwind;
2222 return Attribute::NoSanitizeBounds;
2224 return Attribute::NoSanitizeCoverage;
2226 return Attribute::NullPointerIsValid;
2228 return Attribute::OptimizeForDebugging;
2230 return Attribute::OptForFuzzing;
2232 return Attribute::OptimizeForSize;
2234 return Attribute::OptimizeNone;
2236 return Attribute::ReadNone;
2238 return Attribute::ReadOnly;
2240 return Attribute::Returned;
2242 return Attribute::ReturnsTwice;
2244 return Attribute::SExt;
2246 return Attribute::Speculatable;
2248 return Attribute::StackAlignment;
2250 return Attribute::StackProtect;
2252 return Attribute::StackProtectReq;
2254 return Attribute::StackProtectStrong;
2256 return Attribute::SafeStack;
2258 return Attribute::ShadowCallStack;
2260 return Attribute::StrictFP;
2262 return Attribute::StructRet;
2264 return Attribute::SanitizeAddress;
2266 return Attribute::SanitizeHWAddress;
2268 return Attribute::SanitizeThread;
2270 return Attribute::SanitizeType;
2272 return Attribute::SanitizeMemory;
2274 return Attribute::SanitizeNumericalStability;
2276 return Attribute::SanitizeRealtime;
2278 return Attribute::SanitizeRealtimeBlocking;
2280 return Attribute::SanitizeAllocToken;
2282 return Attribute::SpeculativeLoadHardening;
2284 return Attribute::SwiftError;
2286 return Attribute::SwiftSelf;
2288 return Attribute::SwiftAsync;
2290 return Attribute::UWTable;
2292 return Attribute::VScaleRange;
2294 return Attribute::WillReturn;
2296 return Attribute::WriteOnly;
2298 return Attribute::ZExt;
2300 return Attribute::ImmArg;
2302 return Attribute::SanitizeMemTag;
2304 return Attribute::Preallocated;
2306 return Attribute::NoUndef;
2308 return Attribute::ByRef;
2310 return Attribute::MustProgress;
2312 return Attribute::Hot;
2314 return Attribute::PresplitCoroutine;
2316 return Attribute::Writable;
2318 return Attribute::CoroDestroyOnlyWhenComplete;
2320 return Attribute::DeadOnUnwind;
2322 return Attribute::Range;
2324 return Attribute::Initializes;
2326 return Attribute::CoroElideSafe;
2328 return Attribute::NoExt;
2330 return Attribute::Captures;
2332 return Attribute::DeadOnReturn;
2334 return Attribute::NoCreateUndefOrPoison;
2336 return Attribute::DenormalFPEnv;
2338 return Attribute::NoOutline;
2340 return Attribute::NoIPA;
2341 }
2342}
2343
2344Error BitcodeReader::parseAlignmentValue(uint64_t Exponent,
2345 MaybeAlign &Alignment) {
2346 // Note: Alignment in bitcode files is incremented by 1, so that zero
2347 // can be used for default alignment.
2348 if (Exponent > Value::MaxAlignmentExponent + 1)
2349 return error("Invalid alignment value");
2351 return Error::success();
2352}
2353
2354Error BitcodeReader::parseAttrKind(uint64_t Code, Attribute::AttrKind *Kind) {
2355 *Kind = getAttrFromCode(Code);
2356 if (*Kind == Attribute::None)
2357 return error("Unknown attribute kind (" + Twine(Code) + ")");
2358 return Error::success();
2359}
2360
2361static bool upgradeOldMemoryAttribute(MemoryEffects &ME, uint64_t EncodedKind) {
2362 switch (EncodedKind) {
2364 ME &= MemoryEffects::none();
2365 return true;
2368 return true;
2371 return true;
2374 return true;
2377 return true;
2380 return true;
2381 default:
2382 return false;
2383 }
2384}
2385
2386Error BitcodeReader::parseAttributeGroupBlock() {
2388 return Err;
2389
2390 if (!MAttributeGroups.empty())
2391 return error("Invalid multiple blocks");
2392
2393 SmallVector<uint64_t, 64> Record;
2394
2395 // Read all the records.
2396 while (true) {
2397 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2398 if (!MaybeEntry)
2399 return MaybeEntry.takeError();
2400 BitstreamEntry Entry = MaybeEntry.get();
2401
2402 switch (Entry.Kind) {
2403 case BitstreamEntry::SubBlock: // Handled for us already.
2405 return error("Malformed block");
2407 return Error::success();
2409 // The interesting case.
2410 break;
2411 }
2412
2413 // Read a record.
2414 Record.clear();
2415 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2416 if (!MaybeRecord)
2417 return MaybeRecord.takeError();
2418 switch (MaybeRecord.get()) {
2419 default: // Default behavior: ignore.
2420 break;
2421 case bitc::PARAMATTR_GRP_CODE_ENTRY: { // ENTRY: [grpid, idx, a0, a1, ...]
2422 if (Record.size() < 3)
2423 return error("Invalid grp record");
2424
2425 uint64_t GrpID = Record[0];
2426 uint64_t Idx = Record[1]; // Index of the object this attribute refers to.
2427
2428 AttrBuilder B(Context);
2430 for (unsigned i = 2, e = Record.size(); i != e; ++i) {
2431 if (Record[i] == 0) { // Enum attribute
2432 Attribute::AttrKind Kind;
2433 uint64_t EncodedKind = Record[++i];
2434 if (Idx == AttributeList::FunctionIndex &&
2435 upgradeOldMemoryAttribute(ME, EncodedKind))
2436 continue;
2437
2438 if (EncodedKind == bitc::ATTR_KIND_NO_CAPTURE) {
2439 B.addCapturesAttr(CaptureInfo::none());
2440 continue;
2441 }
2442
2443 if (Error Err = parseAttrKind(EncodedKind, &Kind))
2444 return Err;
2445
2446 // Upgrade old-style byval attribute to one with a type, even if it's
2447 // nullptr. We will have to insert the real type when we associate
2448 // this AttributeList with a function.
2449 if (Kind == Attribute::ByVal)
2450 B.addByValAttr(nullptr);
2451 else if (Kind == Attribute::StructRet)
2452 B.addStructRetAttr(nullptr);
2453 else if (Kind == Attribute::InAlloca)
2454 B.addInAllocaAttr(nullptr);
2455 else if (Kind == Attribute::UWTable)
2456 B.addUWTableAttr(UWTableKind::Default);
2457 else if (Kind == Attribute::DeadOnReturn)
2458 B.addDeadOnReturnAttr(DeadOnReturnInfo());
2459 else if (Attribute::isEnumAttrKind(Kind))
2460 B.addAttribute(Kind);
2461 else
2462 return error("Not an enum attribute");
2463 } else if (Record[i] == 1) { // Integer attribute
2464 Attribute::AttrKind Kind;
2465 if (Error Err = parseAttrKind(Record[++i], &Kind))
2466 return Err;
2467 if (!Attribute::isIntAttrKind(Kind))
2468 return error("Not an int attribute");
2469 if (Kind == Attribute::Alignment)
2470 B.addAlignmentAttr(Record[++i]);
2471 else if (Kind == Attribute::StackAlignment)
2472 B.addStackAlignmentAttr(Record[++i]);
2473 else if (Kind == Attribute::Dereferenceable)
2474 B.addDereferenceableAttr(Record[++i]);
2475 else if (Kind == Attribute::DereferenceableOrNull)
2476 B.addDereferenceableOrNullAttr(Record[++i]);
2477 else if (Kind == Attribute::DeadOnReturn)
2478 B.addDeadOnReturnAttr(
2480 else if (Kind == Attribute::AllocSize)
2481 B.addAllocSizeAttrFromRawRepr(Record[++i]);
2482 else if (Kind == Attribute::VScaleRange)
2483 B.addVScaleRangeAttrFromRawRepr(Record[++i]);
2484 else if (Kind == Attribute::UWTable)
2485 B.addUWTableAttr(UWTableKind(Record[++i]));
2486 else if (Kind == Attribute::AllocKind)
2487 B.addAllocKindAttr(static_cast<AllocFnKind>(Record[++i]));
2488 else if (Kind == Attribute::Memory) {
2489 uint64_t EncodedME = Record[++i];
2490 const uint8_t Version = (EncodedME >> 56);
2491 if (Version == 0) {
2492 // Errno memory location was previously encompassed into default
2493 // memory. Ensure this is taken into account while reconstructing
2494 // the memory attribute prior to its introduction.
2495 ModRefInfo ArgMem = ModRefInfo((EncodedME >> 0) & 3);
2496 ModRefInfo InaccessibleMem = ModRefInfo((EncodedME >> 2) & 3);
2497 ModRefInfo OtherMem = ModRefInfo((EncodedME >> 4) & 3);
2500 MemoryEffects::errnoMemOnly(OtherMem) |
2502 // Old bitcode encoded AArch64 state as inaccessible memory.
2503 // Upgrade those effects to target-specific memory locations.
2504 if (getTargetTriple().isAArch64())
2505 ME = ME.getWithModRef(IRMemLocation::TargetMem0,
2507 ME.getWithModRef(IRMemLocation::TargetMem1,
2509 B.addMemoryAttr(ME);
2510 } else {
2511 // Construct the memory attribute directly from the encoded base
2512 // on newer versions.
2514 EncodedME & 0x00FFFFFFFFFFFFFFULL);
2515 // Upgrade to target-specific memory locations introduced in
2516 // version 2.
2517 if (Version == 1 && getTargetTriple().isAArch64())
2518 ME = ME.getWithModRef(
2519 IRMemLocation::TargetMem0,
2520 ME.getModRef(IRMemLocation::InaccessibleMem)) |
2521 ME.getWithModRef(
2522 IRMemLocation::TargetMem1,
2523 ME.getModRef(IRMemLocation::InaccessibleMem));
2524 B.addMemoryAttr(ME);
2525 }
2526 } else if (Kind == Attribute::Captures)
2527 B.addCapturesAttr(CaptureInfo::createFromIntValue(Record[++i]));
2528 else if (Kind == Attribute::NoFPClass)
2529 B.addNoFPClassAttr(
2530 static_cast<FPClassTest>(Record[++i] & fcAllFlags));
2531 else if (Kind == Attribute::DenormalFPEnv) {
2532 B.addDenormalFPEnvAttr(
2534 }
2535 } else if (Record[i] == 3 || Record[i] == 4) { // String attribute
2536 bool HasValue = (Record[i++] == 4);
2537 SmallString<64> KindStr;
2538 SmallString<64> ValStr;
2539
2540 while (Record[i] != 0 && i != e)
2541 KindStr += Record[i++];
2542 assert(Record[i] == 0 && "Kind string not null terminated");
2543
2544 if (HasValue) {
2545 // Has a value associated with it.
2546 ++i; // Skip the '0' that terminates the "kind" string.
2547 while (Record[i] != 0 && i != e)
2548 ValStr += Record[i++];
2549 assert(Record[i] == 0 && "Value string not null terminated");
2550 }
2551
2552 B.addAttribute(KindStr.str(), ValStr.str());
2553 } else if (Record[i] == 5 || Record[i] == 6) {
2554 bool HasType = Record[i] == 6;
2555 Attribute::AttrKind Kind;
2556 if (Error Err = parseAttrKind(Record[++i], &Kind))
2557 return Err;
2558 if (!Attribute::isTypeAttrKind(Kind))
2559 return error("Not a type attribute");
2560
2561 B.addTypeAttr(Kind, HasType ? getTypeByID(Record[++i]) : nullptr);
2562 } else if (Record[i] == 7) {
2563 Attribute::AttrKind Kind;
2564
2565 i++;
2566 if (Error Err = parseAttrKind(Record[i++], &Kind))
2567 return Err;
2568 if (!Attribute::isConstantRangeAttrKind(Kind))
2569 return error("Not a ConstantRange attribute");
2570
2571 Expected<ConstantRange> MaybeCR =
2572 readBitWidthAndConstantRange(Record, i);
2573 if (!MaybeCR)
2574 return MaybeCR.takeError();
2575 i--;
2576
2577 B.addConstantRangeAttr(Kind, MaybeCR.get());
2578 } else if (Record[i] == 8) {
2579 Attribute::AttrKind Kind;
2580
2581 i++;
2582 if (Error Err = parseAttrKind(Record[i++], &Kind))
2583 return Err;
2584 if (!Attribute::isConstantRangeListAttrKind(Kind))
2585 return error("Not a constant range list attribute");
2586
2588 if (i + 2 > e)
2589 return error("Too few records for constant range list");
2590 unsigned RangeSize = Record[i++];
2591 unsigned BitWidth = Record[i++];
2592 for (unsigned Idx = 0; Idx < RangeSize; ++Idx) {
2593 Expected<ConstantRange> MaybeCR =
2594 readConstantRange(Record, i, BitWidth);
2595 if (!MaybeCR)
2596 return MaybeCR.takeError();
2597 Val.push_back(MaybeCR.get());
2598 }
2599 i--;
2600
2602 return error("Invalid (unordered or overlapping) range list");
2603 B.addConstantRangeListAttr(Kind, Val);
2604 } else {
2605 return error("Invalid attribute group entry");
2606 }
2607 }
2608
2609 if (ME != MemoryEffects::unknown())
2610 B.addMemoryAttr(ME);
2611
2613 MAttributeGroups[GrpID] = AttributeList::get(Context, Idx, B);
2614 break;
2615 }
2616 }
2617 }
2618}
2619
2620Error BitcodeReader::parseTypeTable() {
2622 return Err;
2623
2624 return parseTypeTableBody();
2625}
2626
2627Error BitcodeReader::parseTypeTableBody() {
2628 if (!TypeList.empty())
2629 return error("Invalid multiple blocks");
2630
2631 SmallVector<uint64_t, 64> Record;
2632 unsigned NumRecords = 0;
2633
2634 SmallString<64> TypeName;
2635
2636 // Read all the records for this type table.
2637 while (true) {
2638 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2639 if (!MaybeEntry)
2640 return MaybeEntry.takeError();
2641 BitstreamEntry Entry = MaybeEntry.get();
2642
2643 switch (Entry.Kind) {
2644 case BitstreamEntry::SubBlock: // Handled for us already.
2646 return error("Malformed block");
2648 if (NumRecords != TypeList.size())
2649 return error("Malformed block");
2650 return Error::success();
2652 // The interesting case.
2653 break;
2654 }
2655
2656 // Read a record.
2657 Record.clear();
2658 Type *ResultTy = nullptr;
2659 SmallVector<unsigned> ContainedIDs;
2660 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2661 if (!MaybeRecord)
2662 return MaybeRecord.takeError();
2663 switch (MaybeRecord.get()) {
2664 default:
2665 return error("Invalid value");
2666 case bitc::TYPE_CODE_NUMENTRY: // TYPE_CODE_NUMENTRY: [numentries]
2667 // TYPE_CODE_NUMENTRY contains a count of the number of types in the
2668 // type list. This allows us to reserve space.
2669 if (Record.empty())
2670 return error("Invalid numentry record");
2671 TypeList.resize(Record[0]);
2672 continue;
2673 case bitc::TYPE_CODE_VOID: // VOID
2674 ResultTy = Type::getVoidTy(Context);
2675 break;
2676 case bitc::TYPE_CODE_HALF: // HALF
2677 ResultTy = Type::getHalfTy(Context);
2678 break;
2679 case bitc::TYPE_CODE_BFLOAT: // BFLOAT
2680 ResultTy = Type::getBFloatTy(Context);
2681 break;
2682 case bitc::TYPE_CODE_FLOAT: // FLOAT
2683 ResultTy = Type::getFloatTy(Context);
2684 break;
2685 case bitc::TYPE_CODE_DOUBLE: // DOUBLE
2686 ResultTy = Type::getDoubleTy(Context);
2687 break;
2688 case bitc::TYPE_CODE_X86_FP80: // X86_FP80
2689 ResultTy = Type::getX86_FP80Ty(Context);
2690 break;
2691 case bitc::TYPE_CODE_FP128: // FP128
2692 ResultTy = Type::getFP128Ty(Context);
2693 break;
2694 case bitc::TYPE_CODE_PPC_FP128: // PPC_FP128
2695 ResultTy = Type::getPPC_FP128Ty(Context);
2696 break;
2697 case bitc::TYPE_CODE_LABEL: // LABEL
2698 ResultTy = Type::getLabelTy(Context);
2699 break;
2700 case bitc::TYPE_CODE_METADATA: // METADATA
2701 ResultTy = Type::getMetadataTy(Context);
2702 break;
2703 case bitc::TYPE_CODE_X86_MMX: // X86_MMX
2704 // Deprecated: decodes as <1 x i64>
2705 ResultTy =
2707 break;
2708 case bitc::TYPE_CODE_X86_AMX: // X86_AMX
2709 ResultTy = Type::getX86_AMXTy(Context);
2710 break;
2711 case bitc::TYPE_CODE_TOKEN: // TOKEN
2712 ResultTy = Type::getTokenTy(Context);
2713 break;
2714 case bitc::TYPE_CODE_BYTE: { // BYTE: [width]
2715 if (Record.empty())
2716 return error("Invalid record");
2717
2718 uint64_t NumBits = Record[0];
2719 if (NumBits < ByteType::MIN_BYTE_BITS ||
2720 NumBits > ByteType::MAX_BYTE_BITS)
2721 return error("Bitwidth for byte type out of range");
2722 ResultTy = ByteType::get(Context, NumBits);
2723 break;
2724 }
2725 case bitc::TYPE_CODE_INTEGER: { // INTEGER: [width]
2726 if (Record.empty())
2727 return error("Invalid integer record");
2728
2729 uint64_t NumBits = Record[0];
2730 if (NumBits < IntegerType::MIN_INT_BITS ||
2731 NumBits > IntegerType::MAX_INT_BITS)
2732 return error("Bitwidth for integer type out of range");
2733 ResultTy = IntegerType::get(Context, NumBits);
2734 break;
2735 }
2736 case bitc::TYPE_CODE_POINTER: { // POINTER: [pointee type] or
2737 // [pointee type, address space]
2738 if (Record.empty())
2739 return error("Invalid pointer record");
2740 unsigned AddressSpace = 0;
2741 if (Record.size() == 2)
2742 AddressSpace = Record[1];
2743 ResultTy = getTypeByID(Record[0]);
2744 if (!ResultTy ||
2745 !PointerType::isValidElementType(ResultTy))
2746 return error("Invalid type");
2747 ContainedIDs.push_back(Record[0]);
2748 ResultTy = PointerType::get(ResultTy->getContext(), AddressSpace);
2749 break;
2750 }
2751 case bitc::TYPE_CODE_OPAQUE_POINTER: { // OPAQUE_POINTER: [addrspace]
2752 if (Record.size() != 1)
2753 return error("Invalid opaque pointer record");
2754 unsigned AddressSpace = Record[0];
2755 ResultTy = PointerType::get(Context, AddressSpace);
2756 break;
2757 }
2759 // Deprecated, but still needed to read old bitcode files.
2760 // FUNCTION: [vararg, attrid, retty, paramty x N]
2761 if (Record.size() < 3)
2762 return error("Invalid function record");
2763 SmallVector<Type*, 8> ArgTys;
2764 for (unsigned i = 3, e = Record.size(); i != e; ++i) {
2765 if (Type *T = getTypeByID(Record[i]))
2766 ArgTys.push_back(T);
2767 else
2768 break;
2769 }
2770
2771 ResultTy = getTypeByID(Record[2]);
2772 if (!ResultTy || ArgTys.size() < Record.size()-3)
2773 return error("Invalid type");
2774
2775 ContainedIDs.append(Record.begin() + 2, Record.end());
2776 ResultTy = FunctionType::get(ResultTy, ArgTys, Record[0]);
2777 break;
2778 }
2780 // FUNCTION: [vararg, retty, paramty x N]
2781 if (Record.size() < 2)
2782 return error("Invalid function record");
2783 SmallVector<Type*, 8> ArgTys;
2784 for (unsigned i = 2, e = Record.size(); i != e; ++i) {
2785 if (Type *T = getTypeByID(Record[i])) {
2786 if (!FunctionType::isValidArgumentType(T))
2787 return error("Invalid function argument type");
2788 ArgTys.push_back(T);
2789 }
2790 else
2791 break;
2792 }
2793
2794 ResultTy = getTypeByID(Record[1]);
2795 if (!ResultTy || ArgTys.size() < Record.size()-2)
2796 return error("Invalid type");
2797
2798 ContainedIDs.append(Record.begin() + 1, Record.end());
2799 ResultTy = FunctionType::get(ResultTy, ArgTys, Record[0]);
2800 break;
2801 }
2802 case bitc::TYPE_CODE_STRUCT_ANON: { // STRUCT: [ispacked, eltty x N]
2803 if (Record.empty())
2804 return error("Invalid anon struct record");
2805 SmallVector<Type*, 8> EltTys;
2806 for (unsigned i = 1, e = Record.size(); i != e; ++i) {
2807 if (Type *T = getTypeByID(Record[i]))
2808 EltTys.push_back(T);
2809 else
2810 break;
2811 }
2812 if (EltTys.size() != Record.size()-1)
2813 return error("Invalid type");
2814 ContainedIDs.append(Record.begin() + 1, Record.end());
2815 ResultTy = StructType::get(Context, EltTys, Record[0]);
2816 break;
2817 }
2818 case bitc::TYPE_CODE_STRUCT_NAME: // STRUCT_NAME: [strchr x N]
2819 if (convertToString(Record, 0, TypeName))
2820 return error("Invalid struct name record");
2821 continue;
2822
2823 case bitc::TYPE_CODE_STRUCT_NAMED: { // STRUCT: [ispacked, eltty x N]
2824 if (Record.empty())
2825 return error("Invalid named struct record");
2826
2827 if (NumRecords >= TypeList.size())
2828 return error("Invalid TYPE table");
2829
2830 // Check to see if this was forward referenced, if so fill in the temp.
2831 StructType *Res = cast_or_null<StructType>(TypeList[NumRecords]);
2832 if (Res) {
2833 Res->setName(TypeName);
2834 TypeList[NumRecords] = nullptr;
2835 } else // Otherwise, create a new struct.
2836 Res = createIdentifiedStructType(Context, TypeName);
2837 TypeName.clear();
2838
2839 SmallVector<Type*, 8> EltTys;
2840 for (unsigned i = 1, e = Record.size(); i != e; ++i) {
2841 if (Type *T = getTypeByID(Record[i]))
2842 EltTys.push_back(T);
2843 else
2844 break;
2845 }
2846 if (EltTys.size() != Record.size()-1)
2847 return error("Invalid named struct record");
2848 if (auto E = Res->setBodyOrError(EltTys, Record[0]))
2849 return E;
2850 ContainedIDs.append(Record.begin() + 1, Record.end());
2851 ResultTy = Res;
2852 break;
2853 }
2854 case bitc::TYPE_CODE_OPAQUE: { // OPAQUE: []
2855 if (Record.size() != 1)
2856 return error("Invalid opaque type record");
2857
2858 if (NumRecords >= TypeList.size())
2859 return error("Invalid TYPE table");
2860
2861 // Check to see if this was forward referenced, if so fill in the temp.
2862 StructType *Res = cast_or_null<StructType>(TypeList[NumRecords]);
2863 if (Res) {
2864 Res->setName(TypeName);
2865 TypeList[NumRecords] = nullptr;
2866 } else // Otherwise, create a new struct with no body.
2867 Res = createIdentifiedStructType(Context, TypeName);
2868 TypeName.clear();
2869 ResultTy = Res;
2870 break;
2871 }
2872 case bitc::TYPE_CODE_TARGET_TYPE: { // TARGET_TYPE: [NumTy, Tys..., Ints...]
2873 if (Record.size() < 1)
2874 return error("Invalid target extension type record");
2875
2876 if (NumRecords >= TypeList.size())
2877 return error("Invalid TYPE table");
2878
2879 if (Record[0] >= Record.size())
2880 return error("Too many type parameters");
2881
2882 unsigned NumTys = Record[0];
2883 SmallVector<Type *, 4> TypeParams;
2884 SmallVector<unsigned, 8> IntParams;
2885 for (unsigned i = 0; i < NumTys; i++) {
2886 if (Type *T = getTypeByID(Record[i + 1]))
2887 TypeParams.push_back(T);
2888 else
2889 return error("Invalid type");
2890 }
2891
2892 for (unsigned i = NumTys + 1, e = Record.size(); i < e; i++) {
2893 if (Record[i] > UINT_MAX)
2894 return error("Integer parameter too large");
2895 IntParams.push_back(Record[i]);
2896 }
2897 auto TTy =
2898 TargetExtType::getOrError(Context, TypeName, TypeParams, IntParams);
2899 if (auto E = TTy.takeError())
2900 return E;
2901 ResultTy = *TTy;
2902 TypeName.clear();
2903 break;
2904 }
2905 case bitc::TYPE_CODE_ARRAY: // ARRAY: [numelts, eltty]
2906 if (Record.size() < 2)
2907 return error("Invalid array type record");
2908 ResultTy = getTypeByID(Record[1]);
2909 if (!ResultTy || !ArrayType::isValidElementType(ResultTy))
2910 return error("Invalid type");
2911 ContainedIDs.push_back(Record[1]);
2912 ResultTy = ArrayType::get(ResultTy, Record[0]);
2913 break;
2914 case bitc::TYPE_CODE_VECTOR: // VECTOR: [numelts, eltty] or
2915 // [numelts, eltty, scalable]
2916 if (Record.size() < 2)
2917 return error("Invalid vector type record");
2918 if (Record[0] == 0)
2919 return error("Invalid vector length");
2920 ResultTy = getTypeByID(Record[1]);
2921 if (!ResultTy || !VectorType::isValidElementType(ResultTy))
2922 return error("Invalid type");
2923 bool Scalable = Record.size() > 2 ? Record[2] : false;
2924 ContainedIDs.push_back(Record[1]);
2925 ResultTy = VectorType::get(ResultTy, Record[0], Scalable);
2926 break;
2927 }
2928
2929 if (NumRecords >= TypeList.size())
2930 return error("Invalid TYPE table");
2931 if (TypeList[NumRecords])
2932 return error(
2933 "Invalid TYPE table: Only named structs can be forward referenced");
2934 assert(ResultTy && "Didn't read a type?");
2935 TypeList[NumRecords] = ResultTy;
2936 if (!ContainedIDs.empty())
2937 ContainedTypeIDs[NumRecords] = std::move(ContainedIDs);
2938 ++NumRecords;
2939 }
2940}
2941
2942Error BitcodeReader::parseOperandBundleTags() {
2944 return Err;
2945
2946 if (!BundleTags.empty())
2947 return error("Invalid multiple blocks");
2948
2949 SmallVector<uint64_t, 64> Record;
2950
2951 while (true) {
2952 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2953 if (!MaybeEntry)
2954 return MaybeEntry.takeError();
2955 BitstreamEntry Entry = MaybeEntry.get();
2956
2957 switch (Entry.Kind) {
2958 case BitstreamEntry::SubBlock: // Handled for us already.
2960 return error("Malformed block");
2962 return Error::success();
2964 // The interesting case.
2965 break;
2966 }
2967
2968 // Tags are implicitly mapped to integers by their order.
2969
2970 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2971 if (!MaybeRecord)
2972 return MaybeRecord.takeError();
2973 if (MaybeRecord.get() != bitc::OPERAND_BUNDLE_TAG)
2974 return error("Invalid operand bundle record");
2975
2976 // OPERAND_BUNDLE_TAG: [strchr x N]
2977 BundleTags.emplace_back();
2978 if (convertToString(Record, 0, BundleTags.back()))
2979 return error("Invalid operand bundle record");
2980 Record.clear();
2981 }
2982}
2983
2984Error BitcodeReader::parseSyncScopeNames() {
2986 return Err;
2987
2988 if (!SSIDs.empty())
2989 return error("Invalid multiple synchronization scope names blocks");
2990
2991 SmallVector<uint64_t, 64> Record;
2992 while (true) {
2993 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2994 if (!MaybeEntry)
2995 return MaybeEntry.takeError();
2996 BitstreamEntry Entry = MaybeEntry.get();
2997
2998 switch (Entry.Kind) {
2999 case BitstreamEntry::SubBlock: // Handled for us already.
3001 return error("Malformed block");
3003 if (SSIDs.empty())
3004 return error("Invalid empty synchronization scope names block");
3005 return Error::success();
3007 // The interesting case.
3008 break;
3009 }
3010
3011 // Synchronization scope names are implicitly mapped to synchronization
3012 // scope IDs by their order.
3013
3014 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3015 if (!MaybeRecord)
3016 return MaybeRecord.takeError();
3017 if (MaybeRecord.get() != bitc::SYNC_SCOPE_NAME)
3018 return error("Invalid sync scope record");
3019
3020 SmallString<16> SSN;
3021 if (convertToString(Record, 0, SSN))
3022 return error("Invalid sync scope record");
3023
3024 SSIDs.push_back(Context.getOrInsertSyncScopeID(SSN));
3025 Record.clear();
3026 }
3027}
3028
3029/// Associate a value with its name from the given index in the provided record.
3030Expected<Value *> BitcodeReader::recordValue(SmallVectorImpl<uint64_t> &Record,
3031 unsigned NameIndex, Triple &TT) {
3032 SmallString<128> ValueName;
3033 if (convertToString(Record, NameIndex, ValueName))
3034 return error("Invalid record");
3035 unsigned ValueID = Record[0];
3036 if (ValueID >= ValueList.size() || !ValueList[ValueID])
3037 return error("Invalid record");
3038 Value *V = ValueList[ValueID];
3039
3040 StringRef NameStr(ValueName.data(), ValueName.size());
3041 if (NameStr.contains(0))
3042 return error("Invalid value name");
3043 V->setName(NameStr);
3044 auto *GO = dyn_cast<GlobalObject>(V);
3045 if (GO && ImplicitComdatObjects.contains(GO) && TT.supportsCOMDAT())
3046 GO->setComdat(TheModule->getOrInsertComdat(V->getName()));
3047 return V;
3048}
3049
3050/// Helper to note and return the current location, and jump to the given
3051/// offset.
3053 BitstreamCursor &Stream) {
3054 // Save the current parsing location so we can jump back at the end
3055 // of the VST read.
3056 uint64_t CurrentBit = Stream.GetCurrentBitNo();
3057 if (Error JumpFailed = Stream.JumpToBit(Offset * 32))
3058 return std::move(JumpFailed);
3059 Expected<BitstreamEntry> MaybeEntry = Stream.advance();
3060 if (!MaybeEntry)
3061 return MaybeEntry.takeError();
3062 if (MaybeEntry.get().Kind != BitstreamEntry::SubBlock ||
3063 MaybeEntry.get().ID != bitc::VALUE_SYMTAB_BLOCK_ID)
3064 return error("Expected value symbol table subblock");
3065 return CurrentBit;
3066}
3067
3068void BitcodeReader::setDeferredFunctionInfo(unsigned FuncBitcodeOffsetDelta,
3069 Function *F,
3070 ArrayRef<uint64_t> Record) {
3071 // Note that we subtract 1 here because the offset is relative to one word
3072 // before the start of the identification or module block, which was
3073 // historically always the start of the regular bitcode header.
3074 uint64_t FuncWordOffset = Record[1] - 1;
3075 uint64_t FuncBitOffset = FuncWordOffset * 32;
3076 DeferredFunctionInfo[F] = FuncBitOffset + FuncBitcodeOffsetDelta;
3077 // Set the LastFunctionBlockBit to point to the last function block.
3078 // Later when parsing is resumed after function materialization,
3079 // we can simply skip that last function block.
3080 if (FuncBitOffset > LastFunctionBlockBit)
3081 LastFunctionBlockBit = FuncBitOffset;
3082}
3083
3084/// Read a new-style GlobalValue symbol table.
3085Error BitcodeReader::parseGlobalValueSymbolTable() {
3086 unsigned FuncBitcodeOffsetDelta =
3088
3090 return Err;
3091
3092 SmallVector<uint64_t, 64> Record;
3093 while (true) {
3094 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
3095 if (!MaybeEntry)
3096 return MaybeEntry.takeError();
3097 BitstreamEntry Entry = MaybeEntry.get();
3098
3099 switch (Entry.Kind) {
3102 return error("Malformed block");
3104 return Error::success();
3106 break;
3107 }
3108
3109 Record.clear();
3110 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3111 if (!MaybeRecord)
3112 return MaybeRecord.takeError();
3113 switch (MaybeRecord.get()) {
3114 case bitc::VST_CODE_FNENTRY: { // [valueid, offset]
3115 unsigned ValueID = Record[0];
3116 if (ValueID >= ValueList.size() || !ValueList[ValueID])
3117 return error("Invalid value reference in symbol table");
3118 setDeferredFunctionInfo(FuncBitcodeOffsetDelta,
3119 cast<Function>(ValueList[ValueID]), Record);
3120 break;
3121 }
3122 }
3123 }
3124}
3125
3126/// Parse the value symbol table at either the current parsing location or
3127/// at the given bit offset if provided.
3128Error BitcodeReader::parseValueSymbolTable(uint64_t Offset) {
3129 uint64_t CurrentBit;
3130 // Pass in the Offset to distinguish between calling for the module-level
3131 // VST (where we want to jump to the VST offset) and the function-level
3132 // VST (where we don't).
3133 if (Offset > 0) {
3134 Expected<uint64_t> MaybeCurrentBit = jumpToValueSymbolTable(Offset, Stream);
3135 if (!MaybeCurrentBit)
3136 return MaybeCurrentBit.takeError();
3137 CurrentBit = MaybeCurrentBit.get();
3138 // If this module uses a string table, read this as a module-level VST.
3139 if (UseStrtab) {
3140 if (Error Err = parseGlobalValueSymbolTable())
3141 return Err;
3142 if (Error JumpFailed = Stream.JumpToBit(CurrentBit))
3143 return JumpFailed;
3144 return Error::success();
3145 }
3146 // Otherwise, the VST will be in a similar format to a function-level VST,
3147 // and will contain symbol names.
3148 }
3149
3150 // Compute the delta between the bitcode indices in the VST (the word offset
3151 // to the word-aligned ENTER_SUBBLOCK for the function block, and that
3152 // expected by the lazy reader. The reader's EnterSubBlock expects to have
3153 // already read the ENTER_SUBBLOCK code (size getAbbrevIDWidth) and BlockID
3154 // (size BlockIDWidth). Note that we access the stream's AbbrevID width here
3155 // just before entering the VST subblock because: 1) the EnterSubBlock
3156 // changes the AbbrevID width; 2) the VST block is nested within the same
3157 // outer MODULE_BLOCK as the FUNCTION_BLOCKs and therefore have the same
3158 // AbbrevID width before calling EnterSubBlock; and 3) when we want to
3159 // jump to the FUNCTION_BLOCK using this offset later, we don't want
3160 // to rely on the stream's AbbrevID width being that of the MODULE_BLOCK.
3161 unsigned FuncBitcodeOffsetDelta =
3163
3165 return Err;
3166
3167 SmallVector<uint64_t, 64> Record;
3168
3169 Triple TT(TheModule->getTargetTriple());
3170
3171 // Read all the records for this value table.
3172 SmallString<128> ValueName;
3173
3174 while (true) {
3175 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
3176 if (!MaybeEntry)
3177 return MaybeEntry.takeError();
3178 BitstreamEntry Entry = MaybeEntry.get();
3179
3180 switch (Entry.Kind) {
3181 case BitstreamEntry::SubBlock: // Handled for us already.
3183 return error("Malformed block");
3185 if (Offset > 0)
3186 if (Error JumpFailed = Stream.JumpToBit(CurrentBit))
3187 return JumpFailed;
3188 return Error::success();
3190 // The interesting case.
3191 break;
3192 }
3193
3194 // Read a record.
3195 Record.clear();
3196 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3197 if (!MaybeRecord)
3198 return MaybeRecord.takeError();
3199 switch (MaybeRecord.get()) {
3200 default: // Default behavior: unknown type.
3201 break;
3202 case bitc::VST_CODE_ENTRY: { // VST_CODE_ENTRY: [valueid, namechar x N]
3203 Expected<Value *> ValOrErr = recordValue(Record, 1, TT);
3204 if (Error Err = ValOrErr.takeError())
3205 return Err;
3206 ValOrErr.get();
3207 break;
3208 }
3210 // VST_CODE_FNENTRY: [valueid, offset, namechar x N]
3211 Expected<Value *> ValOrErr = recordValue(Record, 2, TT);
3212 if (Error Err = ValOrErr.takeError())
3213 return Err;
3214 Value *V = ValOrErr.get();
3215
3216 // Ignore function offsets emitted for aliases of functions in older
3217 // versions of LLVM.
3218 if (auto *F = dyn_cast<Function>(V))
3219 setDeferredFunctionInfo(FuncBitcodeOffsetDelta, F, Record);
3220 break;
3221 }
3223 if (convertToString(Record, 1, ValueName))
3224 return error("Invalid bbentry record");
3225 BasicBlock *BB = getBasicBlock(Record[0]);
3226 if (!BB)
3227 return error("Invalid bbentry record");
3228
3229 BB->setName(ValueName.str());
3230 ValueName.clear();
3231 break;
3232 }
3233 }
3234 }
3235}
3236
3237/// Decode a signed value stored with the sign bit in the LSB for dense VBR
3238/// encoding.
3239uint64_t BitcodeReader::decodeSignRotatedValue(uint64_t V) {
3240 if ((V & 1) == 0)
3241 return V >> 1;
3242 if (V != 1)
3243 return -(V >> 1);
3244 // There is no such thing as -0 with integers. "-0" really means MININT.
3245 return 1ULL << 63;
3246}
3247
3248/// Resolve all of the initializers for global values and aliases that we can.
3249Error BitcodeReader::resolveGlobalAndIndirectSymbolInits() {
3250 std::vector<std::pair<GlobalVariable *, unsigned>> GlobalInitWorklist;
3251 std::vector<std::pair<GlobalValue *, unsigned>> IndirectSymbolInitWorklist;
3252 std::vector<FunctionOperandInfo> FunctionOperandWorklist;
3253
3254 GlobalInitWorklist.swap(GlobalInits);
3255 IndirectSymbolInitWorklist.swap(IndirectSymbolInits);
3256 FunctionOperandWorklist.swap(FunctionOperands);
3257
3258 while (!GlobalInitWorklist.empty()) {
3259 unsigned ValID = GlobalInitWorklist.back().second;
3260 if (ValID >= ValueList.size()) {
3261 // Not ready to resolve this yet, it requires something later in the file.
3262 GlobalInits.push_back(GlobalInitWorklist.back());
3263 } else {
3264 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3265 if (!MaybeC)
3266 return MaybeC.takeError();
3267 GlobalInitWorklist.back().first->setInitializer(MaybeC.get());
3268 }
3269 GlobalInitWorklist.pop_back();
3270 }
3271
3272 while (!IndirectSymbolInitWorklist.empty()) {
3273 unsigned ValID = IndirectSymbolInitWorklist.back().second;
3274 if (ValID >= ValueList.size()) {
3275 IndirectSymbolInits.push_back(IndirectSymbolInitWorklist.back());
3276 } else {
3277 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3278 if (!MaybeC)
3279 return MaybeC.takeError();
3280 Constant *C = MaybeC.get();
3281 GlobalValue *GV = IndirectSymbolInitWorklist.back().first;
3282 if (auto *GA = dyn_cast<GlobalAlias>(GV)) {
3283 if (C->getType() != GV->getType())
3284 return error("Alias and aliasee types don't match");
3285 GA->setAliasee(C);
3286 } else if (auto *GI = dyn_cast<GlobalIFunc>(GV)) {
3287 GI->setResolver(C);
3288 } else {
3289 return error("Expected an alias or an ifunc");
3290 }
3291 }
3292 IndirectSymbolInitWorklist.pop_back();
3293 }
3294
3295 while (!FunctionOperandWorklist.empty()) {
3296 FunctionOperandInfo &Info = FunctionOperandWorklist.back();
3297 if (Info.PersonalityFn) {
3298 unsigned ValID = Info.PersonalityFn - 1;
3299 if (ValID < ValueList.size()) {
3300 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3301 if (!MaybeC)
3302 return MaybeC.takeError();
3303 Info.F->setPersonalityFn(MaybeC.get());
3304 Info.PersonalityFn = 0;
3305 }
3306 }
3307 if (Info.Prefix) {
3308 unsigned ValID = Info.Prefix - 1;
3309 if (ValID < ValueList.size()) {
3310 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3311 if (!MaybeC)
3312 return MaybeC.takeError();
3313 Info.F->setPrefixData(MaybeC.get());
3314 Info.Prefix = 0;
3315 }
3316 }
3317 if (Info.Prologue) {
3318 unsigned ValID = Info.Prologue - 1;
3319 if (ValID < ValueList.size()) {
3320 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3321 if (!MaybeC)
3322 return MaybeC.takeError();
3323 Info.F->setPrologueData(MaybeC.get());
3324 Info.Prologue = 0;
3325 }
3326 }
3327 if (Info.PersonalityFn || Info.Prefix || Info.Prologue)
3328 FunctionOperands.push_back(Info);
3329 FunctionOperandWorklist.pop_back();
3330 }
3331
3332 return Error::success();
3333}
3334
3336 SmallVector<uint64_t, 8> Words(Vals.size());
3337 transform(Vals, Words.begin(),
3338 BitcodeReader::decodeSignRotatedValue);
3339
3340 return APInt(TypeBits, Words);
3341}
3342
3343Error BitcodeReader::parseConstants() {
3345 return Err;
3346
3348
3349 // Read all the records for this value table.
3350 Type *CurTy = Type::getInt32Ty(Context);
3351 unsigned Int32TyID = getVirtualTypeID(CurTy);
3352 unsigned CurTyID = Int32TyID;
3353 Type *CurElemTy = nullptr;
3354 unsigned NextCstNo = ValueList.size();
3355
3356 while (true) {
3358 if (!MaybeEntry)
3359 return MaybeEntry.takeError();
3360 BitstreamEntry Entry = MaybeEntry.get();
3361
3362 switch (Entry.Kind) {
3363 case BitstreamEntry::SubBlock: // Handled for us already.
3365 return error("Malformed block");
3367 if (NextCstNo != ValueList.size())
3368 return error("Invalid constant reference");
3369 return Error::success();
3371 // The interesting case.
3372 break;
3373 }
3374
3375 // Read a record.
3376 Record.clear();
3377 Type *VoidType = Type::getVoidTy(Context);
3378 Value *V = nullptr;
3379 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
3380 if (!MaybeBitCode)
3381 return MaybeBitCode.takeError();
3382 switch (unsigned BitCode = MaybeBitCode.get()) {
3383 default: // Default behavior: unknown constant
3384 case bitc::CST_CODE_UNDEF: // UNDEF
3385 V = UndefValue::get(CurTy);
3386 break;
3387 case bitc::CST_CODE_POISON: // POISON
3388 V = PoisonValue::get(CurTy);
3389 break;
3390 case bitc::CST_CODE_SETTYPE: // SETTYPE: [typeid]
3391 if (Record.empty())
3392 return error("Invalid settype record");
3393 if (Record[0] >= TypeList.size() || !TypeList[Record[0]])
3394 return error("Invalid settype record");
3395 if (TypeList[Record[0]] == VoidType)
3396 return error("Invalid constant type");
3397 CurTyID = Record[0];
3398 CurTy = TypeList[CurTyID];
3399 CurElemTy = getPtrElementTypeByID(CurTyID);
3400 continue; // Skip the ValueList manipulation.
3401 case bitc::CST_CODE_NULL: // NULL
3402 if (CurTy->isVoidTy() || CurTy->isFunctionTy() || CurTy->isLabelTy())
3403 return error("Invalid type for a constant null value");
3404 if (auto *TETy = dyn_cast<TargetExtType>(CurTy))
3405 if (!TETy->hasProperty(TargetExtType::HasZeroInit))
3406 return error("Invalid type for a constant null value");
3407 V = Constant::getNullValue(CurTy);
3408 break;
3409 case bitc::CST_CODE_INTEGER: // INTEGER: [intval]
3410 if (!CurTy->isIntOrIntVectorTy() || Record.empty())
3411 return error("Invalid integer const record");
3412 V = ConstantInt::getSigned(CurTy, decodeSignRotatedValue(Record[0]));
3413 break;
3414 case bitc::CST_CODE_WIDE_INTEGER: {// WIDE_INTEGER: [n x intval]
3415 if (!CurTy->isIntOrIntVectorTy() || Record.empty())
3416 return error("Invalid wide integer const record");
3417
3418 auto *ScalarTy = cast<IntegerType>(CurTy->getScalarType());
3419 APInt VInt = readWideAPInt(Record, ScalarTy->getBitWidth());
3420 V = ConstantInt::get(CurTy, VInt);
3421 break;
3422 }
3423 case bitc::CST_CODE_BYTE: // BYTE: [byteval]
3424 if (!CurTy->isByteOrByteVectorTy() || Record.empty())
3425 return error("Invalid byte const record");
3426 V = ConstantByte::get(CurTy, decodeSignRotatedValue(Record[0]),
3427 /*isSigned=*/true);
3428 break;
3429 case bitc::CST_CODE_WIDE_BYTE: { // WIDE_BYTE: [n x byteval]
3430 if (!CurTy->isByteOrByteVectorTy() || Record.empty())
3431 return error("Invalid wide byte const record");
3432
3433 auto *ScalarTy = cast<ByteType>(CurTy->getScalarType());
3434 APInt VByte = readWideAPInt(Record, ScalarTy->getBitWidth());
3435 V = ConstantByte::get(CurTy, VByte);
3436 break;
3437 }
3438 case bitc::CST_CODE_FLOAT: { // FLOAT: [fpval]
3439 if (Record.empty())
3440 return error("Invalid float const record");
3441
3442 auto *ScalarTy = CurTy->getScalarType();
3443 if (ScalarTy->isHalfTy())
3444 V = ConstantFP::get(CurTy, APFloat(APFloat::IEEEhalf(),
3445 APInt(16, (uint16_t)Record[0])));
3446 else if (ScalarTy->isBFloatTy())
3447 V = ConstantFP::get(
3448 CurTy, APFloat(APFloat::BFloat(), APInt(16, (uint32_t)Record[0])));
3449 else if (ScalarTy->isFloatTy())
3450 V = ConstantFP::get(CurTy, APFloat(APFloat::IEEEsingle(),
3451 APInt(32, (uint32_t)Record[0])));
3452 else if (ScalarTy->isDoubleTy())
3453 V = ConstantFP::get(
3454 CurTy, APFloat(APFloat::IEEEdouble(), APInt(64, Record[0])));
3455 else if (ScalarTy->isX86_FP80Ty()) {
3456 // Bits are not stored the same way as a normal i80 APInt, compensate.
3457 uint64_t Rearrange[2];
3458 Rearrange[0] = (Record[1] & 0xffffLL) | (Record[0] << 16);
3459 Rearrange[1] = Record[0] >> 48;
3460 V = ConstantFP::get(
3461 CurTy, APFloat(APFloat::x87DoubleExtended(), APInt(80, Rearrange)));
3462 } else if (ScalarTy->isFP128Ty())
3463 V = ConstantFP::get(CurTy,
3464 APFloat(APFloat::IEEEquad(), APInt(128, Record)));
3465 else if (ScalarTy->isPPC_FP128Ty())
3466 V = ConstantFP::get(
3467 CurTy, APFloat(APFloat::PPCDoubleDouble(), APInt(128, Record)));
3468 else
3469 V = PoisonValue::get(CurTy);
3470 break;
3471 }
3472
3473 case bitc::CST_CODE_AGGREGATE: {// AGGREGATE: [n x value number]
3474 if (Record.empty())
3475 return error("Invalid aggregate record");
3476
3477 SmallVector<unsigned, 16> Elts;
3478 llvm::append_range(Elts, Record);
3479
3480 if (isa<StructType>(CurTy)) {
3481 V = BitcodeConstant::create(
3482 Alloc, CurTy, BitcodeConstant::ConstantStructOpcode, Elts);
3483 } else if (isa<ArrayType>(CurTy)) {
3484 V = BitcodeConstant::create(Alloc, CurTy,
3485 BitcodeConstant::ConstantArrayOpcode, Elts);
3486 } else if (isa<VectorType>(CurTy)) {
3487 V = BitcodeConstant::create(
3488 Alloc, CurTy, BitcodeConstant::ConstantVectorOpcode, Elts);
3489 } else {
3490 V = PoisonValue::get(CurTy);
3491 }
3492 break;
3493 }
3494 case bitc::CST_CODE_STRING: // STRING: [values]
3495 case bitc::CST_CODE_CSTRING: { // CSTRING: [values]
3496 if (Record.empty())
3497 return error("Invalid string record");
3498
3499 SmallString<16> Elts(Record.begin(), Record.end());
3501 Context, Elts, BitCode == bitc::CST_CODE_CSTRING,
3502 cast<ArrayType>(CurTy)->getElementType()->isByteTy());
3503 break;
3504 }
3505 case bitc::CST_CODE_DATA: {// DATA: [n x value]
3506 if (Record.empty())
3507 return error("Invalid data record");
3508
3509 Type *EltTy = CurTy->getContainedType(0);
3511 return error("Invalid type for value");
3512
3513 const unsigned EltBytes = EltTy->getScalarSizeInBits() / 8;
3514 SmallString<128> RawData;
3515 RawData.reserve(Record.size() * EltBytes);
3516 for (uint64_t Val : Record) {
3517 const char *Src = reinterpret_cast<const char *>(&Val);
3518 if constexpr (sys::IsBigEndianHost)
3519 Src += sizeof(uint64_t) - EltBytes;
3520 RawData.append(Src, Src + EltBytes);
3521 }
3522
3523 V = isa<VectorType>(CurTy)
3524 ? ConstantDataVector::getRaw(RawData.str(), Record.size(), EltTy)
3525 : ConstantDataArray::getRaw(RawData.str(), Record.size(), EltTy);
3526 break;
3527 }
3528 case bitc::CST_CODE_CE_UNOP: { // CE_UNOP: [opcode, opval]
3529 if (Record.size() < 2)
3530 return error("Invalid unary op constexpr record");
3531 int Opc = getDecodedUnaryOpcode(Record[0], CurTy);
3532 if (Opc < 0) {
3533 V = PoisonValue::get(CurTy); // Unknown unop.
3534 } else {
3535 V = BitcodeConstant::create(Alloc, CurTy, Opc, (unsigned)Record[1]);
3536 }
3537 break;
3538 }
3539 case bitc::CST_CODE_CE_BINOP: { // CE_BINOP: [opcode, opval, opval]
3540 if (Record.size() < 3)
3541 return error("Invalid binary op constexpr record");
3542 int Opc = getDecodedBinaryOpcode(Record[0], CurTy);
3543 if (Opc < 0) {
3544 V = PoisonValue::get(CurTy); // Unknown binop.
3545 } else {
3546 uint8_t Flags = 0;
3547 if (Record.size() >= 4) {
3548 if (Opc == Instruction::Add ||
3549 Opc == Instruction::Sub ||
3550 Opc == Instruction::Mul ||
3551 Opc == Instruction::Shl) {
3552 if (Record[3] & (1 << bitc::OBO_NO_SIGNED_WRAP))
3554 if (Record[3] & (1 << bitc::OBO_NO_UNSIGNED_WRAP))
3556 } else if (Opc == Instruction::SDiv ||
3557 Opc == Instruction::UDiv ||
3558 Opc == Instruction::LShr ||
3559 Opc == Instruction::AShr) {
3560 if (Record[3] & (1 << bitc::PEO_EXACT))
3562 }
3563 }
3564 V = BitcodeConstant::create(Alloc, CurTy, {(uint8_t)Opc, Flags},
3565 {(unsigned)Record[1], (unsigned)Record[2]});
3566 }
3567 break;
3568 }
3569 case bitc::CST_CODE_CE_CAST: { // CE_CAST: [opcode, opty, opval]
3570 if (Record.size() < 3)
3571 return error("Invalid cast constexpr record");
3572 int Opc = getDecodedCastOpcode(Record[0]);
3573 if (Opc < 0) {
3574 V = PoisonValue::get(CurTy); // Unknown cast.
3575 } else {
3576 unsigned OpTyID = Record[1];
3577 Type *OpTy = getTypeByID(OpTyID);
3578 if (!OpTy)
3579 return error("Invalid cast constexpr record");
3580 V = BitcodeConstant::create(Alloc, CurTy, Opc, (unsigned)Record[2]);
3581 }
3582 break;
3583 }
3584 case bitc::CST_CODE_CE_INBOUNDS_GEP: // [ty, n x operands]
3585 case bitc::CST_CODE_CE_GEP_OLD: // [ty, n x operands]
3586 case bitc::CST_CODE_CE_GEP_WITH_INRANGE_INDEX_OLD: // [ty, flags, n x
3587 // operands]
3588 case bitc::CST_CODE_CE_GEP: // [ty, flags, n x operands]
3589 case bitc::CST_CODE_CE_GEP_WITH_INRANGE: { // [ty, flags, start, end, n x
3590 // operands]
3591 if (Record.size() < 2)
3592 return error("Constant GEP record must have at least two elements");
3593 unsigned OpNum = 0;
3594 Type *PointeeType = nullptr;
3597 BitCode == bitc::CST_CODE_CE_GEP || Record.size() % 2)
3598 PointeeType = getTypeByID(Record[OpNum++]);
3599
3600 uint64_t Flags = 0;
3601 std::optional<ConstantRange> InRange;
3603 uint64_t Op = Record[OpNum++];
3604 Flags = Op & 1; // inbounds
3605 unsigned InRangeIndex = Op >> 1;
3606 // "Upgrade" inrange by dropping it. The feature is too niche to
3607 // bother.
3608 (void)InRangeIndex;
3609 } else if (BitCode == bitc::CST_CODE_CE_GEP_WITH_INRANGE) {
3610 Flags = Record[OpNum++];
3611 Expected<ConstantRange> MaybeInRange =
3612 readBitWidthAndConstantRange(Record, OpNum);
3613 if (!MaybeInRange)
3614 return MaybeInRange.takeError();
3615 InRange = MaybeInRange.get();
3616 } else if (BitCode == bitc::CST_CODE_CE_GEP) {
3617 Flags = Record[OpNum++];
3618 } else if (BitCode == bitc::CST_CODE_CE_INBOUNDS_GEP)
3619 Flags = (1 << bitc::GEP_INBOUNDS);
3620
3621 SmallVector<unsigned, 16> Elts;
3622 unsigned BaseTypeID = Record[OpNum];
3623 while (OpNum != Record.size()) {
3624 unsigned ElTyID = Record[OpNum++];
3625 Type *ElTy = getTypeByID(ElTyID);
3626 if (!ElTy)
3627 return error("Invalid getelementptr constexpr record");
3628 Elts.push_back(Record[OpNum++]);
3629 }
3630
3631 if (Elts.size() < 1)
3632 return error("Invalid gep with no operands");
3633
3634 Type *BaseType = getTypeByID(BaseTypeID);
3636 BaseTypeID = getContainedTypeID(BaseTypeID, 0);
3637 BaseType = getTypeByID(BaseTypeID);
3638 }
3639
3641 if (!OrigPtrTy)
3642 return error("GEP base operand must be pointer or vector of pointer");
3643
3644 if (!PointeeType) {
3645 PointeeType = getPtrElementTypeByID(BaseTypeID);
3646 if (!PointeeType)
3647 return error("Missing element type for old-style constant GEP");
3648 }
3649
3650 V = BitcodeConstant::create(
3651 Alloc, CurTy,
3652 {Instruction::GetElementPtr, uint8_t(Flags), PointeeType, InRange},
3653 Elts);
3654 break;
3655 }
3656 case bitc::CST_CODE_CE_SELECT: { // CE_SELECT: [opval#, opval#, opval#]
3657 if (Record.size() < 3)
3658 return error("Invalid select constexpr record");
3659
3660 V = BitcodeConstant::create(
3661 Alloc, CurTy, Instruction::Select,
3662 {(unsigned)Record[0], (unsigned)Record[1], (unsigned)Record[2]});
3663 break;
3664 }
3666 : { // CE_EXTRACTELT: [opty, opval, opty, opval]
3667 if (Record.size() < 3)
3668 return error("Invalid extractelement constexpr record");
3669 unsigned OpTyID = Record[0];
3670 VectorType *OpTy =
3671 dyn_cast_or_null<VectorType>(getTypeByID(OpTyID));
3672 if (!OpTy)
3673 return error("Invalid extractelement constexpr record");
3674 unsigned IdxRecord;
3675 if (Record.size() == 4) {
3676 unsigned IdxTyID = Record[2];
3677 Type *IdxTy = getTypeByID(IdxTyID);
3678 if (!IdxTy)
3679 return error("Invalid extractelement constexpr record");
3680 IdxRecord = Record[3];
3681 } else {
3682 // Deprecated, but still needed to read old bitcode files.
3683 IdxRecord = Record[2];
3684 }
3685 V = BitcodeConstant::create(Alloc, CurTy, Instruction::ExtractElement,
3686 {(unsigned)Record[1], IdxRecord});
3687 break;
3688 }
3690 : { // CE_INSERTELT: [opval, opval, opty, opval]
3691 VectorType *OpTy = dyn_cast<VectorType>(CurTy);
3692 if (Record.size() < 3 || !OpTy)
3693 return error("Invalid insertelement constexpr record");
3694 unsigned IdxRecord;
3695 if (Record.size() == 4) {
3696 unsigned IdxTyID = Record[2];
3697 Type *IdxTy = getTypeByID(IdxTyID);
3698 if (!IdxTy)
3699 return error("Invalid insertelement constexpr record");
3700 IdxRecord = Record[3];
3701 } else {
3702 // Deprecated, but still needed to read old bitcode files.
3703 IdxRecord = Record[2];
3704 }
3705 V = BitcodeConstant::create(
3706 Alloc, CurTy, Instruction::InsertElement,
3707 {(unsigned)Record[0], (unsigned)Record[1], IdxRecord});
3708 break;
3709 }
3710 case bitc::CST_CODE_CE_SHUFFLEVEC: { // CE_SHUFFLEVEC: [opval, opval, opval]
3711 VectorType *OpTy = dyn_cast<VectorType>(CurTy);
3712 if (Record.size() < 3 || !OpTy)
3713 return error("Invalid shufflevector constexpr record");
3714 V = BitcodeConstant::create(
3715 Alloc, CurTy, Instruction::ShuffleVector,
3716 {(unsigned)Record[0], (unsigned)Record[1], (unsigned)Record[2]});
3717 break;
3718 }
3719 case bitc::CST_CODE_CE_SHUFVEC_EX: { // [opty, opval, opval, opval]
3720 VectorType *RTy = dyn_cast<VectorType>(CurTy);
3721 VectorType *OpTy =
3722 dyn_cast_or_null<VectorType>(getTypeByID(Record[0]));
3723 if (Record.size() < 4 || !RTy || !OpTy)
3724 return error("Invalid shufflevector constexpr record");
3725 V = BitcodeConstant::create(
3726 Alloc, CurTy, Instruction::ShuffleVector,
3727 {(unsigned)Record[1], (unsigned)Record[2], (unsigned)Record[3]});
3728 break;
3729 }
3730 case bitc::CST_CODE_CE_CMP: { // CE_CMP: [opty, opval, opval, pred]
3731 if (Record.size() < 4)
3732 return error("Invalid cmp constexpt record");
3733 unsigned OpTyID = Record[0];
3734 Type *OpTy = getTypeByID(OpTyID);
3735 if (!OpTy)
3736 return error("Invalid cmp constexpr record");
3737 V = BitcodeConstant::create(
3738 Alloc, CurTy,
3739 {(uint8_t)(OpTy->isFPOrFPVectorTy() ? Instruction::FCmp
3740 : Instruction::ICmp),
3741 (uint8_t)Record[3]},
3742 {(unsigned)Record[1], (unsigned)Record[2]});
3743 break;
3744 }
3745 // This maintains backward compatibility, pre-asm dialect keywords.
3746 // Deprecated, but still needed to read old bitcode files.
3748 if (Record.size() < 2)
3749 return error("Invalid inlineasm record");
3750 std::string AsmStr, ConstrStr;
3751 bool HasSideEffects = Record[0] & 1;
3752 bool IsAlignStack = Record[0] >> 1;
3753 unsigned AsmStrSize = Record[1];
3754 if (2+AsmStrSize >= Record.size())
3755 return error("Invalid inlineasm record");
3756 unsigned ConstStrSize = Record[2+AsmStrSize];
3757 if (3+AsmStrSize+ConstStrSize > Record.size())
3758 return error("Invalid inlineasm record");
3759
3760 for (unsigned i = 0; i != AsmStrSize; ++i)
3761 AsmStr += (char)Record[2+i];
3762 for (unsigned i = 0; i != ConstStrSize; ++i)
3763 ConstrStr += (char)Record[3+AsmStrSize+i];
3764 UpgradeInlineAsmString(&AsmStr);
3765 if (!CurElemTy)
3766 return error("Missing element type for old-style inlineasm");
3767 V = InlineAsm::get(cast<FunctionType>(CurElemTy), AsmStr, ConstrStr,
3768 HasSideEffects, IsAlignStack);
3769 break;
3770 }
3771 // This version adds support for the asm dialect keywords (e.g.,
3772 // inteldialect).
3774 if (Record.size() < 2)
3775 return error("Invalid inlineasm record");
3776 std::string AsmStr, ConstrStr;
3777 bool HasSideEffects = Record[0] & 1;
3778 bool IsAlignStack = (Record[0] >> 1) & 1;
3779 unsigned AsmDialect = Record[0] >> 2;
3780 unsigned AsmStrSize = Record[1];
3781 if (2+AsmStrSize >= Record.size())
3782 return error("Invalid inlineasm record");
3783 unsigned ConstStrSize = Record[2+AsmStrSize];
3784 if (3+AsmStrSize+ConstStrSize > Record.size())
3785 return error("Invalid inlineasm record");
3786
3787 for (unsigned i = 0; i != AsmStrSize; ++i)
3788 AsmStr += (char)Record[2+i];
3789 for (unsigned i = 0; i != ConstStrSize; ++i)
3790 ConstrStr += (char)Record[3+AsmStrSize+i];
3791 UpgradeInlineAsmString(&AsmStr);
3792 if (!CurElemTy)
3793 return error("Missing element type for old-style inlineasm");
3794 V = InlineAsm::get(cast<FunctionType>(CurElemTy), AsmStr, ConstrStr,
3795 HasSideEffects, IsAlignStack,
3796 InlineAsm::AsmDialect(AsmDialect));
3797 break;
3798 }
3799 // This version adds support for the unwind keyword.
3801 if (Record.size() < 2)
3802 return error("Invalid inlineasm record");
3803 unsigned OpNum = 0;
3804 std::string AsmStr, ConstrStr;
3805 bool HasSideEffects = Record[OpNum] & 1;
3806 bool IsAlignStack = (Record[OpNum] >> 1) & 1;
3807 unsigned AsmDialect = (Record[OpNum] >> 2) & 1;
3808 bool CanThrow = (Record[OpNum] >> 3) & 1;
3809 ++OpNum;
3810 unsigned AsmStrSize = Record[OpNum];
3811 ++OpNum;
3812 if (OpNum + AsmStrSize >= Record.size())
3813 return error("Invalid inlineasm record");
3814 unsigned ConstStrSize = Record[OpNum + AsmStrSize];
3815 if (OpNum + 1 + AsmStrSize + ConstStrSize > Record.size())
3816 return error("Invalid inlineasm record");
3817
3818 for (unsigned i = 0; i != AsmStrSize; ++i)
3819 AsmStr += (char)Record[OpNum + i];
3820 ++OpNum;
3821 for (unsigned i = 0; i != ConstStrSize; ++i)
3822 ConstrStr += (char)Record[OpNum + AsmStrSize + i];
3823 UpgradeInlineAsmString(&AsmStr);
3824 if (!CurElemTy)
3825 return error("Missing element type for old-style inlineasm");
3826 V = InlineAsm::get(cast<FunctionType>(CurElemTy), AsmStr, ConstrStr,
3827 HasSideEffects, IsAlignStack,
3828 InlineAsm::AsmDialect(AsmDialect), CanThrow);
3829 break;
3830 }
3831 // This version adds explicit function type.
3833 if (Record.size() < 3)
3834 return error("Invalid inlineasm record");
3835 unsigned OpNum = 0;
3836 auto *FnTy = dyn_cast_or_null<FunctionType>(getTypeByID(Record[OpNum]));
3837 ++OpNum;
3838 if (!FnTy)
3839 return error("Invalid inlineasm record");
3840 std::string AsmStr, ConstrStr;
3841 bool HasSideEffects = Record[OpNum] & 1;
3842 bool IsAlignStack = (Record[OpNum] >> 1) & 1;
3843 unsigned AsmDialect = (Record[OpNum] >> 2) & 1;
3844 bool CanThrow = (Record[OpNum] >> 3) & 1;
3845 ++OpNum;
3846 unsigned AsmStrSize = Record[OpNum];
3847 ++OpNum;
3848 if (OpNum + AsmStrSize >= Record.size())
3849 return error("Invalid inlineasm record");
3850 unsigned ConstStrSize = Record[OpNum + AsmStrSize];
3851 if (OpNum + 1 + AsmStrSize + ConstStrSize > Record.size())
3852 return error("Invalid inlineasm record");
3853
3854 for (unsigned i = 0; i != AsmStrSize; ++i)
3855 AsmStr += (char)Record[OpNum + i];
3856 ++OpNum;
3857 for (unsigned i = 0; i != ConstStrSize; ++i)
3858 ConstrStr += (char)Record[OpNum + AsmStrSize + i];
3859 UpgradeInlineAsmString(&AsmStr);
3860 V = InlineAsm::get(FnTy, AsmStr, ConstrStr, HasSideEffects, IsAlignStack,
3861 InlineAsm::AsmDialect(AsmDialect), CanThrow);
3862 break;
3863 }
3865 if (Record.size() < 3)
3866 return error("Invalid blockaddress record");
3867 unsigned FnTyID = Record[0];
3868 Type *FnTy = getTypeByID(FnTyID);
3869 if (!FnTy)
3870 return error("Invalid blockaddress record");
3871 V = BitcodeConstant::create(
3872 Alloc, CurTy,
3873 {BitcodeConstant::BlockAddressOpcode, 0, (unsigned)Record[2]},
3874 Record[1]);
3875 break;
3876 }
3878 if (Record.size() < 2)
3879 return error("Invalid dso_local record");
3880 unsigned GVTyID = Record[0];
3881 Type *GVTy = getTypeByID(GVTyID);
3882 if (!GVTy)
3883 return error("Invalid dso_local record");
3884 V = BitcodeConstant::create(
3885 Alloc, CurTy, BitcodeConstant::DSOLocalEquivalentOpcode, Record[1]);
3886 break;
3887 }
3889 if (Record.size() < 2)
3890 return error("Invalid no_cfi record");
3891 unsigned GVTyID = Record[0];
3892 Type *GVTy = getTypeByID(GVTyID);
3893 if (!GVTy)
3894 return error("Invalid no_cfi record");
3895 V = BitcodeConstant::create(Alloc, CurTy, BitcodeConstant::NoCFIOpcode,
3896 Record[1]);
3897 break;
3898 }
3900 if (Record.size() < 4)
3901 return error("Invalid ptrauth record");
3902 // Ptr, Key, Disc, AddrDisc
3903 V = BitcodeConstant::create(Alloc, CurTy,
3904 BitcodeConstant::ConstantPtrAuthOpcode,
3905 {(unsigned)Record[0], (unsigned)Record[1],
3906 (unsigned)Record[2], (unsigned)Record[3]});
3907 break;
3908 }
3910 if (Record.size() < 5)
3911 return error("Invalid ptrauth record");
3912 // Ptr, Key, Disc, AddrDisc, DeactivationSymbol
3913 V = BitcodeConstant::create(
3914 Alloc, CurTy, BitcodeConstant::ConstantPtrAuthOpcode,
3915 {(unsigned)Record[0], (unsigned)Record[1], (unsigned)Record[2],
3916 (unsigned)Record[3], (unsigned)Record[4]});
3917 break;
3918 }
3919 }
3920
3921 assert(V->getType() == getTypeByID(CurTyID) && "Incorrect result type ID");
3922 if (Error Err = ValueList.assignValue(NextCstNo, V, CurTyID))
3923 return Err;
3924 ++NextCstNo;
3925 }
3926}
3927
3928Error BitcodeReader::parseUseLists() {
3929 if (Error Err = Stream.EnterSubBlock(bitc::USELIST_BLOCK_ID))
3930 return Err;
3931
3932 // Read all the records.
3933 SmallVector<uint64_t, 64> Record;
3934
3935 while (true) {
3936 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
3937 if (!MaybeEntry)
3938 return MaybeEntry.takeError();
3939 BitstreamEntry Entry = MaybeEntry.get();
3940
3941 switch (Entry.Kind) {
3942 case BitstreamEntry::SubBlock: // Handled for us already.
3944 return error("Malformed block");
3946 return Error::success();
3948 // The interesting case.
3949 break;
3950 }
3951
3952 // Read a use list record.
3953 Record.clear();
3954 bool IsBB = false;
3955 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3956 if (!MaybeRecord)
3957 return MaybeRecord.takeError();
3958 switch (MaybeRecord.get()) {
3959 default: // Default behavior: unknown type.
3960 break;
3962 IsBB = true;
3963 [[fallthrough]];
3965 unsigned RecordLength = Record.size();
3966 if (RecordLength < 3)
3967 // Records should have at least an ID and two indexes.
3968 return error("Invalid uselist record");
3969 unsigned ID = Record.pop_back_val();
3970
3971 Value *V;
3972 if (IsBB) {
3973 assert(ID < FunctionBBs.size() && "Basic block not found");
3974 V = FunctionBBs[ID];
3975 } else
3976 V = ValueList[ID];
3977
3978 if (!V->hasUseList())
3979 break;
3980
3981 unsigned NumUses = 0;
3982 SmallDenseMap<const Use *, unsigned, 16> Order;
3983 for (const Use &U : V->materialized_uses()) {
3984 if (++NumUses > Record.size())
3985 break;
3986 Order[&U] = Record[NumUses - 1];
3987 }
3988 if (Order.size() != Record.size() || NumUses > Record.size())
3989 // Mismatches can happen if the functions are being materialized lazily
3990 // (out-of-order), or a value has been upgraded.
3991 break;
3992
3993 V->sortUseList([&](const Use &L, const Use &R) {
3994 return Order.lookup(&L) < Order.lookup(&R);
3995 });
3996 break;
3997 }
3998 }
3999 }
4000}
4001
4002/// When we see the block for metadata, remember where it is and then skip it.
4003/// This lets us lazily deserialize the metadata.
4004Error BitcodeReader::rememberAndSkipMetadata() {
4005 // Save the current stream state.
4006 uint64_t CurBit = Stream.GetCurrentBitNo();
4007 DeferredMetadataInfo.push_back(CurBit);
4008
4009 // Skip over the block for now.
4010 if (Error Err = Stream.SkipBlock())
4011 return Err;
4012 return Error::success();
4013}
4014
4015Error BitcodeReader::materializeMetadata() {
4016 for (uint64_t BitPos : DeferredMetadataInfo) {
4017 // Move the bit stream to the saved position.
4018 if (Error JumpFailed = Stream.JumpToBit(BitPos))
4019 return JumpFailed;
4020 if (Error Err = MDLoader->parseModuleMetadata())
4021 return Err;
4022 }
4023
4024 // Upgrade "Linker Options" module flag to "llvm.linker.options" module-level
4025 // metadata. Only upgrade if the new option doesn't exist to avoid upgrade
4026 // multiple times.
4027 if (!TheModule->getNamedMetadata("llvm.linker.options")) {
4028 if (Metadata *Val = TheModule->getModuleFlag("Linker Options")) {
4029 NamedMDNode *LinkerOpts =
4030 TheModule->getOrInsertNamedMetadata("llvm.linker.options");
4031 for (const MDOperand &MDOptions : cast<MDNode>(Val)->operands())
4032 LinkerOpts->addOperand(cast<MDNode>(MDOptions));
4033 }
4034 }
4035
4036 UpgradeCFIFunctionsMetadata(*TheModule);
4037
4038 DeferredMetadataInfo.clear();
4039 return Error::success();
4040}
4041
4042void BitcodeReader::setStripDebugInfo() { StripDebugInfo = true; }
4043
4044/// When we see the block for a function body, remember where it is and then
4045/// skip it. This lets us lazily deserialize the functions.
4046Error BitcodeReader::rememberAndSkipFunctionBody() {
4047 // Get the function we are talking about.
4048 if (FunctionsWithBodies.empty())
4049 return error("Insufficient function protos");
4050
4051 Function *Fn = FunctionsWithBodies.back();
4052 FunctionsWithBodies.pop_back();
4053
4054 // Save the current stream state.
4055 uint64_t CurBit = Stream.GetCurrentBitNo();
4056 assert(
4057 (DeferredFunctionInfo[Fn] == 0 || DeferredFunctionInfo[Fn] == CurBit) &&
4058 "Mismatch between VST and scanned function offsets");
4059 DeferredFunctionInfo[Fn] = CurBit;
4060
4061 // Skip over the function block for now.
4062 if (Error Err = Stream.SkipBlock())
4063 return Err;
4064 return Error::success();
4065}
4066
4067Error BitcodeReader::globalCleanup() {
4068 // Patch the initializers for globals and aliases up.
4069 if (Error Err = resolveGlobalAndIndirectSymbolInits())
4070 return Err;
4071 if (!GlobalInits.empty() || !IndirectSymbolInits.empty())
4072 return error("Malformed global initializer set");
4073
4074 // Look for intrinsic functions which need to be upgraded at some point
4075 // and functions that need to have their function attributes upgraded.
4076 for (Function &F : *TheModule) {
4077 MDLoader->upgradeDebugIntrinsics(F);
4078 Function *NewFn;
4080 NewFn, /*CanUpgradeDebugIntrinsicsToRecords=*/
4081 !SkipDebugIntrinsicUpgrade))
4082 UpgradedIntrinsics[&F] = NewFn;
4083 // Look for functions that rely on old function attribute behavior.
4085 }
4086
4087 // Look for global variables which need to be renamed.
4088 std::vector<std::pair<GlobalVariable *, GlobalVariable *>> UpgradedVariables;
4089 for (GlobalVariable &GV : TheModule->globals())
4090 if (GlobalVariable *Upgraded = UpgradeGlobalVariable(&GV))
4091 UpgradedVariables.emplace_back(&GV, Upgraded);
4092 for (auto &Pair : UpgradedVariables) {
4093 Pair.first->eraseFromParent();
4094 TheModule->insertGlobalVariable(Pair.second);
4095 }
4096
4097 for (size_t ValueID = 0; ValueID < GUIDList.size(); ValueID++) {
4098 const auto GUID = GUIDList[ValueID];
4099 if (GUID == 0)
4100 continue;
4101
4102 const auto *Value = ValueList[ValueID];
4103 TheModule->insertGUID(Value, GUID);
4104 }
4105
4106 // Force deallocation of memory for these vectors to favor the client that
4107 // want lazy deserialization.
4108 std::vector<std::pair<GlobalVariable *, unsigned>>().swap(GlobalInits);
4109 std::vector<std::pair<GlobalValue *, unsigned>>().swap(IndirectSymbolInits);
4110 return Error::success();
4111}
4112
4113/// Support for lazy parsing of function bodies. This is required if we
4114/// either have an old bitcode file without a VST forward declaration record,
4115/// or if we have an anonymous function being materialized, since anonymous
4116/// functions do not have a name and are therefore not in the VST.
4117Error BitcodeReader::rememberAndSkipFunctionBodies() {
4118 if (Error JumpFailed = Stream.JumpToBit(NextUnreadBit))
4119 return JumpFailed;
4120
4121 if (Stream.AtEndOfStream())
4122 return error("Could not find function in stream");
4123
4124 if (!SeenFirstFunctionBody)
4125 return error("Trying to materialize functions before seeing function blocks");
4126
4127 // An old bitcode file with the symbol table at the end would have
4128 // finished the parse greedily.
4129 assert(SeenValueSymbolTable);
4130
4131 while (true) {
4132 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4133 if (!MaybeEntry)
4134 return MaybeEntry.takeError();
4135 llvm::BitstreamEntry Entry = MaybeEntry.get();
4136
4137 switch (Entry.Kind) {
4138 default:
4139 return error("Expect SubBlock");
4141 switch (Entry.ID) {
4142 default:
4143 return error("Expect function block");
4145 if (Error Err = rememberAndSkipFunctionBody())
4146 return Err;
4147 NextUnreadBit = Stream.GetCurrentBitNo();
4148 return Error::success();
4149 }
4150 }
4151 }
4152}
4153
4154Error BitcodeReaderBase::readBlockInfo() {
4155 Expected<std::optional<BitstreamBlockInfo>> MaybeNewBlockInfo =
4156 Stream.ReadBlockInfoBlock();
4157 if (!MaybeNewBlockInfo)
4158 return MaybeNewBlockInfo.takeError();
4159 std::optional<BitstreamBlockInfo> NewBlockInfo =
4160 std::move(MaybeNewBlockInfo.get());
4161 if (!NewBlockInfo)
4162 return error("Malformed block");
4163 BlockInfo = std::move(*NewBlockInfo);
4164 return Error::success();
4165}
4166
4167Error BitcodeReader::parseComdatRecord(ArrayRef<uint64_t> Record) {
4168 // v1: [selection_kind, name]
4169 // v2: [strtab_offset, strtab_size, selection_kind]
4170 StringRef Name;
4171 std::tie(Name, Record) = readNameFromStrtab(Record);
4172
4173 if (Record.empty())
4174 return error("Invalid comdat record");
4176 std::string OldFormatName;
4177 if (!UseStrtab) {
4178 if (Record.size() < 2)
4179 return error("Invalid comdat record");
4180 unsigned ComdatNameSize = Record[1];
4181 if (ComdatNameSize > Record.size() - 2)
4182 return error("Comdat name size too large");
4183 OldFormatName.reserve(ComdatNameSize);
4184 for (unsigned i = 0; i != ComdatNameSize; ++i)
4185 OldFormatName += (char)Record[2 + i];
4186 Name = OldFormatName;
4187 }
4188 Comdat *C = TheModule->getOrInsertComdat(Name);
4189 C->setSelectionKind(SK);
4190 ComdatList.push_back(C);
4191 return Error::success();
4192}
4193
4194static void inferDSOLocal(GlobalValue *GV) {
4195 // infer dso_local from linkage and visibility if it is not encoded.
4196 if (GV->hasLocalLinkage() ||
4198 GV->setDSOLocal(true);
4199}
4200
4203 if (V & (1 << 0))
4204 Meta.NoAddress = true;
4205 if (V & (1 << 1))
4206 Meta.NoHWAddress = true;
4207 if (V & (1 << 2))
4208 Meta.Memtag = true;
4209 if (V & (1 << 3))
4210 Meta.IsDynInit = true;
4211 return Meta;
4212}
4213
4214Error BitcodeReader::parseGlobalVarRecord(ArrayRef<uint64_t> Record) {
4215 // v1: [pointer type, isconst, initid, linkage, alignment, section,
4216 // visibility, threadlocal, unnamed_addr, externally_initialized,
4217 // dllstorageclass, comdat, attributes, preemption specifier,
4218 // partition strtab offset, partition strtab size] (name in VST)
4219 // v2: [strtab_offset, strtab_size, v1]
4220 // v3: [v2, code_model]
4221 StringRef Name;
4222 std::tie(Name, Record) = readNameFromStrtab(Record);
4223
4224 if (Record.size() < 6)
4225 return error("Invalid global variable record");
4226 unsigned TyID = Record[0];
4227 Type *Ty = getTypeByID(TyID);
4228 if (!Ty)
4229 return error("Invalid global variable record");
4230 bool isConstant = Record[1] & 1;
4231 bool explicitType = Record[1] & 2;
4232 unsigned AddressSpace;
4233 if (explicitType) {
4234 AddressSpace = Record[1] >> 2;
4235 } else {
4236 if (!Ty->isPointerTy())
4237 return error("Invalid type for value");
4238 AddressSpace = cast<PointerType>(Ty)->getAddressSpace();
4239 TyID = getContainedTypeID(TyID);
4240 Ty = getTypeByID(TyID);
4241 if (!Ty)
4242 return error("Missing element type for old-style global");
4243 }
4244
4245 uint64_t RawLinkage = Record[3];
4247 MaybeAlign Alignment;
4248 if (Error Err = parseAlignmentValue(Record[4], Alignment))
4249 return Err;
4250 std::string Section;
4251 if (Record[5]) {
4252 if (Record[5] - 1 >= SectionTable.size())
4253 return error("Invalid ID");
4254 Section = SectionTable[Record[5] - 1];
4255 }
4257 // Local linkage must have default visibility.
4258 // auto-upgrade `hidden` and `protected` for old bitcode.
4259 if (Record.size() > 6 && !GlobalValue::isLocalLinkage(Linkage))
4260 Visibility = getDecodedVisibility(Record[6]);
4261
4262 GlobalVariable::ThreadLocalMode TLM = GlobalVariable::NotThreadLocal;
4263 if (Record.size() > 7)
4264 TLM = getDecodedThreadLocalMode(Record[7]);
4265
4266 GlobalValue::UnnamedAddr UnnamedAddr = GlobalValue::UnnamedAddr::None;
4267 if (Record.size() > 8)
4268 UnnamedAddr = getDecodedUnnamedAddrType(Record[8]);
4269
4270 bool ExternallyInitialized = false;
4271 if (Record.size() > 9)
4272 ExternallyInitialized = Record[9];
4273
4274 GlobalVariable *NewGV =
4275 new GlobalVariable(*TheModule, Ty, isConstant, Linkage, nullptr, Name,
4276 nullptr, TLM, AddressSpace, ExternallyInitialized);
4277 if (Alignment)
4278 NewGV->setAlignment(*Alignment);
4279 if (!Section.empty())
4280 NewGV->setSection(Section);
4281 NewGV->setVisibility(Visibility);
4282 NewGV->setUnnamedAddr(UnnamedAddr);
4283
4284 if (Record.size() > 10) {
4285 // A GlobalValue with local linkage cannot have a DLL storage class.
4286 if (!NewGV->hasLocalLinkage()) {
4288 }
4289 } else {
4290 upgradeDLLImportExportLinkage(NewGV, RawLinkage);
4291 }
4292
4293 ValueList.push_back(NewGV, getVirtualTypeID(NewGV->getType(), TyID));
4294
4295 // Remember which value to use for the global initializer.
4296 if (unsigned InitID = Record[2])
4297 GlobalInits.push_back(std::make_pair(NewGV, InitID - 1));
4298
4299 if (Record.size() > 11) {
4300 if (unsigned ComdatID = Record[11]) {
4301 if (ComdatID > ComdatList.size())
4302 return error("Invalid global variable comdat ID");
4303 NewGV->setComdat(ComdatList[ComdatID - 1]);
4304 }
4305 } else if (hasImplicitComdat(RawLinkage)) {
4306 ImplicitComdatObjects.insert(NewGV);
4307 }
4308
4309 if (Record.size() > 12) {
4310 auto AS = getAttributes(Record[12]).getFnAttrs();
4311 NewGV->setAttributes(AS);
4312 }
4313
4314 if (Record.size() > 13) {
4315 NewGV->setDSOLocal(getDecodedDSOLocal(Record[13]));
4316 }
4317 inferDSOLocal(NewGV);
4318
4319 // Check whether we have enough values to read a partition name.
4320 if (Record.size() > 15)
4321 NewGV->setPartition(StringRef(Strtab.data() + Record[14], Record[15]));
4322
4323 if (Record.size() > 16 && Record[16]) {
4324 llvm::GlobalValue::SanitizerMetadata Meta =
4325 deserializeSanitizerMetadata(Record[16]);
4326 NewGV->setSanitizerMetadata(Meta);
4327 }
4328
4329 if (Record.size() > 17 && Record[17]) {
4330 if (auto CM = getDecodedCodeModel(Record[17]))
4331 NewGV->setCodeModel(*CM);
4332 else
4333 return error("Invalid global variable code model");
4334 }
4335
4336 return Error::success();
4337}
4338
4339void BitcodeReader::callValueTypeCallback(Value *F, unsigned TypeID) {
4340 if (ValueTypeCallback) {
4341 (*ValueTypeCallback)(
4342 F, TypeID, [this](unsigned I) { return getTypeByID(I); },
4343 [this](unsigned I, unsigned J) { return getContainedTypeID(I, J); });
4344 }
4345}
4346
4347Error BitcodeReader::parseFunctionRecord(ArrayRef<uint64_t> Record) {
4348 // v1: [type, callingconv, isproto, linkage, paramattr, alignment, section,
4349 // visibility, gc, unnamed_addr, prologuedata, dllstorageclass, comdat,
4350 // prefixdata, personalityfn, preemption specifier, addrspace] (name in VST)
4351 // v2: [strtab_offset, strtab_size, v1]
4352 StringRef Name;
4353 std::tie(Name, Record) = readNameFromStrtab(Record);
4354
4355 if (Record.size() < 8)
4356 return error("Invalid function record");
4357 unsigned FTyID = Record[0];
4358 Type *FTy = getTypeByID(FTyID);
4359 if (!FTy)
4360 return error("Invalid function record");
4361 if (isa<PointerType>(FTy)) {
4362 FTyID = getContainedTypeID(FTyID, 0);
4363 FTy = getTypeByID(FTyID);
4364 if (!FTy)
4365 return error("Missing element type for old-style function");
4366 }
4367
4368 if (!isa<FunctionType>(FTy))
4369 return error("Invalid type for value");
4370 auto CC = static_cast<CallingConv::ID>(Record[1]);
4371 if (CC & ~CallingConv::MaxID)
4372 return error("Invalid calling convention ID");
4373
4374 unsigned AddrSpace = TheModule->getDataLayout().getProgramAddressSpace();
4375 if (Record.size() > 16)
4376 AddrSpace = Record[16];
4377
4378 Function *Func =
4380 AddrSpace, Name, TheModule);
4381
4382 assert(Func->getFunctionType() == FTy &&
4383 "Incorrect fully specified type provided for function");
4384 FunctionTypeIDs[Func] = FTyID;
4385
4386 Func->setCallingConv(CC);
4387 bool isProto = Record[2];
4388 uint64_t RawLinkage = Record[3];
4389 Func->setLinkage(getDecodedLinkage(RawLinkage));
4390 Func->setAttributes(getAttributes(Record[4]));
4391 callValueTypeCallback(Func, FTyID);
4392
4393 // Upgrade any old-style byval or sret without a type by propagating the
4394 // argument's pointee type. There should be no opaque pointers where the byval
4395 // type is implicit.
4396 for (unsigned i = 0; i != Func->arg_size(); ++i) {
4397 for (Attribute::AttrKind Kind : {Attribute::ByVal, Attribute::StructRet,
4398 Attribute::InAlloca}) {
4399 if (!Func->hasParamAttribute(i, Kind))
4400 continue;
4401
4402 if (Func->getParamAttribute(i, Kind).getValueAsType())
4403 continue;
4404
4405 Func->removeParamAttr(i, Kind);
4406
4407 unsigned ParamTypeID = getContainedTypeID(FTyID, i + 1);
4408 Type *PtrEltTy = getPtrElementTypeByID(ParamTypeID);
4409 if (!PtrEltTy)
4410 return error("Missing param element type for attribute upgrade");
4411
4412 Attribute NewAttr;
4413 switch (Kind) {
4414 case Attribute::ByVal:
4415 NewAttr = Attribute::getWithByValType(Context, PtrEltTy);
4416 break;
4417 case Attribute::StructRet:
4418 NewAttr = Attribute::getWithStructRetType(Context, PtrEltTy);
4419 break;
4420 case Attribute::InAlloca:
4421 NewAttr = Attribute::getWithInAllocaType(Context, PtrEltTy);
4422 break;
4423 default:
4424 llvm_unreachable("not an upgraded type attribute");
4425 }
4426
4427 Func->addParamAttr(i, NewAttr);
4428 }
4429 }
4430
4431 if (Func->getCallingConv() == CallingConv::X86_INTR &&
4432 !Func->arg_empty() && !Func->hasParamAttribute(0, Attribute::ByVal)) {
4433 unsigned ParamTypeID = getContainedTypeID(FTyID, 1);
4434 Type *ByValTy = getPtrElementTypeByID(ParamTypeID);
4435 if (!ByValTy)
4436 return error("Missing param element type for x86_intrcc upgrade");
4437 Attribute NewAttr = Attribute::getWithByValType(Context, ByValTy);
4438 Func->addParamAttr(0, NewAttr);
4439 }
4440
4441 MaybeAlign Alignment;
4442 if (Error Err = parseAlignmentValue(Record[5], Alignment))
4443 return Err;
4444 if (Alignment)
4445 Func->setAlignment(*Alignment);
4446 if (Record[6]) {
4447 if (Record[6] - 1 >= SectionTable.size())
4448 return error("Invalid ID");
4449 Func->setSection(SectionTable[Record[6] - 1]);
4450 }
4451 // Local linkage must have default visibility.
4452 // auto-upgrade `hidden` and `protected` for old bitcode.
4453 if (!Func->hasLocalLinkage())
4454 Func->setVisibility(getDecodedVisibility(Record[7]));
4455 if (Record.size() > 8 && Record[8]) {
4456 if (Record[8] - 1 >= GCTable.size())
4457 return error("Invalid ID");
4458 Func->setGC(GCTable[Record[8] - 1]);
4459 }
4460 GlobalValue::UnnamedAddr UnnamedAddr = GlobalValue::UnnamedAddr::None;
4461 if (Record.size() > 9)
4462 UnnamedAddr = getDecodedUnnamedAddrType(Record[9]);
4463 Func->setUnnamedAddr(UnnamedAddr);
4464
4465 FunctionOperandInfo OperandInfo = {Func, 0, 0, 0};
4466 if (Record.size() > 10)
4467 OperandInfo.Prologue = Record[10];
4468
4469 if (Record.size() > 11) {
4470 // A GlobalValue with local linkage cannot have a DLL storage class.
4471 if (!Func->hasLocalLinkage()) {
4472 Func->setDLLStorageClass(getDecodedDLLStorageClass(Record[11]));
4473 }
4474 } else {
4475 upgradeDLLImportExportLinkage(Func, RawLinkage);
4476 }
4477
4478 if (Record.size() > 12) {
4479 if (unsigned ComdatID = Record[12]) {
4480 if (ComdatID > ComdatList.size())
4481 return error("Invalid function comdat ID");
4482 Func->setComdat(ComdatList[ComdatID - 1]);
4483 }
4484 } else if (hasImplicitComdat(RawLinkage)) {
4485 ImplicitComdatObjects.insert(Func);
4486 }
4487
4488 if (Record.size() > 13)
4489 OperandInfo.Prefix = Record[13];
4490
4491 if (Record.size() > 14)
4492 OperandInfo.PersonalityFn = Record[14];
4493
4494 if (Record.size() > 15) {
4495 Func->setDSOLocal(getDecodedDSOLocal(Record[15]));
4496 }
4497 inferDSOLocal(Func);
4498
4499 // Record[16] is the address space number.
4500
4501 // Check whether we have enough values to read a partition name. Also make
4502 // sure Strtab has enough values.
4503 if (Record.size() > 18 && Strtab.data() &&
4504 Record[17] + Record[18] <= Strtab.size()) {
4505 Func->setPartition(StringRef(Strtab.data() + Record[17], Record[18]));
4506 }
4507
4508 if (Record.size() > 19) {
4509 MaybeAlign PrefAlignment;
4510 if (Error Err = parseAlignmentValue(Record[19], PrefAlignment))
4511 return Err;
4512 Func->setPreferredAlignment(PrefAlignment);
4513 }
4514
4515 ValueList.push_back(Func, getVirtualTypeID(Func->getType(), FTyID));
4516
4517 if (OperandInfo.PersonalityFn || OperandInfo.Prefix || OperandInfo.Prologue)
4518 FunctionOperands.push_back(OperandInfo);
4519
4520 // If this is a function with a body, remember the prototype we are
4521 // creating now, so that we can match up the body with them later.
4522 if (!isProto) {
4523 Func->setIsMaterializable(true);
4524 FunctionsWithBodies.push_back(Func);
4525 DeferredFunctionInfo[Func] = 0;
4526 }
4527 return Error::success();
4528}
4529
4530Error BitcodeReader::parseGlobalIndirectSymbolRecord(
4531 unsigned BitCode, ArrayRef<uint64_t> Record) {
4532 // v1 ALIAS_OLD: [alias type, aliasee val#, linkage] (name in VST)
4533 // v1 ALIAS: [alias type, addrspace, aliasee val#, linkage, visibility,
4534 // dllstorageclass, threadlocal, unnamed_addr,
4535 // preemption specifier] (name in VST)
4536 // v1 IFUNC: [alias type, addrspace, aliasee val#, linkage,
4537 // visibility, dllstorageclass, threadlocal, unnamed_addr,
4538 // preemption specifier] (name in VST)
4539 // v2: [strtab_offset, strtab_size, v1]
4540 StringRef Name;
4541 std::tie(Name, Record) = readNameFromStrtab(Record);
4542
4543 bool NewRecord = BitCode != bitc::MODULE_CODE_ALIAS_OLD;
4544 if (Record.size() < (3 + (unsigned)NewRecord))
4545 return error("Invalid global indirect symbol record");
4546 unsigned OpNum = 0;
4547 unsigned TypeID = Record[OpNum++];
4548 Type *Ty = getTypeByID(TypeID);
4549 if (!Ty)
4550 return error("Invalid global indirect symbol record");
4551
4552 unsigned AddrSpace;
4553 if (!NewRecord) {
4554 auto *PTy = dyn_cast<PointerType>(Ty);
4555 if (!PTy)
4556 return error("Invalid type for value");
4557 AddrSpace = PTy->getAddressSpace();
4558 TypeID = getContainedTypeID(TypeID);
4559 Ty = getTypeByID(TypeID);
4560 if (!Ty)
4561 return error("Missing element type for old-style indirect symbol");
4562 } else {
4563 AddrSpace = Record[OpNum++];
4564 }
4565
4566 auto Val = Record[OpNum++];
4567 auto Linkage = Record[OpNum++];
4568 GlobalValue *NewGA;
4569 if (BitCode == bitc::MODULE_CODE_ALIAS ||
4570 BitCode == bitc::MODULE_CODE_ALIAS_OLD)
4571 NewGA = GlobalAlias::create(Ty, AddrSpace, getDecodedLinkage(Linkage), Name,
4572 TheModule);
4573 else
4574 NewGA = GlobalIFunc::create(Ty, AddrSpace, getDecodedLinkage(Linkage), Name,
4575 nullptr, TheModule);
4576
4577 // Local linkage must have default visibility.
4578 // auto-upgrade `hidden` and `protected` for old bitcode.
4579 if (OpNum != Record.size()) {
4580 auto VisInd = OpNum++;
4581 if (!NewGA->hasLocalLinkage())
4582 NewGA->setVisibility(getDecodedVisibility(Record[VisInd]));
4583 }
4584 if (BitCode == bitc::MODULE_CODE_ALIAS ||
4585 BitCode == bitc::MODULE_CODE_ALIAS_OLD) {
4586 if (OpNum != Record.size()) {
4587 auto S = Record[OpNum++];
4588 // A GlobalValue with local linkage cannot have a DLL storage class.
4589 if (!NewGA->hasLocalLinkage())
4591 }
4592 else
4594 if (OpNum != Record.size())
4595 NewGA->setThreadLocalMode(getDecodedThreadLocalMode(Record[OpNum++]));
4596 if (OpNum != Record.size())
4597 NewGA->setUnnamedAddr(getDecodedUnnamedAddrType(Record[OpNum++]));
4598 }
4599 if (OpNum != Record.size())
4600 NewGA->setDSOLocal(getDecodedDSOLocal(Record[OpNum++]));
4601 inferDSOLocal(NewGA);
4602
4603 // Check whether we have enough values to read a partition name.
4604 if (OpNum + 1 < Record.size()) {
4605 // Check Strtab has enough values for the partition.
4606 if (Record[OpNum] + Record[OpNum + 1] > Strtab.size())
4607 return error("Malformed partition, too large.");
4608 NewGA->setPartition(
4609 StringRef(Strtab.data() + Record[OpNum], Record[OpNum + 1]));
4610 }
4611
4612 ValueList.push_back(NewGA, getVirtualTypeID(NewGA->getType(), TypeID));
4613 IndirectSymbolInits.push_back(std::make_pair(NewGA, Val));
4614 return Error::success();
4615}
4616
4617Error BitcodeReader::parseModule(uint64_t ResumeBit,
4618 bool ShouldLazyLoadMetadata,
4619 ParserCallbacks Callbacks) {
4620 this->ValueTypeCallback = std::move(Callbacks.ValueType);
4621 if (ResumeBit) {
4622 if (Error JumpFailed = Stream.JumpToBit(ResumeBit))
4623 return JumpFailed;
4624 } else if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
4625 return Err;
4626
4627 SmallVector<uint64_t, 64> Record;
4628
4629 // Parts of bitcode parsing depend on the datalayout. Make sure we
4630 // finalize the datalayout before we run any of that code.
4631 bool ResolvedDataLayout = false;
4632 // In order to support importing modules with illegal data layout strings,
4633 // delay parsing the data layout string until after upgrades and overrides
4634 // have been applied, allowing to fix illegal data layout strings.
4635 // Initialize to the current module's layout string in case none is specified.
4636 std::string TentativeDataLayoutStr = TheModule->getDataLayoutStr();
4637
4638 // Apply to the following module asm.
4639 Module::GlobalAsmProperties Props;
4640
4641 auto ResolveDataLayout = [&]() -> Error {
4642 if (ResolvedDataLayout)
4643 return Error::success();
4644
4645 // Datalayout and triple can't be parsed after this point.
4646 ResolvedDataLayout = true;
4647
4648 // Auto-upgrade the layout string
4649 TentativeDataLayoutStr = llvm::UpgradeDataLayoutString(
4650 TentativeDataLayoutStr, TheModule->getTargetTriple().str());
4651
4652 // Apply override
4653 if (Callbacks.DataLayout) {
4654 if (auto LayoutOverride = (*Callbacks.DataLayout)(
4655 TheModule->getTargetTriple().str(), TentativeDataLayoutStr))
4656 TentativeDataLayoutStr = *LayoutOverride;
4657 }
4658
4659 // Now the layout string is finalized in TentativeDataLayoutStr. Parse it.
4660 Expected<DataLayout> MaybeDL = DataLayout::parse(TentativeDataLayoutStr);
4661 if (!MaybeDL)
4662 return MaybeDL.takeError();
4663
4664 TheModule->setDataLayout(MaybeDL.get());
4665 return Error::success();
4666 };
4667
4668 // Read all the records for this module.
4669 while (true) {
4670 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4671 if (!MaybeEntry)
4672 return MaybeEntry.takeError();
4673 llvm::BitstreamEntry Entry = MaybeEntry.get();
4674
4675 switch (Entry.Kind) {
4677 return error("Malformed block");
4679 if (Error Err = ResolveDataLayout())
4680 return Err;
4681 return globalCleanup();
4682
4684 switch (Entry.ID) {
4685 default: // Skip unknown content.
4686 if (Error Err = Stream.SkipBlock())
4687 return Err;
4688 break;
4690 if (Error Err = readBlockInfo())
4691 return Err;
4692 break;
4694 if (Error Err = parseAttributeBlock())
4695 return Err;
4696 break;
4698 if (Error Err = parseAttributeGroupBlock())
4699 return Err;
4700 break;
4702 if (Error Err = parseTypeTable())
4703 return Err;
4704 break;
4706 if (!SeenValueSymbolTable) {
4707 // Either this is an old form VST without function index and an
4708 // associated VST forward declaration record (which would have caused
4709 // the VST to be jumped to and parsed before it was encountered
4710 // normally in the stream), or there were no function blocks to
4711 // trigger an earlier parsing of the VST.
4712 assert(VSTOffset == 0 || FunctionsWithBodies.empty());
4713 if (Error Err = parseValueSymbolTable())
4714 return Err;
4715 SeenValueSymbolTable = true;
4716 } else {
4717 // We must have had a VST forward declaration record, which caused
4718 // the parser to jump to and parse the VST earlier.
4719 assert(VSTOffset > 0);
4720 if (Error Err = Stream.SkipBlock())
4721 return Err;
4722 }
4723 break;
4725 if (Error Err = parseConstants())
4726 return Err;
4727 if (Error Err = resolveGlobalAndIndirectSymbolInits())
4728 return Err;
4729 break;
4731 if (ShouldLazyLoadMetadata) {
4732 if (Error Err = rememberAndSkipMetadata())
4733 return Err;
4734 break;
4735 }
4736 assert(DeferredMetadataInfo.empty() && "Unexpected deferred metadata");
4737 if (Error Err = MDLoader->parseModuleMetadata())
4738 return Err;
4739 break;
4741 if (Error Err = MDLoader->parseMetadataKinds())
4742 return Err;
4743 break;
4745 if (Error Err = ResolveDataLayout())
4746 return Err;
4747
4748 // If this is the first function body we've seen, reverse the
4749 // FunctionsWithBodies list.
4750 if (!SeenFirstFunctionBody) {
4751 std::reverse(FunctionsWithBodies.begin(), FunctionsWithBodies.end());
4752 if (Error Err = globalCleanup())
4753 return Err;
4754 SeenFirstFunctionBody = true;
4755 }
4756
4757 if (VSTOffset > 0) {
4758 // If we have a VST forward declaration record, make sure we
4759 // parse the VST now if we haven't already. It is needed to
4760 // set up the DeferredFunctionInfo vector for lazy reading.
4761 if (!SeenValueSymbolTable) {
4762 if (Error Err = BitcodeReader::parseValueSymbolTable(VSTOffset))
4763 return Err;
4764 SeenValueSymbolTable = true;
4765 // Fall through so that we record the NextUnreadBit below.
4766 // This is necessary in case we have an anonymous function that
4767 // is later materialized. Since it will not have a VST entry we
4768 // need to fall back to the lazy parse to find its offset.
4769 } else {
4770 // If we have a VST forward declaration record, but have already
4771 // parsed the VST (just above, when the first function body was
4772 // encountered here), then we are resuming the parse after
4773 // materializing functions. The ResumeBit points to the
4774 // start of the last function block recorded in the
4775 // DeferredFunctionInfo map. Skip it.
4776 if (Error Err = Stream.SkipBlock())
4777 return Err;
4778 continue;
4779 }
4780 }
4781
4782 // Support older bitcode files that did not have the function
4783 // index in the VST, nor a VST forward declaration record, as
4784 // well as anonymous functions that do not have VST entries.
4785 // Build the DeferredFunctionInfo vector on the fly.
4786 if (Error Err = rememberAndSkipFunctionBody())
4787 return Err;
4788
4789 // Suspend parsing when we reach the function bodies. Subsequent
4790 // materialization calls will resume it when necessary. If the bitcode
4791 // file is old, the symbol table will be at the end instead and will not
4792 // have been seen yet. In this case, just finish the parse now.
4793 if (SeenValueSymbolTable) {
4794 NextUnreadBit = Stream.GetCurrentBitNo();
4795 // After the VST has been parsed, we need to make sure intrinsic name
4796 // are auto-upgraded.
4797 return globalCleanup();
4798 }
4799 break;
4801 if (Error Err = parseUseLists())
4802 return Err;
4803 break;
4805 if (Error Err = parseOperandBundleTags())
4806 return Err;
4807 break;
4809 if (Error Err = parseSyncScopeNames())
4810 return Err;
4811 break;
4812 }
4813 continue;
4814
4816 // The interesting case.
4817 break;
4818 }
4819
4820 // Read a record.
4821 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
4822 if (!MaybeBitCode)
4823 return MaybeBitCode.takeError();
4824 switch (unsigned BitCode = MaybeBitCode.get()) {
4825 default: break; // Default behavior, ignore unknown content.
4827 Expected<unsigned> VersionOrErr = parseVersionRecord(Record);
4828 if (!VersionOrErr)
4829 return VersionOrErr.takeError();
4830 UseRelativeIDs = *VersionOrErr >= 1;
4831 break;
4832 }
4833 case bitc::MODULE_CODE_TRIPLE: { // TRIPLE: [strchr x N]
4834 if (ResolvedDataLayout)
4835 return error("target triple too late in module");
4836 std::string S;
4837 if (convertToString(Record, 0, S))
4838 return error("Invalid triple record");
4839 TheModule->setTargetTriple(Triple(std::move(S)));
4840 break;
4841 }
4842 case bitc::MODULE_CODE_DATALAYOUT: { // DATALAYOUT: [strchr x N]
4843 if (ResolvedDataLayout)
4844 return error("datalayout too late in module");
4845 if (convertToString(Record, 0, TentativeDataLayoutStr))
4846 return error("Invalid data layout record");
4847 break;
4848 }
4850 std::string Str;
4851 if (convertToString(Record, 0, Str))
4852 return error("Invalid module asm record");
4853 size_t SepPos = Str.find('\0');
4854 if (SepPos == std::string::npos)
4855 return error("Invalid module asm record");
4856 if (!Props.set(StringRef(Str.data(), SepPos), Str.substr(SepPos + 1)))
4857 return error("Unknown module asm property");
4858 break;
4859 }
4860 case bitc::MODULE_CODE_ASM: { // ASM: [strchr x N]
4861 std::string S;
4862 if (convertToString(Record, 0, S))
4863 return error("Invalid asm record");
4864 TheModule->appendModuleInlineAsm(Module::GlobalAsmFragment(S, Props));
4865 Props = {};
4866 break;
4867 }
4868 case bitc::MODULE_CODE_DEPLIB: { // DEPLIB: [strchr x N]
4869 // Deprecated, but still needed to read old bitcode files.
4870 std::string S;
4871 if (convertToString(Record, 0, S))
4872 return error("Invalid deplib record");
4873 // Ignore value.
4874 break;
4875 }
4876 case bitc::MODULE_CODE_SECTIONNAME: { // SECTIONNAME: [strchr x N]
4877 std::string S;
4878 if (convertToString(Record, 0, S))
4879 return error("Invalid section name record");
4880 SectionTable.push_back(S);
4881 break;
4882 }
4883 case bitc::MODULE_CODE_GCNAME: { // SECTIONNAME: [strchr x N]
4884 std::string S;
4885 if (convertToString(Record, 0, S))
4886 return error("Invalid gcname record");
4887 GCTable.push_back(S);
4888 break;
4889 }
4891 if (Error Err = parseComdatRecord(Record))
4892 return Err;
4893 break;
4894 // FIXME: BitcodeReader should handle {GLOBALVAR, FUNCTION, ALIAS, IFUNC}
4895 // written by ThinLinkBitcodeWriter. See
4896 // `ThinLinkBitcodeWriter::writeSimplifiedModuleInfo` for the format of each
4897 // record
4898 // (https://github.com/llvm/llvm-project/blob/b6a93967d9c11e79802b5e75cec1584d6c8aa472/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp#L4714)
4900 if (Error Err = parseGlobalVarRecord(Record))
4901 return Err;
4902 break;
4904 if (Error Err = ResolveDataLayout())
4905 return Err;
4906 if (Error Err = parseFunctionRecord(Record))
4907 return Err;
4908 break;
4912 if (Error Err = parseGlobalIndirectSymbolRecord(BitCode, Record))
4913 return Err;
4914 break;
4915 /// MODULE_CODE_VSTOFFSET: [offset]
4917 if (Record.empty())
4918 return error("Invalid vstoffset record");
4919 // Note that we subtract 1 here because the offset is relative to one word
4920 // before the start of the identification or module block, which was
4921 // historically always the start of the regular bitcode header.
4922 VSTOffset = Record[0] - 1;
4923 break;
4924 // MODULE_CODE_GUIDLIST: [i64 x N]
4926 assert(Record.size() % 2 == 0);
4927 GUIDList.reserve(GUIDList.size() + Record.size() / 2);
4928 for (size_t i = 0; i < Record.size(); i += 2)
4929 GUIDList.push_back(Record[i] << 32 | Record[i + 1]);
4930 break;
4931 /// MODULE_CODE_SOURCE_FILENAME: [namechar x N]
4933 SmallString<128> ValueName;
4934 if (convertToString(Record, 0, ValueName))
4935 return error("Invalid source filename record");
4936 TheModule->setSourceFileName(ValueName);
4937 break;
4938 }
4939 Record.clear();
4940 }
4941
4942 this->ValueTypeCallback = std::nullopt;
4943 return Error::success();
4944}
4945
4946Error BitcodeReader::parseBitcodeInto(Module *M, bool ShouldLazyLoadMetadata,
4947 bool IsImporting,
4948 ParserCallbacks Callbacks) {
4949 TheModule = M;
4950 MetadataLoaderCallbacks MDCallbacks;
4951 MDCallbacks.GetTypeByID = [&](unsigned ID) { return getTypeByID(ID); };
4952 MDCallbacks.GetContainedTypeID = [&](unsigned I, unsigned J) {
4953 return getContainedTypeID(I, J);
4954 };
4955 MDCallbacks.MDType = Callbacks.MDType;
4956 MDLoader = MetadataLoader(Stream, *M, ValueList, IsImporting, MDCallbacks);
4957 SkipDebugIntrinsicUpgrade = Callbacks.SkipDebugIntrinsicUpgrade;
4958 return parseModule(0, ShouldLazyLoadMetadata, Callbacks);
4959}
4960
4961Error BitcodeReader::typeCheckLoadStoreInst(Type *ValType, Type *PtrType) {
4962 if (!isa<PointerType>(PtrType))
4963 return error("Load/Store operand is not a pointer type");
4964 if (!PointerType::isLoadableOrStorableType(ValType))
4965 return error("Cannot load/store from pointer");
4966 return Error::success();
4967}
4968
4969Error BitcodeReader::propagateAttributeTypes(CallBase *CB,
4970 ArrayRef<unsigned> ArgTyIDs) {
4971 AttributeList Attrs = CB->getAttributes();
4972 for (unsigned i = 0; i != CB->arg_size(); ++i) {
4973 for (Attribute::AttrKind Kind : {Attribute::ByVal, Attribute::StructRet,
4974 Attribute::InAlloca}) {
4975 if (!Attrs.hasParamAttr(i, Kind) ||
4976 Attrs.getParamAttr(i, Kind).getValueAsType())
4977 continue;
4978
4979 Type *PtrEltTy = getPtrElementTypeByID(ArgTyIDs[i]);
4980 if (!PtrEltTy)
4981 return error("Missing element type for typed attribute upgrade");
4982
4983 Attribute NewAttr;
4984 switch (Kind) {
4985 case Attribute::ByVal:
4986 NewAttr = Attribute::getWithByValType(Context, PtrEltTy);
4987 break;
4988 case Attribute::StructRet:
4989 NewAttr = Attribute::getWithStructRetType(Context, PtrEltTy);
4990 break;
4991 case Attribute::InAlloca:
4992 NewAttr = Attribute::getWithInAllocaType(Context, PtrEltTy);
4993 break;
4994 default:
4995 llvm_unreachable("not an upgraded type attribute");
4996 }
4997
4998 Attrs = Attrs.addParamAttribute(Context, i, NewAttr);
4999 }
5000 }
5001
5002 if (CB->isInlineAsm()) {
5003 const InlineAsm *IA = cast<InlineAsm>(CB->getCalledOperand());
5004 unsigned ArgNo = 0;
5005 for (const InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) {
5006 if (!CI.hasArg())
5007 continue;
5008
5009 if (CI.isIndirect && !Attrs.getParamElementType(ArgNo)) {
5010 Type *ElemTy = getPtrElementTypeByID(ArgTyIDs[ArgNo]);
5011 if (!ElemTy)
5012 return error("Missing element type for inline asm upgrade");
5013 Attrs = Attrs.addParamAttribute(
5014 Context, ArgNo,
5015 Attribute::get(Context, Attribute::ElementType, ElemTy));
5016 }
5017
5018 ArgNo++;
5019 }
5020 }
5021
5022 switch (CB->getIntrinsicID()) {
5023 case Intrinsic::preserve_array_access_index:
5024 case Intrinsic::preserve_struct_access_index:
5025 case Intrinsic::aarch64_ldaxr:
5026 case Intrinsic::aarch64_ldxr:
5027 case Intrinsic::aarch64_stlxr:
5028 case Intrinsic::aarch64_stxr:
5029 case Intrinsic::arm_ldaex:
5030 case Intrinsic::arm_ldrex:
5031 case Intrinsic::arm_stlex:
5032 case Intrinsic::arm_strex: {
5033 unsigned ArgNo;
5034 switch (CB->getIntrinsicID()) {
5035 case Intrinsic::aarch64_stlxr:
5036 case Intrinsic::aarch64_stxr:
5037 case Intrinsic::arm_stlex:
5038 case Intrinsic::arm_strex:
5039 ArgNo = 1;
5040 break;
5041 default:
5042 ArgNo = 0;
5043 break;
5044 }
5045 if (!Attrs.getParamElementType(ArgNo)) {
5046 Type *ElTy = getPtrElementTypeByID(ArgTyIDs[ArgNo]);
5047 if (!ElTy)
5048 return error("Missing element type for elementtype upgrade");
5049 Attribute NewAttr = Attribute::get(Context, Attribute::ElementType, ElTy);
5050 Attrs = Attrs.addParamAttribute(Context, ArgNo, NewAttr);
5051 }
5052 break;
5053 }
5054 default:
5055 break;
5056 }
5057
5058 CB->setAttributes(Attrs);
5059 return Error::success();
5060}
5061
5062/// Lazily parse the specified function body block.
5063Error BitcodeReader::parseFunctionBody(Function *F) {
5065 return Err;
5066
5067 // Unexpected unresolved metadata when parsing function.
5068 if (MDLoader->hasFwdRefs())
5069 return error("Invalid function metadata: incoming forward references");
5070
5071 InstructionList.clear();
5072 unsigned ModuleValueListSize = ValueList.size();
5073 unsigned ModuleMDLoaderSize = MDLoader->size();
5074
5075 // Add all the function arguments to the value table.
5076 unsigned ArgNo = 0;
5077 unsigned FTyID = FunctionTypeIDs[F];
5078 for (Argument &I : F->args()) {
5079 unsigned ArgTyID = getContainedTypeID(FTyID, ArgNo + 1);
5080 assert(I.getType() == getTypeByID(ArgTyID) &&
5081 "Incorrect fully specified type for Function Argument");
5082 ValueList.push_back(&I, ArgTyID);
5083 ++ArgNo;
5084 }
5085 unsigned NextValueNo = ValueList.size();
5086 BasicBlock *CurBB = nullptr;
5087 unsigned CurBBNo = 0;
5088 // Block into which constant expressions from phi nodes are materialized.
5089 BasicBlock *PhiConstExprBB = nullptr;
5090 // Edge blocks for phi nodes into which constant expressions have been
5091 // expanded.
5092 SmallMapVector<std::pair<BasicBlock *, BasicBlock *>, BasicBlock *, 4>
5093 ConstExprEdgeBBs;
5094
5095 DebugLoc LastLoc;
5096 auto getLastInstruction = [&]() -> Instruction * {
5097 if (CurBB && !CurBB->empty())
5098 return &CurBB->back();
5099 else if (CurBBNo && FunctionBBs[CurBBNo - 1] &&
5100 !FunctionBBs[CurBBNo - 1]->empty())
5101 return &FunctionBBs[CurBBNo - 1]->back();
5102 return nullptr;
5103 };
5104
5105 std::vector<OperandBundleDef> OperandBundles;
5106
5107 // Read all the records.
5108 SmallVector<uint64_t, 64> Record;
5109
5110 while (true) {
5111 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5112 if (!MaybeEntry)
5113 return MaybeEntry.takeError();
5114 llvm::BitstreamEntry Entry = MaybeEntry.get();
5115
5116 switch (Entry.Kind) {
5118 return error("Malformed block");
5120 goto OutOfRecordLoop;
5121
5123 switch (Entry.ID) {
5124 default: // Skip unknown content.
5125 if (Error Err = Stream.SkipBlock())
5126 return Err;
5127 break;
5129 if (Error Err = parseConstants())
5130 return Err;
5131 NextValueNo = ValueList.size();
5132 break;
5134 if (Error Err = parseValueSymbolTable())
5135 return Err;
5136 break;
5138 if (Error Err = MDLoader->parseMetadataAttachment(*F, InstructionList))
5139 return Err;
5140 break;
5142 assert(DeferredMetadataInfo.empty() &&
5143 "Must read all module-level metadata before function-level");
5144 if (Error Err = MDLoader->parseFunctionMetadata())
5145 return Err;
5146 break;
5148 if (Error Err = parseUseLists())
5149 return Err;
5150 break;
5151 }
5152 continue;
5153
5155 // The interesting case.
5156 break;
5157 }
5158
5159 // Read a record.
5160 Record.clear();
5161 Instruction *I = nullptr;
5162 unsigned ResTypeID = InvalidTypeID;
5163 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
5164 if (!MaybeBitCode)
5165 return MaybeBitCode.takeError();
5166 switch (unsigned BitCode = MaybeBitCode.get()) {
5167 default: // Default behavior: reject
5168 return error("Invalid value");
5169 case bitc::FUNC_CODE_DECLAREBLOCKS: { // DECLAREBLOCKS: [nblocks]
5170 if (Record.empty() || Record[0] == 0)
5171 return error("Invalid declareblocks record");
5172 // Create all the basic blocks for the function.
5173 FunctionBBs.resize(Record[0]);
5174
5175 // See if anything took the address of blocks in this function.
5176 auto BBFRI = BasicBlockFwdRefs.find(F);
5177 if (BBFRI == BasicBlockFwdRefs.end()) {
5178 for (BasicBlock *&BB : FunctionBBs)
5179 BB = BasicBlock::Create(Context, "", F);
5180 } else {
5181 auto &BBRefs = BBFRI->second;
5182 // Check for invalid basic block references.
5183 if (BBRefs.size() > FunctionBBs.size())
5184 return error("Invalid ID");
5185 assert(!BBRefs.empty() && "Unexpected empty array");
5186 assert(!BBRefs.front() && "Invalid reference to entry block");
5187 for (unsigned I = 0, E = FunctionBBs.size(), RE = BBRefs.size(); I != E;
5188 ++I)
5189 if (I < RE && BBRefs[I]) {
5190 BBRefs[I]->insertInto(F);
5191 FunctionBBs[I] = BBRefs[I];
5192 } else {
5193 FunctionBBs[I] = BasicBlock::Create(Context, "", F);
5194 }
5195
5196 // Erase from the table.
5197 BasicBlockFwdRefs.erase(BBFRI);
5198 }
5199
5200 CurBB = FunctionBBs[0];
5201 continue;
5202 }
5203
5204 case bitc::FUNC_CODE_BLOCKADDR_USERS: // BLOCKADDR_USERS: [vals...]
5205 // The record should not be emitted if it's an empty list.
5206 if (Record.empty())
5207 return error("Invalid blockaddr users record");
5208 // When we have the RARE case of a BlockAddress Constant that is not
5209 // scoped to the Function it refers to, we need to conservatively
5210 // materialize the referred to Function, regardless of whether or not
5211 // that Function will ultimately be linked, otherwise users of
5212 // BitcodeReader might start splicing out Function bodies such that we
5213 // might no longer be able to materialize the BlockAddress since the
5214 // BasicBlock (and entire body of the Function) the BlockAddress refers
5215 // to may have been moved. In the case that the user of BitcodeReader
5216 // decides ultimately not to link the Function body, materializing here
5217 // could be considered wasteful, but it's better than a deserialization
5218 // failure as described. This keeps BitcodeReader unaware of complex
5219 // linkage policy decisions such as those use by LTO, leaving those
5220 // decisions "one layer up."
5221 for (uint64_t ValID : Record)
5222 if (auto *F = dyn_cast<Function>(ValueList[ValID]))
5223 BackwardRefFunctions.push_back(F);
5224 else
5225 return error("Invalid blockaddr users record");
5226
5227 continue;
5228
5229 case bitc::FUNC_CODE_DEBUG_LOC_AGAIN: // DEBUG_LOC_AGAIN
5230 // This record indicates that the last instruction is at the same
5231 // location as the previous instruction with a location.
5232 I = getLastInstruction();
5233
5234 if (!I)
5235 return error("Invalid debug_loc_again record");
5236 I->setDebugLoc(LastLoc);
5237 I = nullptr;
5238 continue;
5239
5240 case bitc::FUNC_CODE_DEBUG_LOC: { // DEBUG_LOC: [line, col, scope, ia]
5241 I = getLastInstruction();
5242 if (!I || Record.size() < 4)
5243 return error("Invalid debug loc record");
5244
5245 unsigned Line = Record[0], Col = Record[1];
5246 unsigned ScopeID = Record[2], IAID = Record[3];
5247 bool isImplicitCode = Record.size() >= 5 && Record[4];
5248 uint64_t AtomGroup = Record.size() == 7 ? Record[5] : 0;
5249 uint8_t AtomRank = Record.size() == 7 ? Record[6] : 0;
5250
5251 MDNode *Scope = nullptr, *IA = nullptr;
5252 if (ScopeID) {
5254 MDLoader->getMetadataFwdRefOrLoad(ScopeID - 1));
5255 if (!Scope)
5256 return error("Invalid debug loc record");
5257 }
5258 if (IAID) {
5260 MDLoader->getMetadataFwdRefOrLoad(IAID - 1));
5261 if (!IA)
5262 return error("Invalid debug loc record");
5263 }
5264
5265 LastLoc = DILocation::get(Scope->getContext(), Line, Col, Scope, IA,
5266 isImplicitCode, AtomGroup, AtomRank);
5267 I->setDebugLoc(LastLoc);
5268 I = nullptr;
5269 continue;
5270 }
5271 case bitc::FUNC_CODE_INST_UNOP: { // UNOP: [opval, ty, opcode]
5272 unsigned OpNum = 0;
5273 Value *LHS;
5274 unsigned TypeID;
5275 if (getValueTypePair(Record, OpNum, NextValueNo, LHS, TypeID, CurBB) ||
5276 OpNum+1 > Record.size())
5277 return error("Invalid unary operator record");
5278
5279 int Opc = getDecodedUnaryOpcode(Record[OpNum++], LHS->getType());
5280 if (Opc == -1)
5281 return error("Invalid unary operator record");
5283 ResTypeID = TypeID;
5284 InstructionList.push_back(I);
5285 if (OpNum < Record.size()) {
5286 if (isa<FPMathOperator>(I)) {
5287 FastMathFlags FMF = getDecodedFastMathFlags(Record[OpNum]);
5288 if (FMF.any())
5289 I->setFastMathFlags(FMF);
5290 }
5291 }
5292 break;
5293 }
5294 case bitc::FUNC_CODE_INST_BINOP: { // BINOP: [opval, ty, opval, opcode]
5295 unsigned OpNum = 0;
5296 Value *LHS, *RHS;
5297 unsigned TypeID;
5298 if (getValueTypePair(Record, OpNum, NextValueNo, LHS, TypeID, CurBB) ||
5299 popValue(Record, OpNum, NextValueNo, LHS->getType(), TypeID, RHS,
5300 CurBB) ||
5301 OpNum+1 > Record.size())
5302 return error("Invalid binary operator record");
5303
5304 int Opc = getDecodedBinaryOpcode(Record[OpNum++], LHS->getType());
5305 if (Opc == -1)
5306 return error("Invalid binary operator record");
5308 ResTypeID = TypeID;
5309 InstructionList.push_back(I);
5310 if (OpNum < Record.size()) {
5311 if (Opc == Instruction::Add ||
5312 Opc == Instruction::Sub ||
5313 Opc == Instruction::Mul ||
5314 Opc == Instruction::Shl) {
5315 if (Record[OpNum] & (1 << bitc::OBO_NO_SIGNED_WRAP))
5316 cast<BinaryOperator>(I)->setHasNoSignedWrap(true);
5317 if (Record[OpNum] & (1 << bitc::OBO_NO_UNSIGNED_WRAP))
5318 cast<BinaryOperator>(I)->setHasNoUnsignedWrap(true);
5319 } else if (Opc == Instruction::SDiv ||
5320 Opc == Instruction::UDiv ||
5321 Opc == Instruction::LShr ||
5322 Opc == Instruction::AShr) {
5323 if (Record[OpNum] & (1 << bitc::PEO_EXACT))
5324 cast<BinaryOperator>(I)->setIsExact(true);
5325 } else if (Opc == Instruction::Or) {
5326 if (Record[OpNum] & (1 << bitc::PDI_DISJOINT))
5327 cast<PossiblyDisjointInst>(I)->setIsDisjoint(true);
5328 } else if (isa<FPMathOperator>(I)) {
5329 FastMathFlags FMF = getDecodedFastMathFlags(Record[OpNum]);
5330 if (FMF.any())
5331 I->setFastMathFlags(FMF);
5332 }
5333 }
5334 break;
5335 }
5336 case bitc::FUNC_CODE_INST_CAST: { // CAST: [opval, opty, destty, castopc]
5337 unsigned OpNum = 0;
5338 Value *Op;
5339 unsigned OpTypeID;
5340 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB) ||
5341 OpNum + 1 > Record.size())
5342 return error("Invalid cast record");
5343
5344 ResTypeID = Record[OpNum++];
5345 Type *ResTy = getTypeByID(ResTypeID);
5346 int Opc = getDecodedCastOpcode(Record[OpNum++]);
5347
5348 if (Opc == -1 || !ResTy)
5349 return error("Invalid cast record");
5350 Instruction *Temp = nullptr;
5351 if ((I = UpgradeBitCastInst(Opc, Op, ResTy, Temp))) {
5352 if (Temp) {
5353 InstructionList.push_back(Temp);
5354 assert(CurBB && "No current BB?");
5355 Temp->insertInto(CurBB, CurBB->end());
5356 }
5357 } else {
5358 auto CastOp = (Instruction::CastOps)Opc;
5359 if (!CastInst::castIsValid(CastOp, Op, ResTy))
5360 return error("Invalid cast");
5361 I = CastInst::Create(CastOp, Op, ResTy);
5362 }
5363
5364 if (OpNum < Record.size()) {
5365 if (Opc == Instruction::ZExt || Opc == Instruction::UIToFP) {
5366 if (Record[OpNum] & (1 << bitc::PNNI_NON_NEG))
5367 cast<PossiblyNonNegInst>(I)->setNonNeg(true);
5368 } else if (Opc == Instruction::Trunc) {
5369 if (Record[OpNum] & (1 << bitc::TIO_NO_UNSIGNED_WRAP))
5370 cast<TruncInst>(I)->setHasNoUnsignedWrap(true);
5371 if (Record[OpNum] & (1 << bitc::TIO_NO_SIGNED_WRAP))
5372 cast<TruncInst>(I)->setHasNoSignedWrap(true);
5373 }
5374 if (isa<FPMathOperator>(I)) {
5375 uint64_t Flags = Record[OpNum];
5376 if (isa<UIToFPInst>(I))
5377 Flags >>= 1;
5378 FastMathFlags FMF = getDecodedFastMathFlags(Flags);
5379 if (FMF.any())
5380 I->setFastMathFlags(FMF);
5381 }
5382 }
5383
5384 InstructionList.push_back(I);
5385 break;
5386 }
5389 case bitc::FUNC_CODE_INST_GEP: { // GEP: type, [n x operands]
5390 unsigned OpNum = 0;
5391
5392 unsigned TyID;
5393 Type *Ty;
5394 GEPNoWrapFlags NW;
5395
5396 if (BitCode == bitc::FUNC_CODE_INST_GEP) {
5397 NW = toGEPNoWrapFlags(Record[OpNum++]);
5398 TyID = Record[OpNum++];
5399 Ty = getTypeByID(TyID);
5400 } else {
5403 TyID = InvalidTypeID;
5404 Ty = nullptr;
5405 }
5406
5407 Value *BasePtr;
5408 unsigned BasePtrTypeID;
5409 if (getValueTypePair(Record, OpNum, NextValueNo, BasePtr, BasePtrTypeID,
5410 CurBB))
5411 return error("Invalid gep record");
5412
5413 if (!Ty) {
5414 TyID = getContainedTypeID(BasePtrTypeID);
5415 if (BasePtr->getType()->isVectorTy())
5416 TyID = getContainedTypeID(TyID);
5417 Ty = getTypeByID(TyID);
5418 }
5419
5420 SmallVector<Value*, 16> GEPIdx;
5421 while (OpNum != Record.size()) {
5422 Value *Op;
5423 unsigned OpTypeID;
5424 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
5425 return error("Invalid gep record");
5426 GEPIdx.push_back(Op);
5427 }
5428
5429 auto *GEP = GetElementPtrInst::Create(Ty, BasePtr, GEPIdx);
5430 I = GEP;
5431
5432 ResTypeID = TyID;
5433 if (cast<GEPOperator>(I)->getNumIndices() != 0) {
5434 auto GTI = std::next(gep_type_begin(I));
5435 for (Value *Idx : drop_begin(cast<GEPOperator>(I)->indices())) {
5436 unsigned SubType = 0;
5437 if (GTI.isStruct()) {
5438 ConstantInt *IdxC =
5439 Idx->getType()->isVectorTy()
5441 : cast<ConstantInt>(Idx);
5442 SubType = IdxC->getZExtValue();
5443 }
5444 ResTypeID = getContainedTypeID(ResTypeID, SubType);
5445 ++GTI;
5446 }
5447 }
5448
5449 // At this point ResTypeID is the result element type. We need a pointer
5450 // or vector of pointer to it.
5451 ResTypeID = getVirtualTypeID(I->getType()->getScalarType(), ResTypeID);
5452 if (I->getType()->isVectorTy())
5453 ResTypeID = getVirtualTypeID(I->getType(), ResTypeID);
5454
5455 InstructionList.push_back(I);
5456 GEP->setNoWrapFlags(NW);
5457 break;
5458 }
5459
5461 // EXTRACTVAL: [opty, opval, n x indices]
5462 unsigned OpNum = 0;
5463 Value *Agg;
5464 unsigned AggTypeID;
5465 if (getValueTypePair(Record, OpNum, NextValueNo, Agg, AggTypeID, CurBB))
5466 return error("Invalid extractvalue record");
5467 Type *Ty = Agg->getType();
5468
5469 unsigned RecSize = Record.size();
5470 if (OpNum == RecSize)
5471 return error("EXTRACTVAL: Invalid instruction with 0 indices");
5472
5473 SmallVector<unsigned, 4> EXTRACTVALIdx;
5474 ResTypeID = AggTypeID;
5475 for (; OpNum != RecSize; ++OpNum) {
5476 bool IsArray = Ty->isArrayTy();
5477 bool IsStruct = Ty->isStructTy();
5478 uint64_t Index = Record[OpNum];
5479
5480 if (!IsStruct && !IsArray)
5481 return error("EXTRACTVAL: Invalid type");
5482 if ((unsigned)Index != Index)
5483 return error("Invalid value");
5484 if (IsStruct && Index >= Ty->getStructNumElements())
5485 return error("EXTRACTVAL: Invalid struct index");
5486 if (IsArray && Index >= Ty->getArrayNumElements())
5487 return error("EXTRACTVAL: Invalid array index");
5488 EXTRACTVALIdx.push_back((unsigned)Index);
5489
5490 if (IsStruct) {
5491 Ty = Ty->getStructElementType(Index);
5492 ResTypeID = getContainedTypeID(ResTypeID, Index);
5493 } else {
5494 Ty = Ty->getArrayElementType();
5495 ResTypeID = getContainedTypeID(ResTypeID);
5496 }
5497 }
5498
5499 I = ExtractValueInst::Create(Agg, EXTRACTVALIdx);
5500 InstructionList.push_back(I);
5501 break;
5502 }
5503
5505 // INSERTVAL: [opty, opval, opty, opval, n x indices]
5506 unsigned OpNum = 0;
5507 Value *Agg;
5508 unsigned AggTypeID;
5509 if (getValueTypePair(Record, OpNum, NextValueNo, Agg, AggTypeID, CurBB))
5510 return error("Invalid insertvalue record");
5511 Value *Val;
5512 unsigned ValTypeID;
5513 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
5514 return error("Invalid insertvalue record");
5515
5516 unsigned RecSize = Record.size();
5517 if (OpNum == RecSize)
5518 return error("INSERTVAL: Invalid instruction with 0 indices");
5519
5520 SmallVector<unsigned, 4> INSERTVALIdx;
5521 Type *CurTy = Agg->getType();
5522 for (; OpNum != RecSize; ++OpNum) {
5523 bool IsArray = CurTy->isArrayTy();
5524 bool IsStruct = CurTy->isStructTy();
5525 uint64_t Index = Record[OpNum];
5526
5527 if (!IsStruct && !IsArray)
5528 return error("INSERTVAL: Invalid type");
5529 if ((unsigned)Index != Index)
5530 return error("Invalid value");
5531 if (IsStruct && Index >= CurTy->getStructNumElements())
5532 return error("INSERTVAL: Invalid struct index");
5533 if (IsArray && Index >= CurTy->getArrayNumElements())
5534 return error("INSERTVAL: Invalid array index");
5535
5536 INSERTVALIdx.push_back((unsigned)Index);
5537 if (IsStruct)
5538 CurTy = CurTy->getStructElementType(Index);
5539 else
5540 CurTy = CurTy->getArrayElementType();
5541 }
5542
5543 if (CurTy != Val->getType())
5544 return error("Inserted value type doesn't match aggregate type");
5545
5546 I = InsertValueInst::Create(Agg, Val, INSERTVALIdx);
5547 ResTypeID = AggTypeID;
5548 InstructionList.push_back(I);
5549 break;
5550 }
5551
5552 case bitc::FUNC_CODE_INST_SELECT: { // SELECT: [opval, ty, opval, opval]
5553 // obsolete form of select
5554 // handles select i1 ... in old bitcode
5555 unsigned OpNum = 0;
5557 unsigned TypeID;
5558 Type *CondType = Type::getInt1Ty(Context);
5559 if (getValueTypePair(Record, OpNum, NextValueNo, TrueVal, TypeID,
5560 CurBB) ||
5561 popValue(Record, OpNum, NextValueNo, TrueVal->getType(), TypeID,
5562 FalseVal, CurBB) ||
5563 popValue(Record, OpNum, NextValueNo, CondType,
5564 getVirtualTypeID(CondType), Cond, CurBB))
5565 return error("Invalid select record");
5566
5567 I = SelectInst::Create(Cond, TrueVal, FalseVal);
5568 ResTypeID = TypeID;
5569 InstructionList.push_back(I);
5570 break;
5571 }
5572
5573 case bitc::FUNC_CODE_INST_VSELECT: {// VSELECT: [ty,opval,opval,predty,pred]
5574 // new form of select
5575 // handles select i1 or select [N x i1]
5576 unsigned OpNum = 0;
5578 unsigned ValTypeID, CondTypeID;
5579 if (getValueTypePair(Record, OpNum, NextValueNo, TrueVal, ValTypeID,
5580 CurBB) ||
5581 popValue(Record, OpNum, NextValueNo, TrueVal->getType(), ValTypeID,
5582 FalseVal, CurBB) ||
5583 getValueTypePair(Record, OpNum, NextValueNo, Cond, CondTypeID, CurBB))
5584 return error("Invalid vector select record");
5585
5586 // select condition can be either i1 or [N x i1]
5587 if (VectorType* vector_type =
5588 dyn_cast<VectorType>(Cond->getType())) {
5589 // expect <n x i1>
5590 if (vector_type->getElementType() != Type::getInt1Ty(Context))
5591 return error("Invalid type for value");
5592 } else {
5593 // expect i1
5594 if (Cond->getType() != Type::getInt1Ty(Context))
5595 return error("Invalid type for value");
5596 }
5597
5598 I = SelectInst::Create(Cond, TrueVal, FalseVal);
5599 ResTypeID = ValTypeID;
5600 InstructionList.push_back(I);
5601 if (OpNum < Record.size() && isa<FPMathOperator>(I)) {
5602 FastMathFlags FMF = getDecodedFastMathFlags(Record[OpNum]);
5603 if (FMF.any())
5604 I->setFastMathFlags(FMF);
5605 }
5606 break;
5607 }
5608
5609 case bitc::FUNC_CODE_INST_EXTRACTELT: { // EXTRACTELT: [opty, opval, opval]
5610 unsigned OpNum = 0;
5611 Value *Vec, *Idx;
5612 unsigned VecTypeID, IdxTypeID;
5613 if (getValueTypePair(Record, OpNum, NextValueNo, Vec, VecTypeID, CurBB) ||
5614 getValueTypePair(Record, OpNum, NextValueNo, Idx, IdxTypeID, CurBB))
5615 return error("Invalid extractelement record");
5616 if (!Vec->getType()->isVectorTy())
5617 return error("Invalid type for value");
5618 I = ExtractElementInst::Create(Vec, Idx);
5619 ResTypeID = getContainedTypeID(VecTypeID);
5620 InstructionList.push_back(I);
5621 break;
5622 }
5623
5624 case bitc::FUNC_CODE_INST_INSERTELT: { // INSERTELT: [ty, opval,opval,opval]
5625 unsigned OpNum = 0;
5626 Value *Vec, *Elt, *Idx;
5627 unsigned VecTypeID, IdxTypeID;
5628 if (getValueTypePair(Record, OpNum, NextValueNo, Vec, VecTypeID, CurBB))
5629 return error("Invalid insertelement record");
5630 if (!Vec->getType()->isVectorTy())
5631 return error("Invalid type for value");
5632 if (popValue(Record, OpNum, NextValueNo,
5633 cast<VectorType>(Vec->getType())->getElementType(),
5634 getContainedTypeID(VecTypeID), Elt, CurBB) ||
5635 getValueTypePair(Record, OpNum, NextValueNo, Idx, IdxTypeID, CurBB))
5636 return error("Invalid insert element record");
5637 I = InsertElementInst::Create(Vec, Elt, Idx);
5638 ResTypeID = VecTypeID;
5639 InstructionList.push_back(I);
5640 break;
5641 }
5642
5643 case bitc::FUNC_CODE_INST_SHUFFLEVEC: {// SHUFFLEVEC: [opval,ty,opval,opval]
5644 unsigned OpNum = 0;
5645 Value *Vec1, *Vec2, *Mask;
5646 unsigned Vec1TypeID;
5647 if (getValueTypePair(Record, OpNum, NextValueNo, Vec1, Vec1TypeID,
5648 CurBB) ||
5649 popValue(Record, OpNum, NextValueNo, Vec1->getType(), Vec1TypeID,
5650 Vec2, CurBB))
5651 return error("Invalid shufflevector record");
5652
5653 unsigned MaskTypeID;
5654 if (getValueTypePair(Record, OpNum, NextValueNo, Mask, MaskTypeID, CurBB))
5655 return error("Invalid shufflevector record");
5656 if (!Vec1->getType()->isVectorTy() || !Vec2->getType()->isVectorTy())
5657 return error("Invalid type for value");
5658
5659 I = new ShuffleVectorInst(Vec1, Vec2, Mask);
5660 ResTypeID =
5661 getVirtualTypeID(I->getType(), getContainedTypeID(Vec1TypeID));
5662 InstructionList.push_back(I);
5663 break;
5664 }
5665
5666 case bitc::FUNC_CODE_INST_CMP: // CMP: [opty, opval, opval, pred]
5667 // Old form of ICmp/FCmp returning bool
5668 // Existed to differentiate between icmp/fcmp and vicmp/vfcmp which were
5669 // both legal on vectors but had different behaviour.
5670 case bitc::FUNC_CODE_INST_CMP2: { // CMP2: [opty, opval, opval, pred]
5671 // FCmp/ICmp returning bool or vector of bool
5672
5673 unsigned OpNum = 0;
5674 Value *LHS, *RHS;
5675 unsigned LHSTypeID;
5676 if (getValueTypePair(Record, OpNum, NextValueNo, LHS, LHSTypeID, CurBB) ||
5677 popValue(Record, OpNum, NextValueNo, LHS->getType(), LHSTypeID, RHS,
5678 CurBB))
5679 return error("Invalid comparison record");
5680
5681 if (OpNum >= Record.size())
5682 return error(
5683 "Invalid record: operand number exceeded available operands");
5684
5685 CmpInst::Predicate PredVal = CmpInst::Predicate(Record[OpNum]);
5686 bool IsFP = LHS->getType()->isFPOrFPVectorTy();
5687 FastMathFlags FMF;
5688 if (IsFP && Record.size() > OpNum+1)
5689 FMF = getDecodedFastMathFlags(Record[++OpNum]);
5690
5691 if (IsFP) {
5692 if (!CmpInst::isFPPredicate(PredVal))
5693 return error("Invalid fcmp predicate");
5694 I = new FCmpInst(PredVal, LHS, RHS);
5695 } else {
5696 if (!CmpInst::isIntPredicate(PredVal))
5697 return error("Invalid icmp predicate");
5698 I = new ICmpInst(PredVal, LHS, RHS);
5699 if (Record.size() > OpNum + 1 &&
5700 (Record[++OpNum] & (1 << bitc::ICMP_SAME_SIGN)))
5701 cast<ICmpInst>(I)->setSameSign();
5702 }
5703
5704 if (OpNum + 1 != Record.size())
5705 return error("Invalid comparison record");
5706
5707 ResTypeID = getVirtualTypeID(I->getType()->getScalarType());
5708 if (LHS->getType()->isVectorTy())
5709 ResTypeID = getVirtualTypeID(I->getType(), ResTypeID);
5710
5711 if (FMF.any())
5712 I->setFastMathFlags(FMF);
5713 InstructionList.push_back(I);
5714 break;
5715 }
5716
5717 case bitc::FUNC_CODE_INST_RET: // RET: [opty,opval<optional>]
5718 {
5719 unsigned Size = Record.size();
5720 if (Size == 0) {
5722 InstructionList.push_back(I);
5723 break;
5724 }
5725
5726 unsigned OpNum = 0;
5727 Value *Op = nullptr;
5728 unsigned OpTypeID;
5729 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
5730 return error("Invalid ret record");
5731 if (OpNum != Record.size())
5732 return error("Invalid ret record");
5733
5735 InstructionList.push_back(I);
5736 break;
5737 }
5738 case bitc::FUNC_CODE_INST_BR: { // BR: [bb#, bb#, opval] or [bb#]
5739 if (Record.size() != 1 && Record.size() != 3)
5740 return error("Invalid br record");
5741 BasicBlock *TrueDest = getBasicBlock(Record[0]);
5742 if (!TrueDest)
5743 return error("Invalid br record");
5744
5745 if (Record.size() == 1) {
5746 I = UncondBrInst::Create(TrueDest);
5747 InstructionList.push_back(I);
5748 }
5749 else {
5750 BasicBlock *FalseDest = getBasicBlock(Record[1]);
5751 Type *CondType = Type::getInt1Ty(Context);
5752 Value *Cond = getValue(Record, 2, NextValueNo, CondType,
5753 getVirtualTypeID(CondType), CurBB);
5754 if (!FalseDest || !Cond)
5755 return error("Invalid br record");
5756 I = CondBrInst::Create(Cond, TrueDest, FalseDest);
5757 InstructionList.push_back(I);
5758 }
5759 break;
5760 }
5761 case bitc::FUNC_CODE_INST_CLEANUPRET: { // CLEANUPRET: [val] or [val,bb#]
5762 if (Record.size() != 1 && Record.size() != 2)
5763 return error("Invalid cleanupret record");
5764 unsigned Idx = 0;
5765 Type *TokenTy = Type::getTokenTy(Context);
5766 Value *CleanupPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5767 getVirtualTypeID(TokenTy), CurBB);
5768 if (!CleanupPad)
5769 return error("Invalid cleanupret record");
5770 BasicBlock *UnwindDest = nullptr;
5771 if (Record.size() == 2) {
5772 UnwindDest = getBasicBlock(Record[Idx++]);
5773 if (!UnwindDest)
5774 return error("Invalid cleanupret record");
5775 }
5776
5777 I = CleanupReturnInst::Create(CleanupPad, UnwindDest);
5778 InstructionList.push_back(I);
5779 break;
5780 }
5781 case bitc::FUNC_CODE_INST_CATCHRET: { // CATCHRET: [val,bb#]
5782 if (Record.size() != 2)
5783 return error("Invalid catchret record");
5784 unsigned Idx = 0;
5785 Type *TokenTy = Type::getTokenTy(Context);
5786 Value *CatchPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5787 getVirtualTypeID(TokenTy), CurBB);
5788 if (!CatchPad)
5789 return error("Invalid catchret record");
5790 BasicBlock *BB = getBasicBlock(Record[Idx++]);
5791 if (!BB)
5792 return error("Invalid catchret record");
5793
5794 I = CatchReturnInst::Create(CatchPad, BB);
5795 InstructionList.push_back(I);
5796 break;
5797 }
5798 case bitc::FUNC_CODE_INST_CATCHSWITCH: { // CATCHSWITCH: [tok,num,(bb)*,bb?]
5799 // We must have, at minimum, the outer scope and the number of arguments.
5800 if (Record.size() < 2)
5801 return error("Invalid catchswitch record");
5802
5803 unsigned Idx = 0;
5804
5805 Type *TokenTy = Type::getTokenTy(Context);
5806 Value *ParentPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5807 getVirtualTypeID(TokenTy), CurBB);
5808 if (!ParentPad)
5809 return error("Invalid catchswitch record");
5810
5811 unsigned NumHandlers = Record[Idx++];
5812
5814 for (unsigned Op = 0; Op != NumHandlers; ++Op) {
5815 BasicBlock *BB = getBasicBlock(Record[Idx++]);
5816 if (!BB)
5817 return error("Invalid catchswitch record");
5818 Handlers.push_back(BB);
5819 }
5820
5821 BasicBlock *UnwindDest = nullptr;
5822 if (Idx + 1 == Record.size()) {
5823 UnwindDest = getBasicBlock(Record[Idx++]);
5824 if (!UnwindDest)
5825 return error("Invalid catchswitch record");
5826 }
5827
5828 if (Record.size() != Idx)
5829 return error("Invalid catchswitch record");
5830
5831 auto *CatchSwitch =
5832 CatchSwitchInst::Create(ParentPad, UnwindDest, NumHandlers);
5833 for (BasicBlock *Handler : Handlers)
5834 CatchSwitch->addHandler(Handler);
5835 I = CatchSwitch;
5836 ResTypeID = getVirtualTypeID(I->getType());
5837 InstructionList.push_back(I);
5838 break;
5839 }
5841 case bitc::FUNC_CODE_INST_CLEANUPPAD: { // [tok,num,(ty,val)*]
5842 // We must have, at minimum, the outer scope and the number of arguments.
5843 if (Record.size() < 2)
5844 return error("Invalid catchpad/cleanuppad record");
5845
5846 unsigned Idx = 0;
5847
5848 Type *TokenTy = Type::getTokenTy(Context);
5849 Value *ParentPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5850 getVirtualTypeID(TokenTy), CurBB);
5851 if (!ParentPad)
5852 return error("Invalid catchpad/cleanuppad record");
5853
5854 unsigned NumArgOperands = Record[Idx++];
5855
5856 SmallVector<Value *, 2> Args;
5857 for (unsigned Op = 0; Op != NumArgOperands; ++Op) {
5858 Value *Val;
5859 unsigned ValTypeID;
5860 if (getValueTypePair(Record, Idx, NextValueNo, Val, ValTypeID, nullptr))
5861 return error("Invalid catchpad/cleanuppad record");
5862 Args.push_back(Val);
5863 }
5864
5865 if (Record.size() != Idx)
5866 return error("Invalid catchpad/cleanuppad record");
5867
5868 if (BitCode == bitc::FUNC_CODE_INST_CLEANUPPAD)
5869 I = CleanupPadInst::Create(ParentPad, Args);
5870 else
5871 I = CatchPadInst::Create(ParentPad, Args);
5872 ResTypeID = getVirtualTypeID(I->getType());
5873 InstructionList.push_back(I);
5874 break;
5875 }
5876 case bitc::FUNC_CODE_INST_SWITCH: { // SWITCH: [opty, op0, op1, ...]
5877 // Check magic
5878 if ((Record[0] >> 16) == SWITCH_INST_MAGIC) {
5879 // "New" SwitchInst format with case ranges. The changes to write this
5880 // format were reverted but we still recognize bitcode that uses it.
5881 // Hopefully someday we will have support for case ranges and can use
5882 // this format again.
5883
5884 unsigned OpTyID = Record[1];
5885 Type *OpTy = getTypeByID(OpTyID);
5886 unsigned ValueBitWidth = cast<IntegerType>(OpTy)->getBitWidth();
5887
5888 Value *Cond = getValue(Record, 2, NextValueNo, OpTy, OpTyID, CurBB);
5889 BasicBlock *Default = getBasicBlock(Record[3]);
5890 if (!OpTy || !Cond || !Default)
5891 return error("Invalid switch record");
5892
5893 unsigned NumCases = Record[4];
5894
5895 SwitchInst *SI = SwitchInst::Create(Cond, Default, NumCases);
5896 InstructionList.push_back(SI);
5897
5898 unsigned CurIdx = 5;
5899 for (unsigned i = 0; i != NumCases; ++i) {
5901 unsigned NumItems = Record[CurIdx++];
5902 for (unsigned ci = 0; ci != NumItems; ++ci) {
5903 bool isSingleNumber = Record[CurIdx++];
5904
5905 APInt Low;
5906 unsigned ActiveWords = 1;
5907 if (ValueBitWidth > 64)
5908 ActiveWords = Record[CurIdx++];
5909 Low = readWideAPInt(ArrayRef(&Record[CurIdx], ActiveWords),
5910 ValueBitWidth);
5911 CurIdx += ActiveWords;
5912
5913 if (!isSingleNumber) {
5914 ActiveWords = 1;
5915 if (ValueBitWidth > 64)
5916 ActiveWords = Record[CurIdx++];
5917 APInt High = readWideAPInt(ArrayRef(&Record[CurIdx], ActiveWords),
5918 ValueBitWidth);
5919 CurIdx += ActiveWords;
5920
5921 // FIXME: It is not clear whether values in the range should be
5922 // compared as signed or unsigned values. The partially
5923 // implemented changes that used this format in the past used
5924 // unsigned comparisons.
5925 for ( ; Low.ule(High); ++Low)
5926 CaseVals.push_back(ConstantInt::get(Context, Low));
5927 } else
5928 CaseVals.push_back(ConstantInt::get(Context, Low));
5929 }
5930 BasicBlock *DestBB = getBasicBlock(Record[CurIdx++]);
5931 for (ConstantInt *Cst : CaseVals)
5932 SI->addCase(Cst, DestBB);
5933 }
5934 I = SI;
5935 break;
5936 }
5937
5938 // Old SwitchInst format without case ranges.
5939
5940 if (Record.size() < 3 || (Record.size() & 1) == 0)
5941 return error("Invalid switch record");
5942 unsigned OpTyID = Record[0];
5943 Type *OpTy = getTypeByID(OpTyID);
5944 Value *Cond = getValue(Record, 1, NextValueNo, OpTy, OpTyID, CurBB);
5945 BasicBlock *Default = getBasicBlock(Record[2]);
5946 if (!OpTy || !Cond || !Default)
5947 return error("Invalid switch record");
5948 unsigned NumCases = (Record.size()-3)/2;
5949 SwitchInst *SI = SwitchInst::Create(Cond, Default, NumCases);
5950 InstructionList.push_back(SI);
5951 for (unsigned i = 0, e = NumCases; i != e; ++i) {
5952 ConstantInt *CaseVal = dyn_cast_or_null<ConstantInt>(
5953 getFnValueByID(Record[3+i*2], OpTy, OpTyID, nullptr));
5954 BasicBlock *DestBB = getBasicBlock(Record[1+3+i*2]);
5955 if (!CaseVal || !DestBB) {
5956 delete SI;
5957 return error("Invalid switch record");
5958 }
5959 SI->addCase(CaseVal, DestBB);
5960 }
5961 I = SI;
5962 break;
5963 }
5964 case bitc::FUNC_CODE_INST_INDIRECTBR: { // INDIRECTBR: [opty, op0, op1, ...]
5965 if (Record.size() < 2)
5966 return error("Invalid indirectbr record");
5967 unsigned OpTyID = Record[0];
5968 Type *OpTy = getTypeByID(OpTyID);
5969 Value *Address = getValue(Record, 1, NextValueNo, OpTy, OpTyID, CurBB);
5970 if (!OpTy || !Address)
5971 return error("Invalid indirectbr record");
5972 unsigned NumDests = Record.size()-2;
5973 IndirectBrInst *IBI = IndirectBrInst::Create(Address, NumDests);
5974 InstructionList.push_back(IBI);
5975 for (unsigned i = 0, e = NumDests; i != e; ++i) {
5976 if (BasicBlock *DestBB = getBasicBlock(Record[2+i])) {
5977 IBI->addDestination(DestBB);
5978 } else {
5979 delete IBI;
5980 return error("Invalid indirectbr record");
5981 }
5982 }
5983 I = IBI;
5984 break;
5985 }
5986
5988 // INVOKE: [attrs, cc, normBB, unwindBB, fnty, op0,op1,op2, ...]
5989 if (Record.size() < 4)
5990 return error("Invalid invoke record");
5991 unsigned OpNum = 0;
5992 AttributeList PAL = getAttributes(Record[OpNum++]);
5993 unsigned CCInfo = Record[OpNum++];
5994 BasicBlock *NormalBB = getBasicBlock(Record[OpNum++]);
5995 BasicBlock *UnwindBB = getBasicBlock(Record[OpNum++]);
5996
5997 unsigned FTyID = InvalidTypeID;
5998 FunctionType *FTy = nullptr;
5999 if ((CCInfo >> 13) & 1) {
6000 FTyID = Record[OpNum++];
6001 FTy = dyn_cast<FunctionType>(getTypeByID(FTyID));
6002 if (!FTy)
6003 return error("Explicit invoke type is not a function type");
6004 }
6005
6006 Value *Callee;
6007 unsigned CalleeTypeID;
6008 if (getValueTypePair(Record, OpNum, NextValueNo, Callee, CalleeTypeID,
6009 CurBB))
6010 return error("Invalid invoke record");
6011
6012 PointerType *CalleeTy = dyn_cast<PointerType>(Callee->getType());
6013 if (!CalleeTy)
6014 return error("Callee is not a pointer");
6015 if (!FTy) {
6016 FTyID = getContainedTypeID(CalleeTypeID);
6017 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6018 if (!FTy)
6019 return error("Callee is not of pointer to function type");
6020 }
6021 if (Record.size() < FTy->getNumParams() + OpNum)
6022 return error("Insufficient operands to call");
6023
6024 SmallVector<Value*, 16> Ops;
6025 SmallVector<unsigned, 16> ArgTyIDs;
6026 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
6027 unsigned ArgTyID = getContainedTypeID(FTyID, i + 1);
6028 Ops.push_back(getValue(Record, OpNum, NextValueNo, FTy->getParamType(i),
6029 ArgTyID, CurBB));
6030 ArgTyIDs.push_back(ArgTyID);
6031 if (!Ops.back())
6032 return error("Invalid invoke record");
6033 }
6034
6035 if (!FTy->isVarArg()) {
6036 if (Record.size() != OpNum)
6037 return error("Invalid invoke record");
6038 } else {
6039 // Read type/value pairs for varargs params.
6040 while (OpNum != Record.size()) {
6041 Value *Op;
6042 unsigned OpTypeID;
6043 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
6044 return error("Invalid invoke record");
6045 Ops.push_back(Op);
6046 ArgTyIDs.push_back(OpTypeID);
6047 }
6048 }
6049
6050 // Upgrade the bundles if needed.
6051 if (!OperandBundles.empty())
6052 UpgradeOperandBundles(OperandBundles);
6053
6054 I = InvokeInst::Create(FTy, Callee, NormalBB, UnwindBB, Ops,
6055 OperandBundles);
6056 ResTypeID = getContainedTypeID(FTyID);
6057 OperandBundles.clear();
6058 InstructionList.push_back(I);
6059 cast<InvokeInst>(I)->setCallingConv(
6060 static_cast<CallingConv::ID>(CallingConv::MaxID & CCInfo));
6061 cast<InvokeInst>(I)->setAttributes(PAL);
6062 if (Error Err = propagateAttributeTypes(cast<CallBase>(I), ArgTyIDs)) {
6063 I->deleteValue();
6064 return Err;
6065 }
6066
6067 break;
6068 }
6069 case bitc::FUNC_CODE_INST_RESUME: { // RESUME: [opval]
6070 unsigned Idx = 0;
6071 Value *Val = nullptr;
6072 unsigned ValTypeID;
6073 if (getValueTypePair(Record, Idx, NextValueNo, Val, ValTypeID, CurBB))
6074 return error("Invalid resume record");
6075 I = ResumeInst::Create(Val);
6076 InstructionList.push_back(I);
6077 break;
6078 }
6080 // CALLBR: [attr, cc, norm, transfs, fty, fnid, args]
6081 unsigned OpNum = 0;
6082 AttributeList PAL = getAttributes(Record[OpNum++]);
6083 unsigned CCInfo = Record[OpNum++];
6084
6085 BasicBlock *DefaultDest = getBasicBlock(Record[OpNum++]);
6086 unsigned NumIndirectDests = Record[OpNum++];
6087 SmallVector<BasicBlock *, 16> IndirectDests;
6088 for (unsigned i = 0, e = NumIndirectDests; i != e; ++i)
6089 IndirectDests.push_back(getBasicBlock(Record[OpNum++]));
6090
6091 unsigned FTyID = InvalidTypeID;
6092 FunctionType *FTy = nullptr;
6093 if ((CCInfo >> bitc::CALL_EXPLICIT_TYPE) & 1) {
6094 FTyID = Record[OpNum++];
6095 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6096 if (!FTy)
6097 return error("Explicit call type is not a function type");
6098 }
6099
6100 Value *Callee;
6101 unsigned CalleeTypeID;
6102 if (getValueTypePair(Record, OpNum, NextValueNo, Callee, CalleeTypeID,
6103 CurBB))
6104 return error("Invalid callbr record");
6105
6106 PointerType *OpTy = dyn_cast<PointerType>(Callee->getType());
6107 if (!OpTy)
6108 return error("Callee is not a pointer type");
6109 if (!FTy) {
6110 FTyID = getContainedTypeID(CalleeTypeID);
6111 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6112 if (!FTy)
6113 return error("Callee is not of pointer to function type");
6114 }
6115 if (Record.size() < FTy->getNumParams() + OpNum)
6116 return error("Insufficient operands to call");
6117
6118 SmallVector<Value*, 16> Args;
6119 SmallVector<unsigned, 16> ArgTyIDs;
6120 // Read the fixed params.
6121 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
6122 Value *Arg;
6123 unsigned ArgTyID = getContainedTypeID(FTyID, i + 1);
6124 if (FTy->getParamType(i)->isLabelTy())
6125 Arg = getBasicBlock(Record[OpNum]);
6126 else
6127 Arg = getValue(Record, OpNum, NextValueNo, FTy->getParamType(i),
6128 ArgTyID, CurBB);
6129 if (!Arg)
6130 return error("Invalid callbr record");
6131 Args.push_back(Arg);
6132 ArgTyIDs.push_back(ArgTyID);
6133 }
6134
6135 // Read type/value pairs for varargs params.
6136 if (!FTy->isVarArg()) {
6137 if (OpNum != Record.size())
6138 return error("Invalid callbr record");
6139 } else {
6140 while (OpNum != Record.size()) {
6141 Value *Op;
6142 unsigned OpTypeID;
6143 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
6144 return error("Invalid callbr record");
6145 Args.push_back(Op);
6146 ArgTyIDs.push_back(OpTypeID);
6147 }
6148 }
6149
6150 // Upgrade the bundles if needed.
6151 if (!OperandBundles.empty())
6152 UpgradeOperandBundles(OperandBundles);
6153
6154 if (auto *IA = dyn_cast<InlineAsm>(Callee)) {
6155 InlineAsm::ConstraintInfoVector ConstraintInfo = IA->ParseConstraints();
6156 auto IsLabelConstraint = [](const InlineAsm::ConstraintInfo &CI) {
6157 return CI.Type == InlineAsm::isLabel;
6158 };
6159 if (none_of(ConstraintInfo, IsLabelConstraint)) {
6160 // Upgrade explicit blockaddress arguments to label constraints.
6161 // Verify that the last arguments are blockaddress arguments that
6162 // match the indirect destinations. Clang always generates callbr
6163 // in this form. We could support reordering with more effort.
6164 unsigned FirstBlockArg = Args.size() - IndirectDests.size();
6165 for (unsigned ArgNo = FirstBlockArg; ArgNo < Args.size(); ++ArgNo) {
6166 unsigned LabelNo = ArgNo - FirstBlockArg;
6167 auto *BA = dyn_cast<BlockAddress>(Args[ArgNo]);
6168 if (!BA || BA->getFunction() != F ||
6169 LabelNo > IndirectDests.size() ||
6170 BA->getBasicBlock() != IndirectDests[LabelNo])
6171 return error("callbr argument does not match indirect dest");
6172 }
6173
6174 // Remove blockaddress arguments.
6175 Args.erase(Args.begin() + FirstBlockArg, Args.end());
6176 ArgTyIDs.erase(ArgTyIDs.begin() + FirstBlockArg, ArgTyIDs.end());
6177
6178 // Recreate the function type with less arguments.
6179 SmallVector<Type *> ArgTys;
6180 for (Value *Arg : Args)
6181 ArgTys.push_back(Arg->getType());
6182 FTy =
6183 FunctionType::get(FTy->getReturnType(), ArgTys, FTy->isVarArg());
6184
6185 // Update constraint string to use label constraints.
6186 std::string Constraints = IA->getConstraintString().str();
6187 unsigned ArgNo = 0;
6188 size_t Pos = 0;
6189 for (const auto &CI : ConstraintInfo) {
6190 if (CI.hasArg()) {
6191 if (ArgNo >= FirstBlockArg)
6192 Constraints.insert(Pos, "!");
6193 ++ArgNo;
6194 }
6195
6196 // Go to next constraint in string.
6197 Pos = Constraints.find(',', Pos);
6198 if (Pos == std::string::npos)
6199 break;
6200 ++Pos;
6201 }
6202
6203 Callee = InlineAsm::get(FTy, IA->getAsmString(), Constraints,
6204 IA->hasSideEffects(), IA->isAlignStack(),
6205 IA->getDialect(), IA->canThrow());
6206 }
6207 }
6208
6209 I = CallBrInst::Create(FTy, Callee, DefaultDest, IndirectDests, Args,
6210 OperandBundles);
6211 ResTypeID = getContainedTypeID(FTyID);
6212 OperandBundles.clear();
6213 InstructionList.push_back(I);
6214 cast<CallBrInst>(I)->setCallingConv(
6215 static_cast<CallingConv::ID>((0x7ff & CCInfo) >> bitc::CALL_CCONV));
6216 cast<CallBrInst>(I)->setAttributes(PAL);
6217 if (Error Err = propagateAttributeTypes(cast<CallBase>(I), ArgTyIDs)) {
6218 I->deleteValue();
6219 return Err;
6220 }
6221 break;
6222 }
6223 case bitc::FUNC_CODE_INST_UNREACHABLE: // UNREACHABLE
6224 I = new UnreachableInst(Context);
6225 InstructionList.push_back(I);
6226 break;
6227 case bitc::FUNC_CODE_INST_PHI: { // PHI: [ty, val0,bb0, ...]
6228 if (Record.empty())
6229 return error("Invalid phi record");
6230 // The first record specifies the type.
6231 unsigned TyID = Record[0];
6232 Type *Ty = getTypeByID(TyID);
6233 if (!Ty)
6234 return error("Invalid phi record");
6235
6236 // Phi arguments are pairs of records of [value, basic block].
6237 // There is an optional final record for fast-math-flags if this phi has a
6238 // floating-point type.
6239 size_t NumArgs = (Record.size() - 1) / 2;
6240 PHINode *PN = PHINode::Create(Ty, NumArgs);
6241 if ((Record.size() - 1) % 2 == 1 && !isa<FPMathOperator>(PN)) {
6242 PN->deleteValue();
6243 return error("Invalid phi record");
6244 }
6245 InstructionList.push_back(PN);
6246
6247 SmallDenseMap<BasicBlock *, Value *> Args;
6248 for (unsigned i = 0; i != NumArgs; i++) {
6249 BasicBlock *BB = getBasicBlock(Record[i * 2 + 2]);
6250 if (!BB) {
6251 PN->deleteValue();
6252 return error("Invalid phi BB");
6253 }
6254
6255 // Phi nodes may contain the same predecessor multiple times, in which
6256 // case the incoming value must be identical. Directly reuse the already
6257 // seen value here, to avoid expanding a constant expression multiple
6258 // times.
6259 auto It = Args.find(BB);
6260 BasicBlock *EdgeBB = ConstExprEdgeBBs.lookup({BB, CurBB});
6261 if (It != Args.end()) {
6262 // If this predecessor was also replaced with a constexpr basic
6263 // block, it must be de-duplicated.
6264 if (!EdgeBB) {
6265 PN->addIncoming(It->second, BB);
6266 }
6267 continue;
6268 }
6269
6270 // If there already is a block for this edge (from a different phi),
6271 // use it.
6272 if (!EdgeBB) {
6273 // Otherwise, use a temporary block (that we will discard if it
6274 // turns out to be unnecessary).
6275 if (!PhiConstExprBB)
6276 PhiConstExprBB = BasicBlock::Create(Context, "phi.constexpr", F);
6277 EdgeBB = PhiConstExprBB;
6278 }
6279
6280 // With the new function encoding, it is possible that operands have
6281 // negative IDs (for forward references). Use a signed VBR
6282 // representation to keep the encoding small.
6283 Value *V;
6284 if (UseRelativeIDs)
6285 V = getValueSigned(Record, i * 2 + 1, NextValueNo, Ty, TyID, EdgeBB);
6286 else
6287 V = getValue(Record, i * 2 + 1, NextValueNo, Ty, TyID, EdgeBB);
6288 if (!V) {
6289 PN->deleteValue();
6290 PhiConstExprBB->eraseFromParent();
6291 return error("Invalid phi record");
6292 }
6293
6294 if (EdgeBB == PhiConstExprBB && !EdgeBB->empty()) {
6295 ConstExprEdgeBBs.insert({{BB, CurBB}, EdgeBB});
6296 PhiConstExprBB = nullptr;
6297 }
6298 PN->addIncoming(V, BB);
6299 Args.insert({BB, V});
6300 }
6301 I = PN;
6302 ResTypeID = TyID;
6303
6304 // If there are an even number of records, the final record must be FMF.
6305 if (Record.size() % 2 == 0) {
6306 assert(isa<FPMathOperator>(I) && "Unexpected phi type");
6307 FastMathFlags FMF = getDecodedFastMathFlags(Record[Record.size() - 1]);
6308 if (FMF.any())
6309 I->setFastMathFlags(FMF);
6310 }
6311
6312 break;
6313 }
6314
6317 // LANDINGPAD: [ty, val, val, num, (id0,val0 ...)?]
6318 unsigned Idx = 0;
6319 if (BitCode == bitc::FUNC_CODE_INST_LANDINGPAD) {
6320 if (Record.size() < 3)
6321 return error("Invalid landingpad record");
6322 } else {
6324 if (Record.size() < 4)
6325 return error("Invalid landingpad record");
6326 }
6327 ResTypeID = Record[Idx++];
6328 Type *Ty = getTypeByID(ResTypeID);
6329 if (!Ty)
6330 return error("Invalid landingpad record");
6331 if (BitCode == bitc::FUNC_CODE_INST_LANDINGPAD_OLD) {
6332 Value *PersFn = nullptr;
6333 unsigned PersFnTypeID;
6334 if (getValueTypePair(Record, Idx, NextValueNo, PersFn, PersFnTypeID,
6335 nullptr))
6336 return error("Invalid landingpad record");
6337
6338 if (!F->hasPersonalityFn())
6339 F->setPersonalityFn(cast<Constant>(PersFn));
6340 else if (F->getPersonalityFn() != cast<Constant>(PersFn))
6341 return error("Personality function mismatch");
6342 }
6343
6344 bool IsCleanup = !!Record[Idx++];
6345 unsigned NumClauses = Record[Idx++];
6346 LandingPadInst *LP = LandingPadInst::Create(Ty, NumClauses);
6347 LP->setCleanup(IsCleanup);
6348 for (unsigned J = 0; J != NumClauses; ++J) {
6350 LandingPadInst::ClauseType(Record[Idx++]); (void)CT;
6351 Value *Val;
6352 unsigned ValTypeID;
6353
6354 if (getValueTypePair(Record, Idx, NextValueNo, Val, ValTypeID,
6355 nullptr)) {
6356 delete LP;
6357 return error("Invalid landingpad record");
6358 }
6359
6361 !isa<ArrayType>(Val->getType())) &&
6362 "Catch clause has a invalid type!");
6364 isa<ArrayType>(Val->getType())) &&
6365 "Filter clause has invalid type!");
6366 LP->addClause(cast<Constant>(Val));
6367 }
6368
6369 I = LP;
6370 InstructionList.push_back(I);
6371 break;
6372 }
6373
6374 case bitc::FUNC_CODE_INST_ALLOCA: { // ALLOCA: [instty, opty, op, align]
6375 if (Record.size() != 4 && Record.size() != 5)
6376 return error("Invalid alloca record");
6377 using APV = AllocaPackedValues;
6378 const uint64_t Rec = Record[3];
6379 const bool InAlloca = Bitfield::get<APV::UsedWithInAlloca>(Rec);
6380 const bool SwiftError = Bitfield::get<APV::SwiftError>(Rec);
6381 unsigned TyID = Record[0];
6382 Type *Ty = getTypeByID(TyID);
6384 TyID = getContainedTypeID(TyID);
6385 Ty = getTypeByID(TyID);
6386 if (!Ty)
6387 return error("Missing element type for old-style alloca");
6388 }
6389 unsigned OpTyID = Record[1];
6390 Type *OpTy = getTypeByID(OpTyID);
6391 Value *Size = getFnValueByID(Record[2], OpTy, OpTyID, CurBB);
6392 MaybeAlign Align;
6393 uint64_t AlignExp =
6395 (Bitfield::get<APV::AlignUpper>(Rec) << APV::AlignLower::Bits);
6396 if (Error Err = parseAlignmentValue(AlignExp, Align)) {
6397 return Err;
6398 }
6399 if (!Ty || !Size)
6400 return error("Invalid alloca record");
6401
6402 const DataLayout &DL = TheModule->getDataLayout();
6403 unsigned AS = Record.size() == 5 ? Record[4] : DL.getAllocaAddrSpace();
6404
6405 SmallPtrSet<Type *, 4> Visited;
6406 if (!Align && !Ty->isSized(&Visited))
6407 return error("alloca of unsized type");
6408 if (!Align)
6409 Align = DL.getPrefTypeAlign(Ty);
6410
6411 if (!Size->getType()->isIntegerTy())
6412 return error("alloca element count must have integer type");
6413
6414 AllocaInst *AI = new AllocaInst(Ty, AS, Size, *Align);
6415 AI->setUsedWithInAlloca(InAlloca);
6416 AI->setSwiftError(SwiftError);
6417 I = AI;
6418 ResTypeID = getVirtualTypeID(AI->getType(), TyID);
6419 InstructionList.push_back(I);
6420 break;
6421 }
6422 case bitc::FUNC_CODE_INST_LOAD: { // LOAD: [opty, op, align, vol]
6423 unsigned OpNum = 0;
6424 Value *Op;
6425 unsigned OpTypeID;
6426 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB) ||
6427 (OpNum + 2 != Record.size() && OpNum + 3 != Record.size()))
6428 return error("Invalid load record");
6429
6430 if (!isa<PointerType>(Op->getType()))
6431 return error("Load operand is not a pointer type");
6432
6433 Type *Ty = nullptr;
6434 if (OpNum + 3 == Record.size()) {
6435 ResTypeID = Record[OpNum++];
6436 Ty = getTypeByID(ResTypeID);
6437 } else {
6438 ResTypeID = getContainedTypeID(OpTypeID);
6439 Ty = getTypeByID(ResTypeID);
6440 }
6441
6442 if (!Ty)
6443 return error("Missing load type");
6444
6445 if (Error Err = typeCheckLoadStoreInst(Ty, Op->getType()))
6446 return Err;
6447
6448 MaybeAlign Align;
6449 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6450 return Err;
6451 SmallPtrSet<Type *, 4> Visited;
6452 if (!Align && !Ty->isSized(&Visited))
6453 return error("load of unsized type");
6454 if (!Align)
6455 Align = TheModule->getDataLayout().getABITypeAlign(Ty);
6456 I = new LoadInst(Ty, Op, "", Record[OpNum + 1], *Align);
6457 InstructionList.push_back(I);
6458 break;
6459 }
6461 // LOADATOMIC: [opty, op, align, vol, ordering, ssid, elementwise?]
6462 unsigned OpNum = 0;
6463 Value *Op;
6464 unsigned OpTypeID;
6465 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB) ||
6466 (OpNum + 4 != Record.size() && OpNum + 5 != Record.size() &&
6467 OpNum + 6 != Record.size()))
6468 return error("Invalid load atomic record");
6469
6470 if (!isa<PointerType>(Op->getType()))
6471 return error("Load operand is not a pointer type");
6472
6473 Type *Ty = nullptr;
6474 if (Record.size() >= OpNum + 5) {
6475 ResTypeID = Record[OpNum++];
6476 Ty = getTypeByID(ResTypeID);
6477 } else {
6478 ResTypeID = getContainedTypeID(OpTypeID);
6479 Ty = getTypeByID(ResTypeID);
6480 }
6481
6482 if (!Ty)
6483 return error("Missing atomic load type");
6484
6485 if (Error Err = typeCheckLoadStoreInst(Ty, Op->getType()))
6486 return Err;
6487
6488 AtomicOrdering Ordering = getDecodedOrdering(Record[OpNum + 2]);
6489 if (Ordering == AtomicOrdering::NotAtomic ||
6490 Ordering == AtomicOrdering::Release ||
6491 Ordering == AtomicOrdering::AcquireRelease)
6492 return error("Invalid load atomic record");
6493 if (Ordering != AtomicOrdering::NotAtomic && Record[OpNum] == 0)
6494 return error("Invalid load atomic record");
6495 SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 3]);
6496 bool IsElementwise = Record.size() > OpNum + 4 && Record[OpNum + 4];
6497
6498 MaybeAlign Align;
6499 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6500 return Err;
6501 if (!Align)
6502 return error("Alignment missing from atomic load");
6503 I = new LoadInst(
6504 Ty, Op, "",
6505 LoadStoreInstProperties{/*IsVolatile=*/Record[OpNum + 1] != 0, *Align,
6506 Ordering, SSID, IsElementwise},
6507 /*InsertBefore=*/nullptr);
6508 InstructionList.push_back(I);
6509 break;
6510 }
6512 case bitc::FUNC_CODE_INST_STORE_OLD: { // STORE2:[ptrty, ptr, val, align, vol]
6513 unsigned OpNum = 0;
6514 Value *Val, *Ptr;
6515 unsigned PtrTypeID, ValTypeID;
6516 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6517 return error("Invalid store record");
6518
6519 if (BitCode == bitc::FUNC_CODE_INST_STORE) {
6520 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
6521 return error("Invalid store record");
6522 } else {
6523 ValTypeID = getContainedTypeID(PtrTypeID);
6524 if (popValue(Record, OpNum, NextValueNo, getTypeByID(ValTypeID),
6525 ValTypeID, Val, CurBB))
6526 return error("Invalid store record");
6527 }
6528
6529 if (OpNum + 2 != Record.size())
6530 return error("Invalid store record");
6531
6532 if (Error Err = typeCheckLoadStoreInst(Val->getType(), Ptr->getType()))
6533 return Err;
6534 MaybeAlign Align;
6535 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6536 return Err;
6537 SmallPtrSet<Type *, 4> Visited;
6538 if (!Align && !Val->getType()->isSized(&Visited))
6539 return error("store of unsized type");
6540 if (!Align)
6541 Align = TheModule->getDataLayout().getABITypeAlign(Val->getType());
6542 I = new StoreInst(Val, Ptr, Record[OpNum + 1], *Align);
6543 InstructionList.push_back(I);
6544 break;
6545 }
6548 // STOREATOMIC: [ptrty, ptr, val, align, vol, ordering, ssid,
6549 // elementwise?]
6550 unsigned OpNum = 0;
6551 Value *Val, *Ptr;
6552 unsigned PtrTypeID, ValTypeID;
6553 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB) ||
6554 !isa<PointerType>(Ptr->getType()))
6555 return error("Invalid store atomic record");
6556 if (BitCode == bitc::FUNC_CODE_INST_STOREATOMIC) {
6557 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
6558 return error("Invalid store atomic record");
6559 } else {
6560 ValTypeID = getContainedTypeID(PtrTypeID);
6561 if (popValue(Record, OpNum, NextValueNo, getTypeByID(ValTypeID),
6562 ValTypeID, Val, CurBB))
6563 return error("Invalid store atomic record");
6564 }
6565
6566 if (OpNum + 4 != Record.size() && OpNum + 5 != Record.size())
6567 return error("Invalid store atomic record");
6568
6569 if (Error Err = typeCheckLoadStoreInst(Val->getType(), Ptr->getType()))
6570 return Err;
6571 AtomicOrdering Ordering = getDecodedOrdering(Record[OpNum + 2]);
6572 if (Ordering == AtomicOrdering::NotAtomic ||
6573 Ordering == AtomicOrdering::Acquire ||
6574 Ordering == AtomicOrdering::AcquireRelease)
6575 return error("Invalid store atomic record");
6576 SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 3]);
6577 if (Ordering != AtomicOrdering::NotAtomic && Record[OpNum] == 0)
6578 return error("Invalid store atomic record");
6579
6580 MaybeAlign Align;
6581 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6582 return Err;
6583 if (!Align)
6584 return error("Alignment missing from atomic store");
6585
6586 bool IsElementwise = Record.size() > OpNum + 4 && Record[OpNum + 4];
6587
6588 I = new StoreInst(
6589 Val, Ptr,
6590 LoadStoreInstProperties{/*IsVolatile=*/Record[OpNum + 1] != 0, *Align,
6591 Ordering, SSID, IsElementwise},
6592 /*InsertBefore=*/nullptr);
6593 InstructionList.push_back(I);
6594 break;
6595 }
6597 // CMPXCHG_OLD: [ptrty, ptr, cmp, val, vol, ordering, syncscope,
6598 // failure_ordering?, weak?]
6599 const size_t NumRecords = Record.size();
6600 unsigned OpNum = 0;
6601 Value *Ptr = nullptr;
6602 unsigned PtrTypeID;
6603 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6604 return error("Invalid cmpxchg record");
6605
6606 if (!isa<PointerType>(Ptr->getType()))
6607 return error("Cmpxchg operand is not a pointer type");
6608
6609 Value *Cmp = nullptr;
6610 unsigned CmpTypeID = getContainedTypeID(PtrTypeID);
6611 if (popValue(Record, OpNum, NextValueNo, getTypeByID(CmpTypeID),
6612 CmpTypeID, Cmp, CurBB))
6613 return error("Invalid cmpxchg record");
6614
6615 Value *New = nullptr;
6616 if (popValue(Record, OpNum, NextValueNo, Cmp->getType(), CmpTypeID,
6617 New, CurBB) ||
6618 NumRecords < OpNum + 3 || NumRecords > OpNum + 5)
6619 return error("Invalid cmpxchg record");
6620
6621 const AtomicOrdering SuccessOrdering =
6622 getDecodedOrdering(Record[OpNum + 1]);
6623 if (SuccessOrdering == AtomicOrdering::NotAtomic ||
6624 SuccessOrdering == AtomicOrdering::Unordered)
6625 return error("Invalid cmpxchg record");
6626
6627 const SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 2]);
6628
6629 if (Error Err = typeCheckLoadStoreInst(Cmp->getType(), Ptr->getType()))
6630 return Err;
6631
6632 const AtomicOrdering FailureOrdering =
6633 NumRecords < 7
6635 : getDecodedOrdering(Record[OpNum + 3]);
6636
6637 if (FailureOrdering == AtomicOrdering::NotAtomic ||
6638 FailureOrdering == AtomicOrdering::Unordered)
6639 return error("Invalid cmpxchg record");
6640
6641 const Align Alignment(
6642 TheModule->getDataLayout().getTypeStoreSize(Cmp->getType()));
6643
6644 I = new AtomicCmpXchgInst(Ptr, Cmp, New, Alignment, SuccessOrdering,
6645 FailureOrdering, SSID);
6646 cast<AtomicCmpXchgInst>(I)->setVolatile(Record[OpNum]);
6647
6648 if (NumRecords < 8) {
6649 // Before weak cmpxchgs existed, the instruction simply returned the
6650 // value loaded from memory, so bitcode files from that era will be
6651 // expecting the first component of a modern cmpxchg.
6652 I->insertInto(CurBB, CurBB->end());
6654 ResTypeID = CmpTypeID;
6655 } else {
6656 cast<AtomicCmpXchgInst>(I)->setWeak(Record[OpNum + 4]);
6657 unsigned I1TypeID = getVirtualTypeID(Type::getInt1Ty(Context));
6658 ResTypeID = getVirtualTypeID(I->getType(), {CmpTypeID, I1TypeID});
6659 }
6660
6661 InstructionList.push_back(I);
6662 break;
6663 }
6665 // CMPXCHG: [ptrty, ptr, cmp, val, vol, success_ordering, syncscope,
6666 // failure_ordering, weak, align?]
6667 const size_t NumRecords = Record.size();
6668 unsigned OpNum = 0;
6669 Value *Ptr = nullptr;
6670 unsigned PtrTypeID;
6671 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6672 return error("Invalid cmpxchg record");
6673
6674 if (!isa<PointerType>(Ptr->getType()))
6675 return error("Cmpxchg operand is not a pointer type");
6676
6677 Value *Cmp = nullptr;
6678 unsigned CmpTypeID;
6679 if (getValueTypePair(Record, OpNum, NextValueNo, Cmp, CmpTypeID, CurBB))
6680 return error("Invalid cmpxchg record");
6681
6682 Value *Val = nullptr;
6683 if (popValue(Record, OpNum, NextValueNo, Cmp->getType(), CmpTypeID, Val,
6684 CurBB))
6685 return error("Invalid cmpxchg record");
6686
6687 if (NumRecords < OpNum + 3 || NumRecords > OpNum + 6)
6688 return error("Invalid cmpxchg record");
6689
6690 const bool IsVol = Record[OpNum];
6691
6692 const AtomicOrdering SuccessOrdering =
6693 getDecodedOrdering(Record[OpNum + 1]);
6694 if (!AtomicCmpXchgInst::isValidSuccessOrdering(SuccessOrdering))
6695 return error("Invalid cmpxchg success ordering");
6696
6697 const SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 2]);
6698
6699 if (Error Err = typeCheckLoadStoreInst(Cmp->getType(), Ptr->getType()))
6700 return Err;
6701
6702 const AtomicOrdering FailureOrdering =
6703 getDecodedOrdering(Record[OpNum + 3]);
6704 if (!AtomicCmpXchgInst::isValidFailureOrdering(FailureOrdering))
6705 return error("Invalid cmpxchg failure ordering");
6706
6707 const bool IsWeak = Record[OpNum + 4];
6708
6709 MaybeAlign Alignment;
6710
6711 if (NumRecords == (OpNum + 6)) {
6712 if (Error Err = parseAlignmentValue(Record[OpNum + 5], Alignment))
6713 return Err;
6714 }
6715 if (!Alignment)
6716 Alignment =
6717 Align(TheModule->getDataLayout().getTypeStoreSize(Cmp->getType()));
6718
6719 I = new AtomicCmpXchgInst(Ptr, Cmp, Val, *Alignment, SuccessOrdering,
6720 FailureOrdering, SSID);
6721 cast<AtomicCmpXchgInst>(I)->setVolatile(IsVol);
6722 cast<AtomicCmpXchgInst>(I)->setWeak(IsWeak);
6723
6724 unsigned I1TypeID = getVirtualTypeID(Type::getInt1Ty(Context));
6725 ResTypeID = getVirtualTypeID(I->getType(), {CmpTypeID, I1TypeID});
6726
6727 InstructionList.push_back(I);
6728 break;
6729 }
6732 // ATOMICRMW_OLD: [ptrty, ptr, val, op, vol, ordering, ssid, align?]
6733 // ATOMICRMW: [ptrty, ptr, valty, val, op, vol, ordering, ssid, align?]
6734 const size_t NumRecords = Record.size();
6735 unsigned OpNum = 0;
6736
6737 Value *Ptr = nullptr;
6738 unsigned PtrTypeID;
6739 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6740 return error("Invalid atomicrmw record");
6741
6742 if (!isa<PointerType>(Ptr->getType()))
6743 return error("Invalid atomicrmw record");
6744
6745 Value *Val = nullptr;
6746 unsigned ValTypeID = InvalidTypeID;
6747 if (BitCode == bitc::FUNC_CODE_INST_ATOMICRMW_OLD) {
6748 ValTypeID = getContainedTypeID(PtrTypeID);
6749 if (popValue(Record, OpNum, NextValueNo,
6750 getTypeByID(ValTypeID), ValTypeID, Val, CurBB))
6751 return error("Invalid atomicrmw record");
6752 } else {
6753 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
6754 return error("Invalid atomicrmw record");
6755 }
6756
6757 if (!(NumRecords == (OpNum + 4) || NumRecords == (OpNum + 5)))
6758 return error("Invalid atomicrmw record");
6759
6760 bool IsElementwise = false;
6762 getDecodedRMWOperation(Record[OpNum], IsElementwise);
6765 return error("Invalid atomicrmw record");
6766
6767 const bool IsVol = Record[OpNum + 1];
6768
6769 const AtomicOrdering Ordering = getDecodedOrdering(Record[OpNum + 2]);
6770 if (Ordering == AtomicOrdering::NotAtomic ||
6771 Ordering == AtomicOrdering::Unordered)
6772 return error("Invalid atomicrmw record");
6773
6774 const SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 3]);
6775
6776 MaybeAlign Alignment;
6777
6778 if (NumRecords == (OpNum + 5)) {
6779 if (Error Err = parseAlignmentValue(Record[OpNum + 4], Alignment))
6780 return Err;
6781 }
6782
6783 if (!Alignment)
6784 Alignment =
6785 Align(TheModule->getDataLayout().getTypeStoreSize(Val->getType()));
6786
6787 I = new AtomicRMWInst(Operation, Ptr, Val, *Alignment, Ordering, SSID,
6788 IsElementwise);
6789 ResTypeID = ValTypeID;
6790 cast<AtomicRMWInst>(I)->setVolatile(IsVol);
6791
6792 InstructionList.push_back(I);
6793 break;
6794 }
6795 case bitc::FUNC_CODE_INST_FENCE: { // FENCE:[ordering, ssid]
6796 if (2 != Record.size())
6797 return error("Invalid fence record");
6799 if (Ordering == AtomicOrdering::NotAtomic ||
6800 Ordering == AtomicOrdering::Unordered ||
6801 Ordering == AtomicOrdering::Monotonic)
6802 return error("Invalid fence record");
6803 SyncScope::ID SSID = getDecodedSyncScopeID(Record[1]);
6804 I = new FenceInst(Context, Ordering, SSID);
6805 InstructionList.push_back(I);
6806 break;
6807 }
6809 // DbgLabelRecords are placed after the Instructions that they are
6810 // attached to.
6811 SeenDebugRecord = true;
6812 Instruction *Inst = getLastInstruction();
6813 if (!Inst)
6814 return error("Invalid dbg record: missing instruction");
6815 DILocation *DIL = cast<DILocation>(getFnMetadataByID(Record[0]));
6816 DILabel *Label = cast<DILabel>(getFnMetadataByID(Record[1]));
6817 Inst->getParent()->insertDbgRecordBefore(
6818 new DbgLabelRecord(Label, DebugLoc(DIL)), Inst->getIterator());
6819 continue; // This isn't an instruction.
6820 }
6826 // DbgVariableRecords are placed after the Instructions that they are
6827 // attached to.
6828 SeenDebugRecord = true;
6829 Instruction *Inst = getLastInstruction();
6830 if (!Inst)
6831 return error("Invalid dbg record: missing instruction");
6832
6833 // First 3 fields are common to all kinds:
6834 // DILocation, DILocalVariable, DIExpression
6835 // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE)
6836 // ..., LocationMetadata
6837 // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE - abbrev'd)
6838 // ..., Value
6839 // dbg_declare (FUNC_CODE_DEBUG_RECORD_DECLARE)
6840 // ..., LocationMetadata
6841 // dbg_declare_value (FUNC_CODE_DEBUG_RECORD_DECLARE_VALUE)
6842 // ..., LocationMetadata
6843 // dbg_assign (FUNC_CODE_DEBUG_RECORD_ASSIGN)
6844 // ..., LocationMetadata, DIAssignID, DIExpression, LocationMetadata
6845 unsigned Slot = 0;
6846 // Common fields (0-2).
6847 DILocation *DIL = cast<DILocation>(getFnMetadataByID(Record[Slot++]));
6848 DILocalVariable *Var =
6849 cast<DILocalVariable>(getFnMetadataByID(Record[Slot++]));
6850 DIExpression *Expr =
6851 cast<DIExpression>(getFnMetadataByID(Record[Slot++]));
6852
6853 // Union field (3: LocationMetadata | Value).
6854 Metadata *RawLocation = nullptr;
6856 Value *V = nullptr;
6857 unsigned TyID = 0;
6858 // We never expect to see a fwd reference value here because
6859 // use-before-defs are encoded with the standard non-abbrev record
6860 // type (they'd require encoding the type too, and they're rare). As a
6861 // result, getValueTypePair only ever increments Slot by one here (once
6862 // for the value, never twice for value and type).
6863 unsigned SlotBefore = Slot;
6864 if (getValueTypePair(Record, Slot, NextValueNo, V, TyID, CurBB))
6865 return error("Invalid dbg record: invalid value");
6866 (void)SlotBefore;
6867 assert((SlotBefore == Slot - 1) && "unexpected fwd ref");
6868 RawLocation = ValueAsMetadata::get(V);
6869 } else {
6870 RawLocation = getFnMetadataByID(Record[Slot++]);
6871 }
6872
6873 DbgVariableRecord *DVR = nullptr;
6874 switch (BitCode) {
6877 DVR = new DbgVariableRecord(RawLocation, Var, Expr, DIL,
6878 DbgVariableRecord::LocationType::Value);
6879 break;
6881 DVR = new DbgVariableRecord(RawLocation, Var, Expr, DIL,
6882 DbgVariableRecord::LocationType::Declare);
6883 break;
6885 DVR = new DbgVariableRecord(
6886 RawLocation, Var, Expr, DIL,
6887 DbgVariableRecord::LocationType::DeclareValue);
6888 break;
6890 DIAssignID *ID = cast<DIAssignID>(getFnMetadataByID(Record[Slot++]));
6891 DIExpression *AddrExpr =
6892 cast<DIExpression>(getFnMetadataByID(Record[Slot++]));
6893 Metadata *Addr = getFnMetadataByID(Record[Slot++]);
6894 DVR = new DbgVariableRecord(RawLocation, Var, Expr, ID, Addr, AddrExpr,
6895 DIL);
6896 break;
6897 }
6898 default:
6899 llvm_unreachable("Unknown DbgVariableRecord bitcode");
6900 }
6901 Inst->getParent()->insertDbgRecordBefore(DVR, Inst->getIterator());
6902 continue; // This isn't an instruction.
6903 }
6905 // CALL: [paramattrs, cc, fmf, fnty, fnid, arg0, arg1...]
6906 if (Record.size() < 3)
6907 return error("Invalid call record");
6908
6909 unsigned OpNum = 0;
6910 AttributeList PAL = getAttributes(Record[OpNum++]);
6911 unsigned CCInfo = Record[OpNum++];
6912
6913 FastMathFlags FMF;
6914 if ((CCInfo >> bitc::CALL_FMF) & 1) {
6915 FMF = getDecodedFastMathFlags(Record[OpNum++]);
6916 if (!FMF.any())
6917 return error("Fast math flags indicator set for call with no FMF");
6918 }
6919
6920 unsigned FTyID = InvalidTypeID;
6921 FunctionType *FTy = nullptr;
6922 if ((CCInfo >> bitc::CALL_EXPLICIT_TYPE) & 1) {
6923 FTyID = Record[OpNum++];
6924 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6925 if (!FTy)
6926 return error("Explicit call type is not a function type");
6927 }
6928
6929 Value *Callee;
6930 unsigned CalleeTypeID;
6931 if (getValueTypePair(Record, OpNum, NextValueNo, Callee, CalleeTypeID,
6932 CurBB))
6933 return error("Invalid call record");
6934
6935 PointerType *OpTy = dyn_cast<PointerType>(Callee->getType());
6936 if (!OpTy)
6937 return error("Callee is not a pointer type");
6938 if (!FTy) {
6939 FTyID = getContainedTypeID(CalleeTypeID);
6940 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6941 if (!FTy)
6942 return error("Callee is not of pointer to function type");
6943 }
6944 if (Record.size() < FTy->getNumParams() + OpNum)
6945 return error("Insufficient operands to call");
6946
6947 SmallVector<Value*, 16> Args;
6948 SmallVector<unsigned, 16> ArgTyIDs;
6949 // Read the fixed params.
6950 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
6951 unsigned ArgTyID = getContainedTypeID(FTyID, i + 1);
6952 if (FTy->getParamType(i)->isLabelTy())
6953 Args.push_back(getBasicBlock(Record[OpNum]));
6954 else
6955 Args.push_back(getValue(Record, OpNum, NextValueNo,
6956 FTy->getParamType(i), ArgTyID, CurBB));
6957 ArgTyIDs.push_back(ArgTyID);
6958 if (!Args.back())
6959 return error("Invalid call record");
6960 }
6961
6962 // Read type/value pairs for varargs params.
6963 if (!FTy->isVarArg()) {
6964 if (OpNum != Record.size())
6965 return error("Invalid call record");
6966 } else {
6967 while (OpNum != Record.size()) {
6968 Value *Op;
6969 unsigned OpTypeID;
6970 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
6971 return error("Invalid call record");
6972 Args.push_back(Op);
6973 ArgTyIDs.push_back(OpTypeID);
6974 }
6975 }
6976
6977 // Upgrade the bundles if needed.
6978 if (!OperandBundles.empty())
6979 UpgradeOperandBundles(OperandBundles);
6980
6981 I = CallInst::Create(FTy, Callee, Args, OperandBundles);
6982 ResTypeID = getContainedTypeID(FTyID);
6983 OperandBundles.clear();
6984 InstructionList.push_back(I);
6985 cast<CallInst>(I)->setCallingConv(
6986 static_cast<CallingConv::ID>((0x7ff & CCInfo) >> bitc::CALL_CCONV));
6988 if (CCInfo & (1 << bitc::CALL_TAIL))
6989 TCK = CallInst::TCK_Tail;
6990 if (CCInfo & (1 << bitc::CALL_MUSTTAIL))
6992 if (CCInfo & (1 << bitc::CALL_NOTAIL))
6994 cast<CallInst>(I)->setTailCallKind(TCK);
6995 cast<CallInst>(I)->setAttributes(PAL);
6997 SeenDebugIntrinsic = true;
6998 if (Error Err = propagateAttributeTypes(cast<CallBase>(I), ArgTyIDs)) {
6999 I->deleteValue();
7000 return Err;
7001 }
7002 if (FMF.any()) {
7003 if (!isa<FPMathOperator>(I))
7004 return error("Fast-math-flags specified for call without "
7005 "floating-point scalar or vector return type");
7006 I->setFastMathFlags(FMF);
7007 }
7008 break;
7009 }
7010 case bitc::FUNC_CODE_INST_VAARG: { // VAARG: [valistty, valist, instty]
7011 if (Record.size() < 3)
7012 return error("Invalid va_arg record");
7013 unsigned OpTyID = Record[0];
7014 Type *OpTy = getTypeByID(OpTyID);
7015 Value *Op = getValue(Record, 1, NextValueNo, OpTy, OpTyID, CurBB);
7016 ResTypeID = Record[2];
7017 Type *ResTy = getTypeByID(ResTypeID);
7018 if (!OpTy || !Op || !ResTy)
7019 return error("Invalid va_arg record");
7020 I = new VAArgInst(Op, ResTy);
7021 InstructionList.push_back(I);
7022 break;
7023 }
7024
7026 // A call or an invoke can be optionally prefixed with some variable
7027 // number of operand bundle blocks. These blocks are read into
7028 // OperandBundles and consumed at the next call or invoke instruction.
7029
7030 if (Record.empty() || Record[0] >= BundleTags.size())
7031 return error("Invalid operand bundle record");
7032
7033 std::vector<Value *> Inputs;
7034
7035 unsigned OpNum = 1;
7036 while (OpNum != Record.size()) {
7037 Value *Op;
7038 if (getValueOrMetadata(Record, OpNum, NextValueNo, Op, CurBB))
7039 return error("Invalid operand bundle record");
7040 Inputs.push_back(Op);
7041 }
7042
7043 OperandBundles.emplace_back(BundleTags[Record[0]], std::move(Inputs));
7044 continue;
7045 }
7046
7047 case bitc::FUNC_CODE_INST_FREEZE: { // FREEZE: [opty,opval]
7048 unsigned OpNum = 0;
7049 Value *Op = nullptr;
7050 unsigned OpTypeID;
7051 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
7052 return error("Invalid freeze record");
7053 if (OpNum != Record.size())
7054 return error("Invalid freeze record");
7055
7056 I = new FreezeInst(Op);
7057 ResTypeID = OpTypeID;
7058 InstructionList.push_back(I);
7059 break;
7060 }
7061 }
7062
7063 // Add instruction to end of current BB. If there is no current BB, reject
7064 // this file.
7065 if (!CurBB) {
7066 I->deleteValue();
7067 return error("Invalid instruction with no BB");
7068 }
7069 if (!OperandBundles.empty()) {
7070 I->deleteValue();
7071 return error("Operand bundles found with no consumer");
7072 }
7073 I->insertInto(CurBB, CurBB->end());
7074
7075 // If this was a terminator instruction, move to the next block.
7076 if (I->isTerminator()) {
7077 ++CurBBNo;
7078 CurBB = CurBBNo < FunctionBBs.size() ? FunctionBBs[CurBBNo] : nullptr;
7079 }
7080
7081 // Non-void values get registered in the value table for future use.
7082 if (!I->getType()->isVoidTy()) {
7083 assert(I->getType() == getTypeByID(ResTypeID) &&
7084 "Incorrect result type ID");
7085 if (Error Err = ValueList.assignValue(NextValueNo++, I, ResTypeID))
7086 return Err;
7087 }
7088 }
7089
7090OutOfRecordLoop:
7091
7092 if (!OperandBundles.empty())
7093 return error("Operand bundles found with no consumer");
7094
7095 // Check the function list for unresolved values.
7096 if (Argument *A = dyn_cast<Argument>(ValueList.back())) {
7097 if (!A->getParent()) {
7098 // We found at least one unresolved value. Nuke them all to avoid leaks.
7099 for (unsigned i = ModuleValueListSize, e = ValueList.size(); i != e; ++i){
7100 if ((A = dyn_cast_or_null<Argument>(ValueList[i])) && !A->getParent()) {
7101 A->replaceAllUsesWith(PoisonValue::get(A->getType()));
7102 delete A;
7103 }
7104 }
7105 return error("Never resolved value found in function");
7106 }
7107 }
7108
7109 // Unexpected unresolved metadata about to be dropped.
7110 if (MDLoader->hasFwdRefs())
7111 return error("Invalid function metadata: outgoing forward refs");
7112
7113 if (PhiConstExprBB)
7114 PhiConstExprBB->eraseFromParent();
7115
7116 for (const auto &Pair : ConstExprEdgeBBs) {
7117 BasicBlock *From = Pair.first.first;
7118 BasicBlock *To = Pair.first.second;
7119 BasicBlock *EdgeBB = Pair.second;
7120 UncondBrInst::Create(To, EdgeBB);
7121 From->getTerminator()->replaceSuccessorWith(To, EdgeBB);
7122 To->replacePhiUsesWith(From, EdgeBB);
7123 EdgeBB->moveBefore(To);
7124 }
7125
7126 // Trim the value list down to the size it was before we parsed this function.
7127 ValueList.shrinkTo(ModuleValueListSize);
7128 MDLoader->shrinkTo(ModuleMDLoaderSize);
7129 std::vector<BasicBlock*>().swap(FunctionBBs);
7130 return Error::success();
7131}
7132
7133/// Find the function body in the bitcode stream
7134Error BitcodeReader::findFunctionInStream(
7135 Function *F,
7136 DenseMap<Function *, uint64_t>::iterator DeferredFunctionInfoIterator) {
7137 while (DeferredFunctionInfoIterator->second == 0) {
7138 // This is the fallback handling for the old format bitcode that
7139 // didn't contain the function index in the VST, or when we have
7140 // an anonymous function which would not have a VST entry.
7141 // Assert that we have one of those two cases.
7142 assert(VSTOffset == 0 || !F->hasName());
7143 // Parse the next body in the stream and set its position in the
7144 // DeferredFunctionInfo map.
7145 if (Error Err = rememberAndSkipFunctionBodies())
7146 return Err;
7147 }
7148 return Error::success();
7149}
7150
7151SyncScope::ID BitcodeReader::getDecodedSyncScopeID(unsigned Val) {
7152 if (Val == SyncScope::SingleThread || Val == SyncScope::System)
7153 return SyncScope::ID(Val);
7154 if (Val >= SSIDs.size())
7155 return SyncScope::System; // Map unknown synchronization scopes to system.
7156 return SSIDs[Val];
7157}
7158
7159//===----------------------------------------------------------------------===//
7160// GVMaterializer implementation
7161//===----------------------------------------------------------------------===//
7162
7163Error BitcodeReader::materialize(GlobalValue *GV) {
7165 // If it's not a function or is already material, ignore the request.
7166 if (!F || !F->isMaterializable())
7167 return Error::success();
7168
7169 auto DFII = DeferredFunctionInfo.find(F);
7170 assert(DFII != DeferredFunctionInfo.end() && "Deferred function not found!");
7171 // If its position is recorded as 0, its body is somewhere in the stream
7172 // but we haven't seen it yet.
7173 if (DFII->second == 0)
7174 if (Error Err = findFunctionInStream(F, DFII))
7175 return Err;
7176
7177 // Materialize metadata before parsing any function bodies.
7178 if (Error Err = materializeMetadata())
7179 return Err;
7180
7181 // Move the bit stream to the saved position of the deferred function body.
7182 if (Error JumpFailed = Stream.JumpToBit(DFII->second))
7183 return JumpFailed;
7184
7185 if (Error Err = parseFunctionBody(F))
7186 return Err;
7187 F->setIsMaterializable(false);
7188
7189 // All parsed Functions should load into the debug info format dictated by the
7190 // Module.
7191 if (SeenDebugIntrinsic && SeenDebugRecord)
7192 return error("Mixed debug intrinsics and debug records in bitcode module!");
7193
7194 if (StripDebugInfo)
7195 stripDebugInfo(*F);
7196
7197 // Finish fn->subprogram upgrade for materialized functions.
7198 if (DISubprogram *SP = MDLoader->lookupSubprogramForFunction(F))
7199 F->setSubprogram(SP);
7200
7201 // Check if the TBAA Metadata are valid, otherwise we will need to strip them.
7202 if (!MDLoader->isStrippingTBAA()) {
7203 for (auto &I : instructions(F)) {
7204 MDNode *TBAA = I.getMetadata(LLVMContext::MD_tbaa);
7205 if (!TBAA || TBAAVerifyHelper.visitTBAAMetadata(&I, TBAA))
7206 continue;
7207 MDLoader->setStripTBAA(true);
7208 stripTBAA(F->getParent());
7209 }
7210 }
7211
7212 for (auto &I : make_early_inc_range(instructions(F))) {
7213 // "Upgrade" older incorrect branch weights by dropping them.
7214 if (auto *MD = I.getMetadata(LLVMContext::MD_prof)) {
7215 if (MD->getOperand(0) != nullptr && isa<MDString>(MD->getOperand(0))) {
7216 MDString *MDS = cast<MDString>(MD->getOperand(0));
7217 StringRef ProfName = MDS->getString();
7218 // Check consistency of !prof branch_weights metadata.
7219 if (ProfName != MDProfLabels::BranchWeights)
7220 continue;
7221 unsigned ExpectedNumOperands = 0;
7222 if (isa<CondBrInst>(&I))
7223 ExpectedNumOperands = 2;
7224 else if (SwitchInst *SI = dyn_cast<SwitchInst>(&I))
7225 ExpectedNumOperands = SI->getNumSuccessors();
7226 else if (isa<CallInst>(&I))
7227 ExpectedNumOperands = 1;
7228 else if (IndirectBrInst *IBI = dyn_cast<IndirectBrInst>(&I))
7229 ExpectedNumOperands = IBI->getNumDestinations();
7230 else if (isa<SelectInst>(&I))
7231 ExpectedNumOperands = 2;
7232 else
7233 continue; // ignore and continue.
7234
7235 unsigned Offset = getBranchWeightOffset(MD);
7236
7237 // If branch weight doesn't match, just strip branch weight.
7238 if (MD->getNumOperands() != Offset + ExpectedNumOperands)
7239 I.setMetadata(LLVMContext::MD_prof, nullptr);
7240 }
7241 }
7242
7243 if (auto *CI = dyn_cast<CallBase>(&I)) {
7244 // Remove incompatible attributes on function calls.
7245 CI->removeRetAttrs(AttributeFuncs::typeIncompatible(
7246 CI->getFunctionType()->getReturnType(), CI->getRetAttributes()));
7247
7248 for (unsigned ArgNo = 0; ArgNo < CI->arg_size(); ++ArgNo)
7249 CI->removeParamAttrs(ArgNo, AttributeFuncs::typeIncompatible(
7250 CI->getArgOperand(ArgNo)->getType(),
7251 CI->getParamAttributes(ArgNo)));
7252
7253 // Upgrade intrinsics.
7254 if (Function *OldFn = CI->getCalledFunction()) {
7255 auto It = UpgradedIntrinsics.find(OldFn);
7256 if (It != UpgradedIntrinsics.end())
7257 UpgradeIntrinsicCall(CI, It->second);
7258 }
7259 } else if (auto *BC = dyn_cast<BitCastInst>(&I);
7260 BC && BC->getSrcTy() == BC->getDestTy() &&
7261 isa_and_nonnull<ReturnInst>(BC->getNextNode())) {
7262 // Old bitcode allowed an optional bitcast between a musttail call and its
7263 // return. Under opaque pointers that cast is always a no-op, and the
7264 // verifier no longer accepts it, so drop it.
7265 if (auto *CI = dyn_cast<CallInst>(BC->getOperand(0));
7266 CI && CI->isMustTailCall() && CI->getNextNode() == BC) {
7267 BC->replaceAllUsesWith(CI);
7268 BC->eraseFromParent();
7269 }
7270 }
7271 }
7272
7273 // Look for functions that rely on old function attribute behavior.
7275
7276 // Bring in any functions that this function forward-referenced via
7277 // blockaddresses.
7278 return materializeForwardReferencedFunctions();
7279}
7280
7281Error BitcodeReader::materializeModule() {
7282 if (Error Err = materializeMetadata())
7283 return Err;
7284
7285 // Promise to materialize all forward references.
7286 WillMaterializeAllForwardRefs = true;
7287
7288 // Iterate over the module, deserializing any functions that are still on
7289 // disk.
7290 for (Function &F : *TheModule) {
7291 if (Error Err = materialize(&F))
7292 return Err;
7293 }
7294 // At this point, if there are any function bodies, parse the rest of
7295 // the bits in the module past the last function block we have recorded
7296 // through either lazy scanning or the VST.
7297 if (LastFunctionBlockBit || NextUnreadBit)
7298 if (Error Err = parseModule(LastFunctionBlockBit > NextUnreadBit
7299 ? LastFunctionBlockBit
7300 : NextUnreadBit))
7301 return Err;
7302
7303 // Check that all block address forward references got resolved (as we
7304 // promised above).
7305 if (!BasicBlockFwdRefs.empty())
7306 return error("Never resolved function from blockaddress");
7307
7308 // Upgrade any intrinsic calls that slipped through (should not happen!) and
7309 // delete the old functions to clean up. We can't do this unless the entire
7310 // module is materialized because there could always be another function body
7311 // with calls to the old function.
7312 for (auto &[OldFn, NewFn] : UpgradedIntrinsics) {
7313 for (User *U : OldFn->users()) {
7314 if (auto *CI = dyn_cast<CallInst>(U))
7315 UpgradeIntrinsicCall(CI, NewFn);
7316 }
7317 if (OldFn != NewFn) {
7318 if (!OldFn->use_empty())
7319 OldFn->replaceAllUsesWith(NewFn);
7320 OldFn->eraseFromParent();
7321 }
7322 }
7323 UpgradedIntrinsics.clear();
7324
7325 UpgradeDebugInfo(*TheModule);
7326
7327 UpgradeModuleFlags(*TheModule);
7328
7329 UpgradeNVVMAnnotations(*TheModule);
7330
7331 UpgradeARCRuntime(*TheModule);
7332
7333 copyModuleAttrToFunctions(*TheModule);
7334
7335 return Error::success();
7336}
7337
7338std::vector<StructType *> BitcodeReader::getIdentifiedStructTypes() const {
7339 return IdentifiedStructTypes;
7340}
7341
7342ModuleSummaryIndexBitcodeReader::ModuleSummaryIndexBitcodeReader(
7343 BitstreamCursor Cursor, StringRef Strtab, ModuleSummaryIndex &TheIndex,
7344 StringRef ModulePath, std::function<bool(StringRef)> IsPrevailing,
7345 std::function<void(ValueInfo)> OnValueInfo)
7346 : BitcodeReaderBase(std::move(Cursor), Strtab), TheIndex(TheIndex),
7347 ModulePath(ModulePath), IsPrevailing(IsPrevailing),
7348 OnValueInfo(OnValueInfo) {}
7349
7350void ModuleSummaryIndexBitcodeReader::addThisModule() {
7351 TheIndex.addModule(ModulePath);
7352}
7353
7355ModuleSummaryIndexBitcodeReader::getThisModule() {
7356 return TheIndex.getModule(ModulePath);
7357}
7358
7359template <bool AllowNullValueInfo>
7360std::pair<ValueInfo, GlobalValue::GUID>
7361ModuleSummaryIndexBitcodeReader::getValueInfoFromValueId(unsigned ValueId) {
7362 auto VGI = ValueIdToValueInfoMap[ValueId];
7363 // We can have a null value info in distributed ThinLTO index files:
7364 // - For memprof callsite info records when the callee function summary is not
7365 // included in the index.
7366 // - For alias summary when its aliasee summary is not included in the index.
7367 // The bitcode writer records 0 in these cases,
7368 // and the caller of this helper will set AllowNullValueInfo to true.
7369 assert(AllowNullValueInfo || std::get<0>(VGI));
7370 return VGI;
7371}
7372
7373void ModuleSummaryIndexBitcodeReader::setValueGUID(
7375 StringRef SourceFileName) {
7376 GlobalValue::GUID ValueGUID = 0;
7377 if (ValueID < DefinedGUIDs.size())
7378 ValueGUID = DefinedGUIDs[ValueID];
7379 if (ValueGUID == 0)
7380 // DefinedGUIDs is a sparse array and can contain zero entries, so this
7381 // can't just be an `else`.
7384
7385 auto OriginalNameID = ValueGUID;
7389 dbgs() << "GUID " << ValueGUID << "(" << OriginalNameID << ") is "
7390 << ValueName << "\n";
7391
7392 // UseStrtab is false for legacy summary formats and value names are
7393 // created on stack. In that case we save the name in a string saver in
7394 // the index so that the value name can be recorded.
7395 auto VI = TheIndex.getOrInsertValueInfo(
7396 ValueGUID, UseStrtab ? ValueName : TheIndex.saveString(ValueName));
7397 ValueIdToValueInfoMap[ValueID] = std::make_pair(VI, OriginalNameID);
7398 if (OnValueInfo)
7399 OnValueInfo(VI);
7400}
7401
7402// Specialized value symbol table parser used when reading module index
7403// blocks where we don't actually create global values. The parsed information
7404// is saved in the bitcode reader for use when later parsing summaries.
7405Error ModuleSummaryIndexBitcodeReader::parseValueSymbolTable(
7407 DenseMap<unsigned, GlobalValue::LinkageTypes> &ValueIdToLinkageMap) {
7408 // With a strtab the VST is not required to parse the summary.
7409 if (UseStrtab)
7410 return Error::success();
7411
7412 assert(Offset > 0 && "Expected non-zero VST offset");
7413 Expected<uint64_t> MaybeCurrentBit = jumpToValueSymbolTable(Offset, Stream);
7414 if (!MaybeCurrentBit)
7415 return MaybeCurrentBit.takeError();
7416 uint64_t CurrentBit = MaybeCurrentBit.get();
7417
7419 return Err;
7420
7421 SmallVector<uint64_t, 64> Record;
7422
7423 // Read all the records for this value table.
7424 SmallString<128> ValueName;
7425
7426 while (true) {
7427 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
7428 if (!MaybeEntry)
7429 return MaybeEntry.takeError();
7430 BitstreamEntry Entry = MaybeEntry.get();
7431
7432 switch (Entry.Kind) {
7433 case BitstreamEntry::SubBlock: // Handled for us already.
7435 return error("Malformed block");
7437 // Done parsing VST, jump back to wherever we came from.
7438 if (Error JumpFailed = Stream.JumpToBit(CurrentBit))
7439 return JumpFailed;
7440 return Error::success();
7442 // The interesting case.
7443 break;
7444 }
7445
7446 // Read a record.
7447 Record.clear();
7448 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
7449 if (!MaybeRecord)
7450 return MaybeRecord.takeError();
7451 switch (MaybeRecord.get()) {
7452 default: // Default behavior: ignore (e.g. VST_CODE_BBENTRY records).
7453 break;
7454 case bitc::VST_CODE_ENTRY: { // VST_CODE_ENTRY: [valueid, namechar x N]
7455 if (convertToString(Record, 1, ValueName))
7456 return error("Invalid vst_code_entry record");
7457 unsigned ValueID = Record[0];
7458 assert(!SourceFileName.empty());
7459 auto VLI = ValueIdToLinkageMap.find(ValueID);
7460 assert(VLI != ValueIdToLinkageMap.end() &&
7461 "No linkage found for VST entry?");
7462 auto Linkage = VLI->second;
7463 setValueGUID(ValueID, ValueName, Linkage, SourceFileName);
7464 ValueName.clear();
7465 break;
7466 }
7468 // VST_CODE_FNENTRY: [valueid, offset, namechar x N]
7469 if (convertToString(Record, 2, ValueName))
7470 return error("Invalid vst_code_fnentry record");
7471 unsigned ValueID = Record[0];
7472 assert(!SourceFileName.empty());
7473 auto VLI = ValueIdToLinkageMap.find(ValueID);
7474 assert(VLI != ValueIdToLinkageMap.end() &&
7475 "No linkage found for VST entry?");
7476 auto Linkage = VLI->second;
7477 setValueGUID(ValueID, ValueName, Linkage, SourceFileName);
7478 ValueName.clear();
7479 break;
7480 }
7482 // VST_CODE_COMBINED_ENTRY: [valueid, refguid]
7483 unsigned ValueID = Record[0];
7484 GlobalValue::GUID RefGUID = Record[1];
7485 // The "original name", which is the second value of the pair will be
7486 // overriden later by a FS_COMBINED_ORIGINAL_NAME in the combined index.
7487 ValueIdToValueInfoMap[ValueID] =
7488 std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
7489 break;
7490 }
7491 }
7492 }
7493}
7494
7495// Parse just the blocks needed for building the index out of the module.
7496// At the end of this routine the module Index is populated with a map
7497// from global value id to GlobalValueSummary objects.
7498Error ModuleSummaryIndexBitcodeReader::parseModule() {
7499 if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
7500 return Err;
7501
7502 SmallVector<uint64_t, 64> Record;
7503 DenseMap<unsigned, GlobalValue::LinkageTypes> ValueIdToLinkageMap;
7504 unsigned ValueId = 0;
7505
7506 // Read the index for this module.
7507 while (true) {
7508 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
7509 if (!MaybeEntry)
7510 return MaybeEntry.takeError();
7511 llvm::BitstreamEntry Entry = MaybeEntry.get();
7512
7513 switch (Entry.Kind) {
7515 return error("Malformed block");
7517 return Error::success();
7518
7520 switch (Entry.ID) {
7521 default: // Skip unknown content.
7522 if (Error Err = Stream.SkipBlock())
7523 return Err;
7524 break;
7526 // Need to parse these to get abbrev ids (e.g. for VST)
7527 if (Error Err = readBlockInfo())
7528 return Err;
7529 break;
7531 // Should have been parsed earlier via VSTOffset, unless there
7532 // is no summary section.
7533 assert(((SeenValueSymbolTable && VSTOffset > 0) ||
7534 !SeenGlobalValSummary) &&
7535 "Expected early VST parse via VSTOffset record");
7536 if (Error Err = Stream.SkipBlock())
7537 return Err;
7538 break;
7541 // Add the module if it is a per-module index (has a source file name).
7542 if (!SourceFileName.empty())
7543 addThisModule();
7544 assert(!SeenValueSymbolTable &&
7545 "Already read VST when parsing summary block?");
7546 // We might not have a VST if there were no values in the
7547 // summary. An empty summary block generated when we are
7548 // performing ThinLTO compiles so we don't later invoke
7549 // the regular LTO process on them.
7550 if (VSTOffset > 0) {
7551 if (Error Err = parseValueSymbolTable(VSTOffset, ValueIdToLinkageMap))
7552 return Err;
7553 SeenValueSymbolTable = true;
7554 }
7555 SeenGlobalValSummary = true;
7556 if (Error Err = parseEntireSummary(Entry.ID))
7557 return Err;
7558 break;
7560 if (Error Err = parseModuleStringTable())
7561 return Err;
7562 break;
7563 }
7564 continue;
7565
7567 Record.clear();
7568 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
7569 if (!MaybeBitCode)
7570 return MaybeBitCode.takeError();
7571 switch (MaybeBitCode.get()) {
7572 default:
7573 break; // Default behavior, ignore unknown content.
7575 if (Error Err = parseVersionRecord(Record).takeError())
7576 return Err;
7577 break;
7578 }
7579 /// MODULE_CODE_SOURCE_FILENAME: [namechar x N]
7581 SmallString<128> ValueName;
7582 if (convertToString(Record, 0, ValueName))
7583 return error("Invalid source filename record");
7584 SourceFileName = ValueName.c_str();
7585 break;
7586 }
7587 /// MODULE_CODE_HASH: [5*i32]
7589 if (Record.size() != 5)
7590 return error("Invalid hash length " + Twine(Record.size()));
7591 auto &Hash = getThisModule()->second;
7592 int Pos = 0;
7593 for (auto &Val : Record) {
7594 assert(!(Val >> 32) && "Unexpected high bits set");
7595 Hash[Pos++] = Val;
7596 }
7597 break;
7598 }
7599 /// MODULE_CODE_VSTOFFSET: [offset]
7601 if (Record.empty())
7602 return error("Invalid vstoffset record");
7603 // Note that we subtract 1 here because the offset is relative to one
7604 // word before the start of the identification or module block, which
7605 // was historically always the start of the regular bitcode header.
7606 VSTOffset = Record[0] - 1;
7607 break;
7608 // MODULE_CODE_GUIDLIST: [i64 x N]
7610 assert(Record.size() % 2 == 0);
7611 DefinedGUIDs.reserve(DefinedGUIDs.size() + Record.size() / 2);
7612 for (size_t i = 0; i < Record.size(); i += 2)
7613 DefinedGUIDs.push_back(Record[i] << 32 | Record[i + 1]);
7614 break;
7615 // v1 GLOBALVAR: [pointer type, isconst, initid, linkage, ...]
7616 // v1 FUNCTION: [type, callingconv, isproto, linkage, ...]
7617 // v1 ALIAS: [alias type, addrspace, aliasee val#, linkage, ...]
7618 // v2: [strtab offset, strtab size, v1]
7622 StringRef Name;
7623 ArrayRef<uint64_t> GVRecord;
7624 std::tie(Name, GVRecord) = readNameFromStrtab(Record);
7625 if (GVRecord.size() <= 3)
7626 return error("Invalid global record");
7627 uint64_t RawLinkage = GVRecord[3];
7629 if (!UseStrtab) {
7630 ValueIdToLinkageMap[ValueId++] = Linkage;
7631 break;
7632 }
7633
7634 setValueGUID(ValueId++, Name, Linkage, SourceFileName);
7635 break;
7636 }
7637 }
7638 }
7639 continue;
7640 }
7641 }
7642}
7643
7645ModuleSummaryIndexBitcodeReader::makeRefList(ArrayRef<uint64_t> Record) {
7647 Ret.reserve(Record.size());
7648 for (uint64_t RefValueId : Record)
7649 Ret.push_back(std::get<0>(getValueInfoFromValueId(RefValueId)));
7650 return Ret;
7651}
7652
7654ModuleSummaryIndexBitcodeReader::makeCallList(ArrayRef<uint64_t> Record,
7655 bool IsOldProfileFormat,
7656 bool HasProfile, bool HasRelBF) {
7658 // In the case of new profile formats, there are two Record entries per
7659 // Edge. Otherwise, conservatively reserve up to Record.size.
7660 if (!IsOldProfileFormat && (HasProfile || HasRelBF))
7661 Ret.reserve(Record.size() / 2);
7662 else
7663 Ret.reserve(Record.size());
7664
7665 for (unsigned I = 0, E = Record.size(); I != E; ++I) {
7666 CalleeInfo::HotnessType Hotness = CalleeInfo::HotnessType::Unknown;
7667 bool HasTailCall = false;
7668 uint64_t RelBF = 0;
7669 ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[I]));
7670 if (IsOldProfileFormat) {
7671 I += 1; // Skip old callsitecount field
7672 if (HasProfile)
7673 I += 1; // Skip old profilecount field
7674 } else if (HasProfile)
7675 std::tie(Hotness, HasTailCall) =
7677 // Deprecated, but still needed to read old bitcode files.
7678 else if (HasRelBF)
7679 getDecodedRelBFCallEdgeInfo(Record[++I], RelBF, HasTailCall);
7680 Ret.push_back(
7681 FunctionSummary::EdgeTy{Callee, CalleeInfo(Hotness, HasTailCall)});
7682 }
7683 return Ret;
7684}
7685
7686static void
7689 uint64_t ArgNum = Record[Slot++];
7691 Wpd.ResByArg[{Record.begin() + Slot, Record.begin() + Slot + ArgNum}];
7692 Slot += ArgNum;
7693
7694 B.TheKind =
7696 B.Info = Record[Slot++];
7697 B.Byte = Record[Slot++];
7698 B.Bit = Record[Slot++];
7699}
7700
7702 StringRef Strtab, size_t &Slot,
7703 TypeIdSummary &TypeId) {
7704 uint64_t Id = Record[Slot++];
7705 WholeProgramDevirtResolution &Wpd = TypeId.WPDRes[Id];
7706
7707 Wpd.TheKind = static_cast<WholeProgramDevirtResolution::Kind>(Record[Slot++]);
7708 Wpd.SingleImplName = {Strtab.data() + Record[Slot],
7709 static_cast<size_t>(Record[Slot + 1])};
7710 Slot += 2;
7711
7712 uint64_t ResByArgNum = Record[Slot++];
7713 for (uint64_t I = 0; I != ResByArgNum; ++I)
7715}
7716
7718 StringRef Strtab,
7719 ModuleSummaryIndex &TheIndex) {
7720 size_t Slot = 0;
7721 TypeIdSummary &TypeId = TheIndex.getOrInsertTypeIdSummary(
7722 {Strtab.data() + Record[Slot], static_cast<size_t>(Record[Slot + 1])});
7723 Slot += 2;
7724
7725 TypeId.TTRes.TheKind = static_cast<TypeTestResolution::Kind>(Record[Slot++]);
7726 TypeId.TTRes.SizeM1BitWidth = Record[Slot++];
7727 TypeId.TTRes.AlignLog2 = Record[Slot++];
7728 TypeId.TTRes.SizeM1 = Record[Slot++];
7729 TypeId.TTRes.BitMask = Record[Slot++];
7730 TypeId.TTRes.InlineBits = Record[Slot++];
7731
7732 while (Slot < Record.size())
7733 parseWholeProgramDevirtResolution(Record, Strtab, Slot, TypeId);
7734}
7735
7736std::vector<FunctionSummary::ParamAccess>
7737ModuleSummaryIndexBitcodeReader::parseParamAccesses(ArrayRef<uint64_t> Record) {
7738 auto ReadRange = [&]() {
7740 BitcodeReader::decodeSignRotatedValue(Record.consume_front()));
7742 BitcodeReader::decodeSignRotatedValue(Record.consume_front()));
7743 ConstantRange Range{Lower, Upper};
7746 return Range;
7747 };
7748
7749 std::vector<FunctionSummary::ParamAccess> PendingParamAccesses;
7750 while (!Record.empty()) {
7751 PendingParamAccesses.emplace_back();
7752 FunctionSummary::ParamAccess &ParamAccess = PendingParamAccesses.back();
7753 ParamAccess.ParamNo = Record.consume_front();
7754 ParamAccess.Use = ReadRange();
7755 ParamAccess.Calls.resize(Record.consume_front());
7756 for (auto &Call : ParamAccess.Calls) {
7757 Call.ParamNo = Record.consume_front();
7758 Call.Callee =
7759 std::get<0>(getValueInfoFromValueId(Record.consume_front()));
7760 Call.Offsets = ReadRange();
7761 }
7762 }
7763 return PendingParamAccesses;
7764}
7765
7766void ModuleSummaryIndexBitcodeReader::parseTypeIdCompatibleVtableInfo(
7767 ArrayRef<uint64_t> Record, size_t &Slot,
7770 ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[Slot++]));
7771 TypeId.push_back({Offset, Callee});
7772}
7773
7774void ModuleSummaryIndexBitcodeReader::parseTypeIdCompatibleVtableSummaryRecord(
7775 ArrayRef<uint64_t> Record) {
7776 size_t Slot = 0;
7779 {Strtab.data() + Record[Slot],
7780 static_cast<size_t>(Record[Slot + 1])});
7781 Slot += 2;
7782
7783 while (Slot < Record.size())
7784 parseTypeIdCompatibleVtableInfo(Record, Slot, TypeId);
7785}
7786
7787SmallVector<unsigned> ModuleSummaryIndexBitcodeReader::parseAllocInfoContext(
7788 ArrayRef<uint64_t> Record, unsigned &I) {
7789 SmallVector<unsigned> StackIdList;
7790 // For backwards compatibility with old format before radix tree was
7791 // used, simply see if we found a radix tree array record (and thus if
7792 // the RadixArray is non-empty).
7793 if (RadixArray.empty()) {
7794 unsigned NumStackEntries = Record[I++];
7795 assert(Record.size() - I >= NumStackEntries);
7796 StackIdList.reserve(NumStackEntries);
7797 for (unsigned J = 0; J < NumStackEntries; J++) {
7798 assert(Record[I] < StackIds.size());
7799 StackIdList.push_back(getStackIdIndex(Record[I++]));
7800 }
7801 } else {
7802 unsigned RadixIndex = Record[I++];
7803 // See the comments above CallStackRadixTreeBuilder in ProfileData/MemProf.h
7804 // for a detailed description of the radix tree array format. Briefly, the
7805 // first entry will be the number of frames, any negative values are the
7806 // negative of the offset of the next frame, and otherwise the frames are in
7807 // increasing linear order.
7808 assert(RadixIndex < RadixArray.size());
7809 unsigned NumStackIds = RadixArray[RadixIndex++];
7810 StackIdList.reserve(NumStackIds);
7811 while (NumStackIds--) {
7812 assert(RadixIndex < RadixArray.size());
7813 unsigned Elem = RadixArray[RadixIndex];
7814 if (static_cast<std::make_signed_t<unsigned>>(Elem) < 0) {
7815 RadixIndex = RadixIndex - Elem;
7816 assert(RadixIndex < RadixArray.size());
7817 Elem = RadixArray[RadixIndex];
7818 // We shouldn't encounter a second offset in a row.
7819 assert(static_cast<std::make_signed_t<unsigned>>(Elem) >= 0);
7820 }
7821 RadixIndex++;
7822 StackIdList.push_back(getStackIdIndex(Elem));
7823 }
7824 }
7825 return StackIdList;
7826}
7827
7828static void setSpecialRefs(SmallVectorImpl<ValueInfo> &Refs, unsigned ROCnt,
7829 unsigned WOCnt) {
7830 // Readonly and writeonly refs are in the end of the refs list.
7831 assert(ROCnt + WOCnt <= Refs.size());
7832 unsigned FirstWORef = Refs.size() - WOCnt;
7833 unsigned RefNo = FirstWORef - ROCnt;
7834 for (; RefNo < FirstWORef; ++RefNo)
7835 Refs[RefNo].setReadOnly();
7836 for (; RefNo < Refs.size(); ++RefNo)
7837 Refs[RefNo].setWriteOnly();
7838}
7839
7840// Eagerly parse the entire summary block. This populates the GlobalValueSummary
7841// objects in the index.
7842Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
7843 if (Error Err = Stream.EnterSubBlock(ID))
7844 return Err;
7845 SmallVector<uint64_t, 64> Record;
7846
7847 // Parse version
7848 {
7849 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
7850 if (!MaybeEntry)
7851 return MaybeEntry.takeError();
7852 BitstreamEntry Entry = MaybeEntry.get();
7853
7854 if (Entry.Kind != BitstreamEntry::Record)
7855 return error("Invalid Summary Block: record for version expected");
7856 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
7857 if (!MaybeRecord)
7858 return MaybeRecord.takeError();
7859 if (MaybeRecord.get() != bitc::FS_VERSION)
7860 return error("Invalid Summary Block: version expected");
7861 }
7862 const uint64_t Version = Record[0];
7863 const bool IsOldProfileFormat = Version == 1;
7864 // Starting with bitcode summary version 13, MemProf records follow the
7865 // corresponding function summary.
7866 const bool MemProfAfterFunctionSummary = Version >= 13;
7868 return error("Invalid summary version " + Twine(Version) + " in module '" +
7869 ModulePath + "'. Version should be in the range [1-" +
7871 Record.clear();
7872
7873 // Keep around the last seen summary to be used when we see an optional
7874 // "OriginalName" attachement.
7875 GlobalValueSummary *LastSeenSummary = nullptr;
7876 GlobalValue::GUID LastSeenGUID = 0;
7877
7878 // Track the most recent function summary if it was prevailing, and while we
7879 // are not done processing any subsequent memprof records. Starting with
7880 // summary version 13 (tracked by MemProfAfterFunctionSummary), MemProf
7881 // records follow the function summary and we skip processing them when the
7882 // summary is not prevailing. Note that when reading a combined index we don't
7883 // know what is prevailing so this should always be set in the new format when
7884 // we encounter MemProf records.
7885 FunctionSummary *CurrentPrevailingFS = nullptr;
7886
7887 // We can expect to see any number of type ID information records before
7888 // each function summary records; these variables store the information
7889 // collected so far so that it can be used to create the summary object.
7890 std::vector<GlobalValue::GUID> PendingTypeTests;
7891 std::vector<FunctionSummary::VFuncId> PendingTypeTestAssumeVCalls,
7892 PendingTypeCheckedLoadVCalls;
7893 std::vector<FunctionSummary::ConstVCall> PendingTypeTestAssumeConstVCalls,
7894 PendingTypeCheckedLoadConstVCalls;
7895 std::vector<FunctionSummary::ParamAccess> PendingParamAccesses;
7896
7897 std::vector<CallsiteInfo> PendingCallsites;
7898 std::vector<AllocInfo> PendingAllocs;
7899 std::vector<uint64_t> PendingContextIds;
7900
7901 while (true) {
7902 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
7903 if (!MaybeEntry)
7904 return MaybeEntry.takeError();
7905 BitstreamEntry Entry = MaybeEntry.get();
7906
7907 switch (Entry.Kind) {
7908 case BitstreamEntry::SubBlock: // Handled for us already.
7910 return error("Malformed block");
7912 return Error::success();
7914 // The interesting case.
7915 break;
7916 }
7917
7918 // Read a record. The record format depends on whether this
7919 // is a per-module index or a combined index file. In the per-module
7920 // case the records contain the associated value's ID for correlation
7921 // with VST entries. In the combined index the correlation is done
7922 // via the bitcode offset of the summary records (which were saved
7923 // in the combined index VST entries). The records also contain
7924 // information used for ThinLTO renaming and importing.
7925 Record.clear();
7926 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
7927 if (!MaybeBitCode)
7928 return MaybeBitCode.takeError();
7929 unsigned BitCode = MaybeBitCode.get();
7930
7931 switch (BitCode) {
7932 default: // Default behavior: ignore.
7933 break;
7934 case bitc::FS_FLAGS: { // [flags]
7935 TheIndex.setFlags(Record[0]);
7936 break;
7937 }
7938 case bitc::FS_VALUE_GUID: { // [valueid, refguid_upper32, refguid_lower32]
7939 uint64_t ValueID = Record[0];
7940 GlobalValue::GUID RefGUID;
7941 if (Version >= 11) {
7942 RefGUID = Record[1] << 32 | Record[2];
7943 } else {
7944 RefGUID = Record[1];
7945 }
7946 ValueIdToValueInfoMap[ValueID] =
7947 std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
7948 break;
7949 }
7950 // FS_PERMODULE is legacy and does not have support for the tail call flag.
7951 // FS_PERMODULE: [valueid, flags, instcount, fflags, numrefs,
7952 // numrefs x valueid, n x (valueid)]
7953 // FS_PERMODULE_PROFILE: [valueid, flags, instcount, fflags, numrefs,
7954 // numrefs x valueid,
7955 // n x (valueid, hotness+tailcall flags)]
7956 // Deprecated, but still needed to read old bitcode files.
7957 // FS_PERMODULE_RELBF: [valueid, flags, instcount, fflags, numrefs,
7958 // numrefs x valueid,
7959 // n x (valueid, relblockfreq+tailcall)]
7960 case bitc::FS_PERMODULE:
7962 // Deprecated, but still needed to read old bitcode files.
7964 unsigned ValueID = Record[0];
7965 uint64_t RawFlags = Record[1];
7966 unsigned InstCount = Record[2];
7967 uint64_t RawFunFlags = 0;
7968 unsigned NumRefs = Record[3];
7969 unsigned NumRORefs = 0, NumWORefs = 0;
7970 int RefListStartIndex = 4;
7971 if (Version >= 4) {
7972 RawFunFlags = Record[3];
7973 NumRefs = Record[4];
7974 RefListStartIndex = 5;
7975 if (Version >= 5) {
7976 NumRORefs = Record[5];
7977 RefListStartIndex = 6;
7978 if (Version >= 7) {
7979 NumWORefs = Record[6];
7980 RefListStartIndex = 7;
7981 }
7982 }
7983 }
7984
7985 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
7986 // The module path string ref set in the summary must be owned by the
7987 // index's module string table. Since we don't have a module path
7988 // string table section in the per-module index, we create a single
7989 // module path string table entry with an empty (0) ID to take
7990 // ownership.
7991 int CallGraphEdgeStartIndex = RefListStartIndex + NumRefs;
7992 assert(Record.size() >= RefListStartIndex + NumRefs &&
7993 "Record size inconsistent with number of references");
7994 SmallVector<ValueInfo, 0> Refs = makeRefList(
7995 ArrayRef<uint64_t>(Record).slice(RefListStartIndex, NumRefs));
7996 bool HasProfile = (BitCode == bitc::FS_PERMODULE_PROFILE);
7997 // Deprecated, but still needed to read old bitcode files.
7998 bool HasRelBF = (BitCode == bitc::FS_PERMODULE_RELBF);
7999 SmallVector<FunctionSummary::EdgeTy, 0> Calls = makeCallList(
8000 ArrayRef<uint64_t>(Record).slice(CallGraphEdgeStartIndex),
8001 IsOldProfileFormat, HasProfile, HasRelBF);
8002 setSpecialRefs(Refs, NumRORefs, NumWORefs);
8003 auto [VI, GUID] = getValueInfoFromValueId(ValueID);
8004
8005 // The linker doesn't resolve local linkage values so don't check whether
8006 // those are prevailing (set IsPrevailingSym so they are always processed
8007 // and kept).
8008 auto LT = (GlobalValue::LinkageTypes)Flags.Linkage;
8009 bool IsPrevailingSym = !IsPrevailing || GlobalValue::isLocalLinkage(LT) ||
8010 IsPrevailing(VI.name());
8011
8012 // If this is not the prevailing copy, and the records are in the "old"
8013 // order (preceding), clear them now. They should already be empty in
8014 // the new order (following), as they are processed or skipped immediately
8015 // when they follow the summary.
8016 assert(!MemProfAfterFunctionSummary ||
8017 (PendingCallsites.empty() && PendingAllocs.empty()));
8018 if (!IsPrevailingSym && !MemProfAfterFunctionSummary) {
8019 PendingCallsites.clear();
8020 PendingAllocs.clear();
8021 }
8022
8023 auto FS = std::make_unique<FunctionSummary>(
8024 Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
8025 std::move(Calls), std::move(PendingTypeTests),
8026 std::move(PendingTypeTestAssumeVCalls),
8027 std::move(PendingTypeCheckedLoadVCalls),
8028 std::move(PendingTypeTestAssumeConstVCalls),
8029 std::move(PendingTypeCheckedLoadConstVCalls),
8030 std::move(PendingParamAccesses), std::move(PendingCallsites),
8031 std::move(PendingAllocs));
8032 FS->setModulePath(getThisModule()->first());
8033 FS->setOriginalName(GUID);
8034 // Set CurrentPrevailingFS only if prevailing, so subsequent MemProf
8035 // records are attached (new order) or skipped.
8036 if (MemProfAfterFunctionSummary) {
8037 if (IsPrevailingSym)
8038 CurrentPrevailingFS = FS.get();
8039 else
8040 CurrentPrevailingFS = nullptr;
8041 }
8042 TheIndex.addGlobalValueSummary(VI, std::move(FS));
8043 break;
8044 }
8045 // FS_ALIAS: [valueid, flags, valueid]
8046 // Aliases must be emitted (and parsed) after all FS_PERMODULE entries, as
8047 // they expect all aliasee summaries to be available.
8048 case bitc::FS_ALIAS: {
8049 unsigned ValueID = Record[0];
8050 uint64_t RawFlags = Record[1];
8051 unsigned AliaseeID = Record[2];
8052 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8053 auto AS = std::make_unique<AliasSummary>(Flags);
8054 // The module path string ref set in the summary must be owned by the
8055 // index's module string table. Since we don't have a module path
8056 // string table section in the per-module index, we create a single
8057 // module path string table entry with an empty (0) ID to take
8058 // ownership.
8059 AS->setModulePath(getThisModule()->first());
8060
8061 auto AliaseeVI = std::get<0>(getValueInfoFromValueId(AliaseeID));
8062 auto AliaseeInModule = TheIndex.findSummaryInModule(AliaseeVI, ModulePath);
8063 if (!AliaseeInModule)
8064 return error("Alias expects aliasee summary to be parsed");
8065 AS->setAliasee(AliaseeVI, AliaseeInModule);
8066
8067 auto GUID = getValueInfoFromValueId(ValueID);
8068 AS->setOriginalName(std::get<1>(GUID));
8069 TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(AS));
8070 break;
8071 }
8072 // FS_PERMODULE_GLOBALVAR_INIT_REFS: [valueid, flags, varflags, n x valueid]
8074 unsigned ValueID = Record[0];
8075 uint64_t RawFlags = Record[1];
8076 unsigned RefArrayStart = 2;
8077 GlobalVarSummary::GVarFlags GVF(/* ReadOnly */ false,
8078 /* WriteOnly */ false,
8079 /* Constant */ false,
8081 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8082 if (Version >= 5) {
8083 GVF = getDecodedGVarFlags(Record[2]);
8084 RefArrayStart = 3;
8085 }
8087 makeRefList(ArrayRef<uint64_t>(Record).slice(RefArrayStart));
8088 auto FS =
8089 std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
8090 FS->setModulePath(getThisModule()->first());
8091 auto GUID = getValueInfoFromValueId(ValueID);
8092 FS->setOriginalName(std::get<1>(GUID));
8093 TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(FS));
8094 break;
8095 }
8096 // FS_PERMODULE_VTABLE_GLOBALVAR_INIT_REFS: [valueid, flags, varflags,
8097 // numrefs, numrefs x valueid,
8098 // n x (valueid, offset)]
8100 unsigned ValueID = Record[0];
8101 uint64_t RawFlags = Record[1];
8102 GlobalVarSummary::GVarFlags GVF = getDecodedGVarFlags(Record[2]);
8103 unsigned NumRefs = Record[3];
8104 unsigned RefListStartIndex = 4;
8105 unsigned VTableListStartIndex = RefListStartIndex + NumRefs;
8106 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8107 SmallVector<ValueInfo, 0> Refs = makeRefList(
8108 ArrayRef<uint64_t>(Record).slice(RefListStartIndex, NumRefs));
8109 VTableFuncList VTableFuncs;
8110 for (unsigned I = VTableListStartIndex, E = Record.size(); I != E; ++I) {
8111 ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[I]));
8112 uint64_t Offset = Record[++I];
8113 VTableFuncs.push_back({Callee, Offset});
8114 }
8115 auto VS =
8116 std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
8117 VS->setModulePath(getThisModule()->first());
8118 VS->setVTableFuncs(VTableFuncs);
8119 auto GUID = getValueInfoFromValueId(ValueID);
8120 VS->setOriginalName(std::get<1>(GUID));
8121 TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(VS));
8122 break;
8123 }
8124 // FS_COMBINED is legacy and does not have support for the tail call flag.
8125 // FS_COMBINED: [valueid, modid, flags, instcount, fflags, numrefs,
8126 // numrefs x valueid, n x (valueid)]
8127 // FS_COMBINED_PROFILE: [valueid, modid, flags, instcount, fflags, numrefs,
8128 // numrefs x valueid,
8129 // n x (valueid, hotness+tailcall flags)]
8130 case bitc::FS_COMBINED:
8132 unsigned ValueID = Record[0];
8133 uint64_t ModuleId = Record[1];
8134 uint64_t RawFlags = Record[2];
8135 unsigned InstCount = Record[3];
8136 uint64_t RawFunFlags = 0;
8137 unsigned NumRefs = Record[4];
8138 unsigned NumRORefs = 0, NumWORefs = 0;
8139 int RefListStartIndex = 5;
8140
8141 if (Version >= 4) {
8142 RawFunFlags = Record[4];
8143 RefListStartIndex = 6;
8144 size_t NumRefsIndex = 5;
8145 if (Version >= 5) {
8146 unsigned NumRORefsOffset = 1;
8147 RefListStartIndex = 7;
8148 if (Version >= 6) {
8149 NumRefsIndex = 6;
8150 RefListStartIndex = 8;
8151 if (Version >= 7) {
8152 RefListStartIndex = 9;
8153 NumWORefs = Record[8];
8154 NumRORefsOffset = 2;
8155 }
8156 }
8157 NumRORefs = Record[RefListStartIndex - NumRORefsOffset];
8158 }
8159 NumRefs = Record[NumRefsIndex];
8160 }
8161
8162 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8163 int CallGraphEdgeStartIndex = RefListStartIndex + NumRefs;
8164 assert(Record.size() >= RefListStartIndex + NumRefs &&
8165 "Record size inconsistent with number of references");
8166 SmallVector<ValueInfo, 0> Refs = makeRefList(
8167 ArrayRef<uint64_t>(Record).slice(RefListStartIndex, NumRefs));
8168 bool HasProfile = (BitCode == bitc::FS_COMBINED_PROFILE);
8169 SmallVector<FunctionSummary::EdgeTy, 0> Edges = makeCallList(
8170 ArrayRef<uint64_t>(Record).slice(CallGraphEdgeStartIndex),
8171 IsOldProfileFormat, HasProfile, false);
8172 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8173 setSpecialRefs(Refs, NumRORefs, NumWORefs);
8174 auto FS = std::make_unique<FunctionSummary>(
8175 Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
8176 std::move(Edges), std::move(PendingTypeTests),
8177 std::move(PendingTypeTestAssumeVCalls),
8178 std::move(PendingTypeCheckedLoadVCalls),
8179 std::move(PendingTypeTestAssumeConstVCalls),
8180 std::move(PendingTypeCheckedLoadConstVCalls),
8181 std::move(PendingParamAccesses), std::move(PendingCallsites),
8182 std::move(PendingAllocs));
8183 LastSeenSummary = FS.get();
8184 if (MemProfAfterFunctionSummary)
8185 CurrentPrevailingFS = FS.get();
8186 LastSeenGUID = VI.getGUID();
8187 FS->setModulePath(ModuleIdMap[ModuleId]);
8188 TheIndex.addGlobalValueSummary(VI, std::move(FS));
8189 break;
8190 }
8191 // FS_COMBINED_ALIAS: [valueid, modid, flags, valueid]
8192 // Aliases must be emitted (and parsed) after all FS_COMBINED entries, as
8193 // they expect all aliasee summaries to be available.
8195 unsigned ValueID = Record[0];
8196 uint64_t ModuleId = Record[1];
8197 uint64_t RawFlags = Record[2];
8198 unsigned AliaseeValueId = Record[3];
8199 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8200 auto AS = std::make_unique<AliasSummary>(Flags);
8201 LastSeenSummary = AS.get();
8202 AS->setModulePath(ModuleIdMap[ModuleId]);
8203
8204 auto AliaseeVI = std::get<0>(
8205 getValueInfoFromValueId</*AllowNullValueInfo*/ true>(AliaseeValueId));
8206 if (AliaseeVI) {
8207 auto AliaseeInModule =
8208 TheIndex.findSummaryInModule(AliaseeVI, AS->modulePath());
8209 AS->setAliasee(AliaseeVI, AliaseeInModule);
8210 }
8211 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8212 LastSeenGUID = VI.getGUID();
8213 TheIndex.addGlobalValueSummary(VI, std::move(AS));
8214 break;
8215 }
8216 // FS_COMBINED_GLOBALVAR_INIT_REFS: [valueid, modid, flags, n x valueid]
8218 unsigned ValueID = Record[0];
8219 uint64_t ModuleId = Record[1];
8220 uint64_t RawFlags = Record[2];
8221 unsigned RefArrayStart = 3;
8222 GlobalVarSummary::GVarFlags GVF(/* ReadOnly */ false,
8223 /* WriteOnly */ false,
8224 /* Constant */ false,
8226 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8227 if (Version >= 5) {
8228 GVF = getDecodedGVarFlags(Record[3]);
8229 RefArrayStart = 4;
8230 }
8232 makeRefList(ArrayRef<uint64_t>(Record).slice(RefArrayStart));
8233 auto FS =
8234 std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
8235 LastSeenSummary = FS.get();
8236 FS->setModulePath(ModuleIdMap[ModuleId]);
8237 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8238 LastSeenGUID = VI.getGUID();
8239 TheIndex.addGlobalValueSummary(VI, std::move(FS));
8240 break;
8241 }
8242 // FS_COMBINED_ORIGINAL_NAME: [original_name]
8244 uint64_t OriginalName = Record[0];
8245 if (!LastSeenSummary)
8246 return error("Name attachment that does not follow a combined record");
8247 LastSeenSummary->setOriginalName(OriginalName);
8248 TheIndex.addOriginalName(LastSeenGUID, OriginalName);
8249 // Reset the LastSeenSummary
8250 LastSeenSummary = nullptr;
8251 LastSeenGUID = 0;
8252 break;
8253 }
8255 assert(PendingTypeTests.empty());
8256 llvm::append_range(PendingTypeTests, Record);
8257 break;
8258
8260 assert(PendingTypeTestAssumeVCalls.empty());
8261 for (unsigned I = 0; I != Record.size(); I += 2)
8262 PendingTypeTestAssumeVCalls.push_back({Record[I], Record[I+1]});
8263 break;
8264
8266 assert(PendingTypeCheckedLoadVCalls.empty());
8267 for (unsigned I = 0; I != Record.size(); I += 2)
8268 PendingTypeCheckedLoadVCalls.push_back({Record[I], Record[I+1]});
8269 break;
8270
8272 PendingTypeTestAssumeConstVCalls.push_back(
8273 {{Record[0], Record[1]}, {Record.begin() + 2, Record.end()}});
8274 break;
8275
8277 PendingTypeCheckedLoadConstVCalls.push_back(
8278 {{Record[0], Record[1]}, {Record.begin() + 2, Record.end()}});
8279 break;
8280
8282 auto &CfiFunctionDefs = TheIndex.cfiFunctionDefs();
8283 if (Version < 14) {
8284 for (unsigned I = 0; I != Record.size(); I += 2) {
8285 StringRef Name(Strtab.data() + Record[I],
8286 static_cast<size_t>(Record[I + 1]));
8289 CfiFunctionDefs.addSymbolWithThinLTOGUID(Name, GUID);
8290 }
8291 } else {
8292 for (unsigned I = 0; I != Record.size(); I += 3) {
8293 GlobalValue::GUID ThinLTOGUID = Record[I];
8294 StringRef Name(Strtab.data() + Record[I + 1],
8295 static_cast<size_t>(Record[I + 2]));
8296 CfiFunctionDefs.addSymbolWithThinLTOGUID(Name, ThinLTOGUID);
8297 }
8298 }
8299 break;
8300 }
8301
8303 auto &CfiFunctionDecls = TheIndex.cfiFunctionDecls();
8304 if (Version < 14) {
8305 for (unsigned I = 0; I != Record.size(); I += 2) {
8306 StringRef Name(Strtab.data() + Record[I],
8307 static_cast<size_t>(Record[I + 1]));
8310 CfiFunctionDecls.addSymbolWithThinLTOGUID(Name, GUID);
8311 }
8312 } else {
8313 for (unsigned I = 0; I != Record.size(); I += 3) {
8314 GlobalValue::GUID ThinLTOGUID = Record[I];
8315 StringRef Name(Strtab.data() + Record[I + 1],
8316 static_cast<size_t>(Record[I + 2]));
8317 CfiFunctionDecls.addSymbolWithThinLTOGUID(Name, ThinLTOGUID);
8318 }
8319 }
8320 break;
8321 }
8322
8323 case bitc::FS_TYPE_ID:
8324 parseTypeIdSummaryRecord(Record, Strtab, TheIndex);
8325 break;
8326
8328 parseTypeIdCompatibleVtableSummaryRecord(Record);
8329 break;
8330
8332 TheIndex.addBlockCount(Record[0]);
8333 break;
8334
8335 case bitc::FS_PARAM_ACCESS: {
8336 PendingParamAccesses = parseParamAccesses(Record);
8337 break;
8338 }
8339
8340 case bitc::FS_STACK_IDS: { // [n x stackid]
8341 // Save stack ids in the reader to consult when adding stack ids from the
8342 // lists in the stack node and alloc node entries.
8343 assert(StackIds.empty());
8344 if (Version <= 11) {
8345 StackIds = ArrayRef<uint64_t>(Record);
8346 } else {
8347 // This is an array of 32-bit fixed-width values, holding each 64-bit
8348 // context id as a pair of adjacent (most significant first) 32-bit
8349 // words.
8350 assert(Record.size() % 2 == 0);
8351 StackIds.reserve(Record.size() / 2);
8352 for (auto R = Record.begin(); R != Record.end(); R += 2)
8353 StackIds.push_back(*R << 32 | *(R + 1));
8354 }
8355 assert(StackIdToIndex.empty());
8356 // Initialize with a marker to support lazy population.
8357 StackIdToIndex.resize(StackIds.size(), UninitializedStackIdIndex);
8358 break;
8359 }
8360
8361 case bitc::FS_CONTEXT_RADIX_TREE_ARRAY: { // [n x entry]
8362 RadixArray = ArrayRef<uint64_t>(Record);
8363 break;
8364 }
8365
8367 // If they are in the new order (following), they are skipped when they
8368 // follow a non-prevailing summary (CurrentPrevailingFS will be null).
8369 if (MemProfAfterFunctionSummary && !CurrentPrevailingFS)
8370 break;
8371 unsigned ValueID = Record[0];
8372 SmallVector<unsigned> StackIdList;
8373 for (uint64_t R : drop_begin(Record)) {
8374 assert(R < StackIds.size());
8375 StackIdList.push_back(getStackIdIndex(R));
8376 }
8377 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8378 if (MemProfAfterFunctionSummary)
8379 CurrentPrevailingFS->addCallsite(
8380 CallsiteInfo({VI, std::move(StackIdList)}));
8381 else
8382 PendingCallsites.push_back(CallsiteInfo({VI, std::move(StackIdList)}));
8383 break;
8384 }
8385
8387 // In the combined index case we don't have a prevailing check,
8388 // so we should always have a CurrentPrevailingFS.
8389 assert(!MemProfAfterFunctionSummary || CurrentPrevailingFS);
8390 auto RecordIter = Record.begin();
8391 unsigned ValueID = *RecordIter++;
8392 unsigned NumStackIds = *RecordIter++;
8393 unsigned NumVersions = *RecordIter++;
8394 assert(Record.size() == 3 + NumStackIds + NumVersions);
8395 SmallVector<unsigned> StackIdList;
8396 for (unsigned J = 0; J < NumStackIds; J++) {
8397 assert(*RecordIter < StackIds.size());
8398 StackIdList.push_back(getStackIdIndex(*RecordIter++));
8399 }
8400 SmallVector<unsigned> Versions;
8401 for (unsigned J = 0; J < NumVersions; J++)
8402 Versions.push_back(*RecordIter++);
8403 ValueInfo VI = std::get<0>(
8404 getValueInfoFromValueId</*AllowNullValueInfo*/ true>(ValueID));
8405 if (MemProfAfterFunctionSummary)
8406 CurrentPrevailingFS->addCallsite(
8407 CallsiteInfo({VI, std::move(Versions), std::move(StackIdList)}));
8408 else
8409 PendingCallsites.push_back(
8410 CallsiteInfo({VI, std::move(Versions), std::move(StackIdList)}));
8411 break;
8412 }
8413
8415 // If they are in the new order (following), they are skipped when they
8416 // follow a non-prevailing summary (CurrentPrevailingFS will be null).
8417 if (MemProfAfterFunctionSummary && !CurrentPrevailingFS)
8418 break;
8419 // This is an array of 32-bit fixed-width values, holding each 64-bit
8420 // context id as a pair of adjacent (most significant first) 32-bit words.
8421 assert(Record.size() % 2 == 0);
8422 PendingContextIds.reserve(Record.size() / 2);
8423 for (auto R = Record.begin(); R != Record.end(); R += 2)
8424 PendingContextIds.push_back(*R << 32 | *(R + 1));
8425 break;
8426 }
8427
8429 // If they are in the new order (following), they are skipped when they
8430 // follow a non-prevailing summary (CurrentPrevailingFS will be null).
8431 if (MemProfAfterFunctionSummary && !CurrentPrevailingFS) {
8432 PendingContextIds.clear();
8433 break;
8434 }
8435 unsigned I = 0;
8436 std::vector<MIBInfo> MIBs;
8437 unsigned NumMIBs = 0;
8438 if (Version >= 10)
8439 NumMIBs = Record[I++];
8440 unsigned MIBsRead = 0;
8441 while ((Version >= 10 && MIBsRead++ < NumMIBs) ||
8442 (Version < 10 && I < Record.size())) {
8443 assert(Record.size() - I >= 2);
8445 auto StackIdList = parseAllocInfoContext(Record, I);
8446 MIBs.push_back(MIBInfo(AllocType, std::move(StackIdList)));
8447 }
8448 // We either have nothing left or at least NumMIBs context size info
8449 // indices left (for the total sizes included when reporting of hinted
8450 // bytes is enabled).
8451 assert(I == Record.size() || Record.size() - I >= NumMIBs);
8452 std::vector<std::vector<ContextTotalSize>> AllContextSizes;
8453 if (I < Record.size()) {
8454 assert(!PendingContextIds.empty() &&
8455 "Missing context ids for alloc sizes");
8456 unsigned ContextIdIndex = 0;
8457 MIBsRead = 0;
8458 // The sizes are a linearized array of sizes, where for each MIB there
8459 // is 1 or more sizes (due to context trimming, each MIB in the metadata
8460 // and summarized here can correspond to more than one original context
8461 // from the profile).
8462 while (MIBsRead++ < NumMIBs) {
8463 // First read the number of contexts recorded for this MIB.
8464 unsigned NumContextSizeInfoEntries = Record[I++];
8465 assert(Record.size() - I >= NumContextSizeInfoEntries);
8466 std::vector<ContextTotalSize> ContextSizes;
8467 ContextSizes.reserve(NumContextSizeInfoEntries);
8468 for (unsigned J = 0; J < NumContextSizeInfoEntries; J++) {
8469 assert(ContextIdIndex < PendingContextIds.size());
8470 // Skip any 0 entries for MIBs without the context size info.
8471 if (PendingContextIds[ContextIdIndex] == 0) {
8472 // The size should also be 0 if the context was 0.
8473 assert(!Record[I]);
8474 ContextIdIndex++;
8475 I++;
8476 continue;
8477 }
8478 // PendingContextIds read from the preceding FS_ALLOC_CONTEXT_IDS
8479 // should be in the same order as the total sizes.
8480 ContextSizes.push_back(
8481 {PendingContextIds[ContextIdIndex++], Record[I++]});
8482 }
8483 AllContextSizes.push_back(std::move(ContextSizes));
8484 }
8485 PendingContextIds.clear();
8486 }
8487 AllocInfo AI(std::move(MIBs));
8488 if (!AllContextSizes.empty()) {
8489 assert(AI.MIBs.size() == AllContextSizes.size());
8490 AI.ContextSizeInfos = std::move(AllContextSizes);
8491 }
8492
8493 if (MemProfAfterFunctionSummary)
8494 CurrentPrevailingFS->addAlloc(std::move(AI));
8495 else
8496 PendingAllocs.push_back(std::move(AI));
8497 break;
8498 }
8499
8502 // In the combined index case we don't have a prevailing check,
8503 // so we should always have a CurrentPrevailingFS.
8504 assert(!MemProfAfterFunctionSummary || CurrentPrevailingFS);
8505 unsigned I = 0;
8506 std::vector<MIBInfo> MIBs;
8507 unsigned NumMIBs = Record[I++];
8508 unsigned NumVersions = Record[I++];
8509 unsigned MIBsRead = 0;
8510 while (MIBsRead++ < NumMIBs) {
8511 assert(Record.size() - I >= 2);
8513 SmallVector<unsigned> StackIdList;
8514 if (BitCode == bitc::FS_COMBINED_ALLOC_INFO)
8515 StackIdList = parseAllocInfoContext(Record, I);
8516 MIBs.push_back(MIBInfo(AllocType, std::move(StackIdList)));
8517 }
8518 assert(Record.size() - I >= NumVersions);
8519 SmallVector<uint8_t> Versions;
8520 for (unsigned J = 0; J < NumVersions; J++)
8521 Versions.push_back(Record[I++]);
8522 assert(I == Record.size());
8523 AllocInfo AI(std::move(Versions), std::move(MIBs));
8524 if (MemProfAfterFunctionSummary)
8525 CurrentPrevailingFS->addAlloc(std::move(AI));
8526 else
8527 PendingAllocs.push_back(std::move(AI));
8528 break;
8529 }
8530 }
8531 }
8532 llvm_unreachable("Exit infinite loop");
8533}
8534
8535// Parse the module string table block into the Index.
8536// This populates the ModulePathStringTable map in the index.
8537Error ModuleSummaryIndexBitcodeReader::parseModuleStringTable() {
8539 return Err;
8540
8541 SmallVector<uint64_t, 64> Record;
8542
8543 SmallString<128> ModulePath;
8544 ModuleSummaryIndex::ModuleInfo *LastSeenModule = nullptr;
8545
8546 while (true) {
8547 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
8548 if (!MaybeEntry)
8549 return MaybeEntry.takeError();
8550 BitstreamEntry Entry = MaybeEntry.get();
8551
8552 switch (Entry.Kind) {
8553 case BitstreamEntry::SubBlock: // Handled for us already.
8555 return error("Malformed block");
8557 return Error::success();
8559 // The interesting case.
8560 break;
8561 }
8562
8563 Record.clear();
8564 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
8565 if (!MaybeRecord)
8566 return MaybeRecord.takeError();
8567 switch (MaybeRecord.get()) {
8568 default: // Default behavior: ignore.
8569 break;
8570 case bitc::MST_CODE_ENTRY: {
8571 // MST_ENTRY: [modid, namechar x N]
8572 uint64_t ModuleId = Record[0];
8573
8574 if (convertToString(Record, 1, ModulePath))
8575 return error("Invalid code_entry record");
8576
8577 LastSeenModule = TheIndex.addModule(ModulePath);
8578 ModuleIdMap[ModuleId] = LastSeenModule->first();
8579
8580 ModulePath.clear();
8581 break;
8582 }
8583 /// MST_CODE_HASH: [5*i32]
8584 case bitc::MST_CODE_HASH: {
8585 if (Record.size() != 5)
8586 return error("Invalid hash length " + Twine(Record.size()));
8587 if (!LastSeenModule)
8588 return error("Invalid hash that does not follow a module path");
8589 int Pos = 0;
8590 for (auto &Val : Record) {
8591 assert(!(Val >> 32) && "Unexpected high bits set");
8592 LastSeenModule->second[Pos++] = Val;
8593 }
8594 // Reset LastSeenModule to avoid overriding the hash unexpectedly.
8595 LastSeenModule = nullptr;
8596 break;
8597 }
8598 }
8599 }
8600 llvm_unreachable("Exit infinite loop");
8601}
8602
8603namespace {
8604
8605// FIXME: This class is only here to support the transition to llvm::Error. It
8606// will be removed once this transition is complete. Clients should prefer to
8607// deal with the Error value directly, rather than converting to error_code.
8608class BitcodeErrorCategoryType : public std::error_category {
8609 const char *name() const noexcept override {
8610 return "llvm.bitcode";
8611 }
8612
8613 std::string message(int IE) const override {
8614 BitcodeError E = static_cast<BitcodeError>(IE);
8615 switch (E) {
8616 case BitcodeError::CorruptedBitcode:
8617 return "Corrupted bitcode";
8618 }
8619 llvm_unreachable("Unknown error type!");
8620 }
8621};
8622
8623} // end anonymous namespace
8624
8625const std::error_category &llvm::BitcodeErrorCategory() {
8626 static BitcodeErrorCategoryType ErrorCategory;
8627 return ErrorCategory;
8628}
8629
8631 unsigned Block, unsigned RecordID) {
8632 if (Error Err = Stream.EnterSubBlock(Block))
8633 return std::move(Err);
8634
8635 StringRef Strtab;
8636 while (true) {
8637 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
8638 if (!MaybeEntry)
8639 return MaybeEntry.takeError();
8640 llvm::BitstreamEntry Entry = MaybeEntry.get();
8641
8642 switch (Entry.Kind) {
8644 return Strtab;
8645
8647 return error("Malformed block");
8648
8650 if (Error Err = Stream.SkipBlock())
8651 return std::move(Err);
8652 break;
8653
8655 StringRef Blob;
8657 Expected<unsigned> MaybeRecord =
8658 Stream.readRecord(Entry.ID, Record, &Blob);
8659 if (!MaybeRecord)
8660 return MaybeRecord.takeError();
8661 if (MaybeRecord.get() == RecordID)
8662 Strtab = Blob;
8663 break;
8664 }
8665 }
8666}
8667
8668//===----------------------------------------------------------------------===//
8669// External interface
8670//===----------------------------------------------------------------------===//
8671
8672Expected<std::vector<BitcodeModule>>
8674 auto FOrErr = getBitcodeFileContents(Buffer);
8675 if (!FOrErr)
8676 return FOrErr.takeError();
8677 return std::move(FOrErr->Mods);
8678}
8679
8682 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
8683 if (!StreamOrErr)
8684 return StreamOrErr.takeError();
8685 BitstreamCursor &Stream = *StreamOrErr;
8686
8688 while (true) {
8689 uint64_t BCBegin = Stream.getCurrentByteNo();
8690
8691 // We may be consuming bitcode from a client that leaves garbage at the end
8692 // of the bitcode stream (e.g. Apple's ar tool). If we are close enough to
8693 // the end that there cannot possibly be another module, stop looking.
8694 if (BCBegin + 8 >= Stream.getBitcodeBytes().size())
8695 return F;
8696
8697 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
8698 if (!MaybeEntry)
8699 return MaybeEntry.takeError();
8700 llvm::BitstreamEntry Entry = MaybeEntry.get();
8701
8702 switch (Entry.Kind) {
8705 return error("Malformed block");
8706
8708 uint64_t IdentificationBit = -1ull;
8709 if (Entry.ID == bitc::IDENTIFICATION_BLOCK_ID) {
8710 IdentificationBit = Stream.GetCurrentBitNo() - BCBegin * 8;
8711 if (Error Err = Stream.SkipBlock())
8712 return std::move(Err);
8713
8714 {
8715 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
8716 if (!MaybeEntry)
8717 return MaybeEntry.takeError();
8718 Entry = MaybeEntry.get();
8719 }
8720
8721 if (Entry.Kind != BitstreamEntry::SubBlock ||
8722 Entry.ID != bitc::MODULE_BLOCK_ID)
8723 return error("Malformed block");
8724 }
8725
8726 if (Entry.ID == bitc::MODULE_BLOCK_ID) {
8727 uint64_t ModuleBit = Stream.GetCurrentBitNo() - BCBegin * 8;
8728 if (Error Err = Stream.SkipBlock())
8729 return std::move(Err);
8730
8731 F.Mods.push_back({Stream.getBitcodeBytes().slice(
8732 BCBegin, Stream.getCurrentByteNo() - BCBegin),
8733 Buffer.getBufferIdentifier(), IdentificationBit,
8734 ModuleBit});
8735 continue;
8736 }
8737
8738 if (Entry.ID == bitc::STRTAB_BLOCK_ID) {
8739 Expected<StringRef> Strtab =
8741 if (!Strtab)
8742 return Strtab.takeError();
8743 // This string table is used by every preceding bitcode module that does
8744 // not have its own string table. A bitcode file may have multiple
8745 // string tables if it was created by binary concatenation, for example
8746 // with "llvm-cat -b".
8747 for (BitcodeModule &I : llvm::reverse(F.Mods)) {
8748 if (!I.Strtab.empty())
8749 break;
8750 I.Strtab = *Strtab;
8751 }
8752 // Similarly, the string table is used by every preceding symbol table;
8753 // normally there will be just one unless the bitcode file was created
8754 // by binary concatenation.
8755 if (!F.Symtab.empty() && F.StrtabForSymtab.empty())
8756 F.StrtabForSymtab = *Strtab;
8757 continue;
8758 }
8759
8760 if (Entry.ID == bitc::SYMTAB_BLOCK_ID) {
8761 Expected<StringRef> SymtabOrErr =
8763 if (!SymtabOrErr)
8764 return SymtabOrErr.takeError();
8765
8766 // We can expect the bitcode file to have multiple symbol tables if it
8767 // was created by binary concatenation. In that case we silently
8768 // ignore any subsequent symbol tables, which is fine because this is a
8769 // low level function. The client is expected to notice that the number
8770 // of modules in the symbol table does not match the number of modules
8771 // in the input file and regenerate the symbol table.
8772 if (F.Symtab.empty())
8773 F.Symtab = *SymtabOrErr;
8774 continue;
8775 }
8776
8777 if (Error Err = Stream.SkipBlock())
8778 return std::move(Err);
8779 continue;
8780 }
8782 if (Error E = Stream.skipRecord(Entry.ID).takeError())
8783 return std::move(E);
8784 continue;
8785 }
8786 }
8787}
8788
8789/// Get a lazy one-at-time loading module from bitcode.
8790///
8791/// This isn't always used in a lazy context. In particular, it's also used by
8792/// \a parseModule(). If this is truly lazy, then we need to eagerly pull
8793/// in forward-referenced functions from block address references.
8794///
8795/// \param[in] MaterializeAll Set to \c true if we should materialize
8796/// everything.
8798BitcodeModule::getModuleImpl(LLVMContext &Context, bool MaterializeAll,
8799 bool ShouldLazyLoadMetadata, bool IsImporting,
8800 ParserCallbacks Callbacks) {
8801 BitstreamCursor Stream(Buffer);
8802
8803 std::string ProducerIdentification;
8804 if (IdentificationBit != -1ull) {
8805 if (Error JumpFailed = Stream.JumpToBit(IdentificationBit))
8806 return std::move(JumpFailed);
8807 if (Error E =
8808 readIdentificationBlock(Stream).moveInto(ProducerIdentification))
8809 return std::move(E);
8810 }
8811
8812 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8813 return std::move(JumpFailed);
8814 auto *R = new BitcodeReader(std::move(Stream), Strtab, ProducerIdentification,
8815 Context);
8816
8817 std::unique_ptr<Module> M =
8818 std::make_unique<Module>(ModuleIdentifier, Context);
8819 M->setMaterializer(R);
8820
8821 // Delay parsing Metadata if ShouldLazyLoadMetadata is true.
8822 if (Error Err = R->parseBitcodeInto(M.get(), ShouldLazyLoadMetadata,
8823 IsImporting, Callbacks))
8824 return std::move(Err);
8825
8826 if (MaterializeAll) {
8827 // Read in the entire module, and destroy the BitcodeReader.
8828 if (Error Err = M->materializeAll())
8829 return std::move(Err);
8830 } else {
8831 // Resolve forward references from blockaddresses.
8832 if (Error Err = R->materializeForwardReferencedFunctions())
8833 return std::move(Err);
8834 }
8835
8836 return std::move(M);
8837}
8838
8839Expected<std::unique_ptr<Module>>
8840BitcodeModule::getLazyModule(LLVMContext &Context, bool ShouldLazyLoadMetadata,
8841 bool IsImporting, ParserCallbacks Callbacks) {
8842 return getModuleImpl(Context, false, ShouldLazyLoadMetadata, IsImporting,
8843 Callbacks);
8844}
8845
8846// Parse the specified bitcode buffer and merge the index into CombinedIndex.
8847// We don't use ModuleIdentifier here because the client may need to control the
8848// module path used in the combined summary (e.g. when reading summaries for
8849// regular LTO modules).
8851 StringRef ModulePath,
8852 std::function<bool(StringRef)> IsPrevailing,
8853 std::function<void(ValueInfo)> OnValueInfo) {
8854 BitstreamCursor Stream(Buffer);
8855 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8856 return JumpFailed;
8857
8858 ModuleSummaryIndexBitcodeReader R(std::move(Stream), Strtab, CombinedIndex,
8859 ModulePath, IsPrevailing, OnValueInfo);
8860 return R.parseModule();
8861}
8862
8863// Parse the specified bitcode buffer, returning the function info index.
8865 BitstreamCursor Stream(Buffer);
8866 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8867 return std::move(JumpFailed);
8868
8869 auto Index = std::make_unique<ModuleSummaryIndex>(/*HaveGVs=*/false);
8870 ModuleSummaryIndexBitcodeReader R(std::move(Stream), Strtab, *Index,
8871 ModuleIdentifier, 0);
8872
8873 if (Error Err = R.parseModule())
8874 return std::move(Err);
8875
8876 return std::move(Index);
8877}
8878
8881 if (Error Err = Stream.EnterSubBlock(ID))
8882 return std::move(Err);
8883
8885 while (true) {
8886 BitstreamEntry Entry;
8887 if (Error E = Stream.advanceSkippingSubblocks().moveInto(Entry))
8888 return std::move(E);
8889
8890 switch (Entry.Kind) {
8891 case BitstreamEntry::SubBlock: // Handled for us already.
8893 return error("Malformed block");
8895 // If no flags record found, return both flags as false.
8896 return std::make_pair(false, false);
8897 }
8899 // The interesting case.
8900 break;
8901 }
8902
8903 // Look for the FS_FLAGS record.
8904 Record.clear();
8905 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
8906 if (!MaybeBitCode)
8907 return MaybeBitCode.takeError();
8908 switch (MaybeBitCode.get()) {
8909 default: // Default behavior: ignore.
8910 break;
8911 case bitc::FS_FLAGS: { // [flags]
8912 uint64_t Flags = Record[0];
8913 // Scan flags.
8914 assert(Flags <= 0x7ff && "Unexpected bits in flag");
8915
8916 bool EnableSplitLTOUnit = Flags & 0x8;
8917 bool UnifiedLTO = Flags & 0x200;
8918 return std::make_pair(EnableSplitLTOUnit, UnifiedLTO);
8919 }
8920 }
8921 }
8922 llvm_unreachable("Exit infinite loop");
8923}
8924
8925// Check if the given bitcode buffer contains a global value summary block.
8927 BitstreamCursor Stream(Buffer);
8928 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8929 return std::move(JumpFailed);
8930
8931 if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
8932 return std::move(Err);
8933
8934 while (true) {
8936 if (Error E = Stream.advance().moveInto(Entry))
8937 return std::move(E);
8938
8939 switch (Entry.Kind) {
8941 return error("Malformed block");
8943 return BitcodeLTOInfo{/*IsThinLTO=*/false, /*HasSummary=*/false,
8944 /*EnableSplitLTOUnit=*/false, /*UnifiedLTO=*/false};
8945
8947 if (Entry.ID == bitc::GLOBALVAL_SUMMARY_BLOCK_ID ||
8950 getEnableSplitLTOUnitAndUnifiedFlag(Stream, Entry.ID);
8951 if (!Flags)
8952 return Flags.takeError();
8953 BitcodeLTOInfo LTOInfo;
8954 std::tie(LTOInfo.EnableSplitLTOUnit, LTOInfo.UnifiedLTO) = Flags.get();
8955 LTOInfo.IsThinLTO = (Entry.ID == bitc::GLOBALVAL_SUMMARY_BLOCK_ID);
8956 LTOInfo.HasSummary = true;
8957 return LTOInfo;
8958 }
8959
8960 // Ignore other sub-blocks.
8961 if (Error Err = Stream.SkipBlock())
8962 return std::move(Err);
8963 continue;
8964
8966 if (Expected<unsigned> StreamFailed = Stream.skipRecord(Entry.ID))
8967 continue;
8968 else
8969 return StreamFailed.takeError();
8970 }
8971 }
8972}
8973
8976 if (!MsOrErr)
8977 return MsOrErr.takeError();
8978
8979 if (MsOrErr->size() != 1)
8980 return error("Expected a single module");
8981
8982 return (*MsOrErr)[0];
8983}
8984
8985Expected<std::unique_ptr<Module>>
8987 bool ShouldLazyLoadMetadata, bool IsImporting,
8988 ParserCallbacks Callbacks) {
8990 if (!BM)
8991 return BM.takeError();
8992
8993 return BM->getLazyModule(Context, ShouldLazyLoadMetadata, IsImporting,
8994 Callbacks);
8995}
8996
8998 std::unique_ptr<MemoryBuffer> &&Buffer, LLVMContext &Context,
8999 bool ShouldLazyLoadMetadata, bool IsImporting, ParserCallbacks Callbacks) {
9000 auto MOrErr = getLazyBitcodeModule(*Buffer, Context, ShouldLazyLoadMetadata,
9001 IsImporting, Callbacks);
9002 if (MOrErr)
9003 (*MOrErr)->setOwnedMemoryBuffer(std::move(Buffer));
9004 return MOrErr;
9005}
9006
9009 return getModuleImpl(Context, true, false, false, Callbacks);
9010 // TODO: Restore the use-lists to the in-memory state when the bitcode was
9011 // written. We must defer until the Module has been fully materialized.
9012}
9013
9016 ParserCallbacks Callbacks) {
9018 if (!BM)
9019 return BM.takeError();
9020
9021 return BM->parseModule(Context, Callbacks);
9022}
9023
9025 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
9026 if (!StreamOrErr)
9027 return StreamOrErr.takeError();
9028
9029 return readTriple(*StreamOrErr);
9030}
9031
9033 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
9034 if (!StreamOrErr)
9035 return StreamOrErr.takeError();
9036
9037 return hasObjCCategory(*StreamOrErr);
9038}
9039
9041 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
9042 if (!StreamOrErr)
9043 return StreamOrErr.takeError();
9044
9045 return readIdentificationCode(*StreamOrErr);
9046}
9047
9049 ModuleSummaryIndex &CombinedIndex) {
9051 if (!BM)
9052 return BM.takeError();
9053
9054 return BM->readSummary(CombinedIndex, BM->getModuleIdentifier());
9055}
9056
9060 if (!BM)
9061 return BM.takeError();
9062
9063 return BM->getSummary();
9064}
9065
9068 if (!BM)
9069 return BM.takeError();
9070
9071 return BM->getLTOInfo();
9072}
9073
9076 bool IgnoreEmptyThinLTOIndexFile) {
9079 if (!FileOrErr)
9080 return errorCodeToError(FileOrErr.getError());
9081 if (IgnoreEmptyThinLTOIndexFile && !(*FileOrErr)->getBufferSize())
9082 return nullptr;
9083 return getModuleSummaryIndex(**FileOrErr);
9084}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
aarch64 promote const
unsigned uint64_t
static bool isConstant(const MachineInstr &MI)
This file declares a class to represent arbitrary precision floating point values and provide a varie...
This file implements a class to represent arbitrary precision integral constant values and operations...
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Expand Atomic instructions
Atomic ordering constants.
This file contains the simple types necessary to represent the attributes associated with functions a...
static void getDecodedRelBFCallEdgeInfo(uint64_t RawFlags, uint64_t &RelBF, bool &HasTailCall)
static void upgradeDLLImportExportLinkage(GlobalValue *GV, unsigned Val)
static cl::opt< bool > PrintSummaryGUIDs("print-summary-global-ids", cl::init(false), cl::Hidden, cl::desc("Print the global id for each value when reading the module summary"))
static AtomicOrdering getDecodedOrdering(unsigned Val)
static std::pair< CalleeInfo::HotnessType, bool > getDecodedHotnessCallEdgeInfo(uint64_t RawFlags)
static FunctionSummary::FFlags getDecodedFFlags(uint64_t RawFlags)
static std::optional< CodeModel::Model > getDecodedCodeModel(unsigned Val)
static void setSpecialRefs(SmallVectorImpl< ValueInfo > &Refs, unsigned ROCnt, unsigned WOCnt)
static bool getDecodedDSOLocal(unsigned Val)
static bool convertToString(ArrayRef< uint64_t > Record, unsigned Idx, StrTy &Result)
Convert a string from a record into an std::string, return true on failure.
static GlobalVariable::UnnamedAddr getDecodedUnnamedAddrType(unsigned Val)
static void stripTBAA(Module *M)
static int getDecodedUnaryOpcode(unsigned Val, Type *Ty)
static Expected< std::string > readTriple(BitstreamCursor &Stream)
static void parseWholeProgramDevirtResolutionByArg(ArrayRef< uint64_t > Record, size_t &Slot, WholeProgramDevirtResolution &Wpd)
static uint64_t getRawAttributeMask(Attribute::AttrKind Val)
static GlobalValueSummary::GVFlags getDecodedGVSummaryFlags(uint64_t RawFlags, uint64_t Version)
static GlobalVarSummary::GVarFlags getDecodedGVarFlags(uint64_t RawFlags)
static Attribute::AttrKind getAttrFromCode(uint64_t Code)
static Expected< uint64_t > jumpToValueSymbolTable(uint64_t Offset, BitstreamCursor &Stream)
Helper to note and return the current location, and jump to the given offset.
static Expected< bool > hasObjCCategoryInModule(BitstreamCursor &Stream)
static GlobalValue::DLLStorageClassTypes getDecodedDLLStorageClass(unsigned Val)
static GEPNoWrapFlags toGEPNoWrapFlags(uint64_t Flags)
static void decodeLLVMAttributesForBitcode(AttrBuilder &B, uint64_t EncodedAttrs, uint64_t AttrIdx)
This fills an AttrBuilder object with the LLVM attributes that have been decoded from the given integ...
static AtomicRMWInst::BinOp getDecodedRMWOperation(unsigned Val, bool &IsElementwise)
static void parseTypeIdSummaryRecord(ArrayRef< uint64_t > Record, StringRef Strtab, ModuleSummaryIndex &TheIndex)
static void addRawAttributeValue(AttrBuilder &B, uint64_t Val)
static Comdat::SelectionKind getDecodedComdatSelectionKind(unsigned Val)
static bool hasImplicitComdat(size_t Val)
static GlobalValue::LinkageTypes getDecodedLinkage(unsigned Val)
static Error hasInvalidBitcodeHeader(BitstreamCursor &Stream)
static Expected< std::string > readIdentificationCode(BitstreamCursor &Stream)
static int getDecodedBinaryOpcode(unsigned Val, Type *Ty)
static Expected< BitcodeModule > getSingleModule(MemoryBufferRef Buffer)
static Expected< bool > hasObjCCategory(BitstreamCursor &Stream)
static GlobalVariable::ThreadLocalMode getDecodedThreadLocalMode(unsigned Val)
static void parseWholeProgramDevirtResolution(ArrayRef< uint64_t > Record, StringRef Strtab, size_t &Slot, TypeIdSummary &TypeId)
static void inferDSOLocal(GlobalValue *GV)
static FastMathFlags getDecodedFastMathFlags(unsigned Val)
GlobalValue::SanitizerMetadata deserializeSanitizerMetadata(unsigned V)
static Expected< BitstreamCursor > initStream(MemoryBufferRef Buffer)
static cl::opt< bool > ExpandConstantExprs("expand-constant-exprs", cl::Hidden, cl::desc("Expand constant expressions to instructions for testing purposes"))
static bool upgradeOldMemoryAttribute(MemoryEffects &ME, uint64_t EncodedKind)
static Expected< StringRef > readBlobInRecord(BitstreamCursor &Stream, unsigned Block, unsigned RecordID)
static Expected< std::string > readIdentificationBlock(BitstreamCursor &Stream)
Read the "IDENTIFICATION_BLOCK_ID" block, do some basic enforcement on the "epoch" encoded in the bit...
static Expected< std::pair< bool, bool > > getEnableSplitLTOUnitAndUnifiedFlag(BitstreamCursor &Stream, unsigned ID)
static bool isConstExprSupported(const BitcodeConstant *BC)
static int getDecodedCastOpcode(unsigned Val)
static Expected< std::string > readModuleTriple(BitstreamCursor &Stream)
static GlobalValue::VisibilityTypes getDecodedVisibility(unsigned Val)
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
static StringRef getOpcodeName(uint8_t Opcode, uint8_t OpcodeBase)
DXIL Finalize Linkage
dxil translate DXIL Translate Metadata
This file defines the DenseMap class.
@ Default
Provides ErrorOr<T> smart pointer.
This file contains the declaration of the GlobalIFunc class, which represents a single indirect funct...
Hexagon Common GEP
Module.h This file contains the declarations for the Module class.
static constexpr Value * getValue(Ty &ValueOrUse)
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
Machine Check Debug Module
AllocType
This file contains the declarations for metadata subclasses.
static bool InRange(int64_t Value, unsigned short Shift, int LBound, int HBound)
Type::TypeID TypeID
#define T
ModuleSummaryIndex.h This file contains the declarations the classes that hold the module index and s...
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
uint64_t High
PowerPC Reduce CR logical Operation
This file contains the declarations for profiling metadata utility functions.
const SmallVectorImpl< MachineOperand > & Cond
This file contains some templates that are useful if you are working with the STL at all.
static const char * name
BaseType
A given derived pointer can have multiple base pointers through phi/selects.
This file defines the SmallString class.
This file defines the SmallVector class.
#define error(X)
static SymbolRef::Type getType(const Symbol *Sym)
Definition TapiFile.cpp:39
Value * RHS
Value * LHS
Class for arbitrary precision integers.
Definition APInt.h:78
void setSwiftError(bool V)
Specify whether this alloca is used to represent a swifterror.
PointerType * getType() const
Overload to return most specific pointer type.
void setUsedWithInAlloca(bool V)
Specify whether this alloca is used to represent the arguments to a call.
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
size_t size() const
Get the array size.
Definition ArrayRef.h:141
bool empty() const
Check if the array is empty.
Definition ArrayRef.h:136
ArrayRef< T > slice(size_t N, size_t M) const
slice(n, m) - Chop off the first N elements of the array, and keep M elements in the array.
Definition ArrayRef.h:185
static bool isValidFailureOrdering(AtomicOrdering Ordering)
static AtomicOrdering getStrongestFailureOrdering(AtomicOrdering SuccessOrdering)
Returns the strongest permitted ordering on failure, given the desired ordering on success.
static bool isValidSuccessOrdering(AtomicOrdering Ordering)
BinOp
This enumeration lists the possible modifications atomicrmw can make.
@ Add
*p = old + v
@ FAdd
*p = old + v
@ USubCond
Subtract only if no unsigned overflow.
@ FMinimum
*p = minimum(old, v) minimum matches the behavior of llvm.minimum.
@ Min
*p = old <signed v ? old : v
@ Sub
*p = old - v
@ And
*p = old & v
@ Xor
*p = old ^ v
@ USubSat
*p = usub.sat(old, v) usub.sat matches the behavior of llvm.usub.sat.
@ FMaximum
*p = maximum(old, v) maximum matches the behavior of llvm.maximum.
@ FSub
*p = old - v
@ UIncWrap
Increment one up to a maximum value.
@ Max
*p = old >signed v ? old : v
@ UMin
*p = old <unsigned v ? old : v
@ FMin
*p = minnum(old, v) minnum matches the behavior of llvm.minnum.
@ UMax
*p = old >unsigned v ? old : v
@ FMaximumNum
*p = maximumnum(old, v) maximumnum matches the behavior of llvm.maximumnum.
@ FMax
*p = maxnum(old, v) maxnum matches the behavior of llvm.maxnum.
@ UDecWrap
Decrement one until a minimum value or zero.
@ FMinimumNum
*p = minimumnum(old, v) minimumnum matches the behavior of llvm.minimumnum.
@ Nand
*p = ~(old & v)
static bool isTypeAttrKind(AttrKind Kind)
Definition Attributes.h:143
AttrKind
This enumeration lists the attributes that can be associated with parameters, function results,...
Definition Attributes.h:124
@ TombstoneKey
Use as Tombstone key for DenseMap of AttrKind.
Definition Attributes.h:131
@ None
No attributes have been set.
Definition Attributes.h:126
@ EmptyKey
Use as Empty key for DenseMap of AttrKind.
Definition Attributes.h:130
@ EndAttrKinds
Sentinel value useful for loops.
Definition Attributes.h:129
LLVM Basic Block Representation.
Definition BasicBlock.h:62
iterator end()
Definition BasicBlock.h:459
bool empty() const
Definition BasicBlock.h:468
const Instruction & back() const
Definition BasicBlock.h:471
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=nullptr, BasicBlock *InsertBefore=nullptr)
Creates a new BasicBlock.
Definition BasicBlock.h:206
LLVM_ABI void replacePhiUsesWith(BasicBlock *Old, BasicBlock *New)
Update all phi nodes in this basic block to refer to basic block New instead of basic block Old.
LLVM_ABI SymbolTableList< BasicBlock >::iterator eraseFromParent()
Unlink 'this' from the containing function and delete it.
void moveBefore(BasicBlock *MovePos)
Unlink this basic block from its current function and insert it into the function that MovePos lives ...
Definition BasicBlock.h:373
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction; assumes that the block is well-formed.
Definition BasicBlock.h:237
static LLVM_ABI BinaryOperator * Create(BinaryOps Op, Value *S1, Value *S2, const Twine &Name=Twine(), InsertPosition InsertBefore=nullptr)
Construct a binary instruction, given the opcode and the two operands.
Represents a module in a bitcode file.
LLVM_ABI Expected< std::unique_ptr< ModuleSummaryIndex > > getSummary()
Parse the specified bitcode buffer, returning the module summary index.
LLVM_ABI Expected< BitcodeLTOInfo > getLTOInfo()
Returns information about the module to be used for LTO: whether to compile with ThinLTO,...
LLVM_ABI Expected< std::unique_ptr< Module > > parseModule(LLVMContext &Context, ParserCallbacks Callbacks={})
Read the entire bitcode module and return it.
LLVM_ABI Error readSummary(ModuleSummaryIndex &CombinedIndex, StringRef ModulePath, std::function< bool(StringRef)> IsPrevailing=nullptr, std::function< void(ValueInfo)> OnValueInfo=nullptr)
Parse the specified bitcode buffer and merge its module summary index into CombinedIndex.
LLVM_ABI Expected< std::unique_ptr< Module > > getLazyModule(LLVMContext &Context, bool ShouldLazyLoadMetadata, bool IsImporting, ParserCallbacks Callbacks={})
Read the bitcode module and prepare for lazy deserialization of function bodies.
Value * getValueFwdRef(unsigned Idx, Type *Ty, unsigned TyID, BasicBlock *ConstExprInsertBB)
Definition ValueList.cpp:50
void push_back(Value *V, unsigned TypeID)
Definition ValueList.h:52
void replaceValueWithoutRAUW(unsigned ValNo, Value *NewV)
Definition ValueList.h:81
Error assignValue(unsigned Idx, Value *V, unsigned TypeID)
Definition ValueList.cpp:21
void shrinkTo(unsigned N)
Definition ValueList.h:76
unsigned getTypeID(unsigned ValNo) const
Definition ValueList.h:65
unsigned size() const
Definition ValueList.h:48
This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor.
Error JumpToBit(uint64_t BitNo)
Reset the stream to the specified bit number.
uint64_t GetCurrentBitNo() const
Return the bit # of the bit we are reading.
ArrayRef< uint8_t > getBitcodeBytes() const
Expected< word_t > Read(unsigned NumBits)
Expected< BitstreamEntry > advance(unsigned Flags=0)
Advance the current bitstream, returning the next entry in the stream.
Expected< BitstreamEntry > advanceSkippingSubblocks(unsigned Flags=0)
This is a convenience function for clients that don't expect any subblocks.
LLVM_ABI Expected< unsigned > readRecord(unsigned AbbrevID, SmallVectorImpl< uint64_t > &Vals, StringRef *Blob=nullptr)
LLVM_ABI Error EnterSubBlock(unsigned BlockID, unsigned *NumWordsP=nullptr)
Having read the ENTER_SUBBLOCK abbrevid, and enter the block.
Error SkipBlock()
Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body of this block.
LLVM_ABI Expected< unsigned > skipRecord(unsigned AbbrevID)
Read the current record and discard it, returning the code for the record.
uint64_t getCurrentByteNo() const
LLVM_ABI Expected< std::optional< BitstreamBlockInfo > > ReadBlockInfoBlock(bool ReadBlockInfoNames=false)
Read and return a block info block from the bitstream.
unsigned getAbbrevIDWidth() const
Return the number of bits used to encode an abbrev #.
bool canSkipToPos(size_t pos) const
static LLVM_ABI BlockAddress * get(Function *F, BasicBlock *BB)
Return a BlockAddress for the specified function and basic block.
@ MIN_BYTE_BITS
Minimum number of bits that can be specified.
@ MAX_BYTE_BITS
Maximum number of bits that can be specified Note that bit width is stored in the Type classes Subcla...
static LLVM_ABI ByteType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing a ByteType.
Definition Type.cpp:378
bool isInlineAsm() const
Check if this call is an inline asm statement.
Value * getCalledOperand() const
void setAttributes(AttributeList A)
Set the attributes for this call.
LLVM_ABI Intrinsic::ID getIntrinsicID() const
Returns the intrinsic ID of the intrinsic called or Intrinsic::not_intrinsic if the called function i...
unsigned arg_size() const
AttributeList getAttributes() const
Return the attributes for this call.
static CallBrInst * Create(FunctionType *Ty, Value *Func, BasicBlock *DefaultDest, ArrayRef< BasicBlock * > IndirectDests, ArrayRef< Value * > Args, const Twine &NameStr, InsertPosition InsertBefore=nullptr)
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static CaptureInfo createFromIntValue(uint32_t Data)
Definition ModRef.h:485
static CaptureInfo none()
Create CaptureInfo that does not capture any components of the pointer.
Definition ModRef.h:427
static LLVM_ABI CastInst * Create(Instruction::CastOps, Value *S, Type *Ty, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Provid