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::InlineHint;
2154 return Attribute::InReg;
2156 return Attribute::JumpTable;
2158 return Attribute::Memory;
2160 return Attribute::NoFPClass;
2162 return Attribute::MinSize;
2164 return Attribute::Naked;
2166 return Attribute::Nest;
2168 return Attribute::NoAlias;
2170 return Attribute::NoBuiltin;
2172 return Attribute::NoCallback;
2174 return Attribute::NoDivergenceSource;
2176 return Attribute::NoDuplicate;
2178 return Attribute::NoFree;
2180 return Attribute::NoImplicitFloat;
2182 return Attribute::NoInline;
2184 return Attribute::NoRecurse;
2186 return Attribute::NoMerge;
2188 return Attribute::NonLazyBind;
2190 return Attribute::NonNull;
2192 return Attribute::Dereferenceable;
2194 return Attribute::DereferenceableOrNull;
2196 return Attribute::AllocAlign;
2198 return Attribute::AllocKind;
2200 return Attribute::AllocSize;
2202 return Attribute::AllocatedPointer;
2204 return Attribute::NoRedZone;
2206 return Attribute::NoReturn;
2208 return Attribute::NoSync;
2210 return Attribute::NoCfCheck;
2212 return Attribute::NoProfile;
2214 return Attribute::SkipProfile;
2216 return Attribute::NoUnwind;
2218 return Attribute::NoSanitizeBounds;
2220 return Attribute::NoSanitizeCoverage;
2222 return Attribute::NullPointerIsValid;
2224 return Attribute::OptimizeForDebugging;
2226 return Attribute::OptForFuzzing;
2228 return Attribute::OptimizeForSize;
2230 return Attribute::OptimizeNone;
2232 return Attribute::ReadNone;
2234 return Attribute::ReadOnly;
2236 return Attribute::Returned;
2238 return Attribute::ReturnsTwice;
2240 return Attribute::SExt;
2242 return Attribute::Speculatable;
2244 return Attribute::StackAlignment;
2246 return Attribute::StackProtect;
2248 return Attribute::StackProtectReq;
2250 return Attribute::StackProtectStrong;
2252 return Attribute::SafeStack;
2254 return Attribute::ShadowCallStack;
2256 return Attribute::StrictFP;
2258 return Attribute::StructRet;
2260 return Attribute::SanitizeAddress;
2262 return Attribute::SanitizeHWAddress;
2264 return Attribute::SanitizeThread;
2266 return Attribute::SanitizeType;
2268 return Attribute::SanitizeMemory;
2270 return Attribute::SanitizeNumericalStability;
2272 return Attribute::SanitizeRealtime;
2274 return Attribute::SanitizeRealtimeBlocking;
2276 return Attribute::SanitizeAllocToken;
2278 return Attribute::SpeculativeLoadHardening;
2280 return Attribute::SwiftError;
2282 return Attribute::SwiftSelf;
2284 return Attribute::SwiftAsync;
2286 return Attribute::UWTable;
2288 return Attribute::VScaleRange;
2290 return Attribute::WillReturn;
2292 return Attribute::WriteOnly;
2294 return Attribute::ZExt;
2296 return Attribute::ImmArg;
2298 return Attribute::SanitizeMemTag;
2300 return Attribute::Preallocated;
2302 return Attribute::NoUndef;
2304 return Attribute::ByRef;
2306 return Attribute::MustProgress;
2308 return Attribute::Hot;
2310 return Attribute::PresplitCoroutine;
2312 return Attribute::Writable;
2314 return Attribute::CoroDestroyOnlyWhenComplete;
2316 return Attribute::DeadOnUnwind;
2318 return Attribute::Range;
2320 return Attribute::Initializes;
2322 return Attribute::CoroElideSafe;
2324 return Attribute::NoExt;
2326 return Attribute::Captures;
2328 return Attribute::DeadOnReturn;
2330 return Attribute::NoCreateUndefOrPoison;
2332 return Attribute::DenormalFPEnv;
2334 return Attribute::NoOutline;
2336 return Attribute::NoIPA;
2337 }
2338}
2339
2340Error BitcodeReader::parseAlignmentValue(uint64_t Exponent,
2341 MaybeAlign &Alignment) {
2342 // Note: Alignment in bitcode files is incremented by 1, so that zero
2343 // can be used for default alignment.
2344 if (Exponent > Value::MaxAlignmentExponent + 1)
2345 return error("Invalid alignment value");
2346 Alignment = decodeMaybeAlign(Exponent);
2347 return Error::success();
2348}
2349
2350Error BitcodeReader::parseAttrKind(uint64_t Code, Attribute::AttrKind *Kind) {
2351 *Kind = getAttrFromCode(Code);
2352 if (*Kind == Attribute::None)
2353 return error("Unknown attribute kind (" + Twine(Code) + ")");
2354 return Error::success();
2355}
2356
2357static bool upgradeOldMemoryAttribute(MemoryEffects &ME, uint64_t EncodedKind) {
2358 switch (EncodedKind) {
2360 ME &= MemoryEffects::none();
2361 return true;
2364 return true;
2367 return true;
2370 return true;
2373 return true;
2376 return true;
2377 default:
2378 return false;
2379 }
2380}
2381
2382Error BitcodeReader::parseAttributeGroupBlock() {
2384 return Err;
2385
2386 if (!MAttributeGroups.empty())
2387 return error("Invalid multiple blocks");
2388
2389 SmallVector<uint64_t, 64> Record;
2390
2391 // Read all the records.
2392 while (true) {
2393 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2394 if (!MaybeEntry)
2395 return MaybeEntry.takeError();
2396 BitstreamEntry Entry = MaybeEntry.get();
2397
2398 switch (Entry.Kind) {
2399 case BitstreamEntry::SubBlock: // Handled for us already.
2401 return error("Malformed block");
2403 return Error::success();
2405 // The interesting case.
2406 break;
2407 }
2408
2409 // Read a record.
2410 Record.clear();
2411 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2412 if (!MaybeRecord)
2413 return MaybeRecord.takeError();
2414 switch (MaybeRecord.get()) {
2415 default: // Default behavior: ignore.
2416 break;
2417 case bitc::PARAMATTR_GRP_CODE_ENTRY: { // ENTRY: [grpid, idx, a0, a1, ...]
2418 if (Record.size() < 3)
2419 return error("Invalid grp record");
2420
2421 uint64_t GrpID = Record[0];
2422 uint64_t Idx = Record[1]; // Index of the object this attribute refers to.
2423
2424 AttrBuilder B(Context);
2426 for (unsigned i = 2, e = Record.size(); i != e; ++i) {
2427 if (Record[i] == 0) { // Enum attribute
2428 Attribute::AttrKind Kind;
2429 uint64_t EncodedKind = Record[++i];
2430 if (Idx == AttributeList::FunctionIndex &&
2431 upgradeOldMemoryAttribute(ME, EncodedKind))
2432 continue;
2433
2434 if (EncodedKind == bitc::ATTR_KIND_NO_CAPTURE) {
2435 B.addCapturesAttr(CaptureInfo::none());
2436 continue;
2437 }
2438
2439 if (Error Err = parseAttrKind(EncodedKind, &Kind))
2440 return Err;
2441
2442 // Upgrade old-style byval attribute to one with a type, even if it's
2443 // nullptr. We will have to insert the real type when we associate
2444 // this AttributeList with a function.
2445 if (Kind == Attribute::ByVal)
2446 B.addByValAttr(nullptr);
2447 else if (Kind == Attribute::StructRet)
2448 B.addStructRetAttr(nullptr);
2449 else if (Kind == Attribute::InAlloca)
2450 B.addInAllocaAttr(nullptr);
2451 else if (Kind == Attribute::UWTable)
2452 B.addUWTableAttr(UWTableKind::Default);
2453 else if (Kind == Attribute::DeadOnReturn)
2454 B.addDeadOnReturnAttr(DeadOnReturnInfo());
2455 else if (Attribute::isEnumAttrKind(Kind))
2456 B.addAttribute(Kind);
2457 else
2458 return error("Not an enum attribute");
2459 } else if (Record[i] == 1) { // Integer attribute
2460 Attribute::AttrKind Kind;
2461 if (Error Err = parseAttrKind(Record[++i], &Kind))
2462 return Err;
2463 if (!Attribute::isIntAttrKind(Kind))
2464 return error("Not an int attribute");
2465 if (Kind == Attribute::Alignment)
2466 B.addAlignmentAttr(Record[++i]);
2467 else if (Kind == Attribute::StackAlignment)
2468 B.addStackAlignmentAttr(Record[++i]);
2469 else if (Kind == Attribute::Dereferenceable)
2470 B.addDereferenceableAttr(Record[++i]);
2471 else if (Kind == Attribute::DereferenceableOrNull)
2472 B.addDereferenceableOrNullAttr(Record[++i]);
2473 else if (Kind == Attribute::DeadOnReturn)
2474 B.addDeadOnReturnAttr(
2476 else if (Kind == Attribute::AllocSize)
2477 B.addAllocSizeAttrFromRawRepr(Record[++i]);
2478 else if (Kind == Attribute::VScaleRange)
2479 B.addVScaleRangeAttrFromRawRepr(Record[++i]);
2480 else if (Kind == Attribute::UWTable)
2481 B.addUWTableAttr(UWTableKind(Record[++i]));
2482 else if (Kind == Attribute::AllocKind)
2483 B.addAllocKindAttr(static_cast<AllocFnKind>(Record[++i]));
2484 else if (Kind == Attribute::Memory) {
2485 uint64_t EncodedME = Record[++i];
2486 const uint8_t Version = (EncodedME >> 56);
2487 if (Version == 0) {
2488 // Errno memory location was previously encompassed into default
2489 // memory. Ensure this is taken into account while reconstructing
2490 // the memory attribute prior to its introduction.
2491 ModRefInfo ArgMem = ModRefInfo((EncodedME >> 0) & 3);
2492 ModRefInfo InaccessibleMem = ModRefInfo((EncodedME >> 2) & 3);
2493 ModRefInfo OtherMem = ModRefInfo((EncodedME >> 4) & 3);
2496 MemoryEffects::errnoMemOnly(OtherMem) |
2498 // Old bitcode encoded AArch64 state as inaccessible memory.
2499 // Upgrade those effects to target-specific memory locations.
2500 if (getTargetTriple().isAArch64())
2501 ME = ME.getWithModRef(IRMemLocation::TargetMem0,
2503 ME.getWithModRef(IRMemLocation::TargetMem1,
2505 B.addMemoryAttr(ME);
2506 } else {
2507 // Construct the memory attribute directly from the encoded base
2508 // on newer versions.
2510 EncodedME & 0x00FFFFFFFFFFFFFFULL);
2511 // Upgrade to target-specific memory locations introduced in
2512 // version 2.
2513 if (Version == 1 && getTargetTriple().isAArch64())
2514 ME = ME.getWithModRef(
2515 IRMemLocation::TargetMem0,
2516 ME.getModRef(IRMemLocation::InaccessibleMem)) |
2517 ME.getWithModRef(
2518 IRMemLocation::TargetMem1,
2519 ME.getModRef(IRMemLocation::InaccessibleMem));
2520 B.addMemoryAttr(ME);
2521 }
2522 } else if (Kind == Attribute::Captures)
2523 B.addCapturesAttr(CaptureInfo::createFromIntValue(Record[++i]));
2524 else if (Kind == Attribute::NoFPClass)
2525 B.addNoFPClassAttr(
2526 static_cast<FPClassTest>(Record[++i] & fcAllFlags));
2527 else if (Kind == Attribute::DenormalFPEnv) {
2528 B.addDenormalFPEnvAttr(
2530 }
2531 } else if (Record[i] == 3 || Record[i] == 4) { // String attribute
2532 bool HasValue = (Record[i++] == 4);
2533 SmallString<64> KindStr;
2534 SmallString<64> ValStr;
2535
2536 while (Record[i] != 0 && i != e)
2537 KindStr += Record[i++];
2538 assert(Record[i] == 0 && "Kind string not null terminated");
2539
2540 if (HasValue) {
2541 // Has a value associated with it.
2542 ++i; // Skip the '0' that terminates the "kind" string.
2543 while (Record[i] != 0 && i != e)
2544 ValStr += Record[i++];
2545 assert(Record[i] == 0 && "Value string not null terminated");
2546 }
2547
2548 B.addAttribute(KindStr.str(), ValStr.str());
2549 } else if (Record[i] == 5 || Record[i] == 6) {
2550 bool HasType = Record[i] == 6;
2551 Attribute::AttrKind Kind;
2552 if (Error Err = parseAttrKind(Record[++i], &Kind))
2553 return Err;
2554 if (!Attribute::isTypeAttrKind(Kind))
2555 return error("Not a type attribute");
2556
2557 B.addTypeAttr(Kind, HasType ? getTypeByID(Record[++i]) : nullptr);
2558 } else if (Record[i] == 7) {
2559 Attribute::AttrKind Kind;
2560
2561 i++;
2562 if (Error Err = parseAttrKind(Record[i++], &Kind))
2563 return Err;
2564 if (!Attribute::isConstantRangeAttrKind(Kind))
2565 return error("Not a ConstantRange attribute");
2566
2567 Expected<ConstantRange> MaybeCR =
2568 readBitWidthAndConstantRange(Record, i);
2569 if (!MaybeCR)
2570 return MaybeCR.takeError();
2571 i--;
2572
2573 B.addConstantRangeAttr(Kind, MaybeCR.get());
2574 } else if (Record[i] == 8) {
2575 Attribute::AttrKind Kind;
2576
2577 i++;
2578 if (Error Err = parseAttrKind(Record[i++], &Kind))
2579 return Err;
2580 if (!Attribute::isConstantRangeListAttrKind(Kind))
2581 return error("Not a constant range list attribute");
2582
2584 if (i + 2 > e)
2585 return error("Too few records for constant range list");
2586 unsigned RangeSize = Record[i++];
2587 unsigned BitWidth = Record[i++];
2588 for (unsigned Idx = 0; Idx < RangeSize; ++Idx) {
2589 Expected<ConstantRange> MaybeCR =
2590 readConstantRange(Record, i, BitWidth);
2591 if (!MaybeCR)
2592 return MaybeCR.takeError();
2593 Val.push_back(MaybeCR.get());
2594 }
2595 i--;
2596
2598 return error("Invalid (unordered or overlapping) range list");
2599 B.addConstantRangeListAttr(Kind, Val);
2600 } else {
2601 return error("Invalid attribute group entry");
2602 }
2603 }
2604
2605 if (ME != MemoryEffects::unknown())
2606 B.addMemoryAttr(ME);
2607
2609 MAttributeGroups[GrpID] = AttributeList::get(Context, Idx, B);
2610 break;
2611 }
2612 }
2613 }
2614}
2615
2616Error BitcodeReader::parseTypeTable() {
2618 return Err;
2619
2620 return parseTypeTableBody();
2621}
2622
2623Error BitcodeReader::parseTypeTableBody() {
2624 if (!TypeList.empty())
2625 return error("Invalid multiple blocks");
2626
2627 SmallVector<uint64_t, 64> Record;
2628 unsigned NumRecords = 0;
2629
2630 SmallString<64> TypeName;
2631
2632 // Read all the records for this type table.
2633 while (true) {
2634 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2635 if (!MaybeEntry)
2636 return MaybeEntry.takeError();
2637 BitstreamEntry Entry = MaybeEntry.get();
2638
2639 switch (Entry.Kind) {
2640 case BitstreamEntry::SubBlock: // Handled for us already.
2642 return error("Malformed block");
2644 if (NumRecords != TypeList.size())
2645 return error("Malformed block");
2646 return Error::success();
2648 // The interesting case.
2649 break;
2650 }
2651
2652 // Read a record.
2653 Record.clear();
2654 Type *ResultTy = nullptr;
2655 SmallVector<unsigned> ContainedIDs;
2656 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2657 if (!MaybeRecord)
2658 return MaybeRecord.takeError();
2659 switch (MaybeRecord.get()) {
2660 default:
2661 return error("Invalid value");
2662 case bitc::TYPE_CODE_NUMENTRY: // TYPE_CODE_NUMENTRY: [numentries]
2663 // TYPE_CODE_NUMENTRY contains a count of the number of types in the
2664 // type list. This allows us to reserve space.
2665 if (Record.empty())
2666 return error("Invalid numentry record");
2667 TypeList.resize(Record[0]);
2668 continue;
2669 case bitc::TYPE_CODE_VOID: // VOID
2670 ResultTy = Type::getVoidTy(Context);
2671 break;
2672 case bitc::TYPE_CODE_HALF: // HALF
2673 ResultTy = Type::getHalfTy(Context);
2674 break;
2675 case bitc::TYPE_CODE_BFLOAT: // BFLOAT
2676 ResultTy = Type::getBFloatTy(Context);
2677 break;
2678 case bitc::TYPE_CODE_FLOAT: // FLOAT
2679 ResultTy = Type::getFloatTy(Context);
2680 break;
2681 case bitc::TYPE_CODE_DOUBLE: // DOUBLE
2682 ResultTy = Type::getDoubleTy(Context);
2683 break;
2684 case bitc::TYPE_CODE_X86_FP80: // X86_FP80
2685 ResultTy = Type::getX86_FP80Ty(Context);
2686 break;
2687 case bitc::TYPE_CODE_FP128: // FP128
2688 ResultTy = Type::getFP128Ty(Context);
2689 break;
2690 case bitc::TYPE_CODE_PPC_FP128: // PPC_FP128
2691 ResultTy = Type::getPPC_FP128Ty(Context);
2692 break;
2693 case bitc::TYPE_CODE_LABEL: // LABEL
2694 ResultTy = Type::getLabelTy(Context);
2695 break;
2696 case bitc::TYPE_CODE_METADATA: // METADATA
2697 ResultTy = Type::getMetadataTy(Context);
2698 break;
2699 case bitc::TYPE_CODE_X86_MMX: // X86_MMX
2700 // Deprecated: decodes as <1 x i64>
2701 ResultTy =
2703 break;
2704 case bitc::TYPE_CODE_X86_AMX: // X86_AMX
2705 ResultTy = Type::getX86_AMXTy(Context);
2706 break;
2707 case bitc::TYPE_CODE_TOKEN: // TOKEN
2708 ResultTy = Type::getTokenTy(Context);
2709 break;
2710 case bitc::TYPE_CODE_BYTE: { // BYTE: [width]
2711 if (Record.empty())
2712 return error("Invalid record");
2713
2714 uint64_t NumBits = Record[0];
2715 if (NumBits < ByteType::MIN_BYTE_BITS ||
2716 NumBits > ByteType::MAX_BYTE_BITS)
2717 return error("Bitwidth for byte type out of range");
2718 ResultTy = ByteType::get(Context, NumBits);
2719 break;
2720 }
2721 case bitc::TYPE_CODE_INTEGER: { // INTEGER: [width]
2722 if (Record.empty())
2723 return error("Invalid integer record");
2724
2725 uint64_t NumBits = Record[0];
2726 if (NumBits < IntegerType::MIN_INT_BITS ||
2727 NumBits > IntegerType::MAX_INT_BITS)
2728 return error("Bitwidth for integer type out of range");
2729 ResultTy = IntegerType::get(Context, NumBits);
2730 break;
2731 }
2732 case bitc::TYPE_CODE_POINTER: { // POINTER: [pointee type] or
2733 // [pointee type, address space]
2734 if (Record.empty())
2735 return error("Invalid pointer record");
2736 unsigned AddressSpace = 0;
2737 if (Record.size() == 2)
2738 AddressSpace = Record[1];
2739 ResultTy = getTypeByID(Record[0]);
2740 if (!ResultTy ||
2741 !PointerType::isValidElementType(ResultTy))
2742 return error("Invalid type");
2743 ContainedIDs.push_back(Record[0]);
2744 ResultTy = PointerType::get(ResultTy->getContext(), AddressSpace);
2745 break;
2746 }
2747 case bitc::TYPE_CODE_OPAQUE_POINTER: { // OPAQUE_POINTER: [addrspace]
2748 if (Record.size() != 1)
2749 return error("Invalid opaque pointer record");
2750 unsigned AddressSpace = Record[0];
2751 ResultTy = PointerType::get(Context, AddressSpace);
2752 break;
2753 }
2755 // Deprecated, but still needed to read old bitcode files.
2756 // FUNCTION: [vararg, attrid, retty, paramty x N]
2757 if (Record.size() < 3)
2758 return error("Invalid function record");
2759 SmallVector<Type*, 8> ArgTys;
2760 for (unsigned i = 3, e = Record.size(); i != e; ++i) {
2761 if (Type *T = getTypeByID(Record[i]))
2762 ArgTys.push_back(T);
2763 else
2764 break;
2765 }
2766
2767 ResultTy = getTypeByID(Record[2]);
2768 if (!ResultTy || ArgTys.size() < Record.size()-3)
2769 return error("Invalid type");
2770
2771 ContainedIDs.append(Record.begin() + 2, Record.end());
2772 ResultTy = FunctionType::get(ResultTy, ArgTys, Record[0]);
2773 break;
2774 }
2776 // FUNCTION: [vararg, retty, paramty x N]
2777 if (Record.size() < 2)
2778 return error("Invalid function record");
2779 SmallVector<Type*, 8> ArgTys;
2780 for (unsigned i = 2, e = Record.size(); i != e; ++i) {
2781 if (Type *T = getTypeByID(Record[i])) {
2782 if (!FunctionType::isValidArgumentType(T))
2783 return error("Invalid function argument type");
2784 ArgTys.push_back(T);
2785 }
2786 else
2787 break;
2788 }
2789
2790 ResultTy = getTypeByID(Record[1]);
2791 if (!ResultTy || ArgTys.size() < Record.size()-2)
2792 return error("Invalid type");
2793
2794 ContainedIDs.append(Record.begin() + 1, Record.end());
2795 ResultTy = FunctionType::get(ResultTy, ArgTys, Record[0]);
2796 break;
2797 }
2798 case bitc::TYPE_CODE_STRUCT_ANON: { // STRUCT: [ispacked, eltty x N]
2799 if (Record.empty())
2800 return error("Invalid anon struct record");
2801 SmallVector<Type*, 8> EltTys;
2802 for (unsigned i = 1, e = Record.size(); i != e; ++i) {
2803 if (Type *T = getTypeByID(Record[i]))
2804 EltTys.push_back(T);
2805 else
2806 break;
2807 }
2808 if (EltTys.size() != Record.size()-1)
2809 return error("Invalid type");
2810 ContainedIDs.append(Record.begin() + 1, Record.end());
2811 ResultTy = StructType::get(Context, EltTys, Record[0]);
2812 break;
2813 }
2814 case bitc::TYPE_CODE_STRUCT_NAME: // STRUCT_NAME: [strchr x N]
2815 if (convertToString(Record, 0, TypeName))
2816 return error("Invalid struct name record");
2817 continue;
2818
2819 case bitc::TYPE_CODE_STRUCT_NAMED: { // STRUCT: [ispacked, eltty x N]
2820 if (Record.empty())
2821 return error("Invalid named struct record");
2822
2823 if (NumRecords >= TypeList.size())
2824 return error("Invalid TYPE table");
2825
2826 // Check to see if this was forward referenced, if so fill in the temp.
2827 StructType *Res = cast_or_null<StructType>(TypeList[NumRecords]);
2828 if (Res) {
2829 Res->setName(TypeName);
2830 TypeList[NumRecords] = nullptr;
2831 } else // Otherwise, create a new struct.
2832 Res = createIdentifiedStructType(Context, TypeName);
2833 TypeName.clear();
2834
2835 SmallVector<Type*, 8> EltTys;
2836 for (unsigned i = 1, e = Record.size(); i != e; ++i) {
2837 if (Type *T = getTypeByID(Record[i]))
2838 EltTys.push_back(T);
2839 else
2840 break;
2841 }
2842 if (EltTys.size() != Record.size()-1)
2843 return error("Invalid named struct record");
2844 if (auto E = Res->setBodyOrError(EltTys, Record[0]))
2845 return E;
2846 ContainedIDs.append(Record.begin() + 1, Record.end());
2847 ResultTy = Res;
2848 break;
2849 }
2850 case bitc::TYPE_CODE_OPAQUE: { // OPAQUE: []
2851 if (Record.size() != 1)
2852 return error("Invalid opaque type record");
2853
2854 if (NumRecords >= TypeList.size())
2855 return error("Invalid TYPE table");
2856
2857 // Check to see if this was forward referenced, if so fill in the temp.
2858 StructType *Res = cast_or_null<StructType>(TypeList[NumRecords]);
2859 if (Res) {
2860 Res->setName(TypeName);
2861 TypeList[NumRecords] = nullptr;
2862 } else // Otherwise, create a new struct with no body.
2863 Res = createIdentifiedStructType(Context, TypeName);
2864 TypeName.clear();
2865 ResultTy = Res;
2866 break;
2867 }
2868 case bitc::TYPE_CODE_TARGET_TYPE: { // TARGET_TYPE: [NumTy, Tys..., Ints...]
2869 if (Record.size() < 1)
2870 return error("Invalid target extension type record");
2871
2872 if (NumRecords >= TypeList.size())
2873 return error("Invalid TYPE table");
2874
2875 if (Record[0] >= Record.size())
2876 return error("Too many type parameters");
2877
2878 unsigned NumTys = Record[0];
2879 SmallVector<Type *, 4> TypeParams;
2880 SmallVector<unsigned, 8> IntParams;
2881 for (unsigned i = 0; i < NumTys; i++) {
2882 if (Type *T = getTypeByID(Record[i + 1]))
2883 TypeParams.push_back(T);
2884 else
2885 return error("Invalid type");
2886 }
2887
2888 for (unsigned i = NumTys + 1, e = Record.size(); i < e; i++) {
2889 if (Record[i] > UINT_MAX)
2890 return error("Integer parameter too large");
2891 IntParams.push_back(Record[i]);
2892 }
2893 auto TTy =
2894 TargetExtType::getOrError(Context, TypeName, TypeParams, IntParams);
2895 if (auto E = TTy.takeError())
2896 return E;
2897 ResultTy = *TTy;
2898 TypeName.clear();
2899 break;
2900 }
2901 case bitc::TYPE_CODE_ARRAY: // ARRAY: [numelts, eltty]
2902 if (Record.size() < 2)
2903 return error("Invalid array type record");
2904 ResultTy = getTypeByID(Record[1]);
2905 if (!ResultTy || !ArrayType::isValidElementType(ResultTy))
2906 return error("Invalid type");
2907 ContainedIDs.push_back(Record[1]);
2908 ResultTy = ArrayType::get(ResultTy, Record[0]);
2909 break;
2910 case bitc::TYPE_CODE_VECTOR: // VECTOR: [numelts, eltty] or
2911 // [numelts, eltty, scalable]
2912 if (Record.size() < 2)
2913 return error("Invalid vector type record");
2914 if (Record[0] == 0)
2915 return error("Invalid vector length");
2916 ResultTy = getTypeByID(Record[1]);
2917 if (!ResultTy || !VectorType::isValidElementType(ResultTy))
2918 return error("Invalid type");
2919 bool Scalable = Record.size() > 2 ? Record[2] : false;
2920 ContainedIDs.push_back(Record[1]);
2921 ResultTy = VectorType::get(ResultTy, Record[0], Scalable);
2922 break;
2923 }
2924
2925 if (NumRecords >= TypeList.size())
2926 return error("Invalid TYPE table");
2927 if (TypeList[NumRecords])
2928 return error(
2929 "Invalid TYPE table: Only named structs can be forward referenced");
2930 assert(ResultTy && "Didn't read a type?");
2931 TypeList[NumRecords] = ResultTy;
2932 if (!ContainedIDs.empty())
2933 ContainedTypeIDs[NumRecords] = std::move(ContainedIDs);
2934 ++NumRecords;
2935 }
2936}
2937
2938Error BitcodeReader::parseOperandBundleTags() {
2940 return Err;
2941
2942 if (!BundleTags.empty())
2943 return error("Invalid multiple blocks");
2944
2945 SmallVector<uint64_t, 64> Record;
2946
2947 while (true) {
2948 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2949 if (!MaybeEntry)
2950 return MaybeEntry.takeError();
2951 BitstreamEntry Entry = MaybeEntry.get();
2952
2953 switch (Entry.Kind) {
2954 case BitstreamEntry::SubBlock: // Handled for us already.
2956 return error("Malformed block");
2958 return Error::success();
2960 // The interesting case.
2961 break;
2962 }
2963
2964 // Tags are implicitly mapped to integers by their order.
2965
2966 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2967 if (!MaybeRecord)
2968 return MaybeRecord.takeError();
2969 if (MaybeRecord.get() != bitc::OPERAND_BUNDLE_TAG)
2970 return error("Invalid operand bundle record");
2971
2972 // OPERAND_BUNDLE_TAG: [strchr x N]
2973 BundleTags.emplace_back();
2974 if (convertToString(Record, 0, BundleTags.back()))
2975 return error("Invalid operand bundle record");
2976 Record.clear();
2977 }
2978}
2979
2980Error BitcodeReader::parseSyncScopeNames() {
2982 return Err;
2983
2984 if (!SSIDs.empty())
2985 return error("Invalid multiple synchronization scope names blocks");
2986
2987 SmallVector<uint64_t, 64> Record;
2988 while (true) {
2989 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
2990 if (!MaybeEntry)
2991 return MaybeEntry.takeError();
2992 BitstreamEntry Entry = MaybeEntry.get();
2993
2994 switch (Entry.Kind) {
2995 case BitstreamEntry::SubBlock: // Handled for us already.
2997 return error("Malformed block");
2999 if (SSIDs.empty())
3000 return error("Invalid empty synchronization scope names block");
3001 return Error::success();
3003 // The interesting case.
3004 break;
3005 }
3006
3007 // Synchronization scope names are implicitly mapped to synchronization
3008 // scope IDs by their order.
3009
3010 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3011 if (!MaybeRecord)
3012 return MaybeRecord.takeError();
3013 if (MaybeRecord.get() != bitc::SYNC_SCOPE_NAME)
3014 return error("Invalid sync scope record");
3015
3016 SmallString<16> SSN;
3017 if (convertToString(Record, 0, SSN))
3018 return error("Invalid sync scope record");
3019
3020 SSIDs.push_back(Context.getOrInsertSyncScopeID(SSN));
3021 Record.clear();
3022 }
3023}
3024
3025/// Associate a value with its name from the given index in the provided record.
3026Expected<Value *> BitcodeReader::recordValue(SmallVectorImpl<uint64_t> &Record,
3027 unsigned NameIndex, Triple &TT) {
3028 SmallString<128> ValueName;
3029 if (convertToString(Record, NameIndex, ValueName))
3030 return error("Invalid record");
3031 unsigned ValueID = Record[0];
3032 if (ValueID >= ValueList.size() || !ValueList[ValueID])
3033 return error("Invalid record");
3034 Value *V = ValueList[ValueID];
3035
3036 StringRef NameStr(ValueName.data(), ValueName.size());
3037 if (NameStr.contains(0))
3038 return error("Invalid value name");
3039 V->setName(NameStr);
3040 auto *GO = dyn_cast<GlobalObject>(V);
3041 if (GO && ImplicitComdatObjects.contains(GO) && TT.supportsCOMDAT())
3042 GO->setComdat(TheModule->getOrInsertComdat(V->getName()));
3043 return V;
3044}
3045
3046/// Helper to note and return the current location, and jump to the given
3047/// offset.
3049 BitstreamCursor &Stream) {
3050 // Save the current parsing location so we can jump back at the end
3051 // of the VST read.
3052 uint64_t CurrentBit = Stream.GetCurrentBitNo();
3053 if (Error JumpFailed = Stream.JumpToBit(Offset * 32))
3054 return std::move(JumpFailed);
3055 Expected<BitstreamEntry> MaybeEntry = Stream.advance();
3056 if (!MaybeEntry)
3057 return MaybeEntry.takeError();
3058 if (MaybeEntry.get().Kind != BitstreamEntry::SubBlock ||
3059 MaybeEntry.get().ID != bitc::VALUE_SYMTAB_BLOCK_ID)
3060 return error("Expected value symbol table subblock");
3061 return CurrentBit;
3062}
3063
3064void BitcodeReader::setDeferredFunctionInfo(unsigned FuncBitcodeOffsetDelta,
3065 Function *F,
3066 ArrayRef<uint64_t> Record) {
3067 // Note that we subtract 1 here because the offset is relative to one word
3068 // before the start of the identification or module block, which was
3069 // historically always the start of the regular bitcode header.
3070 uint64_t FuncWordOffset = Record[1] - 1;
3071 uint64_t FuncBitOffset = FuncWordOffset * 32;
3072 DeferredFunctionInfo[F] = FuncBitOffset + FuncBitcodeOffsetDelta;
3073 // Set the LastFunctionBlockBit to point to the last function block.
3074 // Later when parsing is resumed after function materialization,
3075 // we can simply skip that last function block.
3076 if (FuncBitOffset > LastFunctionBlockBit)
3077 LastFunctionBlockBit = FuncBitOffset;
3078}
3079
3080/// Read a new-style GlobalValue symbol table.
3081Error BitcodeReader::parseGlobalValueSymbolTable() {
3082 unsigned FuncBitcodeOffsetDelta =
3084
3086 return Err;
3087
3088 SmallVector<uint64_t, 64> Record;
3089 while (true) {
3090 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
3091 if (!MaybeEntry)
3092 return MaybeEntry.takeError();
3093 BitstreamEntry Entry = MaybeEntry.get();
3094
3095 switch (Entry.Kind) {
3098 return error("Malformed block");
3100 return Error::success();
3102 break;
3103 }
3104
3105 Record.clear();
3106 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3107 if (!MaybeRecord)
3108 return MaybeRecord.takeError();
3109 switch (MaybeRecord.get()) {
3110 case bitc::VST_CODE_FNENTRY: { // [valueid, offset]
3111 unsigned ValueID = Record[0];
3112 if (ValueID >= ValueList.size() || !ValueList[ValueID])
3113 return error("Invalid value reference in symbol table");
3114 setDeferredFunctionInfo(FuncBitcodeOffsetDelta,
3115 cast<Function>(ValueList[ValueID]), Record);
3116 break;
3117 }
3118 }
3119 }
3120}
3121
3122/// Parse the value symbol table at either the current parsing location or
3123/// at the given bit offset if provided.
3124Error BitcodeReader::parseValueSymbolTable(uint64_t Offset) {
3125 uint64_t CurrentBit;
3126 // Pass in the Offset to distinguish between calling for the module-level
3127 // VST (where we want to jump to the VST offset) and the function-level
3128 // VST (where we don't).
3129 if (Offset > 0) {
3130 Expected<uint64_t> MaybeCurrentBit = jumpToValueSymbolTable(Offset, Stream);
3131 if (!MaybeCurrentBit)
3132 return MaybeCurrentBit.takeError();
3133 CurrentBit = MaybeCurrentBit.get();
3134 // If this module uses a string table, read this as a module-level VST.
3135 if (UseStrtab) {
3136 if (Error Err = parseGlobalValueSymbolTable())
3137 return Err;
3138 if (Error JumpFailed = Stream.JumpToBit(CurrentBit))
3139 return JumpFailed;
3140 return Error::success();
3141 }
3142 // Otherwise, the VST will be in a similar format to a function-level VST,
3143 // and will contain symbol names.
3144 }
3145
3146 // Compute the delta between the bitcode indices in the VST (the word offset
3147 // to the word-aligned ENTER_SUBBLOCK for the function block, and that
3148 // expected by the lazy reader. The reader's EnterSubBlock expects to have
3149 // already read the ENTER_SUBBLOCK code (size getAbbrevIDWidth) and BlockID
3150 // (size BlockIDWidth). Note that we access the stream's AbbrevID width here
3151 // just before entering the VST subblock because: 1) the EnterSubBlock
3152 // changes the AbbrevID width; 2) the VST block is nested within the same
3153 // outer MODULE_BLOCK as the FUNCTION_BLOCKs and therefore have the same
3154 // AbbrevID width before calling EnterSubBlock; and 3) when we want to
3155 // jump to the FUNCTION_BLOCK using this offset later, we don't want
3156 // to rely on the stream's AbbrevID width being that of the MODULE_BLOCK.
3157 unsigned FuncBitcodeOffsetDelta =
3159
3161 return Err;
3162
3163 SmallVector<uint64_t, 64> Record;
3164
3165 Triple TT(TheModule->getTargetTriple());
3166
3167 // Read all the records for this value table.
3168 SmallString<128> ValueName;
3169
3170 while (true) {
3171 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
3172 if (!MaybeEntry)
3173 return MaybeEntry.takeError();
3174 BitstreamEntry Entry = MaybeEntry.get();
3175
3176 switch (Entry.Kind) {
3177 case BitstreamEntry::SubBlock: // Handled for us already.
3179 return error("Malformed block");
3181 if (Offset > 0)
3182 if (Error JumpFailed = Stream.JumpToBit(CurrentBit))
3183 return JumpFailed;
3184 return Error::success();
3186 // The interesting case.
3187 break;
3188 }
3189
3190 // Read a record.
3191 Record.clear();
3192 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3193 if (!MaybeRecord)
3194 return MaybeRecord.takeError();
3195 switch (MaybeRecord.get()) {
3196 default: // Default behavior: unknown type.
3197 break;
3198 case bitc::VST_CODE_ENTRY: { // VST_CODE_ENTRY: [valueid, namechar x N]
3199 Expected<Value *> ValOrErr = recordValue(Record, 1, TT);
3200 if (Error Err = ValOrErr.takeError())
3201 return Err;
3202 ValOrErr.get();
3203 break;
3204 }
3206 // VST_CODE_FNENTRY: [valueid, offset, namechar x N]
3207 Expected<Value *> ValOrErr = recordValue(Record, 2, TT);
3208 if (Error Err = ValOrErr.takeError())
3209 return Err;
3210 Value *V = ValOrErr.get();
3211
3212 // Ignore function offsets emitted for aliases of functions in older
3213 // versions of LLVM.
3214 if (auto *F = dyn_cast<Function>(V))
3215 setDeferredFunctionInfo(FuncBitcodeOffsetDelta, F, Record);
3216 break;
3217 }
3219 if (convertToString(Record, 1, ValueName))
3220 return error("Invalid bbentry record");
3221 BasicBlock *BB = getBasicBlock(Record[0]);
3222 if (!BB)
3223 return error("Invalid bbentry record");
3224
3225 BB->setName(ValueName.str());
3226 ValueName.clear();
3227 break;
3228 }
3229 }
3230 }
3231}
3232
3233/// Decode a signed value stored with the sign bit in the LSB for dense VBR
3234/// encoding.
3235uint64_t BitcodeReader::decodeSignRotatedValue(uint64_t V) {
3236 if ((V & 1) == 0)
3237 return V >> 1;
3238 if (V != 1)
3239 return -(V >> 1);
3240 // There is no such thing as -0 with integers. "-0" really means MININT.
3241 return 1ULL << 63;
3242}
3243
3244/// Resolve all of the initializers for global values and aliases that we can.
3245Error BitcodeReader::resolveGlobalAndIndirectSymbolInits() {
3246 std::vector<std::pair<GlobalVariable *, unsigned>> GlobalInitWorklist;
3247 std::vector<std::pair<GlobalValue *, unsigned>> IndirectSymbolInitWorklist;
3248 std::vector<FunctionOperandInfo> FunctionOperandWorklist;
3249
3250 GlobalInitWorklist.swap(GlobalInits);
3251 IndirectSymbolInitWorklist.swap(IndirectSymbolInits);
3252 FunctionOperandWorklist.swap(FunctionOperands);
3253
3254 while (!GlobalInitWorklist.empty()) {
3255 unsigned ValID = GlobalInitWorklist.back().second;
3256 if (ValID >= ValueList.size()) {
3257 // Not ready to resolve this yet, it requires something later in the file.
3258 GlobalInits.push_back(GlobalInitWorklist.back());
3259 } else {
3260 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3261 if (!MaybeC)
3262 return MaybeC.takeError();
3263 GlobalInitWorklist.back().first->setInitializer(MaybeC.get());
3264 }
3265 GlobalInitWorklist.pop_back();
3266 }
3267
3268 while (!IndirectSymbolInitWorklist.empty()) {
3269 unsigned ValID = IndirectSymbolInitWorklist.back().second;
3270 if (ValID >= ValueList.size()) {
3271 IndirectSymbolInits.push_back(IndirectSymbolInitWorklist.back());
3272 } else {
3273 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3274 if (!MaybeC)
3275 return MaybeC.takeError();
3276 Constant *C = MaybeC.get();
3277 GlobalValue *GV = IndirectSymbolInitWorklist.back().first;
3278 if (auto *GA = dyn_cast<GlobalAlias>(GV)) {
3279 if (C->getType() != GV->getType())
3280 return error("Alias and aliasee types don't match");
3281 GA->setAliasee(C);
3282 } else if (auto *GI = dyn_cast<GlobalIFunc>(GV)) {
3283 GI->setResolver(C);
3284 } else {
3285 return error("Expected an alias or an ifunc");
3286 }
3287 }
3288 IndirectSymbolInitWorklist.pop_back();
3289 }
3290
3291 while (!FunctionOperandWorklist.empty()) {
3292 FunctionOperandInfo &Info = FunctionOperandWorklist.back();
3293 if (Info.PersonalityFn) {
3294 unsigned ValID = Info.PersonalityFn - 1;
3295 if (ValID < ValueList.size()) {
3296 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3297 if (!MaybeC)
3298 return MaybeC.takeError();
3299 Info.F->setPersonalityFn(MaybeC.get());
3300 Info.PersonalityFn = 0;
3301 }
3302 }
3303 if (Info.Prefix) {
3304 unsigned ValID = Info.Prefix - 1;
3305 if (ValID < ValueList.size()) {
3306 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3307 if (!MaybeC)
3308 return MaybeC.takeError();
3309 Info.F->setPrefixData(MaybeC.get());
3310 Info.Prefix = 0;
3311 }
3312 }
3313 if (Info.Prologue) {
3314 unsigned ValID = Info.Prologue - 1;
3315 if (ValID < ValueList.size()) {
3316 Expected<Constant *> MaybeC = getValueForInitializer(ValID);
3317 if (!MaybeC)
3318 return MaybeC.takeError();
3319 Info.F->setPrologueData(MaybeC.get());
3320 Info.Prologue = 0;
3321 }
3322 }
3323 if (Info.PersonalityFn || Info.Prefix || Info.Prologue)
3324 FunctionOperands.push_back(Info);
3325 FunctionOperandWorklist.pop_back();
3326 }
3327
3328 return Error::success();
3329}
3330
3332 SmallVector<uint64_t, 8> Words(Vals.size());
3333 transform(Vals, Words.begin(),
3334 BitcodeReader::decodeSignRotatedValue);
3335
3336 return APInt(TypeBits, Words);
3337}
3338
3339Error BitcodeReader::parseConstants() {
3341 return Err;
3342
3344
3345 // Read all the records for this value table.
3346 Type *CurTy = Type::getInt32Ty(Context);
3347 unsigned Int32TyID = getVirtualTypeID(CurTy);
3348 unsigned CurTyID = Int32TyID;
3349 Type *CurElemTy = nullptr;
3350 unsigned NextCstNo = ValueList.size();
3351
3352 while (true) {
3354 if (!MaybeEntry)
3355 return MaybeEntry.takeError();
3356 BitstreamEntry Entry = MaybeEntry.get();
3357
3358 switch (Entry.Kind) {
3359 case BitstreamEntry::SubBlock: // Handled for us already.
3361 return error("Malformed block");
3363 if (NextCstNo != ValueList.size())
3364 return error("Invalid constant reference");
3365 return Error::success();
3367 // The interesting case.
3368 break;
3369 }
3370
3371 // Read a record.
3372 Record.clear();
3373 Type *VoidType = Type::getVoidTy(Context);
3374 Value *V = nullptr;
3375 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
3376 if (!MaybeBitCode)
3377 return MaybeBitCode.takeError();
3378 switch (unsigned BitCode = MaybeBitCode.get()) {
3379 default: // Default behavior: unknown constant
3380 case bitc::CST_CODE_UNDEF: // UNDEF
3381 V = UndefValue::get(CurTy);
3382 break;
3383 case bitc::CST_CODE_POISON: // POISON
3384 V = PoisonValue::get(CurTy);
3385 break;
3386 case bitc::CST_CODE_SETTYPE: // SETTYPE: [typeid]
3387 if (Record.empty())
3388 return error("Invalid settype record");
3389 if (Record[0] >= TypeList.size() || !TypeList[Record[0]])
3390 return error("Invalid settype record");
3391 if (TypeList[Record[0]] == VoidType)
3392 return error("Invalid constant type");
3393 CurTyID = Record[0];
3394 CurTy = TypeList[CurTyID];
3395 CurElemTy = getPtrElementTypeByID(CurTyID);
3396 continue; // Skip the ValueList manipulation.
3397 case bitc::CST_CODE_NULL: // NULL
3398 if (CurTy->isVoidTy() || CurTy->isFunctionTy() || CurTy->isLabelTy())
3399 return error("Invalid type for a constant null value");
3400 if (auto *TETy = dyn_cast<TargetExtType>(CurTy))
3401 if (!TETy->hasProperty(TargetExtType::HasZeroInit))
3402 return error("Invalid type for a constant null value");
3403 V = Constant::getNullValue(CurTy);
3404 break;
3405 case bitc::CST_CODE_INTEGER: // INTEGER: [intval]
3406 if (!CurTy->isIntOrIntVectorTy() || Record.empty())
3407 return error("Invalid integer const record");
3408 V = ConstantInt::getSigned(CurTy, decodeSignRotatedValue(Record[0]));
3409 break;
3410 case bitc::CST_CODE_WIDE_INTEGER: {// WIDE_INTEGER: [n x intval]
3411 if (!CurTy->isIntOrIntVectorTy() || Record.empty())
3412 return error("Invalid wide integer const record");
3413
3414 auto *ScalarTy = cast<IntegerType>(CurTy->getScalarType());
3415 APInt VInt = readWideAPInt(Record, ScalarTy->getBitWidth());
3416 V = ConstantInt::get(CurTy, VInt);
3417 break;
3418 }
3419 case bitc::CST_CODE_BYTE: // BYTE: [byteval]
3420 if (!CurTy->isByteOrByteVectorTy() || Record.empty())
3421 return error("Invalid byte const record");
3422 V = ConstantByte::get(CurTy, decodeSignRotatedValue(Record[0]),
3423 /*isSigned=*/true);
3424 break;
3425 case bitc::CST_CODE_WIDE_BYTE: { // WIDE_BYTE: [n x byteval]
3426 if (!CurTy->isByteOrByteVectorTy() || Record.empty())
3427 return error("Invalid wide byte const record");
3428
3429 auto *ScalarTy = cast<ByteType>(CurTy->getScalarType());
3430 APInt VByte = readWideAPInt(Record, ScalarTy->getBitWidth());
3431 V = ConstantByte::get(CurTy, VByte);
3432 break;
3433 }
3434 case bitc::CST_CODE_FLOAT: { // FLOAT: [fpval]
3435 if (Record.empty())
3436 return error("Invalid float const record");
3437
3438 auto *ScalarTy = CurTy->getScalarType();
3439 if (ScalarTy->isHalfTy())
3440 V = ConstantFP::get(CurTy, APFloat(APFloat::IEEEhalf(),
3441 APInt(16, (uint16_t)Record[0])));
3442 else if (ScalarTy->isBFloatTy())
3443 V = ConstantFP::get(
3444 CurTy, APFloat(APFloat::BFloat(), APInt(16, (uint32_t)Record[0])));
3445 else if (ScalarTy->isFloatTy())
3446 V = ConstantFP::get(CurTy, APFloat(APFloat::IEEEsingle(),
3447 APInt(32, (uint32_t)Record[0])));
3448 else if (ScalarTy->isDoubleTy())
3449 V = ConstantFP::get(
3450 CurTy, APFloat(APFloat::IEEEdouble(), APInt(64, Record[0])));
3451 else if (ScalarTy->isX86_FP80Ty()) {
3452 // Bits are not stored the same way as a normal i80 APInt, compensate.
3453 uint64_t Rearrange[2];
3454 Rearrange[0] = (Record[1] & 0xffffLL) | (Record[0] << 16);
3455 Rearrange[1] = Record[0] >> 48;
3456 V = ConstantFP::get(
3457 CurTy, APFloat(APFloat::x87DoubleExtended(), APInt(80, Rearrange)));
3458 } else if (ScalarTy->isFP128Ty())
3459 V = ConstantFP::get(CurTy,
3460 APFloat(APFloat::IEEEquad(), APInt(128, Record)));
3461 else if (ScalarTy->isPPC_FP128Ty())
3462 V = ConstantFP::get(
3463 CurTy, APFloat(APFloat::PPCDoubleDouble(), APInt(128, Record)));
3464 else
3465 V = PoisonValue::get(CurTy);
3466 break;
3467 }
3468
3469 case bitc::CST_CODE_AGGREGATE: {// AGGREGATE: [n x value number]
3470 if (Record.empty())
3471 return error("Invalid aggregate record");
3472
3473 SmallVector<unsigned, 16> Elts;
3474 llvm::append_range(Elts, Record);
3475
3476 if (isa<StructType>(CurTy)) {
3477 V = BitcodeConstant::create(
3478 Alloc, CurTy, BitcodeConstant::ConstantStructOpcode, Elts);
3479 } else if (isa<ArrayType>(CurTy)) {
3480 V = BitcodeConstant::create(Alloc, CurTy,
3481 BitcodeConstant::ConstantArrayOpcode, Elts);
3482 } else if (isa<VectorType>(CurTy)) {
3483 V = BitcodeConstant::create(
3484 Alloc, CurTy, BitcodeConstant::ConstantVectorOpcode, Elts);
3485 } else {
3486 V = PoisonValue::get(CurTy);
3487 }
3488 break;
3489 }
3490 case bitc::CST_CODE_STRING: // STRING: [values]
3491 case bitc::CST_CODE_CSTRING: { // CSTRING: [values]
3492 if (Record.empty())
3493 return error("Invalid string record");
3494
3495 SmallString<16> Elts(Record.begin(), Record.end());
3497 Context, Elts, BitCode == bitc::CST_CODE_CSTRING,
3498 cast<ArrayType>(CurTy)->getElementType()->isByteTy());
3499 break;
3500 }
3501 case bitc::CST_CODE_DATA: {// DATA: [n x value]
3502 if (Record.empty())
3503 return error("Invalid data record");
3504
3505 Type *EltTy = CurTy->getContainedType(0);
3507 return error("Invalid type for value");
3508
3509 const unsigned EltBytes = EltTy->getScalarSizeInBits() / 8;
3510 SmallString<128> RawData;
3511 RawData.reserve(Record.size() * EltBytes);
3512 for (uint64_t Val : Record) {
3513 const char *Src = reinterpret_cast<const char *>(&Val);
3514 if constexpr (sys::IsBigEndianHost)
3515 Src += sizeof(uint64_t) - EltBytes;
3516 RawData.append(Src, Src + EltBytes);
3517 }
3518
3519 V = isa<VectorType>(CurTy)
3520 ? ConstantDataVector::getRaw(RawData.str(), Record.size(), EltTy)
3521 : ConstantDataArray::getRaw(RawData.str(), Record.size(), EltTy);
3522 break;
3523 }
3524 case bitc::CST_CODE_CE_UNOP: { // CE_UNOP: [opcode, opval]
3525 if (Record.size() < 2)
3526 return error("Invalid unary op constexpr record");
3527 int Opc = getDecodedUnaryOpcode(Record[0], CurTy);
3528 if (Opc < 0) {
3529 V = PoisonValue::get(CurTy); // Unknown unop.
3530 } else {
3531 V = BitcodeConstant::create(Alloc, CurTy, Opc, (unsigned)Record[1]);
3532 }
3533 break;
3534 }
3535 case bitc::CST_CODE_CE_BINOP: { // CE_BINOP: [opcode, opval, opval]
3536 if (Record.size() < 3)
3537 return error("Invalid binary op constexpr record");
3538 int Opc = getDecodedBinaryOpcode(Record[0], CurTy);
3539 if (Opc < 0) {
3540 V = PoisonValue::get(CurTy); // Unknown binop.
3541 } else {
3542 uint8_t Flags = 0;
3543 if (Record.size() >= 4) {
3544 if (Opc == Instruction::Add ||
3545 Opc == Instruction::Sub ||
3546 Opc == Instruction::Mul ||
3547 Opc == Instruction::Shl) {
3548 if (Record[3] & (1 << bitc::OBO_NO_SIGNED_WRAP))
3550 if (Record[3] & (1 << bitc::OBO_NO_UNSIGNED_WRAP))
3552 } else if (Opc == Instruction::SDiv ||
3553 Opc == Instruction::UDiv ||
3554 Opc == Instruction::LShr ||
3555 Opc == Instruction::AShr) {
3556 if (Record[3] & (1 << bitc::PEO_EXACT))
3558 }
3559 }
3560 V = BitcodeConstant::create(Alloc, CurTy, {(uint8_t)Opc, Flags},
3561 {(unsigned)Record[1], (unsigned)Record[2]});
3562 }
3563 break;
3564 }
3565 case bitc::CST_CODE_CE_CAST: { // CE_CAST: [opcode, opty, opval]
3566 if (Record.size() < 3)
3567 return error("Invalid cast constexpr record");
3568 int Opc = getDecodedCastOpcode(Record[0]);
3569 if (Opc < 0) {
3570 V = PoisonValue::get(CurTy); // Unknown cast.
3571 } else {
3572 unsigned OpTyID = Record[1];
3573 Type *OpTy = getTypeByID(OpTyID);
3574 if (!OpTy)
3575 return error("Invalid cast constexpr record");
3576 V = BitcodeConstant::create(Alloc, CurTy, Opc, (unsigned)Record[2]);
3577 }
3578 break;
3579 }
3580 case bitc::CST_CODE_CE_INBOUNDS_GEP: // [ty, n x operands]
3581 case bitc::CST_CODE_CE_GEP_OLD: // [ty, n x operands]
3582 case bitc::CST_CODE_CE_GEP_WITH_INRANGE_INDEX_OLD: // [ty, flags, n x
3583 // operands]
3584 case bitc::CST_CODE_CE_GEP: // [ty, flags, n x operands]
3585 case bitc::CST_CODE_CE_GEP_WITH_INRANGE: { // [ty, flags, start, end, n x
3586 // operands]
3587 if (Record.size() < 2)
3588 return error("Constant GEP record must have at least two elements");
3589 unsigned OpNum = 0;
3590 Type *PointeeType = nullptr;
3593 BitCode == bitc::CST_CODE_CE_GEP || Record.size() % 2)
3594 PointeeType = getTypeByID(Record[OpNum++]);
3595
3596 uint64_t Flags = 0;
3597 std::optional<ConstantRange> InRange;
3599 uint64_t Op = Record[OpNum++];
3600 Flags = Op & 1; // inbounds
3601 unsigned InRangeIndex = Op >> 1;
3602 // "Upgrade" inrange by dropping it. The feature is too niche to
3603 // bother.
3604 (void)InRangeIndex;
3605 } else if (BitCode == bitc::CST_CODE_CE_GEP_WITH_INRANGE) {
3606 Flags = Record[OpNum++];
3607 Expected<ConstantRange> MaybeInRange =
3608 readBitWidthAndConstantRange(Record, OpNum);
3609 if (!MaybeInRange)
3610 return MaybeInRange.takeError();
3611 InRange = MaybeInRange.get();
3612 } else if (BitCode == bitc::CST_CODE_CE_GEP) {
3613 Flags = Record[OpNum++];
3614 } else if (BitCode == bitc::CST_CODE_CE_INBOUNDS_GEP)
3615 Flags = (1 << bitc::GEP_INBOUNDS);
3616
3617 SmallVector<unsigned, 16> Elts;
3618 unsigned BaseTypeID = Record[OpNum];
3619 while (OpNum != Record.size()) {
3620 unsigned ElTyID = Record[OpNum++];
3621 Type *ElTy = getTypeByID(ElTyID);
3622 if (!ElTy)
3623 return error("Invalid getelementptr constexpr record");
3624 Elts.push_back(Record[OpNum++]);
3625 }
3626
3627 if (Elts.size() < 1)
3628 return error("Invalid gep with no operands");
3629
3630 Type *BaseType = getTypeByID(BaseTypeID);
3632 BaseTypeID = getContainedTypeID(BaseTypeID, 0);
3633 BaseType = getTypeByID(BaseTypeID);
3634 }
3635
3637 if (!OrigPtrTy)
3638 return error("GEP base operand must be pointer or vector of pointer");
3639
3640 if (!PointeeType) {
3641 PointeeType = getPtrElementTypeByID(BaseTypeID);
3642 if (!PointeeType)
3643 return error("Missing element type for old-style constant GEP");
3644 }
3645
3646 V = BitcodeConstant::create(
3647 Alloc, CurTy,
3648 {Instruction::GetElementPtr, uint8_t(Flags), PointeeType, InRange},
3649 Elts);
3650 break;
3651 }
3652 case bitc::CST_CODE_CE_SELECT: { // CE_SELECT: [opval#, opval#, opval#]
3653 if (Record.size() < 3)
3654 return error("Invalid select constexpr record");
3655
3656 V = BitcodeConstant::create(
3657 Alloc, CurTy, Instruction::Select,
3658 {(unsigned)Record[0], (unsigned)Record[1], (unsigned)Record[2]});
3659 break;
3660 }
3662 : { // CE_EXTRACTELT: [opty, opval, opty, opval]
3663 if (Record.size() < 3)
3664 return error("Invalid extractelement constexpr record");
3665 unsigned OpTyID = Record[0];
3666 VectorType *OpTy =
3667 dyn_cast_or_null<VectorType>(getTypeByID(OpTyID));
3668 if (!OpTy)
3669 return error("Invalid extractelement constexpr record");
3670 unsigned IdxRecord;
3671 if (Record.size() == 4) {
3672 unsigned IdxTyID = Record[2];
3673 Type *IdxTy = getTypeByID(IdxTyID);
3674 if (!IdxTy)
3675 return error("Invalid extractelement constexpr record");
3676 IdxRecord = Record[3];
3677 } else {
3678 // Deprecated, but still needed to read old bitcode files.
3679 IdxRecord = Record[2];
3680 }
3681 V = BitcodeConstant::create(Alloc, CurTy, Instruction::ExtractElement,
3682 {(unsigned)Record[1], IdxRecord});
3683 break;
3684 }
3686 : { // CE_INSERTELT: [opval, opval, opty, opval]
3687 VectorType *OpTy = dyn_cast<VectorType>(CurTy);
3688 if (Record.size() < 3 || !OpTy)
3689 return error("Invalid insertelement constexpr record");
3690 unsigned IdxRecord;
3691 if (Record.size() == 4) {
3692 unsigned IdxTyID = Record[2];
3693 Type *IdxTy = getTypeByID(IdxTyID);
3694 if (!IdxTy)
3695 return error("Invalid insertelement constexpr record");
3696 IdxRecord = Record[3];
3697 } else {
3698 // Deprecated, but still needed to read old bitcode files.
3699 IdxRecord = Record[2];
3700 }
3701 V = BitcodeConstant::create(
3702 Alloc, CurTy, Instruction::InsertElement,
3703 {(unsigned)Record[0], (unsigned)Record[1], IdxRecord});
3704 break;
3705 }
3706 case bitc::CST_CODE_CE_SHUFFLEVEC: { // CE_SHUFFLEVEC: [opval, opval, opval]
3707 VectorType *OpTy = dyn_cast<VectorType>(CurTy);
3708 if (Record.size() < 3 || !OpTy)
3709 return error("Invalid shufflevector constexpr record");
3710 V = BitcodeConstant::create(
3711 Alloc, CurTy, Instruction::ShuffleVector,
3712 {(unsigned)Record[0], (unsigned)Record[1], (unsigned)Record[2]});
3713 break;
3714 }
3715 case bitc::CST_CODE_CE_SHUFVEC_EX: { // [opty, opval, opval, opval]
3716 VectorType *RTy = dyn_cast<VectorType>(CurTy);
3717 VectorType *OpTy =
3718 dyn_cast_or_null<VectorType>(getTypeByID(Record[0]));
3719 if (Record.size() < 4 || !RTy || !OpTy)
3720 return error("Invalid shufflevector constexpr record");
3721 V = BitcodeConstant::create(
3722 Alloc, CurTy, Instruction::ShuffleVector,
3723 {(unsigned)Record[1], (unsigned)Record[2], (unsigned)Record[3]});
3724 break;
3725 }
3726 case bitc::CST_CODE_CE_CMP: { // CE_CMP: [opty, opval, opval, pred]
3727 if (Record.size() < 4)
3728 return error("Invalid cmp constexpt record");
3729 unsigned OpTyID = Record[0];
3730 Type *OpTy = getTypeByID(OpTyID);
3731 if (!OpTy)
3732 return error("Invalid cmp constexpr record");
3733 V = BitcodeConstant::create(
3734 Alloc, CurTy,
3735 {(uint8_t)(OpTy->isFPOrFPVectorTy() ? Instruction::FCmp
3736 : Instruction::ICmp),
3737 (uint8_t)Record[3]},
3738 {(unsigned)Record[1], (unsigned)Record[2]});
3739 break;
3740 }
3741 // This maintains backward compatibility, pre-asm dialect keywords.
3742 // Deprecated, but still needed to read old bitcode files.
3744 if (Record.size() < 2)
3745 return error("Invalid inlineasm record");
3746 std::string AsmStr, ConstrStr;
3747 bool HasSideEffects = Record[0] & 1;
3748 bool IsAlignStack = Record[0] >> 1;
3749 unsigned AsmStrSize = Record[1];
3750 if (2+AsmStrSize >= Record.size())
3751 return error("Invalid inlineasm record");
3752 unsigned ConstStrSize = Record[2+AsmStrSize];
3753 if (3+AsmStrSize+ConstStrSize > Record.size())
3754 return error("Invalid inlineasm record");
3755
3756 for (unsigned i = 0; i != AsmStrSize; ++i)
3757 AsmStr += (char)Record[2+i];
3758 for (unsigned i = 0; i != ConstStrSize; ++i)
3759 ConstrStr += (char)Record[3+AsmStrSize+i];
3760 UpgradeInlineAsmString(&AsmStr);
3761 if (!CurElemTy)
3762 return error("Missing element type for old-style inlineasm");
3763 V = InlineAsm::get(cast<FunctionType>(CurElemTy), AsmStr, ConstrStr,
3764 HasSideEffects, IsAlignStack);
3765 break;
3766 }
3767 // This version adds support for the asm dialect keywords (e.g.,
3768 // inteldialect).
3770 if (Record.size() < 2)
3771 return error("Invalid inlineasm record");
3772 std::string AsmStr, ConstrStr;
3773 bool HasSideEffects = Record[0] & 1;
3774 bool IsAlignStack = (Record[0] >> 1) & 1;
3775 unsigned AsmDialect = Record[0] >> 2;
3776 unsigned AsmStrSize = Record[1];
3777 if (2+AsmStrSize >= Record.size())
3778 return error("Invalid inlineasm record");
3779 unsigned ConstStrSize = Record[2+AsmStrSize];
3780 if (3+AsmStrSize+ConstStrSize > Record.size())
3781 return error("Invalid inlineasm record");
3782
3783 for (unsigned i = 0; i != AsmStrSize; ++i)
3784 AsmStr += (char)Record[2+i];
3785 for (unsigned i = 0; i != ConstStrSize; ++i)
3786 ConstrStr += (char)Record[3+AsmStrSize+i];
3787 UpgradeInlineAsmString(&AsmStr);
3788 if (!CurElemTy)
3789 return error("Missing element type for old-style inlineasm");
3790 V = InlineAsm::get(cast<FunctionType>(CurElemTy), AsmStr, ConstrStr,
3791 HasSideEffects, IsAlignStack,
3792 InlineAsm::AsmDialect(AsmDialect));
3793 break;
3794 }
3795 // This version adds support for the unwind keyword.
3797 if (Record.size() < 2)
3798 return error("Invalid inlineasm record");
3799 unsigned OpNum = 0;
3800 std::string AsmStr, ConstrStr;
3801 bool HasSideEffects = Record[OpNum] & 1;
3802 bool IsAlignStack = (Record[OpNum] >> 1) & 1;
3803 unsigned AsmDialect = (Record[OpNum] >> 2) & 1;
3804 bool CanThrow = (Record[OpNum] >> 3) & 1;
3805 ++OpNum;
3806 unsigned AsmStrSize = Record[OpNum];
3807 ++OpNum;
3808 if (OpNum + AsmStrSize >= Record.size())
3809 return error("Invalid inlineasm record");
3810 unsigned ConstStrSize = Record[OpNum + AsmStrSize];
3811 if (OpNum + 1 + AsmStrSize + ConstStrSize > Record.size())
3812 return error("Invalid inlineasm record");
3813
3814 for (unsigned i = 0; i != AsmStrSize; ++i)
3815 AsmStr += (char)Record[OpNum + i];
3816 ++OpNum;
3817 for (unsigned i = 0; i != ConstStrSize; ++i)
3818 ConstrStr += (char)Record[OpNum + AsmStrSize + i];
3819 UpgradeInlineAsmString(&AsmStr);
3820 if (!CurElemTy)
3821 return error("Missing element type for old-style inlineasm");
3822 V = InlineAsm::get(cast<FunctionType>(CurElemTy), AsmStr, ConstrStr,
3823 HasSideEffects, IsAlignStack,
3824 InlineAsm::AsmDialect(AsmDialect), CanThrow);
3825 break;
3826 }
3827 // This version adds explicit function type.
3829 if (Record.size() < 3)
3830 return error("Invalid inlineasm record");
3831 unsigned OpNum = 0;
3832 auto *FnTy = dyn_cast_or_null<FunctionType>(getTypeByID(Record[OpNum]));
3833 ++OpNum;
3834 if (!FnTy)
3835 return error("Invalid inlineasm record");
3836 std::string AsmStr, ConstrStr;
3837 bool HasSideEffects = Record[OpNum] & 1;
3838 bool IsAlignStack = (Record[OpNum] >> 1) & 1;
3839 unsigned AsmDialect = (Record[OpNum] >> 2) & 1;
3840 bool CanThrow = (Record[OpNum] >> 3) & 1;
3841 ++OpNum;
3842 unsigned AsmStrSize = Record[OpNum];
3843 ++OpNum;
3844 if (OpNum + AsmStrSize >= Record.size())
3845 return error("Invalid inlineasm record");
3846 unsigned ConstStrSize = Record[OpNum + AsmStrSize];
3847 if (OpNum + 1 + AsmStrSize + ConstStrSize > Record.size())
3848 return error("Invalid inlineasm record");
3849
3850 for (unsigned i = 0; i != AsmStrSize; ++i)
3851 AsmStr += (char)Record[OpNum + i];
3852 ++OpNum;
3853 for (unsigned i = 0; i != ConstStrSize; ++i)
3854 ConstrStr += (char)Record[OpNum + AsmStrSize + i];
3855 UpgradeInlineAsmString(&AsmStr);
3856 V = InlineAsm::get(FnTy, AsmStr, ConstrStr, HasSideEffects, IsAlignStack,
3857 InlineAsm::AsmDialect(AsmDialect), CanThrow);
3858 break;
3859 }
3861 if (Record.size() < 3)
3862 return error("Invalid blockaddress record");
3863 unsigned FnTyID = Record[0];
3864 Type *FnTy = getTypeByID(FnTyID);
3865 if (!FnTy)
3866 return error("Invalid blockaddress record");
3867 V = BitcodeConstant::create(
3868 Alloc, CurTy,
3869 {BitcodeConstant::BlockAddressOpcode, 0, (unsigned)Record[2]},
3870 Record[1]);
3871 break;
3872 }
3874 if (Record.size() < 2)
3875 return error("Invalid dso_local record");
3876 unsigned GVTyID = Record[0];
3877 Type *GVTy = getTypeByID(GVTyID);
3878 if (!GVTy)
3879 return error("Invalid dso_local record");
3880 V = BitcodeConstant::create(
3881 Alloc, CurTy, BitcodeConstant::DSOLocalEquivalentOpcode, Record[1]);
3882 break;
3883 }
3885 if (Record.size() < 2)
3886 return error("Invalid no_cfi record");
3887 unsigned GVTyID = Record[0];
3888 Type *GVTy = getTypeByID(GVTyID);
3889 if (!GVTy)
3890 return error("Invalid no_cfi record");
3891 V = BitcodeConstant::create(Alloc, CurTy, BitcodeConstant::NoCFIOpcode,
3892 Record[1]);
3893 break;
3894 }
3896 if (Record.size() < 4)
3897 return error("Invalid ptrauth record");
3898 // Ptr, Key, Disc, AddrDisc
3899 V = BitcodeConstant::create(Alloc, CurTy,
3900 BitcodeConstant::ConstantPtrAuthOpcode,
3901 {(unsigned)Record[0], (unsigned)Record[1],
3902 (unsigned)Record[2], (unsigned)Record[3]});
3903 break;
3904 }
3906 if (Record.size() < 5)
3907 return error("Invalid ptrauth record");
3908 // Ptr, Key, Disc, AddrDisc, DeactivationSymbol
3909 V = BitcodeConstant::create(
3910 Alloc, CurTy, BitcodeConstant::ConstantPtrAuthOpcode,
3911 {(unsigned)Record[0], (unsigned)Record[1], (unsigned)Record[2],
3912 (unsigned)Record[3], (unsigned)Record[4]});
3913 break;
3914 }
3915 }
3916
3917 assert(V->getType() == getTypeByID(CurTyID) && "Incorrect result type ID");
3918 if (Error Err = ValueList.assignValue(NextCstNo, V, CurTyID))
3919 return Err;
3920 ++NextCstNo;
3921 }
3922}
3923
3924Error BitcodeReader::parseUseLists() {
3925 if (Error Err = Stream.EnterSubBlock(bitc::USELIST_BLOCK_ID))
3926 return Err;
3927
3928 // Read all the records.
3929 SmallVector<uint64_t, 64> Record;
3930
3931 while (true) {
3932 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
3933 if (!MaybeEntry)
3934 return MaybeEntry.takeError();
3935 BitstreamEntry Entry = MaybeEntry.get();
3936
3937 switch (Entry.Kind) {
3938 case BitstreamEntry::SubBlock: // Handled for us already.
3940 return error("Malformed block");
3942 return Error::success();
3944 // The interesting case.
3945 break;
3946 }
3947
3948 // Read a use list record.
3949 Record.clear();
3950 bool IsBB = false;
3951 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
3952 if (!MaybeRecord)
3953 return MaybeRecord.takeError();
3954 switch (MaybeRecord.get()) {
3955 default: // Default behavior: unknown type.
3956 break;
3958 IsBB = true;
3959 [[fallthrough]];
3961 unsigned RecordLength = Record.size();
3962 if (RecordLength < 3)
3963 // Records should have at least an ID and two indexes.
3964 return error("Invalid uselist record");
3965 unsigned ID = Record.pop_back_val();
3966
3967 Value *V;
3968 if (IsBB) {
3969 assert(ID < FunctionBBs.size() && "Basic block not found");
3970 V = FunctionBBs[ID];
3971 } else
3972 V = ValueList[ID];
3973
3974 if (!V->hasUseList())
3975 break;
3976
3977 unsigned NumUses = 0;
3978 SmallDenseMap<const Use *, unsigned, 16> Order;
3979 for (const Use &U : V->materialized_uses()) {
3980 if (++NumUses > Record.size())
3981 break;
3982 Order[&U] = Record[NumUses - 1];
3983 }
3984 if (Order.size() != Record.size() || NumUses > Record.size())
3985 // Mismatches can happen if the functions are being materialized lazily
3986 // (out-of-order), or a value has been upgraded.
3987 break;
3988
3989 V->sortUseList([&](const Use &L, const Use &R) {
3990 return Order.lookup(&L) < Order.lookup(&R);
3991 });
3992 break;
3993 }
3994 }
3995 }
3996}
3997
3998/// When we see the block for metadata, remember where it is and then skip it.
3999/// This lets us lazily deserialize the metadata.
4000Error BitcodeReader::rememberAndSkipMetadata() {
4001 // Save the current stream state.
4002 uint64_t CurBit = Stream.GetCurrentBitNo();
4003 DeferredMetadataInfo.push_back(CurBit);
4004
4005 // Skip over the block for now.
4006 if (Error Err = Stream.SkipBlock())
4007 return Err;
4008 return Error::success();
4009}
4010
4011Error BitcodeReader::materializeMetadata() {
4012 for (uint64_t BitPos : DeferredMetadataInfo) {
4013 // Move the bit stream to the saved position.
4014 if (Error JumpFailed = Stream.JumpToBit(BitPos))
4015 return JumpFailed;
4016 if (Error Err = MDLoader->parseModuleMetadata())
4017 return Err;
4018 }
4019
4020 // Upgrade "Linker Options" module flag to "llvm.linker.options" module-level
4021 // metadata. Only upgrade if the new option doesn't exist to avoid upgrade
4022 // multiple times.
4023 if (!TheModule->getNamedMetadata("llvm.linker.options")) {
4024 if (Metadata *Val = TheModule->getModuleFlag("Linker Options")) {
4025 NamedMDNode *LinkerOpts =
4026 TheModule->getOrInsertNamedMetadata("llvm.linker.options");
4027 for (const MDOperand &MDOptions : cast<MDNode>(Val)->operands())
4028 LinkerOpts->addOperand(cast<MDNode>(MDOptions));
4029 }
4030 }
4031
4032 UpgradeCFIFunctionsMetadata(*TheModule);
4033
4034 DeferredMetadataInfo.clear();
4035 return Error::success();
4036}
4037
4038void BitcodeReader::setStripDebugInfo() { StripDebugInfo = true; }
4039
4040/// When we see the block for a function body, remember where it is and then
4041/// skip it. This lets us lazily deserialize the functions.
4042Error BitcodeReader::rememberAndSkipFunctionBody() {
4043 // Get the function we are talking about.
4044 if (FunctionsWithBodies.empty())
4045 return error("Insufficient function protos");
4046
4047 Function *Fn = FunctionsWithBodies.back();
4048 FunctionsWithBodies.pop_back();
4049
4050 // Save the current stream state.
4051 uint64_t CurBit = Stream.GetCurrentBitNo();
4052 assert(
4053 (DeferredFunctionInfo[Fn] == 0 || DeferredFunctionInfo[Fn] == CurBit) &&
4054 "Mismatch between VST and scanned function offsets");
4055 DeferredFunctionInfo[Fn] = CurBit;
4056
4057 // Skip over the function block for now.
4058 if (Error Err = Stream.SkipBlock())
4059 return Err;
4060 return Error::success();
4061}
4062
4063Error BitcodeReader::globalCleanup() {
4064 // Patch the initializers for globals and aliases up.
4065 if (Error Err = resolveGlobalAndIndirectSymbolInits())
4066 return Err;
4067 if (!GlobalInits.empty() || !IndirectSymbolInits.empty())
4068 return error("Malformed global initializer set");
4069
4070 // Look for intrinsic functions which need to be upgraded at some point
4071 // and functions that need to have their function attributes upgraded.
4072 for (Function &F : *TheModule) {
4073 MDLoader->upgradeDebugIntrinsics(F);
4074 Function *NewFn;
4076 NewFn, /*CanUpgradeDebugIntrinsicsToRecords=*/
4077 !SkipDebugIntrinsicUpgrade))
4078 UpgradedIntrinsics[&F] = NewFn;
4079 // Look for functions that rely on old function attribute behavior.
4081 }
4082
4083 // Look for global variables which need to be renamed.
4084 std::vector<std::pair<GlobalVariable *, GlobalVariable *>> UpgradedVariables;
4085 for (GlobalVariable &GV : TheModule->globals())
4086 if (GlobalVariable *Upgraded = UpgradeGlobalVariable(&GV))
4087 UpgradedVariables.emplace_back(&GV, Upgraded);
4088 for (auto &Pair : UpgradedVariables) {
4089 Pair.first->eraseFromParent();
4090 TheModule->insertGlobalVariable(Pair.second);
4091 }
4092
4093 for (size_t ValueID = 0; ValueID < GUIDList.size(); ValueID++) {
4094 const auto GUID = GUIDList[ValueID];
4095 if (GUID == 0)
4096 continue;
4097
4098 const auto *Value = ValueList[ValueID];
4099 TheModule->insertGUID(Value, GUID);
4100 }
4101
4102 // Force deallocation of memory for these vectors to favor the client that
4103 // want lazy deserialization.
4104 std::vector<std::pair<GlobalVariable *, unsigned>>().swap(GlobalInits);
4105 std::vector<std::pair<GlobalValue *, unsigned>>().swap(IndirectSymbolInits);
4106 return Error::success();
4107}
4108
4109/// Support for lazy parsing of function bodies. This is required if we
4110/// either have an old bitcode file without a VST forward declaration record,
4111/// or if we have an anonymous function being materialized, since anonymous
4112/// functions do not have a name and are therefore not in the VST.
4113Error BitcodeReader::rememberAndSkipFunctionBodies() {
4114 if (Error JumpFailed = Stream.JumpToBit(NextUnreadBit))
4115 return JumpFailed;
4116
4117 if (Stream.AtEndOfStream())
4118 return error("Could not find function in stream");
4119
4120 if (!SeenFirstFunctionBody)
4121 return error("Trying to materialize functions before seeing function blocks");
4122
4123 // An old bitcode file with the symbol table at the end would have
4124 // finished the parse greedily.
4125 assert(SeenValueSymbolTable);
4126
4127 while (true) {
4128 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4129 if (!MaybeEntry)
4130 return MaybeEntry.takeError();
4131 llvm::BitstreamEntry Entry = MaybeEntry.get();
4132
4133 switch (Entry.Kind) {
4134 default:
4135 return error("Expect SubBlock");
4137 switch (Entry.ID) {
4138 default:
4139 return error("Expect function block");
4141 if (Error Err = rememberAndSkipFunctionBody())
4142 return Err;
4143 NextUnreadBit = Stream.GetCurrentBitNo();
4144 return Error::success();
4145 }
4146 }
4147 }
4148}
4149
4150Error BitcodeReaderBase::readBlockInfo() {
4151 Expected<std::optional<BitstreamBlockInfo>> MaybeNewBlockInfo =
4152 Stream.ReadBlockInfoBlock();
4153 if (!MaybeNewBlockInfo)
4154 return MaybeNewBlockInfo.takeError();
4155 std::optional<BitstreamBlockInfo> NewBlockInfo =
4156 std::move(MaybeNewBlockInfo.get());
4157 if (!NewBlockInfo)
4158 return error("Malformed block");
4159 BlockInfo = std::move(*NewBlockInfo);
4160 return Error::success();
4161}
4162
4163Error BitcodeReader::parseComdatRecord(ArrayRef<uint64_t> Record) {
4164 // v1: [selection_kind, name]
4165 // v2: [strtab_offset, strtab_size, selection_kind]
4166 StringRef Name;
4167 std::tie(Name, Record) = readNameFromStrtab(Record);
4168
4169 if (Record.empty())
4170 return error("Invalid comdat record");
4172 std::string OldFormatName;
4173 if (!UseStrtab) {
4174 if (Record.size() < 2)
4175 return error("Invalid comdat record");
4176 unsigned ComdatNameSize = Record[1];
4177 if (ComdatNameSize > Record.size() - 2)
4178 return error("Comdat name size too large");
4179 OldFormatName.reserve(ComdatNameSize);
4180 for (unsigned i = 0; i != ComdatNameSize; ++i)
4181 OldFormatName += (char)Record[2 + i];
4182 Name = OldFormatName;
4183 }
4184 Comdat *C = TheModule->getOrInsertComdat(Name);
4185 C->setSelectionKind(SK);
4186 ComdatList.push_back(C);
4187 return Error::success();
4188}
4189
4190static void inferDSOLocal(GlobalValue *GV) {
4191 // infer dso_local from linkage and visibility if it is not encoded.
4192 if (GV->hasLocalLinkage() ||
4194 GV->setDSOLocal(true);
4195}
4196
4199 if (V & (1 << 0))
4200 Meta.NoAddress = true;
4201 if (V & (1 << 1))
4202 Meta.NoHWAddress = true;
4203 if (V & (1 << 2))
4204 Meta.Memtag = true;
4205 if (V & (1 << 3))
4206 Meta.IsDynInit = true;
4207 return Meta;
4208}
4209
4210Error BitcodeReader::parseGlobalVarRecord(ArrayRef<uint64_t> Record) {
4211 // v1: [pointer type, isconst, initid, linkage, alignment, section,
4212 // visibility, threadlocal, unnamed_addr, externally_initialized,
4213 // dllstorageclass, comdat, attributes, preemption specifier,
4214 // partition strtab offset, partition strtab size] (name in VST)
4215 // v2: [strtab_offset, strtab_size, v1]
4216 // v3: [v2, code_model]
4217 StringRef Name;
4218 std::tie(Name, Record) = readNameFromStrtab(Record);
4219
4220 if (Record.size() < 6)
4221 return error("Invalid global variable record");
4222 unsigned TyID = Record[0];
4223 Type *Ty = getTypeByID(TyID);
4224 if (!Ty)
4225 return error("Invalid global variable record");
4226 bool isConstant = Record[1] & 1;
4227 bool explicitType = Record[1] & 2;
4228 unsigned AddressSpace;
4229 if (explicitType) {
4230 AddressSpace = Record[1] >> 2;
4231 } else {
4232 if (!Ty->isPointerTy())
4233 return error("Invalid type for value");
4234 AddressSpace = cast<PointerType>(Ty)->getAddressSpace();
4235 TyID = getContainedTypeID(TyID);
4236 Ty = getTypeByID(TyID);
4237 if (!Ty)
4238 return error("Missing element type for old-style global");
4239 }
4240
4241 uint64_t RawLinkage = Record[3];
4243 MaybeAlign Alignment;
4244 if (Error Err = parseAlignmentValue(Record[4], Alignment))
4245 return Err;
4246 std::string Section;
4247 if (Record[5]) {
4248 if (Record[5] - 1 >= SectionTable.size())
4249 return error("Invalid ID");
4250 Section = SectionTable[Record[5] - 1];
4251 }
4253 // Local linkage must have default visibility.
4254 // auto-upgrade `hidden` and `protected` for old bitcode.
4255 if (Record.size() > 6 && !GlobalValue::isLocalLinkage(Linkage))
4256 Visibility = getDecodedVisibility(Record[6]);
4257
4258 GlobalVariable::ThreadLocalMode TLM = GlobalVariable::NotThreadLocal;
4259 if (Record.size() > 7)
4260 TLM = getDecodedThreadLocalMode(Record[7]);
4261
4262 GlobalValue::UnnamedAddr UnnamedAddr = GlobalValue::UnnamedAddr::None;
4263 if (Record.size() > 8)
4264 UnnamedAddr = getDecodedUnnamedAddrType(Record[8]);
4265
4266 bool ExternallyInitialized = false;
4267 if (Record.size() > 9)
4268 ExternallyInitialized = Record[9];
4269
4270 GlobalVariable *NewGV =
4271 new GlobalVariable(*TheModule, Ty, isConstant, Linkage, nullptr, Name,
4272 nullptr, TLM, AddressSpace, ExternallyInitialized);
4273 if (Alignment)
4274 NewGV->setAlignment(*Alignment);
4275 if (!Section.empty())
4276 NewGV->setSection(Section);
4277 NewGV->setVisibility(Visibility);
4278 NewGV->setUnnamedAddr(UnnamedAddr);
4279
4280 if (Record.size() > 10) {
4281 // A GlobalValue with local linkage cannot have a DLL storage class.
4282 if (!NewGV->hasLocalLinkage()) {
4284 }
4285 } else {
4286 upgradeDLLImportExportLinkage(NewGV, RawLinkage);
4287 }
4288
4289 ValueList.push_back(NewGV, getVirtualTypeID(NewGV->getType(), TyID));
4290
4291 // Remember which value to use for the global initializer.
4292 if (unsigned InitID = Record[2])
4293 GlobalInits.push_back(std::make_pair(NewGV, InitID - 1));
4294
4295 if (Record.size() > 11) {
4296 if (unsigned ComdatID = Record[11]) {
4297 if (ComdatID > ComdatList.size())
4298 return error("Invalid global variable comdat ID");
4299 NewGV->setComdat(ComdatList[ComdatID - 1]);
4300 }
4301 } else if (hasImplicitComdat(RawLinkage)) {
4302 ImplicitComdatObjects.insert(NewGV);
4303 }
4304
4305 if (Record.size() > 12) {
4306 auto AS = getAttributes(Record[12]).getFnAttrs();
4307 NewGV->setAttributes(AS);
4308 }
4309
4310 if (Record.size() > 13) {
4311 NewGV->setDSOLocal(getDecodedDSOLocal(Record[13]));
4312 }
4313 inferDSOLocal(NewGV);
4314
4315 // Check whether we have enough values to read a partition name.
4316 if (Record.size() > 15)
4317 NewGV->setPartition(StringRef(Strtab.data() + Record[14], Record[15]));
4318
4319 if (Record.size() > 16 && Record[16]) {
4320 llvm::GlobalValue::SanitizerMetadata Meta =
4321 deserializeSanitizerMetadata(Record[16]);
4322 NewGV->setSanitizerMetadata(Meta);
4323 }
4324
4325 if (Record.size() > 17 && Record[17]) {
4326 if (auto CM = getDecodedCodeModel(Record[17]))
4327 NewGV->setCodeModel(*CM);
4328 else
4329 return error("Invalid global variable code model");
4330 }
4331
4332 return Error::success();
4333}
4334
4335void BitcodeReader::callValueTypeCallback(Value *F, unsigned TypeID) {
4336 if (ValueTypeCallback) {
4337 (*ValueTypeCallback)(
4338 F, TypeID, [this](unsigned I) { return getTypeByID(I); },
4339 [this](unsigned I, unsigned J) { return getContainedTypeID(I, J); });
4340 }
4341}
4342
4343Error BitcodeReader::parseFunctionRecord(ArrayRef<uint64_t> Record) {
4344 // v1: [type, callingconv, isproto, linkage, paramattr, alignment, section,
4345 // visibility, gc, unnamed_addr, prologuedata, dllstorageclass, comdat,
4346 // prefixdata, personalityfn, preemption specifier, addrspace] (name in VST)
4347 // v2: [strtab_offset, strtab_size, v1]
4348 StringRef Name;
4349 std::tie(Name, Record) = readNameFromStrtab(Record);
4350
4351 if (Record.size() < 8)
4352 return error("Invalid function record");
4353 unsigned FTyID = Record[0];
4354 Type *FTy = getTypeByID(FTyID);
4355 if (!FTy)
4356 return error("Invalid function record");
4357 if (isa<PointerType>(FTy)) {
4358 FTyID = getContainedTypeID(FTyID, 0);
4359 FTy = getTypeByID(FTyID);
4360 if (!FTy)
4361 return error("Missing element type for old-style function");
4362 }
4363
4364 if (!isa<FunctionType>(FTy))
4365 return error("Invalid type for value");
4366 auto CC = static_cast<CallingConv::ID>(Record[1]);
4367 if (CC & ~CallingConv::MaxID)
4368 return error("Invalid calling convention ID");
4369
4370 unsigned AddrSpace = TheModule->getDataLayout().getProgramAddressSpace();
4371 if (Record.size() > 16)
4372 AddrSpace = Record[16];
4373
4374 Function *Func =
4376 AddrSpace, Name, TheModule);
4377
4378 assert(Func->getFunctionType() == FTy &&
4379 "Incorrect fully specified type provided for function");
4380 FunctionTypeIDs[Func] = FTyID;
4381
4382 Func->setCallingConv(CC);
4383 bool isProto = Record[2];
4384 uint64_t RawLinkage = Record[3];
4385 Func->setLinkage(getDecodedLinkage(RawLinkage));
4386 Func->setAttributes(getAttributes(Record[4]));
4387 callValueTypeCallback(Func, FTyID);
4388
4389 // Upgrade any old-style byval or sret without a type by propagating the
4390 // argument's pointee type. There should be no opaque pointers where the byval
4391 // type is implicit.
4392 for (unsigned i = 0; i != Func->arg_size(); ++i) {
4393 for (Attribute::AttrKind Kind : {Attribute::ByVal, Attribute::StructRet,
4394 Attribute::InAlloca}) {
4395 if (!Func->hasParamAttribute(i, Kind))
4396 continue;
4397
4398 if (Func->getParamAttribute(i, Kind).getValueAsType())
4399 continue;
4400
4401 Func->removeParamAttr(i, Kind);
4402
4403 unsigned ParamTypeID = getContainedTypeID(FTyID, i + 1);
4404 Type *PtrEltTy = getPtrElementTypeByID(ParamTypeID);
4405 if (!PtrEltTy)
4406 return error("Missing param element type for attribute upgrade");
4407
4408 Attribute NewAttr;
4409 switch (Kind) {
4410 case Attribute::ByVal:
4411 NewAttr = Attribute::getWithByValType(Context, PtrEltTy);
4412 break;
4413 case Attribute::StructRet:
4414 NewAttr = Attribute::getWithStructRetType(Context, PtrEltTy);
4415 break;
4416 case Attribute::InAlloca:
4417 NewAttr = Attribute::getWithInAllocaType(Context, PtrEltTy);
4418 break;
4419 default:
4420 llvm_unreachable("not an upgraded type attribute");
4421 }
4422
4423 Func->addParamAttr(i, NewAttr);
4424 }
4425 }
4426
4427 if (Func->getCallingConv() == CallingConv::X86_INTR &&
4428 !Func->arg_empty() && !Func->hasParamAttribute(0, Attribute::ByVal)) {
4429 unsigned ParamTypeID = getContainedTypeID(FTyID, 1);
4430 Type *ByValTy = getPtrElementTypeByID(ParamTypeID);
4431 if (!ByValTy)
4432 return error("Missing param element type for x86_intrcc upgrade");
4433 Attribute NewAttr = Attribute::getWithByValType(Context, ByValTy);
4434 Func->addParamAttr(0, NewAttr);
4435 }
4436
4437 MaybeAlign Alignment;
4438 if (Error Err = parseAlignmentValue(Record[5], Alignment))
4439 return Err;
4440 if (Alignment)
4441 Func->setAlignment(*Alignment);
4442 if (Record[6]) {
4443 if (Record[6] - 1 >= SectionTable.size())
4444 return error("Invalid ID");
4445 Func->setSection(SectionTable[Record[6] - 1]);
4446 }
4447 // Local linkage must have default visibility.
4448 // auto-upgrade `hidden` and `protected` for old bitcode.
4449 if (!Func->hasLocalLinkage())
4450 Func->setVisibility(getDecodedVisibility(Record[7]));
4451 if (Record.size() > 8 && Record[8]) {
4452 if (Record[8] - 1 >= GCTable.size())
4453 return error("Invalid ID");
4454 Func->setGC(GCTable[Record[8] - 1]);
4455 }
4456 GlobalValue::UnnamedAddr UnnamedAddr = GlobalValue::UnnamedAddr::None;
4457 if (Record.size() > 9)
4458 UnnamedAddr = getDecodedUnnamedAddrType(Record[9]);
4459 Func->setUnnamedAddr(UnnamedAddr);
4460
4461 FunctionOperandInfo OperandInfo = {Func, 0, 0, 0};
4462 if (Record.size() > 10)
4463 OperandInfo.Prologue = Record[10];
4464
4465 if (Record.size() > 11) {
4466 // A GlobalValue with local linkage cannot have a DLL storage class.
4467 if (!Func->hasLocalLinkage()) {
4468 Func->setDLLStorageClass(getDecodedDLLStorageClass(Record[11]));
4469 }
4470 } else {
4471 upgradeDLLImportExportLinkage(Func, RawLinkage);
4472 }
4473
4474 if (Record.size() > 12) {
4475 if (unsigned ComdatID = Record[12]) {
4476 if (ComdatID > ComdatList.size())
4477 return error("Invalid function comdat ID");
4478 Func->setComdat(ComdatList[ComdatID - 1]);
4479 }
4480 } else if (hasImplicitComdat(RawLinkage)) {
4481 ImplicitComdatObjects.insert(Func);
4482 }
4483
4484 if (Record.size() > 13)
4485 OperandInfo.Prefix = Record[13];
4486
4487 if (Record.size() > 14)
4488 OperandInfo.PersonalityFn = Record[14];
4489
4490 if (Record.size() > 15) {
4491 Func->setDSOLocal(getDecodedDSOLocal(Record[15]));
4492 }
4493 inferDSOLocal(Func);
4494
4495 // Record[16] is the address space number.
4496
4497 // Check whether we have enough values to read a partition name. Also make
4498 // sure Strtab has enough values.
4499 if (Record.size() > 18 && Strtab.data() &&
4500 Record[17] + Record[18] <= Strtab.size()) {
4501 Func->setPartition(StringRef(Strtab.data() + Record[17], Record[18]));
4502 }
4503
4504 if (Record.size() > 19) {
4505 MaybeAlign PrefAlignment;
4506 if (Error Err = parseAlignmentValue(Record[19], PrefAlignment))
4507 return Err;
4508 Func->setPreferredAlignment(PrefAlignment);
4509 }
4510
4511 ValueList.push_back(Func, getVirtualTypeID(Func->getType(), FTyID));
4512
4513 if (OperandInfo.PersonalityFn || OperandInfo.Prefix || OperandInfo.Prologue)
4514 FunctionOperands.push_back(OperandInfo);
4515
4516 // If this is a function with a body, remember the prototype we are
4517 // creating now, so that we can match up the body with them later.
4518 if (!isProto) {
4519 Func->setIsMaterializable(true);
4520 FunctionsWithBodies.push_back(Func);
4521 DeferredFunctionInfo[Func] = 0;
4522 }
4523 return Error::success();
4524}
4525
4526Error BitcodeReader::parseGlobalIndirectSymbolRecord(
4527 unsigned BitCode, ArrayRef<uint64_t> Record) {
4528 // v1 ALIAS_OLD: [alias type, aliasee val#, linkage] (name in VST)
4529 // v1 ALIAS: [alias type, addrspace, aliasee val#, linkage, visibility,
4530 // dllstorageclass, threadlocal, unnamed_addr,
4531 // preemption specifier] (name in VST)
4532 // v1 IFUNC: [alias type, addrspace, aliasee val#, linkage,
4533 // visibility, dllstorageclass, threadlocal, unnamed_addr,
4534 // preemption specifier] (name in VST)
4535 // v2: [strtab_offset, strtab_size, v1]
4536 StringRef Name;
4537 std::tie(Name, Record) = readNameFromStrtab(Record);
4538
4539 bool NewRecord = BitCode != bitc::MODULE_CODE_ALIAS_OLD;
4540 if (Record.size() < (3 + (unsigned)NewRecord))
4541 return error("Invalid global indirect symbol record");
4542 unsigned OpNum = 0;
4543 unsigned TypeID = Record[OpNum++];
4544 Type *Ty = getTypeByID(TypeID);
4545 if (!Ty)
4546 return error("Invalid global indirect symbol record");
4547
4548 unsigned AddrSpace;
4549 if (!NewRecord) {
4550 auto *PTy = dyn_cast<PointerType>(Ty);
4551 if (!PTy)
4552 return error("Invalid type for value");
4553 AddrSpace = PTy->getAddressSpace();
4554 TypeID = getContainedTypeID(TypeID);
4555 Ty = getTypeByID(TypeID);
4556 if (!Ty)
4557 return error("Missing element type for old-style indirect symbol");
4558 } else {
4559 AddrSpace = Record[OpNum++];
4560 }
4561
4562 auto Val = Record[OpNum++];
4563 auto Linkage = Record[OpNum++];
4564 GlobalValue *NewGA;
4565 if (BitCode == bitc::MODULE_CODE_ALIAS ||
4566 BitCode == bitc::MODULE_CODE_ALIAS_OLD)
4567 NewGA = GlobalAlias::create(Ty, AddrSpace, getDecodedLinkage(Linkage), Name,
4568 TheModule);
4569 else
4570 NewGA = GlobalIFunc::create(Ty, AddrSpace, getDecodedLinkage(Linkage), Name,
4571 nullptr, TheModule);
4572
4573 // Local linkage must have default visibility.
4574 // auto-upgrade `hidden` and `protected` for old bitcode.
4575 if (OpNum != Record.size()) {
4576 auto VisInd = OpNum++;
4577 if (!NewGA->hasLocalLinkage())
4578 NewGA->setVisibility(getDecodedVisibility(Record[VisInd]));
4579 }
4580 if (BitCode == bitc::MODULE_CODE_ALIAS ||
4581 BitCode == bitc::MODULE_CODE_ALIAS_OLD) {
4582 if (OpNum != Record.size()) {
4583 auto S = Record[OpNum++];
4584 // A GlobalValue with local linkage cannot have a DLL storage class.
4585 if (!NewGA->hasLocalLinkage())
4587 }
4588 else
4590 if (OpNum != Record.size())
4591 NewGA->setThreadLocalMode(getDecodedThreadLocalMode(Record[OpNum++]));
4592 if (OpNum != Record.size())
4593 NewGA->setUnnamedAddr(getDecodedUnnamedAddrType(Record[OpNum++]));
4594 }
4595 if (OpNum != Record.size())
4596 NewGA->setDSOLocal(getDecodedDSOLocal(Record[OpNum++]));
4597 inferDSOLocal(NewGA);
4598
4599 // Check whether we have enough values to read a partition name.
4600 if (OpNum + 1 < Record.size()) {
4601 // Check Strtab has enough values for the partition.
4602 if (Record[OpNum] + Record[OpNum + 1] > Strtab.size())
4603 return error("Malformed partition, too large.");
4604 NewGA->setPartition(
4605 StringRef(Strtab.data() + Record[OpNum], Record[OpNum + 1]));
4606 }
4607
4608 ValueList.push_back(NewGA, getVirtualTypeID(NewGA->getType(), TypeID));
4609 IndirectSymbolInits.push_back(std::make_pair(NewGA, Val));
4610 return Error::success();
4611}
4612
4613Error BitcodeReader::parseModule(uint64_t ResumeBit,
4614 bool ShouldLazyLoadMetadata,
4615 ParserCallbacks Callbacks) {
4616 this->ValueTypeCallback = std::move(Callbacks.ValueType);
4617 if (ResumeBit) {
4618 if (Error JumpFailed = Stream.JumpToBit(ResumeBit))
4619 return JumpFailed;
4620 } else if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
4621 return Err;
4622
4623 SmallVector<uint64_t, 64> Record;
4624
4625 // Parts of bitcode parsing depend on the datalayout. Make sure we
4626 // finalize the datalayout before we run any of that code.
4627 bool ResolvedDataLayout = false;
4628 // In order to support importing modules with illegal data layout strings,
4629 // delay parsing the data layout string until after upgrades and overrides
4630 // have been applied, allowing to fix illegal data layout strings.
4631 // Initialize to the current module's layout string in case none is specified.
4632 std::string TentativeDataLayoutStr = TheModule->getDataLayoutStr();
4633
4634 // Apply to the following module asm.
4635 Module::GlobalAsmProperties Props;
4636
4637 auto ResolveDataLayout = [&]() -> Error {
4638 if (ResolvedDataLayout)
4639 return Error::success();
4640
4641 // Datalayout and triple can't be parsed after this point.
4642 ResolvedDataLayout = true;
4643
4644 // Auto-upgrade the layout string
4645 TentativeDataLayoutStr = llvm::UpgradeDataLayoutString(
4646 TentativeDataLayoutStr, TheModule->getTargetTriple().str());
4647
4648 // Apply override
4649 if (Callbacks.DataLayout) {
4650 if (auto LayoutOverride = (*Callbacks.DataLayout)(
4651 TheModule->getTargetTriple().str(), TentativeDataLayoutStr))
4652 TentativeDataLayoutStr = *LayoutOverride;
4653 }
4654
4655 // Now the layout string is finalized in TentativeDataLayoutStr. Parse it.
4656 Expected<DataLayout> MaybeDL = DataLayout::parse(TentativeDataLayoutStr);
4657 if (!MaybeDL)
4658 return MaybeDL.takeError();
4659
4660 TheModule->setDataLayout(MaybeDL.get());
4661 return Error::success();
4662 };
4663
4664 // Read all the records for this module.
4665 while (true) {
4666 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4667 if (!MaybeEntry)
4668 return MaybeEntry.takeError();
4669 llvm::BitstreamEntry Entry = MaybeEntry.get();
4670
4671 switch (Entry.Kind) {
4673 return error("Malformed block");
4675 if (Error Err = ResolveDataLayout())
4676 return Err;
4677 return globalCleanup();
4678
4680 switch (Entry.ID) {
4681 default: // Skip unknown content.
4682 if (Error Err = Stream.SkipBlock())
4683 return Err;
4684 break;
4686 if (Error Err = readBlockInfo())
4687 return Err;
4688 break;
4690 if (Error Err = parseAttributeBlock())
4691 return Err;
4692 break;
4694 if (Error Err = parseAttributeGroupBlock())
4695 return Err;
4696 break;
4698 if (Error Err = parseTypeTable())
4699 return Err;
4700 break;
4702 if (!SeenValueSymbolTable) {
4703 // Either this is an old form VST without function index and an
4704 // associated VST forward declaration record (which would have caused
4705 // the VST to be jumped to and parsed before it was encountered
4706 // normally in the stream), or there were no function blocks to
4707 // trigger an earlier parsing of the VST.
4708 assert(VSTOffset == 0 || FunctionsWithBodies.empty());
4709 if (Error Err = parseValueSymbolTable())
4710 return Err;
4711 SeenValueSymbolTable = true;
4712 } else {
4713 // We must have had a VST forward declaration record, which caused
4714 // the parser to jump to and parse the VST earlier.
4715 assert(VSTOffset > 0);
4716 if (Error Err = Stream.SkipBlock())
4717 return Err;
4718 }
4719 break;
4721 if (Error Err = parseConstants())
4722 return Err;
4723 if (Error Err = resolveGlobalAndIndirectSymbolInits())
4724 return Err;
4725 break;
4727 if (ShouldLazyLoadMetadata) {
4728 if (Error Err = rememberAndSkipMetadata())
4729 return Err;
4730 break;
4731 }
4732 assert(DeferredMetadataInfo.empty() && "Unexpected deferred metadata");
4733 if (Error Err = MDLoader->parseModuleMetadata())
4734 return Err;
4735 break;
4737 if (Error Err = MDLoader->parseMetadataKinds())
4738 return Err;
4739 break;
4741 if (Error Err = ResolveDataLayout())
4742 return Err;
4743
4744 // If this is the first function body we've seen, reverse the
4745 // FunctionsWithBodies list.
4746 if (!SeenFirstFunctionBody) {
4747 std::reverse(FunctionsWithBodies.begin(), FunctionsWithBodies.end());
4748 if (Error Err = globalCleanup())
4749 return Err;
4750 SeenFirstFunctionBody = true;
4751 }
4752
4753 if (VSTOffset > 0) {
4754 // If we have a VST forward declaration record, make sure we
4755 // parse the VST now if we haven't already. It is needed to
4756 // set up the DeferredFunctionInfo vector for lazy reading.
4757 if (!SeenValueSymbolTable) {
4758 if (Error Err = BitcodeReader::parseValueSymbolTable(VSTOffset))
4759 return Err;
4760 SeenValueSymbolTable = true;
4761 // Fall through so that we record the NextUnreadBit below.
4762 // This is necessary in case we have an anonymous function that
4763 // is later materialized. Since it will not have a VST entry we
4764 // need to fall back to the lazy parse to find its offset.
4765 } else {
4766 // If we have a VST forward declaration record, but have already
4767 // parsed the VST (just above, when the first function body was
4768 // encountered here), then we are resuming the parse after
4769 // materializing functions. The ResumeBit points to the
4770 // start of the last function block recorded in the
4771 // DeferredFunctionInfo map. Skip it.
4772 if (Error Err = Stream.SkipBlock())
4773 return Err;
4774 continue;
4775 }
4776 }
4777
4778 // Support older bitcode files that did not have the function
4779 // index in the VST, nor a VST forward declaration record, as
4780 // well as anonymous functions that do not have VST entries.
4781 // Build the DeferredFunctionInfo vector on the fly.
4782 if (Error Err = rememberAndSkipFunctionBody())
4783 return Err;
4784
4785 // Suspend parsing when we reach the function bodies. Subsequent
4786 // materialization calls will resume it when necessary. If the bitcode
4787 // file is old, the symbol table will be at the end instead and will not
4788 // have been seen yet. In this case, just finish the parse now.
4789 if (SeenValueSymbolTable) {
4790 NextUnreadBit = Stream.GetCurrentBitNo();
4791 // After the VST has been parsed, we need to make sure intrinsic name
4792 // are auto-upgraded.
4793 return globalCleanup();
4794 }
4795 break;
4797 if (Error Err = parseUseLists())
4798 return Err;
4799 break;
4801 if (Error Err = parseOperandBundleTags())
4802 return Err;
4803 break;
4805 if (Error Err = parseSyncScopeNames())
4806 return Err;
4807 break;
4808 }
4809 continue;
4810
4812 // The interesting case.
4813 break;
4814 }
4815
4816 // Read a record.
4817 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
4818 if (!MaybeBitCode)
4819 return MaybeBitCode.takeError();
4820 switch (unsigned BitCode = MaybeBitCode.get()) {
4821 default: break; // Default behavior, ignore unknown content.
4823 Expected<unsigned> VersionOrErr = parseVersionRecord(Record);
4824 if (!VersionOrErr)
4825 return VersionOrErr.takeError();
4826 UseRelativeIDs = *VersionOrErr >= 1;
4827 break;
4828 }
4829 case bitc::MODULE_CODE_TRIPLE: { // TRIPLE: [strchr x N]
4830 if (ResolvedDataLayout)
4831 return error("target triple too late in module");
4832 std::string S;
4833 if (convertToString(Record, 0, S))
4834 return error("Invalid triple record");
4835 TheModule->setTargetTriple(Triple(std::move(S)));
4836 break;
4837 }
4838 case bitc::MODULE_CODE_DATALAYOUT: { // DATALAYOUT: [strchr x N]
4839 if (ResolvedDataLayout)
4840 return error("datalayout too late in module");
4841 if (convertToString(Record, 0, TentativeDataLayoutStr))
4842 return error("Invalid data layout record");
4843 break;
4844 }
4846 std::string Str;
4847 if (convertToString(Record, 0, Str))
4848 return error("Invalid module asm record");
4849 size_t SepPos = Str.find('\0');
4850 if (SepPos == std::string::npos)
4851 return error("Invalid module asm record");
4852 if (!Props.set(StringRef(Str.data(), SepPos), Str.substr(SepPos + 1)))
4853 return error("Unknown module asm property");
4854 break;
4855 }
4856 case bitc::MODULE_CODE_ASM: { // ASM: [strchr x N]
4857 std::string S;
4858 if (convertToString(Record, 0, S))
4859 return error("Invalid asm record");
4860 TheModule->appendModuleInlineAsm(Module::GlobalAsmFragment(S, Props));
4861 Props = {};
4862 break;
4863 }
4864 case bitc::MODULE_CODE_DEPLIB: { // DEPLIB: [strchr x N]
4865 // Deprecated, but still needed to read old bitcode files.
4866 std::string S;
4867 if (convertToString(Record, 0, S))
4868 return error("Invalid deplib record");
4869 // Ignore value.
4870 break;
4871 }
4872 case bitc::MODULE_CODE_SECTIONNAME: { // SECTIONNAME: [strchr x N]
4873 std::string S;
4874 if (convertToString(Record, 0, S))
4875 return error("Invalid section name record");
4876 SectionTable.push_back(S);
4877 break;
4878 }
4879 case bitc::MODULE_CODE_GCNAME: { // SECTIONNAME: [strchr x N]
4880 std::string S;
4881 if (convertToString(Record, 0, S))
4882 return error("Invalid gcname record");
4883 GCTable.push_back(S);
4884 break;
4885 }
4887 if (Error Err = parseComdatRecord(Record))
4888 return Err;
4889 break;
4890 // FIXME: BitcodeReader should handle {GLOBALVAR, FUNCTION, ALIAS, IFUNC}
4891 // written by ThinLinkBitcodeWriter. See
4892 // `ThinLinkBitcodeWriter::writeSimplifiedModuleInfo` for the format of each
4893 // record
4894 // (https://github.com/llvm/llvm-project/blob/b6a93967d9c11e79802b5e75cec1584d6c8aa472/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp#L4714)
4896 if (Error Err = parseGlobalVarRecord(Record))
4897 return Err;
4898 break;
4900 if (Error Err = ResolveDataLayout())
4901 return Err;
4902 if (Error Err = parseFunctionRecord(Record))
4903 return Err;
4904 break;
4908 if (Error Err = parseGlobalIndirectSymbolRecord(BitCode, Record))
4909 return Err;
4910 break;
4911 /// MODULE_CODE_VSTOFFSET: [offset]
4913 if (Record.empty())
4914 return error("Invalid vstoffset record");
4915 // Note that we subtract 1 here because the offset is relative to one word
4916 // before the start of the identification or module block, which was
4917 // historically always the start of the regular bitcode header.
4918 VSTOffset = Record[0] - 1;
4919 break;
4920 // MODULE_CODE_GUIDLIST: [i64 x N]
4922 assert(Record.size() % 2 == 0);
4923 GUIDList.reserve(GUIDList.size() + Record.size() / 2);
4924 for (size_t i = 0; i < Record.size(); i += 2)
4925 GUIDList.push_back(Record[i] << 32 | Record[i + 1]);
4926 break;
4927 /// MODULE_CODE_SOURCE_FILENAME: [namechar x N]
4929 SmallString<128> ValueName;
4930 if (convertToString(Record, 0, ValueName))
4931 return error("Invalid source filename record");
4932 TheModule->setSourceFileName(ValueName);
4933 break;
4934 }
4935 Record.clear();
4936 }
4937
4938 this->ValueTypeCallback = std::nullopt;
4939 return Error::success();
4940}
4941
4942Error BitcodeReader::parseBitcodeInto(Module *M, bool ShouldLazyLoadMetadata,
4943 bool IsImporting,
4944 ParserCallbacks Callbacks) {
4945 TheModule = M;
4946 MetadataLoaderCallbacks MDCallbacks;
4947 MDCallbacks.GetTypeByID = [&](unsigned ID) { return getTypeByID(ID); };
4948 MDCallbacks.GetContainedTypeID = [&](unsigned I, unsigned J) {
4949 return getContainedTypeID(I, J);
4950 };
4951 MDCallbacks.MDType = Callbacks.MDType;
4952 MDLoader = MetadataLoader(Stream, *M, ValueList, IsImporting, MDCallbacks);
4953 SkipDebugIntrinsicUpgrade = Callbacks.SkipDebugIntrinsicUpgrade;
4954 return parseModule(0, ShouldLazyLoadMetadata, Callbacks);
4955}
4956
4957Error BitcodeReader::typeCheckLoadStoreInst(Type *ValType, Type *PtrType) {
4958 if (!isa<PointerType>(PtrType))
4959 return error("Load/Store operand is not a pointer type");
4960 if (!PointerType::isLoadableOrStorableType(ValType))
4961 return error("Cannot load/store from pointer");
4962 return Error::success();
4963}
4964
4965Error BitcodeReader::propagateAttributeTypes(CallBase *CB,
4966 ArrayRef<unsigned> ArgTyIDs) {
4967 AttributeList Attrs = CB->getAttributes();
4968 for (unsigned i = 0; i != CB->arg_size(); ++i) {
4969 for (Attribute::AttrKind Kind : {Attribute::ByVal, Attribute::StructRet,
4970 Attribute::InAlloca}) {
4971 if (!Attrs.hasParamAttr(i, Kind) ||
4972 Attrs.getParamAttr(i, Kind).getValueAsType())
4973 continue;
4974
4975 Type *PtrEltTy = getPtrElementTypeByID(ArgTyIDs[i]);
4976 if (!PtrEltTy)
4977 return error("Missing element type for typed attribute upgrade");
4978
4979 Attribute NewAttr;
4980 switch (Kind) {
4981 case Attribute::ByVal:
4982 NewAttr = Attribute::getWithByValType(Context, PtrEltTy);
4983 break;
4984 case Attribute::StructRet:
4985 NewAttr = Attribute::getWithStructRetType(Context, PtrEltTy);
4986 break;
4987 case Attribute::InAlloca:
4988 NewAttr = Attribute::getWithInAllocaType(Context, PtrEltTy);
4989 break;
4990 default:
4991 llvm_unreachable("not an upgraded type attribute");
4992 }
4993
4994 Attrs = Attrs.addParamAttribute(Context, i, NewAttr);
4995 }
4996 }
4997
4998 if (CB->isInlineAsm()) {
4999 const InlineAsm *IA = cast<InlineAsm>(CB->getCalledOperand());
5000 unsigned ArgNo = 0;
5001 for (const InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) {
5002 if (!CI.hasArg())
5003 continue;
5004
5005 if (CI.isIndirect && !Attrs.getParamElementType(ArgNo)) {
5006 Type *ElemTy = getPtrElementTypeByID(ArgTyIDs[ArgNo]);
5007 if (!ElemTy)
5008 return error("Missing element type for inline asm upgrade");
5009 Attrs = Attrs.addParamAttribute(
5010 Context, ArgNo,
5011 Attribute::get(Context, Attribute::ElementType, ElemTy));
5012 }
5013
5014 ArgNo++;
5015 }
5016 }
5017
5018 switch (CB->getIntrinsicID()) {
5019 case Intrinsic::preserve_array_access_index:
5020 case Intrinsic::preserve_struct_access_index:
5021 case Intrinsic::aarch64_ldaxr:
5022 case Intrinsic::aarch64_ldxr:
5023 case Intrinsic::aarch64_stlxr:
5024 case Intrinsic::aarch64_stxr:
5025 case Intrinsic::arm_ldaex:
5026 case Intrinsic::arm_ldrex:
5027 case Intrinsic::arm_stlex:
5028 case Intrinsic::arm_strex: {
5029 unsigned ArgNo;
5030 switch (CB->getIntrinsicID()) {
5031 case Intrinsic::aarch64_stlxr:
5032 case Intrinsic::aarch64_stxr:
5033 case Intrinsic::arm_stlex:
5034 case Intrinsic::arm_strex:
5035 ArgNo = 1;
5036 break;
5037 default:
5038 ArgNo = 0;
5039 break;
5040 }
5041 if (!Attrs.getParamElementType(ArgNo)) {
5042 Type *ElTy = getPtrElementTypeByID(ArgTyIDs[ArgNo]);
5043 if (!ElTy)
5044 return error("Missing element type for elementtype upgrade");
5045 Attribute NewAttr = Attribute::get(Context, Attribute::ElementType, ElTy);
5046 Attrs = Attrs.addParamAttribute(Context, ArgNo, NewAttr);
5047 }
5048 break;
5049 }
5050 default:
5051 break;
5052 }
5053
5054 CB->setAttributes(Attrs);
5055 return Error::success();
5056}
5057
5058/// Lazily parse the specified function body block.
5059Error BitcodeReader::parseFunctionBody(Function *F) {
5061 return Err;
5062
5063 // Unexpected unresolved metadata when parsing function.
5064 if (MDLoader->hasFwdRefs())
5065 return error("Invalid function metadata: incoming forward references");
5066
5067 InstructionList.clear();
5068 unsigned ModuleValueListSize = ValueList.size();
5069 unsigned ModuleMDLoaderSize = MDLoader->size();
5070
5071 // Add all the function arguments to the value table.
5072 unsigned ArgNo = 0;
5073 unsigned FTyID = FunctionTypeIDs[F];
5074 for (Argument &I : F->args()) {
5075 unsigned ArgTyID = getContainedTypeID(FTyID, ArgNo + 1);
5076 assert(I.getType() == getTypeByID(ArgTyID) &&
5077 "Incorrect fully specified type for Function Argument");
5078 ValueList.push_back(&I, ArgTyID);
5079 ++ArgNo;
5080 }
5081 unsigned NextValueNo = ValueList.size();
5082 BasicBlock *CurBB = nullptr;
5083 unsigned CurBBNo = 0;
5084 // Block into which constant expressions from phi nodes are materialized.
5085 BasicBlock *PhiConstExprBB = nullptr;
5086 // Edge blocks for phi nodes into which constant expressions have been
5087 // expanded.
5088 SmallMapVector<std::pair<BasicBlock *, BasicBlock *>, BasicBlock *, 4>
5089 ConstExprEdgeBBs;
5090
5091 DebugLoc LastLoc;
5092 auto getLastInstruction = [&]() -> Instruction * {
5093 if (CurBB && !CurBB->empty())
5094 return &CurBB->back();
5095 else if (CurBBNo && FunctionBBs[CurBBNo - 1] &&
5096 !FunctionBBs[CurBBNo - 1]->empty())
5097 return &FunctionBBs[CurBBNo - 1]->back();
5098 return nullptr;
5099 };
5100
5101 std::vector<OperandBundleDef> OperandBundles;
5102
5103 // Read all the records.
5104 SmallVector<uint64_t, 64> Record;
5105
5106 while (true) {
5107 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5108 if (!MaybeEntry)
5109 return MaybeEntry.takeError();
5110 llvm::BitstreamEntry Entry = MaybeEntry.get();
5111
5112 switch (Entry.Kind) {
5114 return error("Malformed block");
5116 goto OutOfRecordLoop;
5117
5119 switch (Entry.ID) {
5120 default: // Skip unknown content.
5121 if (Error Err = Stream.SkipBlock())
5122 return Err;
5123 break;
5125 if (Error Err = parseConstants())
5126 return Err;
5127 NextValueNo = ValueList.size();
5128 break;
5130 if (Error Err = parseValueSymbolTable())
5131 return Err;
5132 break;
5134 if (Error Err = MDLoader->parseMetadataAttachment(*F, InstructionList))
5135 return Err;
5136 break;
5138 assert(DeferredMetadataInfo.empty() &&
5139 "Must read all module-level metadata before function-level");
5140 if (Error Err = MDLoader->parseFunctionMetadata())
5141 return Err;
5142 break;
5144 if (Error Err = parseUseLists())
5145 return Err;
5146 break;
5147 }
5148 continue;
5149
5151 // The interesting case.
5152 break;
5153 }
5154
5155 // Read a record.
5156 Record.clear();
5157 Instruction *I = nullptr;
5158 unsigned ResTypeID = InvalidTypeID;
5159 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
5160 if (!MaybeBitCode)
5161 return MaybeBitCode.takeError();
5162 switch (unsigned BitCode = MaybeBitCode.get()) {
5163 default: // Default behavior: reject
5164 return error("Invalid value");
5165 case bitc::FUNC_CODE_DECLAREBLOCKS: { // DECLAREBLOCKS: [nblocks]
5166 if (Record.empty() || Record[0] == 0)
5167 return error("Invalid declareblocks record");
5168 // Create all the basic blocks for the function.
5169 FunctionBBs.resize(Record[0]);
5170
5171 // See if anything took the address of blocks in this function.
5172 auto BBFRI = BasicBlockFwdRefs.find(F);
5173 if (BBFRI == BasicBlockFwdRefs.end()) {
5174 for (BasicBlock *&BB : FunctionBBs)
5175 BB = BasicBlock::Create(Context, "", F);
5176 } else {
5177 auto &BBRefs = BBFRI->second;
5178 // Check for invalid basic block references.
5179 if (BBRefs.size() > FunctionBBs.size())
5180 return error("Invalid ID");
5181 assert(!BBRefs.empty() && "Unexpected empty array");
5182 assert(!BBRefs.front() && "Invalid reference to entry block");
5183 for (unsigned I = 0, E = FunctionBBs.size(), RE = BBRefs.size(); I != E;
5184 ++I)
5185 if (I < RE && BBRefs[I]) {
5186 BBRefs[I]->insertInto(F);
5187 FunctionBBs[I] = BBRefs[I];
5188 } else {
5189 FunctionBBs[I] = BasicBlock::Create(Context, "", F);
5190 }
5191
5192 // Erase from the table.
5193 BasicBlockFwdRefs.erase(BBFRI);
5194 }
5195
5196 CurBB = FunctionBBs[0];
5197 continue;
5198 }
5199
5200 case bitc::FUNC_CODE_BLOCKADDR_USERS: // BLOCKADDR_USERS: [vals...]
5201 // The record should not be emitted if it's an empty list.
5202 if (Record.empty())
5203 return error("Invalid blockaddr users record");
5204 // When we have the RARE case of a BlockAddress Constant that is not
5205 // scoped to the Function it refers to, we need to conservatively
5206 // materialize the referred to Function, regardless of whether or not
5207 // that Function will ultimately be linked, otherwise users of
5208 // BitcodeReader might start splicing out Function bodies such that we
5209 // might no longer be able to materialize the BlockAddress since the
5210 // BasicBlock (and entire body of the Function) the BlockAddress refers
5211 // to may have been moved. In the case that the user of BitcodeReader
5212 // decides ultimately not to link the Function body, materializing here
5213 // could be considered wasteful, but it's better than a deserialization
5214 // failure as described. This keeps BitcodeReader unaware of complex
5215 // linkage policy decisions such as those use by LTO, leaving those
5216 // decisions "one layer up."
5217 for (uint64_t ValID : Record)
5218 if (auto *F = dyn_cast<Function>(ValueList[ValID]))
5219 BackwardRefFunctions.push_back(F);
5220 else
5221 return error("Invalid blockaddr users record");
5222
5223 continue;
5224
5225 case bitc::FUNC_CODE_DEBUG_LOC_AGAIN: // DEBUG_LOC_AGAIN
5226 // This record indicates that the last instruction is at the same
5227 // location as the previous instruction with a location.
5228 I = getLastInstruction();
5229
5230 if (!I)
5231 return error("Invalid debug_loc_again record");
5232 I->setDebugLoc(LastLoc);
5233 I = nullptr;
5234 continue;
5235
5236 case bitc::FUNC_CODE_DEBUG_LOC: { // DEBUG_LOC: [line, col, scope, ia]
5237 I = getLastInstruction();
5238 if (!I || Record.size() < 4)
5239 return error("Invalid debug loc record");
5240
5241 unsigned Line = Record[0], Col = Record[1];
5242 unsigned ScopeID = Record[2], IAID = Record[3];
5243 bool isImplicitCode = Record.size() >= 5 && Record[4];
5244 uint64_t AtomGroup = Record.size() == 7 ? Record[5] : 0;
5245 uint8_t AtomRank = Record.size() == 7 ? Record[6] : 0;
5246
5247 MDNode *Scope = nullptr, *IA = nullptr;
5248 if (ScopeID) {
5250 MDLoader->getMetadataFwdRefOrLoad(ScopeID - 1));
5251 if (!Scope)
5252 return error("Invalid debug loc record");
5253 }
5254 if (IAID) {
5256 MDLoader->getMetadataFwdRefOrLoad(IAID - 1));
5257 if (!IA)
5258 return error("Invalid debug loc record");
5259 }
5260
5261 LastLoc = DILocation::get(Scope->getContext(), Line, Col, Scope, IA,
5262 isImplicitCode, AtomGroup, AtomRank);
5263 I->setDebugLoc(LastLoc);
5264 I = nullptr;
5265 continue;
5266 }
5267 case bitc::FUNC_CODE_INST_UNOP: { // UNOP: [opval, ty, opcode]
5268 unsigned OpNum = 0;
5269 Value *LHS;
5270 unsigned TypeID;
5271 if (getValueTypePair(Record, OpNum, NextValueNo, LHS, TypeID, CurBB) ||
5272 OpNum+1 > Record.size())
5273 return error("Invalid unary operator record");
5274
5275 int Opc = getDecodedUnaryOpcode(Record[OpNum++], LHS->getType());
5276 if (Opc == -1)
5277 return error("Invalid unary operator record");
5279 ResTypeID = TypeID;
5280 InstructionList.push_back(I);
5281 if (OpNum < Record.size()) {
5282 if (isa<FPMathOperator>(I)) {
5283 FastMathFlags FMF = getDecodedFastMathFlags(Record[OpNum]);
5284 if (FMF.any())
5285 I->setFastMathFlags(FMF);
5286 }
5287 }
5288 break;
5289 }
5290 case bitc::FUNC_CODE_INST_BINOP: { // BINOP: [opval, ty, opval, opcode]
5291 unsigned OpNum = 0;
5292 Value *LHS, *RHS;
5293 unsigned TypeID;
5294 if (getValueTypePair(Record, OpNum, NextValueNo, LHS, TypeID, CurBB) ||
5295 popValue(Record, OpNum, NextValueNo, LHS->getType(), TypeID, RHS,
5296 CurBB) ||
5297 OpNum+1 > Record.size())
5298 return error("Invalid binary operator record");
5299
5300 int Opc = getDecodedBinaryOpcode(Record[OpNum++], LHS->getType());
5301 if (Opc == -1)
5302 return error("Invalid binary operator record");
5304 ResTypeID = TypeID;
5305 InstructionList.push_back(I);
5306 if (OpNum < Record.size()) {
5307 if (Opc == Instruction::Add ||
5308 Opc == Instruction::Sub ||
5309 Opc == Instruction::Mul ||
5310 Opc == Instruction::Shl) {
5311 if (Record[OpNum] & (1 << bitc::OBO_NO_SIGNED_WRAP))
5312 cast<BinaryOperator>(I)->setHasNoSignedWrap(true);
5313 if (Record[OpNum] & (1 << bitc::OBO_NO_UNSIGNED_WRAP))
5314 cast<BinaryOperator>(I)->setHasNoUnsignedWrap(true);
5315 } else if (Opc == Instruction::SDiv ||
5316 Opc == Instruction::UDiv ||
5317 Opc == Instruction::LShr ||
5318 Opc == Instruction::AShr) {
5319 if (Record[OpNum] & (1 << bitc::PEO_EXACT))
5320 cast<BinaryOperator>(I)->setIsExact(true);
5321 } else if (Opc == Instruction::Or) {
5322 if (Record[OpNum] & (1 << bitc::PDI_DISJOINT))
5323 cast<PossiblyDisjointInst>(I)->setIsDisjoint(true);
5324 } else if (isa<FPMathOperator>(I)) {
5325 FastMathFlags FMF = getDecodedFastMathFlags(Record[OpNum]);
5326 if (FMF.any())
5327 I->setFastMathFlags(FMF);
5328 }
5329 }
5330 break;
5331 }
5332 case bitc::FUNC_CODE_INST_CAST: { // CAST: [opval, opty, destty, castopc]
5333 unsigned OpNum = 0;
5334 Value *Op;
5335 unsigned OpTypeID;
5336 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB) ||
5337 OpNum + 1 > Record.size())
5338 return error("Invalid cast record");
5339
5340 ResTypeID = Record[OpNum++];
5341 Type *ResTy = getTypeByID(ResTypeID);
5342 int Opc = getDecodedCastOpcode(Record[OpNum++]);
5343
5344 if (Opc == -1 || !ResTy)
5345 return error("Invalid cast record");
5346 Instruction *Temp = nullptr;
5347 if ((I = UpgradeBitCastInst(Opc, Op, ResTy, Temp))) {
5348 if (Temp) {
5349 InstructionList.push_back(Temp);
5350 assert(CurBB && "No current BB?");
5351 Temp->insertInto(CurBB, CurBB->end());
5352 }
5353 } else {
5354 auto CastOp = (Instruction::CastOps)Opc;
5355 if (!CastInst::castIsValid(CastOp, Op, ResTy))
5356 return error("Invalid cast");
5357 I = CastInst::Create(CastOp, Op, ResTy);
5358 }
5359
5360 if (OpNum < Record.size()) {
5361 if (Opc == Instruction::ZExt || Opc == Instruction::UIToFP) {
5362 if (Record[OpNum] & (1 << bitc::PNNI_NON_NEG))
5363 cast<PossiblyNonNegInst>(I)->setNonNeg(true);
5364 } else if (Opc == Instruction::Trunc) {
5365 if (Record[OpNum] & (1 << bitc::TIO_NO_UNSIGNED_WRAP))
5366 cast<TruncInst>(I)->setHasNoUnsignedWrap(true);
5367 if (Record[OpNum] & (1 << bitc::TIO_NO_SIGNED_WRAP))
5368 cast<TruncInst>(I)->setHasNoSignedWrap(true);
5369 }
5370 if (isa<FPMathOperator>(I)) {
5371 uint64_t Flags = Record[OpNum];
5372 if (isa<UIToFPInst>(I))
5373 Flags >>= 1;
5374 FastMathFlags FMF = getDecodedFastMathFlags(Flags);
5375 if (FMF.any())
5376 I->setFastMathFlags(FMF);
5377 }
5378 }
5379
5380 InstructionList.push_back(I);
5381 break;
5382 }
5385 case bitc::FUNC_CODE_INST_GEP: { // GEP: type, [n x operands]
5386 unsigned OpNum = 0;
5387
5388 unsigned TyID;
5389 Type *Ty;
5390 GEPNoWrapFlags NW;
5391
5392 if (BitCode == bitc::FUNC_CODE_INST_GEP) {
5393 NW = toGEPNoWrapFlags(Record[OpNum++]);
5394 TyID = Record[OpNum++];
5395 Ty = getTypeByID(TyID);
5396 } else {
5399 TyID = InvalidTypeID;
5400 Ty = nullptr;
5401 }
5402
5403 Value *BasePtr;
5404 unsigned BasePtrTypeID;
5405 if (getValueTypePair(Record, OpNum, NextValueNo, BasePtr, BasePtrTypeID,
5406 CurBB))
5407 return error("Invalid gep record");
5408
5409 if (!Ty) {
5410 TyID = getContainedTypeID(BasePtrTypeID);
5411 if (BasePtr->getType()->isVectorTy())
5412 TyID = getContainedTypeID(TyID);
5413 Ty = getTypeByID(TyID);
5414 }
5415
5416 SmallVector<Value*, 16> GEPIdx;
5417 while (OpNum != Record.size()) {
5418 Value *Op;
5419 unsigned OpTypeID;
5420 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
5421 return error("Invalid gep record");
5422 GEPIdx.push_back(Op);
5423 }
5424
5425 auto *GEP = GetElementPtrInst::Create(Ty, BasePtr, GEPIdx);
5426 I = GEP;
5427
5428 ResTypeID = TyID;
5429 if (cast<GEPOperator>(I)->getNumIndices() != 0) {
5430 auto GTI = std::next(gep_type_begin(I));
5431 for (Value *Idx : drop_begin(cast<GEPOperator>(I)->indices())) {
5432 unsigned SubType = 0;
5433 if (GTI.isStruct()) {
5434 ConstantInt *IdxC =
5435 Idx->getType()->isVectorTy()
5437 : cast<ConstantInt>(Idx);
5438 SubType = IdxC->getZExtValue();
5439 }
5440 ResTypeID = getContainedTypeID(ResTypeID, SubType);
5441 ++GTI;
5442 }
5443 }
5444
5445 // At this point ResTypeID is the result element type. We need a pointer
5446 // or vector of pointer to it.
5447 ResTypeID = getVirtualTypeID(I->getType()->getScalarType(), ResTypeID);
5448 if (I->getType()->isVectorTy())
5449 ResTypeID = getVirtualTypeID(I->getType(), ResTypeID);
5450
5451 InstructionList.push_back(I);
5452 GEP->setNoWrapFlags(NW);
5453 break;
5454 }
5455
5457 // EXTRACTVAL: [opty, opval, n x indices]
5458 unsigned OpNum = 0;
5459 Value *Agg;
5460 unsigned AggTypeID;
5461 if (getValueTypePair(Record, OpNum, NextValueNo, Agg, AggTypeID, CurBB))
5462 return error("Invalid extractvalue record");
5463 Type *Ty = Agg->getType();
5464
5465 unsigned RecSize = Record.size();
5466 if (OpNum == RecSize)
5467 return error("EXTRACTVAL: Invalid instruction with 0 indices");
5468
5469 SmallVector<unsigned, 4> EXTRACTVALIdx;
5470 ResTypeID = AggTypeID;
5471 for (; OpNum != RecSize; ++OpNum) {
5472 bool IsArray = Ty->isArrayTy();
5473 bool IsStruct = Ty->isStructTy();
5474 uint64_t Index = Record[OpNum];
5475
5476 if (!IsStruct && !IsArray)
5477 return error("EXTRACTVAL: Invalid type");
5478 if ((unsigned)Index != Index)
5479 return error("Invalid value");
5480 if (IsStruct && Index >= Ty->getStructNumElements())
5481 return error("EXTRACTVAL: Invalid struct index");
5482 if (IsArray && Index >= Ty->getArrayNumElements())
5483 return error("EXTRACTVAL: Invalid array index");
5484 EXTRACTVALIdx.push_back((unsigned)Index);
5485
5486 if (IsStruct) {
5487 Ty = Ty->getStructElementType(Index);
5488 ResTypeID = getContainedTypeID(ResTypeID, Index);
5489 } else {
5490 Ty = Ty->getArrayElementType();
5491 ResTypeID = getContainedTypeID(ResTypeID);
5492 }
5493 }
5494
5495 I = ExtractValueInst::Create(Agg, EXTRACTVALIdx);
5496 InstructionList.push_back(I);
5497 break;
5498 }
5499
5501 // INSERTVAL: [opty, opval, opty, opval, n x indices]
5502 unsigned OpNum = 0;
5503 Value *Agg;
5504 unsigned AggTypeID;
5505 if (getValueTypePair(Record, OpNum, NextValueNo, Agg, AggTypeID, CurBB))
5506 return error("Invalid insertvalue record");
5507 Value *Val;
5508 unsigned ValTypeID;
5509 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
5510 return error("Invalid insertvalue record");
5511
5512 unsigned RecSize = Record.size();
5513 if (OpNum == RecSize)
5514 return error("INSERTVAL: Invalid instruction with 0 indices");
5515
5516 SmallVector<unsigned, 4> INSERTVALIdx;
5517 Type *CurTy = Agg->getType();
5518 for (; OpNum != RecSize; ++OpNum) {
5519 bool IsArray = CurTy->isArrayTy();
5520 bool IsStruct = CurTy->isStructTy();
5521 uint64_t Index = Record[OpNum];
5522
5523 if (!IsStruct && !IsArray)
5524 return error("INSERTVAL: Invalid type");
5525 if ((unsigned)Index != Index)
5526 return error("Invalid value");
5527 if (IsStruct && Index >= CurTy->getStructNumElements())
5528 return error("INSERTVAL: Invalid struct index");
5529 if (IsArray && Index >= CurTy->getArrayNumElements())
5530 return error("INSERTVAL: Invalid array index");
5531
5532 INSERTVALIdx.push_back((unsigned)Index);
5533 if (IsStruct)
5534 CurTy = CurTy->getStructElementType(Index);
5535 else
5536 CurTy = CurTy->getArrayElementType();
5537 }
5538
5539 if (CurTy != Val->getType())
5540 return error("Inserted value type doesn't match aggregate type");
5541
5542 I = InsertValueInst::Create(Agg, Val, INSERTVALIdx);
5543 ResTypeID = AggTypeID;
5544 InstructionList.push_back(I);
5545 break;
5546 }
5547
5548 case bitc::FUNC_CODE_INST_SELECT: { // SELECT: [opval, ty, opval, opval]
5549 // obsolete form of select
5550 // handles select i1 ... in old bitcode
5551 unsigned OpNum = 0;
5553 unsigned TypeID;
5554 Type *CondType = Type::getInt1Ty(Context);
5555 if (getValueTypePair(Record, OpNum, NextValueNo, TrueVal, TypeID,
5556 CurBB) ||
5557 popValue(Record, OpNum, NextValueNo, TrueVal->getType(), TypeID,
5558 FalseVal, CurBB) ||
5559 popValue(Record, OpNum, NextValueNo, CondType,
5560 getVirtualTypeID(CondType), Cond, CurBB))
5561 return error("Invalid select record");
5562
5563 I = SelectInst::Create(Cond, TrueVal, FalseVal);
5564 ResTypeID = TypeID;
5565 InstructionList.push_back(I);
5566 break;
5567 }
5568
5569 case bitc::FUNC_CODE_INST_VSELECT: {// VSELECT: [ty,opval,opval,predty,pred]
5570 // new form of select
5571 // handles select i1 or select [N x i1]
5572 unsigned OpNum = 0;
5574 unsigned ValTypeID, CondTypeID;
5575 if (getValueTypePair(Record, OpNum, NextValueNo, TrueVal, ValTypeID,
5576 CurBB) ||
5577 popValue(Record, OpNum, NextValueNo, TrueVal->getType(), ValTypeID,
5578 FalseVal, CurBB) ||
5579 getValueTypePair(Record, OpNum, NextValueNo, Cond, CondTypeID, CurBB))
5580 return error("Invalid vector select record");
5581
5582 // select condition can be either i1 or [N x i1]
5583 if (VectorType* vector_type =
5584 dyn_cast<VectorType>(Cond->getType())) {
5585 // expect <n x i1>
5586 if (vector_type->getElementType() != Type::getInt1Ty(Context))
5587 return error("Invalid type for value");
5588 } else {
5589 // expect i1
5590 if (Cond->getType() != Type::getInt1Ty(Context))
5591 return error("Invalid type for value");
5592 }
5593
5594 I = SelectInst::Create(Cond, TrueVal, FalseVal);
5595 ResTypeID = ValTypeID;
5596 InstructionList.push_back(I);
5597 if (OpNum < Record.size() && isa<FPMathOperator>(I)) {
5598 FastMathFlags FMF = getDecodedFastMathFlags(Record[OpNum]);
5599 if (FMF.any())
5600 I->setFastMathFlags(FMF);
5601 }
5602 break;
5603 }
5604
5605 case bitc::FUNC_CODE_INST_EXTRACTELT: { // EXTRACTELT: [opty, opval, opval]
5606 unsigned OpNum = 0;
5607 Value *Vec, *Idx;
5608 unsigned VecTypeID, IdxTypeID;
5609 if (getValueTypePair(Record, OpNum, NextValueNo, Vec, VecTypeID, CurBB) ||
5610 getValueTypePair(Record, OpNum, NextValueNo, Idx, IdxTypeID, CurBB))
5611 return error("Invalid extractelement record");
5612 if (!Vec->getType()->isVectorTy())
5613 return error("Invalid type for value");
5614 I = ExtractElementInst::Create(Vec, Idx);
5615 ResTypeID = getContainedTypeID(VecTypeID);
5616 InstructionList.push_back(I);
5617 break;
5618 }
5619
5620 case bitc::FUNC_CODE_INST_INSERTELT: { // INSERTELT: [ty, opval,opval,opval]
5621 unsigned OpNum = 0;
5622 Value *Vec, *Elt, *Idx;
5623 unsigned VecTypeID, IdxTypeID;
5624 if (getValueTypePair(Record, OpNum, NextValueNo, Vec, VecTypeID, CurBB))
5625 return error("Invalid insertelement record");
5626 if (!Vec->getType()->isVectorTy())
5627 return error("Invalid type for value");
5628 if (popValue(Record, OpNum, NextValueNo,
5629 cast<VectorType>(Vec->getType())->getElementType(),
5630 getContainedTypeID(VecTypeID), Elt, CurBB) ||
5631 getValueTypePair(Record, OpNum, NextValueNo, Idx, IdxTypeID, CurBB))
5632 return error("Invalid insert element record");
5633 I = InsertElementInst::Create(Vec, Elt, Idx);
5634 ResTypeID = VecTypeID;
5635 InstructionList.push_back(I);
5636 break;
5637 }
5638
5639 case bitc::FUNC_CODE_INST_SHUFFLEVEC: {// SHUFFLEVEC: [opval,ty,opval,opval]
5640 unsigned OpNum = 0;
5641 Value *Vec1, *Vec2, *Mask;
5642 unsigned Vec1TypeID;
5643 if (getValueTypePair(Record, OpNum, NextValueNo, Vec1, Vec1TypeID,
5644 CurBB) ||
5645 popValue(Record, OpNum, NextValueNo, Vec1->getType(), Vec1TypeID,
5646 Vec2, CurBB))
5647 return error("Invalid shufflevector record");
5648
5649 unsigned MaskTypeID;
5650 if (getValueTypePair(Record, OpNum, NextValueNo, Mask, MaskTypeID, CurBB))
5651 return error("Invalid shufflevector record");
5652 if (!Vec1->getType()->isVectorTy() || !Vec2->getType()->isVectorTy())
5653 return error("Invalid type for value");
5654
5655 I = new ShuffleVectorInst(Vec1, Vec2, Mask);
5656 ResTypeID =
5657 getVirtualTypeID(I->getType(), getContainedTypeID(Vec1TypeID));
5658 InstructionList.push_back(I);
5659 break;
5660 }
5661
5662 case bitc::FUNC_CODE_INST_CMP: // CMP: [opty, opval, opval, pred]
5663 // Old form of ICmp/FCmp returning bool
5664 // Existed to differentiate between icmp/fcmp and vicmp/vfcmp which were
5665 // both legal on vectors but had different behaviour.
5666 case bitc::FUNC_CODE_INST_CMP2: { // CMP2: [opty, opval, opval, pred]
5667 // FCmp/ICmp returning bool or vector of bool
5668
5669 unsigned OpNum = 0;
5670 Value *LHS, *RHS;
5671 unsigned LHSTypeID;
5672 if (getValueTypePair(Record, OpNum, NextValueNo, LHS, LHSTypeID, CurBB) ||
5673 popValue(Record, OpNum, NextValueNo, LHS->getType(), LHSTypeID, RHS,
5674 CurBB))
5675 return error("Invalid comparison record");
5676
5677 if (OpNum >= Record.size())
5678 return error(
5679 "Invalid record: operand number exceeded available operands");
5680
5681 CmpInst::Predicate PredVal = CmpInst::Predicate(Record[OpNum]);
5682 bool IsFP = LHS->getType()->isFPOrFPVectorTy();
5683 FastMathFlags FMF;
5684 if (IsFP && Record.size() > OpNum+1)
5685 FMF = getDecodedFastMathFlags(Record[++OpNum]);
5686
5687 if (IsFP) {
5688 if (!CmpInst::isFPPredicate(PredVal))
5689 return error("Invalid fcmp predicate");
5690 I = new FCmpInst(PredVal, LHS, RHS);
5691 } else {
5692 if (!CmpInst::isIntPredicate(PredVal))
5693 return error("Invalid icmp predicate");
5694 I = new ICmpInst(PredVal, LHS, RHS);
5695 if (Record.size() > OpNum + 1 &&
5696 (Record[++OpNum] & (1 << bitc::ICMP_SAME_SIGN)))
5697 cast<ICmpInst>(I)->setSameSign();
5698 }
5699
5700 if (OpNum + 1 != Record.size())
5701 return error("Invalid comparison record");
5702
5703 ResTypeID = getVirtualTypeID(I->getType()->getScalarType());
5704 if (LHS->getType()->isVectorTy())
5705 ResTypeID = getVirtualTypeID(I->getType(), ResTypeID);
5706
5707 if (FMF.any())
5708 I->setFastMathFlags(FMF);
5709 InstructionList.push_back(I);
5710 break;
5711 }
5712
5713 case bitc::FUNC_CODE_INST_RET: // RET: [opty,opval<optional>]
5714 {
5715 unsigned Size = Record.size();
5716 if (Size == 0) {
5718 InstructionList.push_back(I);
5719 break;
5720 }
5721
5722 unsigned OpNum = 0;
5723 Value *Op = nullptr;
5724 unsigned OpTypeID;
5725 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
5726 return error("Invalid ret record");
5727 if (OpNum != Record.size())
5728 return error("Invalid ret record");
5729
5731 InstructionList.push_back(I);
5732 break;
5733 }
5734 case bitc::FUNC_CODE_INST_BR: { // BR: [bb#, bb#, opval] or [bb#]
5735 if (Record.size() != 1 && Record.size() != 3)
5736 return error("Invalid br record");
5737 BasicBlock *TrueDest = getBasicBlock(Record[0]);
5738 if (!TrueDest)
5739 return error("Invalid br record");
5740
5741 if (Record.size() == 1) {
5742 I = UncondBrInst::Create(TrueDest);
5743 InstructionList.push_back(I);
5744 }
5745 else {
5746 BasicBlock *FalseDest = getBasicBlock(Record[1]);
5747 Type *CondType = Type::getInt1Ty(Context);
5748 Value *Cond = getValue(Record, 2, NextValueNo, CondType,
5749 getVirtualTypeID(CondType), CurBB);
5750 if (!FalseDest || !Cond)
5751 return error("Invalid br record");
5752 I = CondBrInst::Create(Cond, TrueDest, FalseDest);
5753 InstructionList.push_back(I);
5754 }
5755 break;
5756 }
5757 case bitc::FUNC_CODE_INST_CLEANUPRET: { // CLEANUPRET: [val] or [val,bb#]
5758 if (Record.size() != 1 && Record.size() != 2)
5759 return error("Invalid cleanupret record");
5760 unsigned Idx = 0;
5761 Type *TokenTy = Type::getTokenTy(Context);
5762 Value *CleanupPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5763 getVirtualTypeID(TokenTy), CurBB);
5764 if (!CleanupPad)
5765 return error("Invalid cleanupret record");
5766 BasicBlock *UnwindDest = nullptr;
5767 if (Record.size() == 2) {
5768 UnwindDest = getBasicBlock(Record[Idx++]);
5769 if (!UnwindDest)
5770 return error("Invalid cleanupret record");
5771 }
5772
5773 I = CleanupReturnInst::Create(CleanupPad, UnwindDest);
5774 InstructionList.push_back(I);
5775 break;
5776 }
5777 case bitc::FUNC_CODE_INST_CATCHRET: { // CATCHRET: [val,bb#]
5778 if (Record.size() != 2)
5779 return error("Invalid catchret record");
5780 unsigned Idx = 0;
5781 Type *TokenTy = Type::getTokenTy(Context);
5782 Value *CatchPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5783 getVirtualTypeID(TokenTy), CurBB);
5784 if (!CatchPad)
5785 return error("Invalid catchret record");
5786 BasicBlock *BB = getBasicBlock(Record[Idx++]);
5787 if (!BB)
5788 return error("Invalid catchret record");
5789
5790 I = CatchReturnInst::Create(CatchPad, BB);
5791 InstructionList.push_back(I);
5792 break;
5793 }
5794 case bitc::FUNC_CODE_INST_CATCHSWITCH: { // CATCHSWITCH: [tok,num,(bb)*,bb?]
5795 // We must have, at minimum, the outer scope and the number of arguments.
5796 if (Record.size() < 2)
5797 return error("Invalid catchswitch record");
5798
5799 unsigned Idx = 0;
5800
5801 Type *TokenTy = Type::getTokenTy(Context);
5802 Value *ParentPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5803 getVirtualTypeID(TokenTy), CurBB);
5804 if (!ParentPad)
5805 return error("Invalid catchswitch record");
5806
5807 unsigned NumHandlers = Record[Idx++];
5808
5810 for (unsigned Op = 0; Op != NumHandlers; ++Op) {
5811 BasicBlock *BB = getBasicBlock(Record[Idx++]);
5812 if (!BB)
5813 return error("Invalid catchswitch record");
5814 Handlers.push_back(BB);
5815 }
5816
5817 BasicBlock *UnwindDest = nullptr;
5818 if (Idx + 1 == Record.size()) {
5819 UnwindDest = getBasicBlock(Record[Idx++]);
5820 if (!UnwindDest)
5821 return error("Invalid catchswitch record");
5822 }
5823
5824 if (Record.size() != Idx)
5825 return error("Invalid catchswitch record");
5826
5827 auto *CatchSwitch =
5828 CatchSwitchInst::Create(ParentPad, UnwindDest, NumHandlers);
5829 for (BasicBlock *Handler : Handlers)
5830 CatchSwitch->addHandler(Handler);
5831 I = CatchSwitch;
5832 ResTypeID = getVirtualTypeID(I->getType());
5833 InstructionList.push_back(I);
5834 break;
5835 }
5837 case bitc::FUNC_CODE_INST_CLEANUPPAD: { // [tok,num,(ty,val)*]
5838 // We must have, at minimum, the outer scope and the number of arguments.
5839 if (Record.size() < 2)
5840 return error("Invalid catchpad/cleanuppad record");
5841
5842 unsigned Idx = 0;
5843
5844 Type *TokenTy = Type::getTokenTy(Context);
5845 Value *ParentPad = getValue(Record, Idx++, NextValueNo, TokenTy,
5846 getVirtualTypeID(TokenTy), CurBB);
5847 if (!ParentPad)
5848 return error("Invalid catchpad/cleanuppad record");
5849
5850 unsigned NumArgOperands = Record[Idx++];
5851
5852 SmallVector<Value *, 2> Args;
5853 for (unsigned Op = 0; Op != NumArgOperands; ++Op) {
5854 Value *Val;
5855 unsigned ValTypeID;
5856 if (getValueTypePair(Record, Idx, NextValueNo, Val, ValTypeID, nullptr))
5857 return error("Invalid catchpad/cleanuppad record");
5858 Args.push_back(Val);
5859 }
5860
5861 if (Record.size() != Idx)
5862 return error("Invalid catchpad/cleanuppad record");
5863
5864 if (BitCode == bitc::FUNC_CODE_INST_CLEANUPPAD)
5865 I = CleanupPadInst::Create(ParentPad, Args);
5866 else
5867 I = CatchPadInst::Create(ParentPad, Args);
5868 ResTypeID = getVirtualTypeID(I->getType());
5869 InstructionList.push_back(I);
5870 break;
5871 }
5872 case bitc::FUNC_CODE_INST_SWITCH: { // SWITCH: [opty, op0, op1, ...]
5873 // Check magic
5874 if ((Record[0] >> 16) == SWITCH_INST_MAGIC) {
5875 // "New" SwitchInst format with case ranges. The changes to write this
5876 // format were reverted but we still recognize bitcode that uses it.
5877 // Hopefully someday we will have support for case ranges and can use
5878 // this format again.
5879
5880 unsigned OpTyID = Record[1];
5881 Type *OpTy = getTypeByID(OpTyID);
5882 unsigned ValueBitWidth = cast<IntegerType>(OpTy)->getBitWidth();
5883
5884 Value *Cond = getValue(Record, 2, NextValueNo, OpTy, OpTyID, CurBB);
5885 BasicBlock *Default = getBasicBlock(Record[3]);
5886 if (!OpTy || !Cond || !Default)
5887 return error("Invalid switch record");
5888
5889 unsigned NumCases = Record[4];
5890
5891 SwitchInst *SI = SwitchInst::Create(Cond, Default, NumCases);
5892 InstructionList.push_back(SI);
5893
5894 unsigned CurIdx = 5;
5895 for (unsigned i = 0; i != NumCases; ++i) {
5897 unsigned NumItems = Record[CurIdx++];
5898 for (unsigned ci = 0; ci != NumItems; ++ci) {
5899 bool isSingleNumber = Record[CurIdx++];
5900
5901 APInt Low;
5902 unsigned ActiveWords = 1;
5903 if (ValueBitWidth > 64)
5904 ActiveWords = Record[CurIdx++];
5905 Low = readWideAPInt(ArrayRef(&Record[CurIdx], ActiveWords),
5906 ValueBitWidth);
5907 CurIdx += ActiveWords;
5908
5909 if (!isSingleNumber) {
5910 ActiveWords = 1;
5911 if (ValueBitWidth > 64)
5912 ActiveWords = Record[CurIdx++];
5913 APInt High = readWideAPInt(ArrayRef(&Record[CurIdx], ActiveWords),
5914 ValueBitWidth);
5915 CurIdx += ActiveWords;
5916
5917 // FIXME: It is not clear whether values in the range should be
5918 // compared as signed or unsigned values. The partially
5919 // implemented changes that used this format in the past used
5920 // unsigned comparisons.
5921 for ( ; Low.ule(High); ++Low)
5922 CaseVals.push_back(ConstantInt::get(Context, Low));
5923 } else
5924 CaseVals.push_back(ConstantInt::get(Context, Low));
5925 }
5926 BasicBlock *DestBB = getBasicBlock(Record[CurIdx++]);
5927 for (ConstantInt *Cst : CaseVals)
5928 SI->addCase(Cst, DestBB);
5929 }
5930 I = SI;
5931 break;
5932 }
5933
5934 // Old SwitchInst format without case ranges.
5935
5936 if (Record.size() < 3 || (Record.size() & 1) == 0)
5937 return error("Invalid switch record");
5938 unsigned OpTyID = Record[0];
5939 Type *OpTy = getTypeByID(OpTyID);
5940 Value *Cond = getValue(Record, 1, NextValueNo, OpTy, OpTyID, CurBB);
5941 BasicBlock *Default = getBasicBlock(Record[2]);
5942 if (!OpTy || !Cond || !Default)
5943 return error("Invalid switch record");
5944 unsigned NumCases = (Record.size()-3)/2;
5945 SwitchInst *SI = SwitchInst::Create(Cond, Default, NumCases);
5946 InstructionList.push_back(SI);
5947 for (unsigned i = 0, e = NumCases; i != e; ++i) {
5948 ConstantInt *CaseVal = dyn_cast_or_null<ConstantInt>(
5949 getFnValueByID(Record[3+i*2], OpTy, OpTyID, nullptr));
5950 BasicBlock *DestBB = getBasicBlock(Record[1+3+i*2]);
5951 if (!CaseVal || !DestBB) {
5952 delete SI;
5953 return error("Invalid switch record");
5954 }
5955 SI->addCase(CaseVal, DestBB);
5956 }
5957 I = SI;
5958 break;
5959 }
5960 case bitc::FUNC_CODE_INST_INDIRECTBR: { // INDIRECTBR: [opty, op0, op1, ...]
5961 if (Record.size() < 2)
5962 return error("Invalid indirectbr record");
5963 unsigned OpTyID = Record[0];
5964 Type *OpTy = getTypeByID(OpTyID);
5965 Value *Address = getValue(Record, 1, NextValueNo, OpTy, OpTyID, CurBB);
5966 if (!OpTy || !Address)
5967 return error("Invalid indirectbr record");
5968 unsigned NumDests = Record.size()-2;
5969 IndirectBrInst *IBI = IndirectBrInst::Create(Address, NumDests);
5970 InstructionList.push_back(IBI);
5971 for (unsigned i = 0, e = NumDests; i != e; ++i) {
5972 if (BasicBlock *DestBB = getBasicBlock(Record[2+i])) {
5973 IBI->addDestination(DestBB);
5974 } else {
5975 delete IBI;
5976 return error("Invalid indirectbr record");
5977 }
5978 }
5979 I = IBI;
5980 break;
5981 }
5982
5984 // INVOKE: [attrs, cc, normBB, unwindBB, fnty, op0,op1,op2, ...]
5985 if (Record.size() < 4)
5986 return error("Invalid invoke record");
5987 unsigned OpNum = 0;
5988 AttributeList PAL = getAttributes(Record[OpNum++]);
5989 unsigned CCInfo = Record[OpNum++];
5990 BasicBlock *NormalBB = getBasicBlock(Record[OpNum++]);
5991 BasicBlock *UnwindBB = getBasicBlock(Record[OpNum++]);
5992
5993 unsigned FTyID = InvalidTypeID;
5994 FunctionType *FTy = nullptr;
5995 if ((CCInfo >> 13) & 1) {
5996 FTyID = Record[OpNum++];
5997 FTy = dyn_cast<FunctionType>(getTypeByID(FTyID));
5998 if (!FTy)
5999 return error("Explicit invoke type is not a function type");
6000 }
6001
6002 Value *Callee;
6003 unsigned CalleeTypeID;
6004 if (getValueTypePair(Record, OpNum, NextValueNo, Callee, CalleeTypeID,
6005 CurBB))
6006 return error("Invalid invoke record");
6007
6008 PointerType *CalleeTy = dyn_cast<PointerType>(Callee->getType());
6009 if (!CalleeTy)
6010 return error("Callee is not a pointer");
6011 if (!FTy) {
6012 FTyID = getContainedTypeID(CalleeTypeID);
6013 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6014 if (!FTy)
6015 return error("Callee is not of pointer to function type");
6016 }
6017 if (Record.size() < FTy->getNumParams() + OpNum)
6018 return error("Insufficient operands to call");
6019
6020 SmallVector<Value*, 16> Ops;
6021 SmallVector<unsigned, 16> ArgTyIDs;
6022 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
6023 unsigned ArgTyID = getContainedTypeID(FTyID, i + 1);
6024 Ops.push_back(getValue(Record, OpNum, NextValueNo, FTy->getParamType(i),
6025 ArgTyID, CurBB));
6026 ArgTyIDs.push_back(ArgTyID);
6027 if (!Ops.back())
6028 return error("Invalid invoke record");
6029 }
6030
6031 if (!FTy->isVarArg()) {
6032 if (Record.size() != OpNum)
6033 return error("Invalid invoke record");
6034 } else {
6035 // Read type/value pairs for varargs params.
6036 while (OpNum != Record.size()) {
6037 Value *Op;
6038 unsigned OpTypeID;
6039 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
6040 return error("Invalid invoke record");
6041 Ops.push_back(Op);
6042 ArgTyIDs.push_back(OpTypeID);
6043 }
6044 }
6045
6046 // Upgrade the bundles if needed.
6047 if (!OperandBundles.empty())
6048 UpgradeOperandBundles(OperandBundles);
6049
6050 I = InvokeInst::Create(FTy, Callee, NormalBB, UnwindBB, Ops,
6051 OperandBundles);
6052 ResTypeID = getContainedTypeID(FTyID);
6053 OperandBundles.clear();
6054 InstructionList.push_back(I);
6055 cast<InvokeInst>(I)->setCallingConv(
6056 static_cast<CallingConv::ID>(CallingConv::MaxID & CCInfo));
6057 cast<InvokeInst>(I)->setAttributes(PAL);
6058 if (Error Err = propagateAttributeTypes(cast<CallBase>(I), ArgTyIDs)) {
6059 I->deleteValue();
6060 return Err;
6061 }
6062
6063 break;
6064 }
6065 case bitc::FUNC_CODE_INST_RESUME: { // RESUME: [opval]
6066 unsigned Idx = 0;
6067 Value *Val = nullptr;
6068 unsigned ValTypeID;
6069 if (getValueTypePair(Record, Idx, NextValueNo, Val, ValTypeID, CurBB))
6070 return error("Invalid resume record");
6071 I = ResumeInst::Create(Val);
6072 InstructionList.push_back(I);
6073 break;
6074 }
6076 // CALLBR: [attr, cc, norm, transfs, fty, fnid, args]
6077 unsigned OpNum = 0;
6078 AttributeList PAL = getAttributes(Record[OpNum++]);
6079 unsigned CCInfo = Record[OpNum++];
6080
6081 BasicBlock *DefaultDest = getBasicBlock(Record[OpNum++]);
6082 unsigned NumIndirectDests = Record[OpNum++];
6083 SmallVector<BasicBlock *, 16> IndirectDests;
6084 for (unsigned i = 0, e = NumIndirectDests; i != e; ++i)
6085 IndirectDests.push_back(getBasicBlock(Record[OpNum++]));
6086
6087 unsigned FTyID = InvalidTypeID;
6088 FunctionType *FTy = nullptr;
6089 if ((CCInfo >> bitc::CALL_EXPLICIT_TYPE) & 1) {
6090 FTyID = Record[OpNum++];
6091 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6092 if (!FTy)
6093 return error("Explicit call type is not a function type");
6094 }
6095
6096 Value *Callee;
6097 unsigned CalleeTypeID;
6098 if (getValueTypePair(Record, OpNum, NextValueNo, Callee, CalleeTypeID,
6099 CurBB))
6100 return error("Invalid callbr record");
6101
6102 PointerType *OpTy = dyn_cast<PointerType>(Callee->getType());
6103 if (!OpTy)
6104 return error("Callee is not a pointer type");
6105 if (!FTy) {
6106 FTyID = getContainedTypeID(CalleeTypeID);
6107 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6108 if (!FTy)
6109 return error("Callee is not of pointer to function type");
6110 }
6111 if (Record.size() < FTy->getNumParams() + OpNum)
6112 return error("Insufficient operands to call");
6113
6114 SmallVector<Value*, 16> Args;
6115 SmallVector<unsigned, 16> ArgTyIDs;
6116 // Read the fixed params.
6117 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
6118 Value *Arg;
6119 unsigned ArgTyID = getContainedTypeID(FTyID, i + 1);
6120 if (FTy->getParamType(i)->isLabelTy())
6121 Arg = getBasicBlock(Record[OpNum]);
6122 else
6123 Arg = getValue(Record, OpNum, NextValueNo, FTy->getParamType(i),
6124 ArgTyID, CurBB);
6125 if (!Arg)
6126 return error("Invalid callbr record");
6127 Args.push_back(Arg);
6128 ArgTyIDs.push_back(ArgTyID);
6129 }
6130
6131 // Read type/value pairs for varargs params.
6132 if (!FTy->isVarArg()) {
6133 if (OpNum != Record.size())
6134 return error("Invalid callbr record");
6135 } else {
6136 while (OpNum != Record.size()) {
6137 Value *Op;
6138 unsigned OpTypeID;
6139 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
6140 return error("Invalid callbr record");
6141 Args.push_back(Op);
6142 ArgTyIDs.push_back(OpTypeID);
6143 }
6144 }
6145
6146 // Upgrade the bundles if needed.
6147 if (!OperandBundles.empty())
6148 UpgradeOperandBundles(OperandBundles);
6149
6150 if (auto *IA = dyn_cast<InlineAsm>(Callee)) {
6151 InlineAsm::ConstraintInfoVector ConstraintInfo = IA->ParseConstraints();
6152 auto IsLabelConstraint = [](const InlineAsm::ConstraintInfo &CI) {
6153 return CI.Type == InlineAsm::isLabel;
6154 };
6155 if (none_of(ConstraintInfo, IsLabelConstraint)) {
6156 // Upgrade explicit blockaddress arguments to label constraints.
6157 // Verify that the last arguments are blockaddress arguments that
6158 // match the indirect destinations. Clang always generates callbr
6159 // in this form. We could support reordering with more effort.
6160 unsigned FirstBlockArg = Args.size() - IndirectDests.size();
6161 for (unsigned ArgNo = FirstBlockArg; ArgNo < Args.size(); ++ArgNo) {
6162 unsigned LabelNo = ArgNo - FirstBlockArg;
6163 auto *BA = dyn_cast<BlockAddress>(Args[ArgNo]);
6164 if (!BA || BA->getFunction() != F ||
6165 LabelNo > IndirectDests.size() ||
6166 BA->getBasicBlock() != IndirectDests[LabelNo])
6167 return error("callbr argument does not match indirect dest");
6168 }
6169
6170 // Remove blockaddress arguments.
6171 Args.erase(Args.begin() + FirstBlockArg, Args.end());
6172 ArgTyIDs.erase(ArgTyIDs.begin() + FirstBlockArg, ArgTyIDs.end());
6173
6174 // Recreate the function type with less arguments.
6175 SmallVector<Type *> ArgTys;
6176 for (Value *Arg : Args)
6177 ArgTys.push_back(Arg->getType());
6178 FTy =
6179 FunctionType::get(FTy->getReturnType(), ArgTys, FTy->isVarArg());
6180
6181 // Update constraint string to use label constraints.
6182 std::string Constraints = IA->getConstraintString().str();
6183 unsigned ArgNo = 0;
6184 size_t Pos = 0;
6185 for (const auto &CI : ConstraintInfo) {
6186 if (CI.hasArg()) {
6187 if (ArgNo >= FirstBlockArg)
6188 Constraints.insert(Pos, "!");
6189 ++ArgNo;
6190 }
6191
6192 // Go to next constraint in string.
6193 Pos = Constraints.find(',', Pos);
6194 if (Pos == std::string::npos)
6195 break;
6196 ++Pos;
6197 }
6198
6199 Callee = InlineAsm::get(FTy, IA->getAsmString(), Constraints,
6200 IA->hasSideEffects(), IA->isAlignStack(),
6201 IA->getDialect(), IA->canThrow());
6202 }
6203 }
6204
6205 I = CallBrInst::Create(FTy, Callee, DefaultDest, IndirectDests, Args,
6206 OperandBundles);
6207 ResTypeID = getContainedTypeID(FTyID);
6208 OperandBundles.clear();
6209 InstructionList.push_back(I);
6210 cast<CallBrInst>(I)->setCallingConv(
6211 static_cast<CallingConv::ID>((0x7ff & CCInfo) >> bitc::CALL_CCONV));
6212 cast<CallBrInst>(I)->setAttributes(PAL);
6213 if (Error Err = propagateAttributeTypes(cast<CallBase>(I), ArgTyIDs)) {
6214 I->deleteValue();
6215 return Err;
6216 }
6217 break;
6218 }
6219 case bitc::FUNC_CODE_INST_UNREACHABLE: // UNREACHABLE
6220 I = new UnreachableInst(Context);
6221 InstructionList.push_back(I);
6222 break;
6223 case bitc::FUNC_CODE_INST_PHI: { // PHI: [ty, val0,bb0, ...]
6224 if (Record.empty())
6225 return error("Invalid phi record");
6226 // The first record specifies the type.
6227 unsigned TyID = Record[0];
6228 Type *Ty = getTypeByID(TyID);
6229 if (!Ty)
6230 return error("Invalid phi record");
6231
6232 // Phi arguments are pairs of records of [value, basic block].
6233 // There is an optional final record for fast-math-flags if this phi has a
6234 // floating-point type.
6235 size_t NumArgs = (Record.size() - 1) / 2;
6236 PHINode *PN = PHINode::Create(Ty, NumArgs);
6237 if ((Record.size() - 1) % 2 == 1 && !isa<FPMathOperator>(PN)) {
6238 PN->deleteValue();
6239 return error("Invalid phi record");
6240 }
6241 InstructionList.push_back(PN);
6242
6243 SmallDenseMap<BasicBlock *, Value *> Args;
6244 for (unsigned i = 0; i != NumArgs; i++) {
6245 BasicBlock *BB = getBasicBlock(Record[i * 2 + 2]);
6246 if (!BB) {
6247 PN->deleteValue();
6248 return error("Invalid phi BB");
6249 }
6250
6251 // Phi nodes may contain the same predecessor multiple times, in which
6252 // case the incoming value must be identical. Directly reuse the already
6253 // seen value here, to avoid expanding a constant expression multiple
6254 // times.
6255 auto It = Args.find(BB);
6256 BasicBlock *EdgeBB = ConstExprEdgeBBs.lookup({BB, CurBB});
6257 if (It != Args.end()) {
6258 // If this predecessor was also replaced with a constexpr basic
6259 // block, it must be de-duplicated.
6260 if (!EdgeBB) {
6261 PN->addIncoming(It->second, BB);
6262 }
6263 continue;
6264 }
6265
6266 // If there already is a block for this edge (from a different phi),
6267 // use it.
6268 if (!EdgeBB) {
6269 // Otherwise, use a temporary block (that we will discard if it
6270 // turns out to be unnecessary).
6271 if (!PhiConstExprBB)
6272 PhiConstExprBB = BasicBlock::Create(Context, "phi.constexpr", F);
6273 EdgeBB = PhiConstExprBB;
6274 }
6275
6276 // With the new function encoding, it is possible that operands have
6277 // negative IDs (for forward references). Use a signed VBR
6278 // representation to keep the encoding small.
6279 Value *V;
6280 if (UseRelativeIDs)
6281 V = getValueSigned(Record, i * 2 + 1, NextValueNo, Ty, TyID, EdgeBB);
6282 else
6283 V = getValue(Record, i * 2 + 1, NextValueNo, Ty, TyID, EdgeBB);
6284 if (!V) {
6285 PN->deleteValue();
6286 PhiConstExprBB->eraseFromParent();
6287 return error("Invalid phi record");
6288 }
6289
6290 if (EdgeBB == PhiConstExprBB && !EdgeBB->empty()) {
6291 ConstExprEdgeBBs.insert({{BB, CurBB}, EdgeBB});
6292 PhiConstExprBB = nullptr;
6293 }
6294 PN->addIncoming(V, BB);
6295 Args.insert({BB, V});
6296 }
6297 I = PN;
6298 ResTypeID = TyID;
6299
6300 // If there are an even number of records, the final record must be FMF.
6301 if (Record.size() % 2 == 0) {
6302 assert(isa<FPMathOperator>(I) && "Unexpected phi type");
6303 FastMathFlags FMF = getDecodedFastMathFlags(Record[Record.size() - 1]);
6304 if (FMF.any())
6305 I->setFastMathFlags(FMF);
6306 }
6307
6308 break;
6309 }
6310
6313 // LANDINGPAD: [ty, val, val, num, (id0,val0 ...)?]
6314 unsigned Idx = 0;
6315 if (BitCode == bitc::FUNC_CODE_INST_LANDINGPAD) {
6316 if (Record.size() < 3)
6317 return error("Invalid landingpad record");
6318 } else {
6320 if (Record.size() < 4)
6321 return error("Invalid landingpad record");
6322 }
6323 ResTypeID = Record[Idx++];
6324 Type *Ty = getTypeByID(ResTypeID);
6325 if (!Ty)
6326 return error("Invalid landingpad record");
6327 if (BitCode == bitc::FUNC_CODE_INST_LANDINGPAD_OLD) {
6328 Value *PersFn = nullptr;
6329 unsigned PersFnTypeID;
6330 if (getValueTypePair(Record, Idx, NextValueNo, PersFn, PersFnTypeID,
6331 nullptr))
6332 return error("Invalid landingpad record");
6333
6334 if (!F->hasPersonalityFn())
6335 F->setPersonalityFn(cast<Constant>(PersFn));
6336 else if (F->getPersonalityFn() != cast<Constant>(PersFn))
6337 return error("Personality function mismatch");
6338 }
6339
6340 bool IsCleanup = !!Record[Idx++];
6341 unsigned NumClauses = Record[Idx++];
6342 LandingPadInst *LP = LandingPadInst::Create(Ty, NumClauses);
6343 LP->setCleanup(IsCleanup);
6344 for (unsigned J = 0; J != NumClauses; ++J) {
6346 LandingPadInst::ClauseType(Record[Idx++]); (void)CT;
6347 Value *Val;
6348 unsigned ValTypeID;
6349
6350 if (getValueTypePair(Record, Idx, NextValueNo, Val, ValTypeID,
6351 nullptr)) {
6352 delete LP;
6353 return error("Invalid landingpad record");
6354 }
6355
6357 !isa<ArrayType>(Val->getType())) &&
6358 "Catch clause has a invalid type!");
6360 isa<ArrayType>(Val->getType())) &&
6361 "Filter clause has invalid type!");
6362 LP->addClause(cast<Constant>(Val));
6363 }
6364
6365 I = LP;
6366 InstructionList.push_back(I);
6367 break;
6368 }
6369
6370 case bitc::FUNC_CODE_INST_ALLOCA: { // ALLOCA: [instty, opty, op, align]
6371 if (Record.size() != 4 && Record.size() != 5)
6372 return error("Invalid alloca record");
6373 using APV = AllocaPackedValues;
6374 const uint64_t Rec = Record[3];
6375 const bool InAlloca = Bitfield::get<APV::UsedWithInAlloca>(Rec);
6376 const bool SwiftError = Bitfield::get<APV::SwiftError>(Rec);
6377 unsigned TyID = Record[0];
6378 Type *Ty = getTypeByID(TyID);
6380 TyID = getContainedTypeID(TyID);
6381 Ty = getTypeByID(TyID);
6382 if (!Ty)
6383 return error("Missing element type for old-style alloca");
6384 }
6385 unsigned OpTyID = Record[1];
6386 Type *OpTy = getTypeByID(OpTyID);
6387 Value *Size = getFnValueByID(Record[2], OpTy, OpTyID, CurBB);
6388 MaybeAlign Align;
6389 uint64_t AlignExp =
6391 (Bitfield::get<APV::AlignUpper>(Rec) << APV::AlignLower::Bits);
6392 if (Error Err = parseAlignmentValue(AlignExp, Align)) {
6393 return Err;
6394 }
6395 if (!Ty || !Size)
6396 return error("Invalid alloca record");
6397
6398 const DataLayout &DL = TheModule->getDataLayout();
6399 unsigned AS = Record.size() == 5 ? Record[4] : DL.getAllocaAddrSpace();
6400
6401 SmallPtrSet<Type *, 4> Visited;
6402 if (!Align && !Ty->isSized(&Visited))
6403 return error("alloca of unsized type");
6404 if (!Align)
6405 Align = DL.getPrefTypeAlign(Ty);
6406
6407 if (!Size->getType()->isIntegerTy())
6408 return error("alloca element count must have integer type");
6409
6410 AllocaInst *AI = new AllocaInst(Ty, AS, Size, *Align);
6411 AI->setUsedWithInAlloca(InAlloca);
6412 AI->setSwiftError(SwiftError);
6413 I = AI;
6414 ResTypeID = getVirtualTypeID(AI->getType(), TyID);
6415 InstructionList.push_back(I);
6416 break;
6417 }
6418 case bitc::FUNC_CODE_INST_LOAD: { // LOAD: [opty, op, align, vol]
6419 unsigned OpNum = 0;
6420 Value *Op;
6421 unsigned OpTypeID;
6422 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB) ||
6423 (OpNum + 2 != Record.size() && OpNum + 3 != Record.size()))
6424 return error("Invalid load record");
6425
6426 if (!isa<PointerType>(Op->getType()))
6427 return error("Load operand is not a pointer type");
6428
6429 Type *Ty = nullptr;
6430 if (OpNum + 3 == Record.size()) {
6431 ResTypeID = Record[OpNum++];
6432 Ty = getTypeByID(ResTypeID);
6433 } else {
6434 ResTypeID = getContainedTypeID(OpTypeID);
6435 Ty = getTypeByID(ResTypeID);
6436 }
6437
6438 if (!Ty)
6439 return error("Missing load type");
6440
6441 if (Error Err = typeCheckLoadStoreInst(Ty, Op->getType()))
6442 return Err;
6443
6444 MaybeAlign Align;
6445 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6446 return Err;
6447 SmallPtrSet<Type *, 4> Visited;
6448 if (!Align && !Ty->isSized(&Visited))
6449 return error("load of unsized type");
6450 if (!Align)
6451 Align = TheModule->getDataLayout().getABITypeAlign(Ty);
6452 I = new LoadInst(Ty, Op, "", Record[OpNum + 1], *Align);
6453 InstructionList.push_back(I);
6454 break;
6455 }
6457 // LOADATOMIC: [opty, op, align, vol, ordering, ssid, elementwise?]
6458 unsigned OpNum = 0;
6459 Value *Op;
6460 unsigned OpTypeID;
6461 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB) ||
6462 (OpNum + 4 != Record.size() && OpNum + 5 != Record.size() &&
6463 OpNum + 6 != Record.size()))
6464 return error("Invalid load atomic record");
6465
6466 if (!isa<PointerType>(Op->getType()))
6467 return error("Load operand is not a pointer type");
6468
6469 Type *Ty = nullptr;
6470 if (Record.size() >= OpNum + 5) {
6471 ResTypeID = Record[OpNum++];
6472 Ty = getTypeByID(ResTypeID);
6473 } else {
6474 ResTypeID = getContainedTypeID(OpTypeID);
6475 Ty = getTypeByID(ResTypeID);
6476 }
6477
6478 if (!Ty)
6479 return error("Missing atomic load type");
6480
6481 if (Error Err = typeCheckLoadStoreInst(Ty, Op->getType()))
6482 return Err;
6483
6484 AtomicOrdering Ordering = getDecodedOrdering(Record[OpNum + 2]);
6485 if (Ordering == AtomicOrdering::NotAtomic ||
6486 Ordering == AtomicOrdering::Release ||
6487 Ordering == AtomicOrdering::AcquireRelease)
6488 return error("Invalid load atomic record");
6489 if (Ordering != AtomicOrdering::NotAtomic && Record[OpNum] == 0)
6490 return error("Invalid load atomic record");
6491 SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 3]);
6492 bool IsElementwise = Record.size() > OpNum + 4 && Record[OpNum + 4];
6493
6494 MaybeAlign Align;
6495 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6496 return Err;
6497 if (!Align)
6498 return error("Alignment missing from atomic load");
6499 I = new LoadInst(
6500 Ty, Op, "",
6501 LoadStoreInstProperties{/*IsVolatile=*/Record[OpNum + 1] != 0, *Align,
6502 Ordering, SSID, IsElementwise},
6503 /*InsertBefore=*/nullptr);
6504 InstructionList.push_back(I);
6505 break;
6506 }
6508 case bitc::FUNC_CODE_INST_STORE_OLD: { // STORE2:[ptrty, ptr, val, align, vol]
6509 unsigned OpNum = 0;
6510 Value *Val, *Ptr;
6511 unsigned PtrTypeID, ValTypeID;
6512 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6513 return error("Invalid store record");
6514
6515 if (BitCode == bitc::FUNC_CODE_INST_STORE) {
6516 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
6517 return error("Invalid store record");
6518 } else {
6519 ValTypeID = getContainedTypeID(PtrTypeID);
6520 if (popValue(Record, OpNum, NextValueNo, getTypeByID(ValTypeID),
6521 ValTypeID, Val, CurBB))
6522 return error("Invalid store record");
6523 }
6524
6525 if (OpNum + 2 != Record.size())
6526 return error("Invalid store record");
6527
6528 if (Error Err = typeCheckLoadStoreInst(Val->getType(), Ptr->getType()))
6529 return Err;
6530 MaybeAlign Align;
6531 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6532 return Err;
6533 SmallPtrSet<Type *, 4> Visited;
6534 if (!Align && !Val->getType()->isSized(&Visited))
6535 return error("store of unsized type");
6536 if (!Align)
6537 Align = TheModule->getDataLayout().getABITypeAlign(Val->getType());
6538 I = new StoreInst(Val, Ptr, Record[OpNum + 1], *Align);
6539 InstructionList.push_back(I);
6540 break;
6541 }
6544 // STOREATOMIC: [ptrty, ptr, val, align, vol, ordering, ssid,
6545 // elementwise?]
6546 unsigned OpNum = 0;
6547 Value *Val, *Ptr;
6548 unsigned PtrTypeID, ValTypeID;
6549 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB) ||
6550 !isa<PointerType>(Ptr->getType()))
6551 return error("Invalid store atomic record");
6552 if (BitCode == bitc::FUNC_CODE_INST_STOREATOMIC) {
6553 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
6554 return error("Invalid store atomic record");
6555 } else {
6556 ValTypeID = getContainedTypeID(PtrTypeID);
6557 if (popValue(Record, OpNum, NextValueNo, getTypeByID(ValTypeID),
6558 ValTypeID, Val, CurBB))
6559 return error("Invalid store atomic record");
6560 }
6561
6562 if (OpNum + 4 != Record.size() && OpNum + 5 != Record.size())
6563 return error("Invalid store atomic record");
6564
6565 if (Error Err = typeCheckLoadStoreInst(Val->getType(), Ptr->getType()))
6566 return Err;
6567 AtomicOrdering Ordering = getDecodedOrdering(Record[OpNum + 2]);
6568 if (Ordering == AtomicOrdering::NotAtomic ||
6569 Ordering == AtomicOrdering::Acquire ||
6570 Ordering == AtomicOrdering::AcquireRelease)
6571 return error("Invalid store atomic record");
6572 SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 3]);
6573 if (Ordering != AtomicOrdering::NotAtomic && Record[OpNum] == 0)
6574 return error("Invalid store atomic record");
6575
6576 MaybeAlign Align;
6577 if (Error Err = parseAlignmentValue(Record[OpNum], Align))
6578 return Err;
6579 if (!Align)
6580 return error("Alignment missing from atomic store");
6581
6582 bool IsElementwise = Record.size() > OpNum + 4 && Record[OpNum + 4];
6583
6584 I = new StoreInst(
6585 Val, Ptr,
6586 LoadStoreInstProperties{/*IsVolatile=*/Record[OpNum + 1] != 0, *Align,
6587 Ordering, SSID, IsElementwise},
6588 /*InsertBefore=*/nullptr);
6589 InstructionList.push_back(I);
6590 break;
6591 }
6593 // CMPXCHG_OLD: [ptrty, ptr, cmp, val, vol, ordering, syncscope,
6594 // failure_ordering?, weak?]
6595 const size_t NumRecords = Record.size();
6596 unsigned OpNum = 0;
6597 Value *Ptr = nullptr;
6598 unsigned PtrTypeID;
6599 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6600 return error("Invalid cmpxchg record");
6601
6602 if (!isa<PointerType>(Ptr->getType()))
6603 return error("Cmpxchg operand is not a pointer type");
6604
6605 Value *Cmp = nullptr;
6606 unsigned CmpTypeID = getContainedTypeID(PtrTypeID);
6607 if (popValue(Record, OpNum, NextValueNo, getTypeByID(CmpTypeID),
6608 CmpTypeID, Cmp, CurBB))
6609 return error("Invalid cmpxchg record");
6610
6611 Value *New = nullptr;
6612 if (popValue(Record, OpNum, NextValueNo, Cmp->getType(), CmpTypeID,
6613 New, CurBB) ||
6614 NumRecords < OpNum + 3 || NumRecords > OpNum + 5)
6615 return error("Invalid cmpxchg record");
6616
6617 const AtomicOrdering SuccessOrdering =
6618 getDecodedOrdering(Record[OpNum + 1]);
6619 if (SuccessOrdering == AtomicOrdering::NotAtomic ||
6620 SuccessOrdering == AtomicOrdering::Unordered)
6621 return error("Invalid cmpxchg record");
6622
6623 const SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 2]);
6624
6625 if (Error Err = typeCheckLoadStoreInst(Cmp->getType(), Ptr->getType()))
6626 return Err;
6627
6628 const AtomicOrdering FailureOrdering =
6629 NumRecords < 7
6631 : getDecodedOrdering(Record[OpNum + 3]);
6632
6633 if (FailureOrdering == AtomicOrdering::NotAtomic ||
6634 FailureOrdering == AtomicOrdering::Unordered)
6635 return error("Invalid cmpxchg record");
6636
6637 const Align Alignment(
6638 TheModule->getDataLayout().getTypeStoreSize(Cmp->getType()));
6639
6640 I = new AtomicCmpXchgInst(Ptr, Cmp, New, Alignment, SuccessOrdering,
6641 FailureOrdering, SSID);
6642 cast<AtomicCmpXchgInst>(I)->setVolatile(Record[OpNum]);
6643
6644 if (NumRecords < 8) {
6645 // Before weak cmpxchgs existed, the instruction simply returned the
6646 // value loaded from memory, so bitcode files from that era will be
6647 // expecting the first component of a modern cmpxchg.
6648 I->insertInto(CurBB, CurBB->end());
6650 ResTypeID = CmpTypeID;
6651 } else {
6652 cast<AtomicCmpXchgInst>(I)->setWeak(Record[OpNum + 4]);
6653 unsigned I1TypeID = getVirtualTypeID(Type::getInt1Ty(Context));
6654 ResTypeID = getVirtualTypeID(I->getType(), {CmpTypeID, I1TypeID});
6655 }
6656
6657 InstructionList.push_back(I);
6658 break;
6659 }
6661 // CMPXCHG: [ptrty, ptr, cmp, val, vol, success_ordering, syncscope,
6662 // failure_ordering, weak, align?]
6663 const size_t NumRecords = Record.size();
6664 unsigned OpNum = 0;
6665 Value *Ptr = nullptr;
6666 unsigned PtrTypeID;
6667 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6668 return error("Invalid cmpxchg record");
6669
6670 if (!isa<PointerType>(Ptr->getType()))
6671 return error("Cmpxchg operand is not a pointer type");
6672
6673 Value *Cmp = nullptr;
6674 unsigned CmpTypeID;
6675 if (getValueTypePair(Record, OpNum, NextValueNo, Cmp, CmpTypeID, CurBB))
6676 return error("Invalid cmpxchg record");
6677
6678 Value *Val = nullptr;
6679 if (popValue(Record, OpNum, NextValueNo, Cmp->getType(), CmpTypeID, Val,
6680 CurBB))
6681 return error("Invalid cmpxchg record");
6682
6683 if (NumRecords < OpNum + 3 || NumRecords > OpNum + 6)
6684 return error("Invalid cmpxchg record");
6685
6686 const bool IsVol = Record[OpNum];
6687
6688 const AtomicOrdering SuccessOrdering =
6689 getDecodedOrdering(Record[OpNum + 1]);
6690 if (!AtomicCmpXchgInst::isValidSuccessOrdering(SuccessOrdering))
6691 return error("Invalid cmpxchg success ordering");
6692
6693 const SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 2]);
6694
6695 if (Error Err = typeCheckLoadStoreInst(Cmp->getType(), Ptr->getType()))
6696 return Err;
6697
6698 const AtomicOrdering FailureOrdering =
6699 getDecodedOrdering(Record[OpNum + 3]);
6700 if (!AtomicCmpXchgInst::isValidFailureOrdering(FailureOrdering))
6701 return error("Invalid cmpxchg failure ordering");
6702
6703 const bool IsWeak = Record[OpNum + 4];
6704
6705 MaybeAlign Alignment;
6706
6707 if (NumRecords == (OpNum + 6)) {
6708 if (Error Err = parseAlignmentValue(Record[OpNum + 5], Alignment))
6709 return Err;
6710 }
6711 if (!Alignment)
6712 Alignment =
6713 Align(TheModule->getDataLayout().getTypeStoreSize(Cmp->getType()));
6714
6715 I = new AtomicCmpXchgInst(Ptr, Cmp, Val, *Alignment, SuccessOrdering,
6716 FailureOrdering, SSID);
6717 cast<AtomicCmpXchgInst>(I)->setVolatile(IsVol);
6718 cast<AtomicCmpXchgInst>(I)->setWeak(IsWeak);
6719
6720 unsigned I1TypeID = getVirtualTypeID(Type::getInt1Ty(Context));
6721 ResTypeID = getVirtualTypeID(I->getType(), {CmpTypeID, I1TypeID});
6722
6723 InstructionList.push_back(I);
6724 break;
6725 }
6728 // ATOMICRMW_OLD: [ptrty, ptr, val, op, vol, ordering, ssid, align?]
6729 // ATOMICRMW: [ptrty, ptr, valty, val, op, vol, ordering, ssid, align?]
6730 const size_t NumRecords = Record.size();
6731 unsigned OpNum = 0;
6732
6733 Value *Ptr = nullptr;
6734 unsigned PtrTypeID;
6735 if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, PtrTypeID, CurBB))
6736 return error("Invalid atomicrmw record");
6737
6738 if (!isa<PointerType>(Ptr->getType()))
6739 return error("Invalid atomicrmw record");
6740
6741 Value *Val = nullptr;
6742 unsigned ValTypeID = InvalidTypeID;
6743 if (BitCode == bitc::FUNC_CODE_INST_ATOMICRMW_OLD) {
6744 ValTypeID = getContainedTypeID(PtrTypeID);
6745 if (popValue(Record, OpNum, NextValueNo,
6746 getTypeByID(ValTypeID), ValTypeID, Val, CurBB))
6747 return error("Invalid atomicrmw record");
6748 } else {
6749 if (getValueTypePair(Record, OpNum, NextValueNo, Val, ValTypeID, CurBB))
6750 return error("Invalid atomicrmw record");
6751 }
6752
6753 if (!(NumRecords == (OpNum + 4) || NumRecords == (OpNum + 5)))
6754 return error("Invalid atomicrmw record");
6755
6756 bool IsElementwise = false;
6758 getDecodedRMWOperation(Record[OpNum], IsElementwise);
6761 return error("Invalid atomicrmw record");
6762
6763 const bool IsVol = Record[OpNum + 1];
6764
6765 const AtomicOrdering Ordering = getDecodedOrdering(Record[OpNum + 2]);
6766 if (Ordering == AtomicOrdering::NotAtomic ||
6767 Ordering == AtomicOrdering::Unordered)
6768 return error("Invalid atomicrmw record");
6769
6770 const SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 3]);
6771
6772 MaybeAlign Alignment;
6773
6774 if (NumRecords == (OpNum + 5)) {
6775 if (Error Err = parseAlignmentValue(Record[OpNum + 4], Alignment))
6776 return Err;
6777 }
6778
6779 if (!Alignment)
6780 Alignment =
6781 Align(TheModule->getDataLayout().getTypeStoreSize(Val->getType()));
6782
6783 I = new AtomicRMWInst(Operation, Ptr, Val, *Alignment, Ordering, SSID,
6784 IsElementwise);
6785 ResTypeID = ValTypeID;
6786 cast<AtomicRMWInst>(I)->setVolatile(IsVol);
6787
6788 InstructionList.push_back(I);
6789 break;
6790 }
6791 case bitc::FUNC_CODE_INST_FENCE: { // FENCE:[ordering, ssid]
6792 if (2 != Record.size())
6793 return error("Invalid fence record");
6795 if (Ordering == AtomicOrdering::NotAtomic ||
6796 Ordering == AtomicOrdering::Unordered ||
6797 Ordering == AtomicOrdering::Monotonic)
6798 return error("Invalid fence record");
6799 SyncScope::ID SSID = getDecodedSyncScopeID(Record[1]);
6800 I = new FenceInst(Context, Ordering, SSID);
6801 InstructionList.push_back(I);
6802 break;
6803 }
6805 // DbgLabelRecords are placed after the Instructions that they are
6806 // attached to.
6807 SeenDebugRecord = true;
6808 Instruction *Inst = getLastInstruction();
6809 if (!Inst)
6810 return error("Invalid dbg record: missing instruction");
6811 DILocation *DIL = cast<DILocation>(getFnMetadataByID(Record[0]));
6812 DILabel *Label = cast<DILabel>(getFnMetadataByID(Record[1]));
6813 Inst->getParent()->insertDbgRecordBefore(
6814 new DbgLabelRecord(Label, DebugLoc(DIL)), Inst->getIterator());
6815 continue; // This isn't an instruction.
6816 }
6822 // DbgVariableRecords are placed after the Instructions that they are
6823 // attached to.
6824 SeenDebugRecord = true;
6825 Instruction *Inst = getLastInstruction();
6826 if (!Inst)
6827 return error("Invalid dbg record: missing instruction");
6828
6829 // First 3 fields are common to all kinds:
6830 // DILocation, DILocalVariable, DIExpression
6831 // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE)
6832 // ..., LocationMetadata
6833 // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE - abbrev'd)
6834 // ..., Value
6835 // dbg_declare (FUNC_CODE_DEBUG_RECORD_DECLARE)
6836 // ..., LocationMetadata
6837 // dbg_declare_value (FUNC_CODE_DEBUG_RECORD_DECLARE_VALUE)
6838 // ..., LocationMetadata
6839 // dbg_assign (FUNC_CODE_DEBUG_RECORD_ASSIGN)
6840 // ..., LocationMetadata, DIAssignID, DIExpression, LocationMetadata
6841 unsigned Slot = 0;
6842 // Common fields (0-2).
6843 DILocation *DIL = cast<DILocation>(getFnMetadataByID(Record[Slot++]));
6844 DILocalVariable *Var =
6845 cast<DILocalVariable>(getFnMetadataByID(Record[Slot++]));
6846 DIExpression *Expr =
6847 cast<DIExpression>(getFnMetadataByID(Record[Slot++]));
6848
6849 // Union field (3: LocationMetadata | Value).
6850 Metadata *RawLocation = nullptr;
6852 Value *V = nullptr;
6853 unsigned TyID = 0;
6854 // We never expect to see a fwd reference value here because
6855 // use-before-defs are encoded with the standard non-abbrev record
6856 // type (they'd require encoding the type too, and they're rare). As a
6857 // result, getValueTypePair only ever increments Slot by one here (once
6858 // for the value, never twice for value and type).
6859 unsigned SlotBefore = Slot;
6860 if (getValueTypePair(Record, Slot, NextValueNo, V, TyID, CurBB))
6861 return error("Invalid dbg record: invalid value");
6862 (void)SlotBefore;
6863 assert((SlotBefore == Slot - 1) && "unexpected fwd ref");
6864 RawLocation = ValueAsMetadata::get(V);
6865 } else {
6866 RawLocation = getFnMetadataByID(Record[Slot++]);
6867 }
6868
6869 DbgVariableRecord *DVR = nullptr;
6870 switch (BitCode) {
6873 DVR = new DbgVariableRecord(RawLocation, Var, Expr, DIL,
6874 DbgVariableRecord::LocationType::Value);
6875 break;
6877 DVR = new DbgVariableRecord(RawLocation, Var, Expr, DIL,
6878 DbgVariableRecord::LocationType::Declare);
6879 break;
6881 DVR = new DbgVariableRecord(
6882 RawLocation, Var, Expr, DIL,
6883 DbgVariableRecord::LocationType::DeclareValue);
6884 break;
6886 DIAssignID *ID = cast<DIAssignID>(getFnMetadataByID(Record[Slot++]));
6887 DIExpression *AddrExpr =
6888 cast<DIExpression>(getFnMetadataByID(Record[Slot++]));
6889 Metadata *Addr = getFnMetadataByID(Record[Slot++]);
6890 DVR = new DbgVariableRecord(RawLocation, Var, Expr, ID, Addr, AddrExpr,
6891 DIL);
6892 break;
6893 }
6894 default:
6895 llvm_unreachable("Unknown DbgVariableRecord bitcode");
6896 }
6897 Inst->getParent()->insertDbgRecordBefore(DVR, Inst->getIterator());
6898 continue; // This isn't an instruction.
6899 }
6901 // CALL: [paramattrs, cc, fmf, fnty, fnid, arg0, arg1...]
6902 if (Record.size() < 3)
6903 return error("Invalid call record");
6904
6905 unsigned OpNum = 0;
6906 AttributeList PAL = getAttributes(Record[OpNum++]);
6907 unsigned CCInfo = Record[OpNum++];
6908
6909 FastMathFlags FMF;
6910 if ((CCInfo >> bitc::CALL_FMF) & 1) {
6911 FMF = getDecodedFastMathFlags(Record[OpNum++]);
6912 if (!FMF.any())
6913 return error("Fast math flags indicator set for call with no FMF");
6914 }
6915
6916 unsigned FTyID = InvalidTypeID;
6917 FunctionType *FTy = nullptr;
6918 if ((CCInfo >> bitc::CALL_EXPLICIT_TYPE) & 1) {
6919 FTyID = Record[OpNum++];
6920 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6921 if (!FTy)
6922 return error("Explicit call type is not a function type");
6923 }
6924
6925 Value *Callee;
6926 unsigned CalleeTypeID;
6927 if (getValueTypePair(Record, OpNum, NextValueNo, Callee, CalleeTypeID,
6928 CurBB))
6929 return error("Invalid call record");
6930
6931 PointerType *OpTy = dyn_cast<PointerType>(Callee->getType());
6932 if (!OpTy)
6933 return error("Callee is not a pointer type");
6934 if (!FTy) {
6935 FTyID = getContainedTypeID(CalleeTypeID);
6936 FTy = dyn_cast_or_null<FunctionType>(getTypeByID(FTyID));
6937 if (!FTy)
6938 return error("Callee is not of pointer to function type");
6939 }
6940 if (Record.size() < FTy->getNumParams() + OpNum)
6941 return error("Insufficient operands to call");
6942
6943 SmallVector<Value*, 16> Args;
6944 SmallVector<unsigned, 16> ArgTyIDs;
6945 // Read the fixed params.
6946 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i, ++OpNum) {
6947 unsigned ArgTyID = getContainedTypeID(FTyID, i + 1);
6948 if (FTy->getParamType(i)->isLabelTy())
6949 Args.push_back(getBasicBlock(Record[OpNum]));
6950 else
6951 Args.push_back(getValue(Record, OpNum, NextValueNo,
6952 FTy->getParamType(i), ArgTyID, CurBB));
6953 ArgTyIDs.push_back(ArgTyID);
6954 if (!Args.back())
6955 return error("Invalid call record");
6956 }
6957
6958 // Read type/value pairs for varargs params.
6959 if (!FTy->isVarArg()) {
6960 if (OpNum != Record.size())
6961 return error("Invalid call record");
6962 } else {
6963 while (OpNum != Record.size()) {
6964 Value *Op;
6965 unsigned OpTypeID;
6966 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
6967 return error("Invalid call record");
6968 Args.push_back(Op);
6969 ArgTyIDs.push_back(OpTypeID);
6970 }
6971 }
6972
6973 // Upgrade the bundles if needed.
6974 if (!OperandBundles.empty())
6975 UpgradeOperandBundles(OperandBundles);
6976
6977 I = CallInst::Create(FTy, Callee, Args, OperandBundles);
6978 ResTypeID = getContainedTypeID(FTyID);
6979 OperandBundles.clear();
6980 InstructionList.push_back(I);
6981 cast<CallInst>(I)->setCallingConv(
6982 static_cast<CallingConv::ID>((0x7ff & CCInfo) >> bitc::CALL_CCONV));
6984 if (CCInfo & (1 << bitc::CALL_TAIL))
6985 TCK = CallInst::TCK_Tail;
6986 if (CCInfo & (1 << bitc::CALL_MUSTTAIL))
6988 if (CCInfo & (1 << bitc::CALL_NOTAIL))
6990 cast<CallInst>(I)->setTailCallKind(TCK);
6991 cast<CallInst>(I)->setAttributes(PAL);
6993 SeenDebugIntrinsic = true;
6994 if (Error Err = propagateAttributeTypes(cast<CallBase>(I), ArgTyIDs)) {
6995 I->deleteValue();
6996 return Err;
6997 }
6998 if (FMF.any()) {
6999 if (!isa<FPMathOperator>(I))
7000 return error("Fast-math-flags specified for call without "
7001 "floating-point scalar or vector return type");
7002 I->setFastMathFlags(FMF);
7003 }
7004 break;
7005 }
7006 case bitc::FUNC_CODE_INST_VAARG: { // VAARG: [valistty, valist, instty]
7007 if (Record.size() < 3)
7008 return error("Invalid va_arg record");
7009 unsigned OpTyID = Record[0];
7010 Type *OpTy = getTypeByID(OpTyID);
7011 Value *Op = getValue(Record, 1, NextValueNo, OpTy, OpTyID, CurBB);
7012 ResTypeID = Record[2];
7013 Type *ResTy = getTypeByID(ResTypeID);
7014 if (!OpTy || !Op || !ResTy)
7015 return error("Invalid va_arg record");
7016 I = new VAArgInst(Op, ResTy);
7017 InstructionList.push_back(I);
7018 break;
7019 }
7020
7022 // A call or an invoke can be optionally prefixed with some variable
7023 // number of operand bundle blocks. These blocks are read into
7024 // OperandBundles and consumed at the next call or invoke instruction.
7025
7026 if (Record.empty() || Record[0] >= BundleTags.size())
7027 return error("Invalid operand bundle record");
7028
7029 std::vector<Value *> Inputs;
7030
7031 unsigned OpNum = 1;
7032 while (OpNum != Record.size()) {
7033 Value *Op;
7034 if (getValueOrMetadata(Record, OpNum, NextValueNo, Op, CurBB))
7035 return error("Invalid operand bundle record");
7036 Inputs.push_back(Op);
7037 }
7038
7039 OperandBundles.emplace_back(BundleTags[Record[0]], std::move(Inputs));
7040 continue;
7041 }
7042
7043 case bitc::FUNC_CODE_INST_FREEZE: { // FREEZE: [opty,opval]
7044 unsigned OpNum = 0;
7045 Value *Op = nullptr;
7046 unsigned OpTypeID;
7047 if (getValueTypePair(Record, OpNum, NextValueNo, Op, OpTypeID, CurBB))
7048 return error("Invalid freeze record");
7049 if (OpNum != Record.size())
7050 return error("Invalid freeze record");
7051
7052 I = new FreezeInst(Op);
7053 ResTypeID = OpTypeID;
7054 InstructionList.push_back(I);
7055 break;
7056 }
7057 }
7058
7059 // Add instruction to end of current BB. If there is no current BB, reject
7060 // this file.
7061 if (!CurBB) {
7062 I->deleteValue();
7063 return error("Invalid instruction with no BB");
7064 }
7065 if (!OperandBundles.empty()) {
7066 I->deleteValue();
7067 return error("Operand bundles found with no consumer");
7068 }
7069 I->insertInto(CurBB, CurBB->end());
7070
7071 // If this was a terminator instruction, move to the next block.
7072 if (I->isTerminator()) {
7073 ++CurBBNo;
7074 CurBB = CurBBNo < FunctionBBs.size() ? FunctionBBs[CurBBNo] : nullptr;
7075 }
7076
7077 // Non-void values get registered in the value table for future use.
7078 if (!I->getType()->isVoidTy()) {
7079 assert(I->getType() == getTypeByID(ResTypeID) &&
7080 "Incorrect result type ID");
7081 if (Error Err = ValueList.assignValue(NextValueNo++, I, ResTypeID))
7082 return Err;
7083 }
7084 }
7085
7086OutOfRecordLoop:
7087
7088 if (!OperandBundles.empty())
7089 return error("Operand bundles found with no consumer");
7090
7091 // Check the function list for unresolved values.
7092 if (Argument *A = dyn_cast<Argument>(ValueList.back())) {
7093 if (!A->getParent()) {
7094 // We found at least one unresolved value. Nuke them all to avoid leaks.
7095 for (unsigned i = ModuleValueListSize, e = ValueList.size(); i != e; ++i){
7096 if ((A = dyn_cast_or_null<Argument>(ValueList[i])) && !A->getParent()) {
7097 A->replaceAllUsesWith(PoisonValue::get(A->getType()));
7098 delete A;
7099 }
7100 }
7101 return error("Never resolved value found in function");
7102 }
7103 }
7104
7105 // Unexpected unresolved metadata about to be dropped.
7106 if (MDLoader->hasFwdRefs())
7107 return error("Invalid function metadata: outgoing forward refs");
7108
7109 if (PhiConstExprBB)
7110 PhiConstExprBB->eraseFromParent();
7111
7112 for (const auto &Pair : ConstExprEdgeBBs) {
7113 BasicBlock *From = Pair.first.first;
7114 BasicBlock *To = Pair.first.second;
7115 BasicBlock *EdgeBB = Pair.second;
7116 UncondBrInst::Create(To, EdgeBB);
7117 From->getTerminator()->replaceSuccessorWith(To, EdgeBB);
7118 To->replacePhiUsesWith(From, EdgeBB);
7119 EdgeBB->moveBefore(To);
7120 }
7121
7122 // Trim the value list down to the size it was before we parsed this function.
7123 ValueList.shrinkTo(ModuleValueListSize);
7124 MDLoader->shrinkTo(ModuleMDLoaderSize);
7125 std::vector<BasicBlock*>().swap(FunctionBBs);
7126 return Error::success();
7127}
7128
7129/// Find the function body in the bitcode stream
7130Error BitcodeReader::findFunctionInStream(
7131 Function *F,
7132 DenseMap<Function *, uint64_t>::iterator DeferredFunctionInfoIterator) {
7133 while (DeferredFunctionInfoIterator->second == 0) {
7134 // This is the fallback handling for the old format bitcode that
7135 // didn't contain the function index in the VST, or when we have
7136 // an anonymous function which would not have a VST entry.
7137 // Assert that we have one of those two cases.
7138 assert(VSTOffset == 0 || !F->hasName());
7139 // Parse the next body in the stream and set its position in the
7140 // DeferredFunctionInfo map.
7141 if (Error Err = rememberAndSkipFunctionBodies())
7142 return Err;
7143 }
7144 return Error::success();
7145}
7146
7147SyncScope::ID BitcodeReader::getDecodedSyncScopeID(unsigned Val) {
7148 if (Val == SyncScope::SingleThread || Val == SyncScope::System)
7149 return SyncScope::ID(Val);
7150 if (Val >= SSIDs.size())
7151 return SyncScope::System; // Map unknown synchronization scopes to system.
7152 return SSIDs[Val];
7153}
7154
7155//===----------------------------------------------------------------------===//
7156// GVMaterializer implementation
7157//===----------------------------------------------------------------------===//
7158
7159Error BitcodeReader::materialize(GlobalValue *GV) {
7161 // If it's not a function or is already material, ignore the request.
7162 if (!F || !F->isMaterializable())
7163 return Error::success();
7164
7165 auto DFII = DeferredFunctionInfo.find(F);
7166 assert(DFII != DeferredFunctionInfo.end() && "Deferred function not found!");
7167 // If its position is recorded as 0, its body is somewhere in the stream
7168 // but we haven't seen it yet.
7169 if (DFII->second == 0)
7170 if (Error Err = findFunctionInStream(F, DFII))
7171 return Err;
7172
7173 // Materialize metadata before parsing any function bodies.
7174 if (Error Err = materializeMetadata())
7175 return Err;
7176
7177 // Move the bit stream to the saved position of the deferred function body.
7178 if (Error JumpFailed = Stream.JumpToBit(DFII->second))
7179 return JumpFailed;
7180
7181 if (Error Err = parseFunctionBody(F))
7182 return Err;
7183 F->setIsMaterializable(false);
7184
7185 // All parsed Functions should load into the debug info format dictated by the
7186 // Module.
7187 if (SeenDebugIntrinsic && SeenDebugRecord)
7188 return error("Mixed debug intrinsics and debug records in bitcode module!");
7189
7190 if (StripDebugInfo)
7191 stripDebugInfo(*F);
7192
7193 // Finish fn->subprogram upgrade for materialized functions.
7194 if (DISubprogram *SP = MDLoader->lookupSubprogramForFunction(F))
7195 F->setSubprogram(SP);
7196
7197 // Check if the TBAA Metadata are valid, otherwise we will need to strip them.
7198 if (!MDLoader->isStrippingTBAA()) {
7199 for (auto &I : instructions(F)) {
7200 MDNode *TBAA = I.getMetadata(LLVMContext::MD_tbaa);
7201 if (!TBAA || TBAAVerifyHelper.visitTBAAMetadata(&I, TBAA))
7202 continue;
7203 MDLoader->setStripTBAA(true);
7204 stripTBAA(F->getParent());
7205 }
7206 }
7207
7208 for (auto &I : make_early_inc_range(instructions(F))) {
7209 // "Upgrade" older incorrect branch weights by dropping them.
7210 if (auto *MD = I.getMetadata(LLVMContext::MD_prof)) {
7211 if (MD->getOperand(0) != nullptr && isa<MDString>(MD->getOperand(0))) {
7212 MDString *MDS = cast<MDString>(MD->getOperand(0));
7213 StringRef ProfName = MDS->getString();
7214 // Check consistency of !prof branch_weights metadata.
7215 if (ProfName != MDProfLabels::BranchWeights)
7216 continue;
7217 unsigned ExpectedNumOperands = 0;
7218 if (isa<CondBrInst>(&I))
7219 ExpectedNumOperands = 2;
7220 else if (SwitchInst *SI = dyn_cast<SwitchInst>(&I))
7221 ExpectedNumOperands = SI->getNumSuccessors();
7222 else if (isa<CallInst>(&I))
7223 ExpectedNumOperands = 1;
7224 else if (IndirectBrInst *IBI = dyn_cast<IndirectBrInst>(&I))
7225 ExpectedNumOperands = IBI->getNumDestinations();
7226 else if (isa<SelectInst>(&I))
7227 ExpectedNumOperands = 2;
7228 else
7229 continue; // ignore and continue.
7230
7231 unsigned Offset = getBranchWeightOffset(MD);
7232
7233 // If branch weight doesn't match, just strip branch weight.
7234 if (MD->getNumOperands() != Offset + ExpectedNumOperands)
7235 I.setMetadata(LLVMContext::MD_prof, nullptr);
7236 }
7237 }
7238
7239 if (auto *CI = dyn_cast<CallBase>(&I)) {
7240 // Remove incompatible attributes on function calls.
7241 CI->removeRetAttrs(AttributeFuncs::typeIncompatible(
7242 CI->getFunctionType()->getReturnType(), CI->getRetAttributes()));
7243
7244 for (unsigned ArgNo = 0; ArgNo < CI->arg_size(); ++ArgNo)
7245 CI->removeParamAttrs(ArgNo, AttributeFuncs::typeIncompatible(
7246 CI->getArgOperand(ArgNo)->getType(),
7247 CI->getParamAttributes(ArgNo)));
7248
7249 // Upgrade intrinsics.
7250 if (Function *OldFn = CI->getCalledFunction()) {
7251 auto It = UpgradedIntrinsics.find(OldFn);
7252 if (It != UpgradedIntrinsics.end())
7253 UpgradeIntrinsicCall(CI, It->second);
7254 }
7255 } else if (auto *BC = dyn_cast<BitCastInst>(&I);
7256 BC && BC->getSrcTy() == BC->getDestTy() &&
7257 isa_and_nonnull<ReturnInst>(BC->getNextNode())) {
7258 // Old bitcode allowed an optional bitcast between a musttail call and its
7259 // return. Under opaque pointers that cast is always a no-op, and the
7260 // verifier no longer accepts it, so drop it.
7261 if (auto *CI = dyn_cast<CallInst>(BC->getOperand(0));
7262 CI && CI->isMustTailCall() && CI->getNextNode() == BC) {
7263 BC->replaceAllUsesWith(CI);
7264 BC->eraseFromParent();
7265 }
7266 }
7267 }
7268
7269 // Look for functions that rely on old function attribute behavior.
7271
7272 // Bring in any functions that this function forward-referenced via
7273 // blockaddresses.
7274 return materializeForwardReferencedFunctions();
7275}
7276
7277Error BitcodeReader::materializeModule() {
7278 if (Error Err = materializeMetadata())
7279 return Err;
7280
7281 // Promise to materialize all forward references.
7282 WillMaterializeAllForwardRefs = true;
7283
7284 // Iterate over the module, deserializing any functions that are still on
7285 // disk.
7286 for (Function &F : *TheModule) {
7287 if (Error Err = materialize(&F))
7288 return Err;
7289 }
7290 // At this point, if there are any function bodies, parse the rest of
7291 // the bits in the module past the last function block we have recorded
7292 // through either lazy scanning or the VST.
7293 if (LastFunctionBlockBit || NextUnreadBit)
7294 if (Error Err = parseModule(LastFunctionBlockBit > NextUnreadBit
7295 ? LastFunctionBlockBit
7296 : NextUnreadBit))
7297 return Err;
7298
7299 // Check that all block address forward references got resolved (as we
7300 // promised above).
7301 if (!BasicBlockFwdRefs.empty())
7302 return error("Never resolved function from blockaddress");
7303
7304 // Upgrade any intrinsic calls that slipped through (should not happen!) and
7305 // delete the old functions to clean up. We can't do this unless the entire
7306 // module is materialized because there could always be another function body
7307 // with calls to the old function.
7308 for (auto &[OldFn, NewFn] : UpgradedIntrinsics) {
7309 for (User *U : OldFn->users()) {
7310 if (auto *CI = dyn_cast<CallInst>(U))
7311 UpgradeIntrinsicCall(CI, NewFn);
7312 }
7313 if (OldFn != NewFn) {
7314 if (!OldFn->use_empty())
7315 OldFn->replaceAllUsesWith(NewFn);
7316 OldFn->eraseFromParent();
7317 }
7318 }
7319 UpgradedIntrinsics.clear();
7320
7321 UpgradeDebugInfo(*TheModule);
7322
7323 UpgradeModuleFlags(*TheModule);
7324
7325 UpgradeNVVMAnnotations(*TheModule);
7326
7327 UpgradeARCRuntime(*TheModule);
7328
7329 copyModuleAttrToFunctions(*TheModule);
7330
7331 return Error::success();
7332}
7333
7334std::vector<StructType *> BitcodeReader::getIdentifiedStructTypes() const {
7335 return IdentifiedStructTypes;
7336}
7337
7338ModuleSummaryIndexBitcodeReader::ModuleSummaryIndexBitcodeReader(
7339 BitstreamCursor Cursor, StringRef Strtab, ModuleSummaryIndex &TheIndex,
7340 StringRef ModulePath, std::function<bool(StringRef)> IsPrevailing,
7341 std::function<void(ValueInfo)> OnValueInfo)
7342 : BitcodeReaderBase(std::move(Cursor), Strtab), TheIndex(TheIndex),
7343 ModulePath(ModulePath), IsPrevailing(IsPrevailing),
7344 OnValueInfo(OnValueInfo) {}
7345
7346void ModuleSummaryIndexBitcodeReader::addThisModule() {
7347 TheIndex.addModule(ModulePath);
7348}
7349
7351ModuleSummaryIndexBitcodeReader::getThisModule() {
7352 return TheIndex.getModule(ModulePath);
7353}
7354
7355template <bool AllowNullValueInfo>
7356std::pair<ValueInfo, GlobalValue::GUID>
7357ModuleSummaryIndexBitcodeReader::getValueInfoFromValueId(unsigned ValueId) {
7358 auto VGI = ValueIdToValueInfoMap[ValueId];
7359 // We can have a null value info in distributed ThinLTO index files:
7360 // - For memprof callsite info records when the callee function summary is not
7361 // included in the index.
7362 // - For alias summary when its aliasee summary is not included in the index.
7363 // The bitcode writer records 0 in these cases,
7364 // and the caller of this helper will set AllowNullValueInfo to true.
7365 assert(AllowNullValueInfo || std::get<0>(VGI));
7366 return VGI;
7367}
7368
7369void ModuleSummaryIndexBitcodeReader::setValueGUID(
7371 StringRef SourceFileName) {
7372 GlobalValue::GUID ValueGUID = 0;
7373 if (ValueID < DefinedGUIDs.size())
7374 ValueGUID = DefinedGUIDs[ValueID];
7375 if (ValueGUID == 0)
7376 // DefinedGUIDs is a sparse array and can contain zero entries, so this
7377 // can't just be an `else`.
7380
7381 auto OriginalNameID = ValueGUID;
7385 dbgs() << "GUID " << ValueGUID << "(" << OriginalNameID << ") is "
7386 << ValueName << "\n";
7387
7388 // UseStrtab is false for legacy summary formats and value names are
7389 // created on stack. In that case we save the name in a string saver in
7390 // the index so that the value name can be recorded.
7391 auto VI = TheIndex.getOrInsertValueInfo(
7392 ValueGUID, UseStrtab ? ValueName : TheIndex.saveString(ValueName));
7393 ValueIdToValueInfoMap[ValueID] = std::make_pair(VI, OriginalNameID);
7394 if (OnValueInfo)
7395 OnValueInfo(VI);
7396}
7397
7398// Specialized value symbol table parser used when reading module index
7399// blocks where we don't actually create global values. The parsed information
7400// is saved in the bitcode reader for use when later parsing summaries.
7401Error ModuleSummaryIndexBitcodeReader::parseValueSymbolTable(
7403 DenseMap<unsigned, GlobalValue::LinkageTypes> &ValueIdToLinkageMap) {
7404 // With a strtab the VST is not required to parse the summary.
7405 if (UseStrtab)
7406 return Error::success();
7407
7408 assert(Offset > 0 && "Expected non-zero VST offset");
7409 Expected<uint64_t> MaybeCurrentBit = jumpToValueSymbolTable(Offset, Stream);
7410 if (!MaybeCurrentBit)
7411 return MaybeCurrentBit.takeError();
7412 uint64_t CurrentBit = MaybeCurrentBit.get();
7413
7415 return Err;
7416
7417 SmallVector<uint64_t, 64> Record;
7418
7419 // Read all the records for this value table.
7420 SmallString<128> ValueName;
7421
7422 while (true) {
7423 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
7424 if (!MaybeEntry)
7425 return MaybeEntry.takeError();
7426 BitstreamEntry Entry = MaybeEntry.get();
7427
7428 switch (Entry.Kind) {
7429 case BitstreamEntry::SubBlock: // Handled for us already.
7431 return error("Malformed block");
7433 // Done parsing VST, jump back to wherever we came from.
7434 if (Error JumpFailed = Stream.JumpToBit(CurrentBit))
7435 return JumpFailed;
7436 return Error::success();
7438 // The interesting case.
7439 break;
7440 }
7441
7442 // Read a record.
7443 Record.clear();
7444 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
7445 if (!MaybeRecord)
7446 return MaybeRecord.takeError();
7447 switch (MaybeRecord.get()) {
7448 default: // Default behavior: ignore (e.g. VST_CODE_BBENTRY records).
7449 break;
7450 case bitc::VST_CODE_ENTRY: { // VST_CODE_ENTRY: [valueid, namechar x N]
7451 if (convertToString(Record, 1, ValueName))
7452 return error("Invalid vst_code_entry record");
7453 unsigned ValueID = Record[0];
7454 assert(!SourceFileName.empty());
7455 auto VLI = ValueIdToLinkageMap.find(ValueID);
7456 assert(VLI != ValueIdToLinkageMap.end() &&
7457 "No linkage found for VST entry?");
7458 auto Linkage = VLI->second;
7459 setValueGUID(ValueID, ValueName, Linkage, SourceFileName);
7460 ValueName.clear();
7461 break;
7462 }
7464 // VST_CODE_FNENTRY: [valueid, offset, namechar x N]
7465 if (convertToString(Record, 2, ValueName))
7466 return error("Invalid vst_code_fnentry record");
7467 unsigned ValueID = Record[0];
7468 assert(!SourceFileName.empty());
7469 auto VLI = ValueIdToLinkageMap.find(ValueID);
7470 assert(VLI != ValueIdToLinkageMap.end() &&
7471 "No linkage found for VST entry?");
7472 auto Linkage = VLI->second;
7473 setValueGUID(ValueID, ValueName, Linkage, SourceFileName);
7474 ValueName.clear();
7475 break;
7476 }
7478 // VST_CODE_COMBINED_ENTRY: [valueid, refguid]
7479 unsigned ValueID = Record[0];
7480 GlobalValue::GUID RefGUID = Record[1];
7481 // The "original name", which is the second value of the pair will be
7482 // overriden later by a FS_COMBINED_ORIGINAL_NAME in the combined index.
7483 ValueIdToValueInfoMap[ValueID] =
7484 std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
7485 break;
7486 }
7487 }
7488 }
7489}
7490
7491// Parse just the blocks needed for building the index out of the module.
7492// At the end of this routine the module Index is populated with a map
7493// from global value id to GlobalValueSummary objects.
7494Error ModuleSummaryIndexBitcodeReader::parseModule() {
7495 if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
7496 return Err;
7497
7498 SmallVector<uint64_t, 64> Record;
7499 DenseMap<unsigned, GlobalValue::LinkageTypes> ValueIdToLinkageMap;
7500 unsigned ValueId = 0;
7501
7502 // Read the index for this module.
7503 while (true) {
7504 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
7505 if (!MaybeEntry)
7506 return MaybeEntry.takeError();
7507 llvm::BitstreamEntry Entry = MaybeEntry.get();
7508
7509 switch (Entry.Kind) {
7511 return error("Malformed block");
7513 return Error::success();
7514
7516 switch (Entry.ID) {
7517 default: // Skip unknown content.
7518 if (Error Err = Stream.SkipBlock())
7519 return Err;
7520 break;
7522 // Need to parse these to get abbrev ids (e.g. for VST)
7523 if (Error Err = readBlockInfo())
7524 return Err;
7525 break;
7527 // Should have been parsed earlier via VSTOffset, unless there
7528 // is no summary section.
7529 assert(((SeenValueSymbolTable && VSTOffset > 0) ||
7530 !SeenGlobalValSummary) &&
7531 "Expected early VST parse via VSTOffset record");
7532 if (Error Err = Stream.SkipBlock())
7533 return Err;
7534 break;
7537 // Add the module if it is a per-module index (has a source file name).
7538 if (!SourceFileName.empty())
7539 addThisModule();
7540 assert(!SeenValueSymbolTable &&
7541 "Already read VST when parsing summary block?");
7542 // We might not have a VST if there were no values in the
7543 // summary. An empty summary block generated when we are
7544 // performing ThinLTO compiles so we don't later invoke
7545 // the regular LTO process on them.
7546 if (VSTOffset > 0) {
7547 if (Error Err = parseValueSymbolTable(VSTOffset, ValueIdToLinkageMap))
7548 return Err;
7549 SeenValueSymbolTable = true;
7550 }
7551 SeenGlobalValSummary = true;
7552 if (Error Err = parseEntireSummary(Entry.ID))
7553 return Err;
7554 break;
7556 if (Error Err = parseModuleStringTable())
7557 return Err;
7558 break;
7559 }
7560 continue;
7561
7563 Record.clear();
7564 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
7565 if (!MaybeBitCode)
7566 return MaybeBitCode.takeError();
7567 switch (MaybeBitCode.get()) {
7568 default:
7569 break; // Default behavior, ignore unknown content.
7571 if (Error Err = parseVersionRecord(Record).takeError())
7572 return Err;
7573 break;
7574 }
7575 /// MODULE_CODE_SOURCE_FILENAME: [namechar x N]
7577 SmallString<128> ValueName;
7578 if (convertToString(Record, 0, ValueName))
7579 return error("Invalid source filename record");
7580 SourceFileName = ValueName.c_str();
7581 break;
7582 }
7583 /// MODULE_CODE_HASH: [5*i32]
7585 if (Record.size() != 5)
7586 return error("Invalid hash length " + Twine(Record.size()));
7587 auto &Hash = getThisModule()->second;
7588 int Pos = 0;
7589 for (auto &Val : Record) {
7590 assert(!(Val >> 32) && "Unexpected high bits set");
7591 Hash[Pos++] = Val;
7592 }
7593 break;
7594 }
7595 /// MODULE_CODE_VSTOFFSET: [offset]
7597 if (Record.empty())
7598 return error("Invalid vstoffset record");
7599 // Note that we subtract 1 here because the offset is relative to one
7600 // word before the start of the identification or module block, which
7601 // was historically always the start of the regular bitcode header.
7602 VSTOffset = Record[0] - 1;
7603 break;
7604 // MODULE_CODE_GUIDLIST: [i64 x N]
7606 assert(Record.size() % 2 == 0);
7607 DefinedGUIDs.reserve(DefinedGUIDs.size() + Record.size() / 2);
7608 for (size_t i = 0; i < Record.size(); i += 2)
7609 DefinedGUIDs.push_back(Record[i] << 32 | Record[i + 1]);
7610 break;
7611 // v1 GLOBALVAR: [pointer type, isconst, initid, linkage, ...]
7612 // v1 FUNCTION: [type, callingconv, isproto, linkage, ...]
7613 // v1 ALIAS: [alias type, addrspace, aliasee val#, linkage, ...]
7614 // v2: [strtab offset, strtab size, v1]
7618 StringRef Name;
7619 ArrayRef<uint64_t> GVRecord;
7620 std::tie(Name, GVRecord) = readNameFromStrtab(Record);
7621 if (GVRecord.size() <= 3)
7622 return error("Invalid global record");
7623 uint64_t RawLinkage = GVRecord[3];
7625 if (!UseStrtab) {
7626 ValueIdToLinkageMap[ValueId++] = Linkage;
7627 break;
7628 }
7629
7630 setValueGUID(ValueId++, Name, Linkage, SourceFileName);
7631 break;
7632 }
7633 }
7634 }
7635 continue;
7636 }
7637 }
7638}
7639
7641ModuleSummaryIndexBitcodeReader::makeRefList(ArrayRef<uint64_t> Record) {
7643 Ret.reserve(Record.size());
7644 for (uint64_t RefValueId : Record)
7645 Ret.push_back(std::get<0>(getValueInfoFromValueId(RefValueId)));
7646 return Ret;
7647}
7648
7650ModuleSummaryIndexBitcodeReader::makeCallList(ArrayRef<uint64_t> Record,
7651 bool IsOldProfileFormat,
7652 bool HasProfile, bool HasRelBF) {
7654 // In the case of new profile formats, there are two Record entries per
7655 // Edge. Otherwise, conservatively reserve up to Record.size.
7656 if (!IsOldProfileFormat && (HasProfile || HasRelBF))
7657 Ret.reserve(Record.size() / 2);
7658 else
7659 Ret.reserve(Record.size());
7660
7661 for (unsigned I = 0, E = Record.size(); I != E; ++I) {
7662 CalleeInfo::HotnessType Hotness = CalleeInfo::HotnessType::Unknown;
7663 bool HasTailCall = false;
7664 uint64_t RelBF = 0;
7665 ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[I]));
7666 if (IsOldProfileFormat) {
7667 I += 1; // Skip old callsitecount field
7668 if (HasProfile)
7669 I += 1; // Skip old profilecount field
7670 } else if (HasProfile)
7671 std::tie(Hotness, HasTailCall) =
7673 // Deprecated, but still needed to read old bitcode files.
7674 else if (HasRelBF)
7675 getDecodedRelBFCallEdgeInfo(Record[++I], RelBF, HasTailCall);
7676 Ret.push_back(
7677 FunctionSummary::EdgeTy{Callee, CalleeInfo(Hotness, HasTailCall)});
7678 }
7679 return Ret;
7680}
7681
7682static void
7685 uint64_t ArgNum = Record[Slot++];
7687 Wpd.ResByArg[{Record.begin() + Slot, Record.begin() + Slot + ArgNum}];
7688 Slot += ArgNum;
7689
7690 B.TheKind =
7692 B.Info = Record[Slot++];
7693 B.Byte = Record[Slot++];
7694 B.Bit = Record[Slot++];
7695}
7696
7698 StringRef Strtab, size_t &Slot,
7699 TypeIdSummary &TypeId) {
7700 uint64_t Id = Record[Slot++];
7701 WholeProgramDevirtResolution &Wpd = TypeId.WPDRes[Id];
7702
7703 Wpd.TheKind = static_cast<WholeProgramDevirtResolution::Kind>(Record[Slot++]);
7704 Wpd.SingleImplName = {Strtab.data() + Record[Slot],
7705 static_cast<size_t>(Record[Slot + 1])};
7706 Slot += 2;
7707
7708 uint64_t ResByArgNum = Record[Slot++];
7709 for (uint64_t I = 0; I != ResByArgNum; ++I)
7711}
7712
7714 StringRef Strtab,
7715 ModuleSummaryIndex &TheIndex) {
7716 size_t Slot = 0;
7717 TypeIdSummary &TypeId = TheIndex.getOrInsertTypeIdSummary(
7718 {Strtab.data() + Record[Slot], static_cast<size_t>(Record[Slot + 1])});
7719 Slot += 2;
7720
7721 TypeId.TTRes.TheKind = static_cast<TypeTestResolution::Kind>(Record[Slot++]);
7722 TypeId.TTRes.SizeM1BitWidth = Record[Slot++];
7723 TypeId.TTRes.AlignLog2 = Record[Slot++];
7724 TypeId.TTRes.SizeM1 = Record[Slot++];
7725 TypeId.TTRes.BitMask = Record[Slot++];
7726 TypeId.TTRes.InlineBits = Record[Slot++];
7727
7728 while (Slot < Record.size())
7729 parseWholeProgramDevirtResolution(Record, Strtab, Slot, TypeId);
7730}
7731
7732std::vector<FunctionSummary::ParamAccess>
7733ModuleSummaryIndexBitcodeReader::parseParamAccesses(ArrayRef<uint64_t> Record) {
7734 auto ReadRange = [&]() {
7736 BitcodeReader::decodeSignRotatedValue(Record.consume_front()));
7738 BitcodeReader::decodeSignRotatedValue(Record.consume_front()));
7739 ConstantRange Range{Lower, Upper};
7742 return Range;
7743 };
7744
7745 std::vector<FunctionSummary::ParamAccess> PendingParamAccesses;
7746 while (!Record.empty()) {
7747 PendingParamAccesses.emplace_back();
7748 FunctionSummary::ParamAccess &ParamAccess = PendingParamAccesses.back();
7749 ParamAccess.ParamNo = Record.consume_front();
7750 ParamAccess.Use = ReadRange();
7751 ParamAccess.Calls.resize(Record.consume_front());
7752 for (auto &Call : ParamAccess.Calls) {
7753 Call.ParamNo = Record.consume_front();
7754 Call.Callee =
7755 std::get<0>(getValueInfoFromValueId(Record.consume_front()));
7756 Call.Offsets = ReadRange();
7757 }
7758 }
7759 return PendingParamAccesses;
7760}
7761
7762void ModuleSummaryIndexBitcodeReader::parseTypeIdCompatibleVtableInfo(
7763 ArrayRef<uint64_t> Record, size_t &Slot,
7766 ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[Slot++]));
7767 TypeId.push_back({Offset, Callee});
7768}
7769
7770void ModuleSummaryIndexBitcodeReader::parseTypeIdCompatibleVtableSummaryRecord(
7771 ArrayRef<uint64_t> Record) {
7772 size_t Slot = 0;
7775 {Strtab.data() + Record[Slot],
7776 static_cast<size_t>(Record[Slot + 1])});
7777 Slot += 2;
7778
7779 while (Slot < Record.size())
7780 parseTypeIdCompatibleVtableInfo(Record, Slot, TypeId);
7781}
7782
7783SmallVector<unsigned> ModuleSummaryIndexBitcodeReader::parseAllocInfoContext(
7784 ArrayRef<uint64_t> Record, unsigned &I) {
7785 SmallVector<unsigned> StackIdList;
7786 // For backwards compatibility with old format before radix tree was
7787 // used, simply see if we found a radix tree array record (and thus if
7788 // the RadixArray is non-empty).
7789 if (RadixArray.empty()) {
7790 unsigned NumStackEntries = Record[I++];
7791 assert(Record.size() - I >= NumStackEntries);
7792 StackIdList.reserve(NumStackEntries);
7793 for (unsigned J = 0; J < NumStackEntries; J++) {
7794 assert(Record[I] < StackIds.size());
7795 StackIdList.push_back(getStackIdIndex(Record[I++]));
7796 }
7797 } else {
7798 unsigned RadixIndex = Record[I++];
7799 // See the comments above CallStackRadixTreeBuilder in ProfileData/MemProf.h
7800 // for a detailed description of the radix tree array format. Briefly, the
7801 // first entry will be the number of frames, any negative values are the
7802 // negative of the offset of the next frame, and otherwise the frames are in
7803 // increasing linear order.
7804 assert(RadixIndex < RadixArray.size());
7805 unsigned NumStackIds = RadixArray[RadixIndex++];
7806 StackIdList.reserve(NumStackIds);
7807 while (NumStackIds--) {
7808 assert(RadixIndex < RadixArray.size());
7809 unsigned Elem = RadixArray[RadixIndex];
7810 if (static_cast<std::make_signed_t<unsigned>>(Elem) < 0) {
7811 RadixIndex = RadixIndex - Elem;
7812 assert(RadixIndex < RadixArray.size());
7813 Elem = RadixArray[RadixIndex];
7814 // We shouldn't encounter a second offset in a row.
7815 assert(static_cast<std::make_signed_t<unsigned>>(Elem) >= 0);
7816 }
7817 RadixIndex++;
7818 StackIdList.push_back(getStackIdIndex(Elem));
7819 }
7820 }
7821 return StackIdList;
7822}
7823
7824static void setSpecialRefs(SmallVectorImpl<ValueInfo> &Refs, unsigned ROCnt,
7825 unsigned WOCnt) {
7826 // Readonly and writeonly refs are in the end of the refs list.
7827 assert(ROCnt + WOCnt <= Refs.size());
7828 unsigned FirstWORef = Refs.size() - WOCnt;
7829 unsigned RefNo = FirstWORef - ROCnt;
7830 for (; RefNo < FirstWORef; ++RefNo)
7831 Refs[RefNo].setReadOnly();
7832 for (; RefNo < Refs.size(); ++RefNo)
7833 Refs[RefNo].setWriteOnly();
7834}
7835
7836// Eagerly parse the entire summary block. This populates the GlobalValueSummary
7837// objects in the index.
7838Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
7839 if (Error Err = Stream.EnterSubBlock(ID))
7840 return Err;
7841 SmallVector<uint64_t, 64> Record;
7842
7843 // Parse version
7844 {
7845 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
7846 if (!MaybeEntry)
7847 return MaybeEntry.takeError();
7848 BitstreamEntry Entry = MaybeEntry.get();
7849
7850 if (Entry.Kind != BitstreamEntry::Record)
7851 return error("Invalid Summary Block: record for version expected");
7852 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
7853 if (!MaybeRecord)
7854 return MaybeRecord.takeError();
7855 if (MaybeRecord.get() != bitc::FS_VERSION)
7856 return error("Invalid Summary Block: version expected");
7857 }
7858 const uint64_t Version = Record[0];
7859 const bool IsOldProfileFormat = Version == 1;
7860 // Starting with bitcode summary version 13, MemProf records follow the
7861 // corresponding function summary.
7862 const bool MemProfAfterFunctionSummary = Version >= 13;
7864 return error("Invalid summary version " + Twine(Version) + " in module '" +
7865 ModulePath + "'. Version should be in the range [1-" +
7867 Record.clear();
7868
7869 // Keep around the last seen summary to be used when we see an optional
7870 // "OriginalName" attachement.
7871 GlobalValueSummary *LastSeenSummary = nullptr;
7872 GlobalValue::GUID LastSeenGUID = 0;
7873
7874 // Track the most recent function summary if it was prevailing, and while we
7875 // are not done processing any subsequent memprof records. Starting with
7876 // summary version 13 (tracked by MemProfAfterFunctionSummary), MemProf
7877 // records follow the function summary and we skip processing them when the
7878 // summary is not prevailing. Note that when reading a combined index we don't
7879 // know what is prevailing so this should always be set in the new format when
7880 // we encounter MemProf records.
7881 FunctionSummary *CurrentPrevailingFS = nullptr;
7882
7883 // We can expect to see any number of type ID information records before
7884 // each function summary records; these variables store the information
7885 // collected so far so that it can be used to create the summary object.
7886 std::vector<GlobalValue::GUID> PendingTypeTests;
7887 std::vector<FunctionSummary::VFuncId> PendingTypeTestAssumeVCalls,
7888 PendingTypeCheckedLoadVCalls;
7889 std::vector<FunctionSummary::ConstVCall> PendingTypeTestAssumeConstVCalls,
7890 PendingTypeCheckedLoadConstVCalls;
7891 std::vector<FunctionSummary::ParamAccess> PendingParamAccesses;
7892
7893 std::vector<CallsiteInfo> PendingCallsites;
7894 std::vector<AllocInfo> PendingAllocs;
7895 std::vector<uint64_t> PendingContextIds;
7896
7897 while (true) {
7898 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
7899 if (!MaybeEntry)
7900 return MaybeEntry.takeError();
7901 BitstreamEntry Entry = MaybeEntry.get();
7902
7903 switch (Entry.Kind) {
7904 case BitstreamEntry::SubBlock: // Handled for us already.
7906 return error("Malformed block");
7908 return Error::success();
7910 // The interesting case.
7911 break;
7912 }
7913
7914 // Read a record. The record format depends on whether this
7915 // is a per-module index or a combined index file. In the per-module
7916 // case the records contain the associated value's ID for correlation
7917 // with VST entries. In the combined index the correlation is done
7918 // via the bitcode offset of the summary records (which were saved
7919 // in the combined index VST entries). The records also contain
7920 // information used for ThinLTO renaming and importing.
7921 Record.clear();
7922 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
7923 if (!MaybeBitCode)
7924 return MaybeBitCode.takeError();
7925 unsigned BitCode = MaybeBitCode.get();
7926
7927 switch (BitCode) {
7928 default: // Default behavior: ignore.
7929 break;
7930 case bitc::FS_FLAGS: { // [flags]
7931 TheIndex.setFlags(Record[0]);
7932 break;
7933 }
7934 case bitc::FS_VALUE_GUID: { // [valueid, refguid_upper32, refguid_lower32]
7935 uint64_t ValueID = Record[0];
7936 GlobalValue::GUID RefGUID;
7937 if (Version >= 11) {
7938 RefGUID = Record[1] << 32 | Record[2];
7939 } else {
7940 RefGUID = Record[1];
7941 }
7942 ValueIdToValueInfoMap[ValueID] =
7943 std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID);
7944 break;
7945 }
7946 // FS_PERMODULE is legacy and does not have support for the tail call flag.
7947 // FS_PERMODULE: [valueid, flags, instcount, fflags, numrefs,
7948 // numrefs x valueid, n x (valueid)]
7949 // FS_PERMODULE_PROFILE: [valueid, flags, instcount, fflags, numrefs,
7950 // numrefs x valueid,
7951 // n x (valueid, hotness+tailcall flags)]
7952 // Deprecated, but still needed to read old bitcode files.
7953 // FS_PERMODULE_RELBF: [valueid, flags, instcount, fflags, numrefs,
7954 // numrefs x valueid,
7955 // n x (valueid, relblockfreq+tailcall)]
7956 case bitc::FS_PERMODULE:
7958 // Deprecated, but still needed to read old bitcode files.
7960 unsigned ValueID = Record[0];
7961 uint64_t RawFlags = Record[1];
7962 unsigned InstCount = Record[2];
7963 uint64_t RawFunFlags = 0;
7964 unsigned NumRefs = Record[3];
7965 unsigned NumRORefs = 0, NumWORefs = 0;
7966 int RefListStartIndex = 4;
7967 if (Version >= 4) {
7968 RawFunFlags = Record[3];
7969 NumRefs = Record[4];
7970 RefListStartIndex = 5;
7971 if (Version >= 5) {
7972 NumRORefs = Record[5];
7973 RefListStartIndex = 6;
7974 if (Version >= 7) {
7975 NumWORefs = Record[6];
7976 RefListStartIndex = 7;
7977 }
7978 }
7979 }
7980
7981 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
7982 // The module path string ref set in the summary must be owned by the
7983 // index's module string table. Since we don't have a module path
7984 // string table section in the per-module index, we create a single
7985 // module path string table entry with an empty (0) ID to take
7986 // ownership.
7987 int CallGraphEdgeStartIndex = RefListStartIndex + NumRefs;
7988 assert(Record.size() >= RefListStartIndex + NumRefs &&
7989 "Record size inconsistent with number of references");
7990 SmallVector<ValueInfo, 0> Refs = makeRefList(
7991 ArrayRef<uint64_t>(Record).slice(RefListStartIndex, NumRefs));
7992 bool HasProfile = (BitCode == bitc::FS_PERMODULE_PROFILE);
7993 // Deprecated, but still needed to read old bitcode files.
7994 bool HasRelBF = (BitCode == bitc::FS_PERMODULE_RELBF);
7995 SmallVector<FunctionSummary::EdgeTy, 0> Calls = makeCallList(
7996 ArrayRef<uint64_t>(Record).slice(CallGraphEdgeStartIndex),
7997 IsOldProfileFormat, HasProfile, HasRelBF);
7998 setSpecialRefs(Refs, NumRORefs, NumWORefs);
7999 auto [VI, GUID] = getValueInfoFromValueId(ValueID);
8000
8001 // The linker doesn't resolve local linkage values so don't check whether
8002 // those are prevailing (set IsPrevailingSym so they are always processed
8003 // and kept).
8004 auto LT = (GlobalValue::LinkageTypes)Flags.Linkage;
8005 bool IsPrevailingSym = !IsPrevailing || GlobalValue::isLocalLinkage(LT) ||
8006 IsPrevailing(VI.name());
8007
8008 // If this is not the prevailing copy, and the records are in the "old"
8009 // order (preceding), clear them now. They should already be empty in
8010 // the new order (following), as they are processed or skipped immediately
8011 // when they follow the summary.
8012 assert(!MemProfAfterFunctionSummary ||
8013 (PendingCallsites.empty() && PendingAllocs.empty()));
8014 if (!IsPrevailingSym && !MemProfAfterFunctionSummary) {
8015 PendingCallsites.clear();
8016 PendingAllocs.clear();
8017 }
8018
8019 auto FS = std::make_unique<FunctionSummary>(
8020 Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
8021 std::move(Calls), std::move(PendingTypeTests),
8022 std::move(PendingTypeTestAssumeVCalls),
8023 std::move(PendingTypeCheckedLoadVCalls),
8024 std::move(PendingTypeTestAssumeConstVCalls),
8025 std::move(PendingTypeCheckedLoadConstVCalls),
8026 std::move(PendingParamAccesses), std::move(PendingCallsites),
8027 std::move(PendingAllocs));
8028 FS->setModulePath(getThisModule()->first());
8029 FS->setOriginalName(GUID);
8030 // Set CurrentPrevailingFS only if prevailing, so subsequent MemProf
8031 // records are attached (new order) or skipped.
8032 if (MemProfAfterFunctionSummary) {
8033 if (IsPrevailingSym)
8034 CurrentPrevailingFS = FS.get();
8035 else
8036 CurrentPrevailingFS = nullptr;
8037 }
8038 TheIndex.addGlobalValueSummary(VI, std::move(FS));
8039 break;
8040 }
8041 // FS_ALIAS: [valueid, flags, valueid]
8042 // Aliases must be emitted (and parsed) after all FS_PERMODULE entries, as
8043 // they expect all aliasee summaries to be available.
8044 case bitc::FS_ALIAS: {
8045 unsigned ValueID = Record[0];
8046 uint64_t RawFlags = Record[1];
8047 unsigned AliaseeID = Record[2];
8048 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8049 auto AS = std::make_unique<AliasSummary>(Flags);
8050 // The module path string ref set in the summary must be owned by the
8051 // index's module string table. Since we don't have a module path
8052 // string table section in the per-module index, we create a single
8053 // module path string table entry with an empty (0) ID to take
8054 // ownership.
8055 AS->setModulePath(getThisModule()->first());
8056
8057 auto AliaseeVI = std::get<0>(getValueInfoFromValueId(AliaseeID));
8058 auto AliaseeInModule = TheIndex.findSummaryInModule(AliaseeVI, ModulePath);
8059 if (!AliaseeInModule)
8060 return error("Alias expects aliasee summary to be parsed");
8061 AS->setAliasee(AliaseeVI, AliaseeInModule);
8062
8063 auto GUID = getValueInfoFromValueId(ValueID);
8064 AS->setOriginalName(std::get<1>(GUID));
8065 TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(AS));
8066 break;
8067 }
8068 // FS_PERMODULE_GLOBALVAR_INIT_REFS: [valueid, flags, varflags, n x valueid]
8070 unsigned ValueID = Record[0];
8071 uint64_t RawFlags = Record[1];
8072 unsigned RefArrayStart = 2;
8073 GlobalVarSummary::GVarFlags GVF(/* ReadOnly */ false,
8074 /* WriteOnly */ false,
8075 /* Constant */ false,
8077 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8078 if (Version >= 5) {
8079 GVF = getDecodedGVarFlags(Record[2]);
8080 RefArrayStart = 3;
8081 }
8083 makeRefList(ArrayRef<uint64_t>(Record).slice(RefArrayStart));
8084 auto FS =
8085 std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
8086 FS->setModulePath(getThisModule()->first());
8087 auto GUID = getValueInfoFromValueId(ValueID);
8088 FS->setOriginalName(std::get<1>(GUID));
8089 TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(FS));
8090 break;
8091 }
8092 // FS_PERMODULE_VTABLE_GLOBALVAR_INIT_REFS: [valueid, flags, varflags,
8093 // numrefs, numrefs x valueid,
8094 // n x (valueid, offset)]
8096 unsigned ValueID = Record[0];
8097 uint64_t RawFlags = Record[1];
8098 GlobalVarSummary::GVarFlags GVF = getDecodedGVarFlags(Record[2]);
8099 unsigned NumRefs = Record[3];
8100 unsigned RefListStartIndex = 4;
8101 unsigned VTableListStartIndex = RefListStartIndex + NumRefs;
8102 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8103 SmallVector<ValueInfo, 0> Refs = makeRefList(
8104 ArrayRef<uint64_t>(Record).slice(RefListStartIndex, NumRefs));
8105 VTableFuncList VTableFuncs;
8106 for (unsigned I = VTableListStartIndex, E = Record.size(); I != E; ++I) {
8107 ValueInfo Callee = std::get<0>(getValueInfoFromValueId(Record[I]));
8108 uint64_t Offset = Record[++I];
8109 VTableFuncs.push_back({Callee, Offset});
8110 }
8111 auto VS =
8112 std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
8113 VS->setModulePath(getThisModule()->first());
8114 VS->setVTableFuncs(VTableFuncs);
8115 auto GUID = getValueInfoFromValueId(ValueID);
8116 VS->setOriginalName(std::get<1>(GUID));
8117 TheIndex.addGlobalValueSummary(std::get<0>(GUID), std::move(VS));
8118 break;
8119 }
8120 // FS_COMBINED is legacy and does not have support for the tail call flag.
8121 // FS_COMBINED: [valueid, modid, flags, instcount, fflags, numrefs,
8122 // numrefs x valueid, n x (valueid)]
8123 // FS_COMBINED_PROFILE: [valueid, modid, flags, instcount, fflags, numrefs,
8124 // numrefs x valueid,
8125 // n x (valueid, hotness+tailcall flags)]
8126 case bitc::FS_COMBINED:
8128 unsigned ValueID = Record[0];
8129 uint64_t ModuleId = Record[1];
8130 uint64_t RawFlags = Record[2];
8131 unsigned InstCount = Record[3];
8132 uint64_t RawFunFlags = 0;
8133 unsigned NumRefs = Record[4];
8134 unsigned NumRORefs = 0, NumWORefs = 0;
8135 int RefListStartIndex = 5;
8136
8137 if (Version >= 4) {
8138 RawFunFlags = Record[4];
8139 RefListStartIndex = 6;
8140 size_t NumRefsIndex = 5;
8141 if (Version >= 5) {
8142 unsigned NumRORefsOffset = 1;
8143 RefListStartIndex = 7;
8144 if (Version >= 6) {
8145 NumRefsIndex = 6;
8146 RefListStartIndex = 8;
8147 if (Version >= 7) {
8148 RefListStartIndex = 9;
8149 NumWORefs = Record[8];
8150 NumRORefsOffset = 2;
8151 }
8152 }
8153 NumRORefs = Record[RefListStartIndex - NumRORefsOffset];
8154 }
8155 NumRefs = Record[NumRefsIndex];
8156 }
8157
8158 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8159 int CallGraphEdgeStartIndex = RefListStartIndex + NumRefs;
8160 assert(Record.size() >= RefListStartIndex + NumRefs &&
8161 "Record size inconsistent with number of references");
8162 SmallVector<ValueInfo, 0> Refs = makeRefList(
8163 ArrayRef<uint64_t>(Record).slice(RefListStartIndex, NumRefs));
8164 bool HasProfile = (BitCode == bitc::FS_COMBINED_PROFILE);
8165 SmallVector<FunctionSummary::EdgeTy, 0> Edges = makeCallList(
8166 ArrayRef<uint64_t>(Record).slice(CallGraphEdgeStartIndex),
8167 IsOldProfileFormat, HasProfile, false);
8168 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8169 setSpecialRefs(Refs, NumRORefs, NumWORefs);
8170 auto FS = std::make_unique<FunctionSummary>(
8171 Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
8172 std::move(Edges), std::move(PendingTypeTests),
8173 std::move(PendingTypeTestAssumeVCalls),
8174 std::move(PendingTypeCheckedLoadVCalls),
8175 std::move(PendingTypeTestAssumeConstVCalls),
8176 std::move(PendingTypeCheckedLoadConstVCalls),
8177 std::move(PendingParamAccesses), std::move(PendingCallsites),
8178 std::move(PendingAllocs));
8179 LastSeenSummary = FS.get();
8180 if (MemProfAfterFunctionSummary)
8181 CurrentPrevailingFS = FS.get();
8182 LastSeenGUID = VI.getGUID();
8183 FS->setModulePath(ModuleIdMap[ModuleId]);
8184 TheIndex.addGlobalValueSummary(VI, std::move(FS));
8185 break;
8186 }
8187 // FS_COMBINED_ALIAS: [valueid, modid, flags, valueid]
8188 // Aliases must be emitted (and parsed) after all FS_COMBINED entries, as
8189 // they expect all aliasee summaries to be available.
8191 unsigned ValueID = Record[0];
8192 uint64_t ModuleId = Record[1];
8193 uint64_t RawFlags = Record[2];
8194 unsigned AliaseeValueId = Record[3];
8195 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8196 auto AS = std::make_unique<AliasSummary>(Flags);
8197 LastSeenSummary = AS.get();
8198 AS->setModulePath(ModuleIdMap[ModuleId]);
8199
8200 auto AliaseeVI = std::get<0>(
8201 getValueInfoFromValueId</*AllowNullValueInfo*/ true>(AliaseeValueId));
8202 if (AliaseeVI) {
8203 auto AliaseeInModule =
8204 TheIndex.findSummaryInModule(AliaseeVI, AS->modulePath());
8205 AS->setAliasee(AliaseeVI, AliaseeInModule);
8206 }
8207 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8208 LastSeenGUID = VI.getGUID();
8209 TheIndex.addGlobalValueSummary(VI, std::move(AS));
8210 break;
8211 }
8212 // FS_COMBINED_GLOBALVAR_INIT_REFS: [valueid, modid, flags, n x valueid]
8214 unsigned ValueID = Record[0];
8215 uint64_t ModuleId = Record[1];
8216 uint64_t RawFlags = Record[2];
8217 unsigned RefArrayStart = 3;
8218 GlobalVarSummary::GVarFlags GVF(/* ReadOnly */ false,
8219 /* WriteOnly */ false,
8220 /* Constant */ false,
8222 auto Flags = getDecodedGVSummaryFlags(RawFlags, Version);
8223 if (Version >= 5) {
8224 GVF = getDecodedGVarFlags(Record[3]);
8225 RefArrayStart = 4;
8226 }
8228 makeRefList(ArrayRef<uint64_t>(Record).slice(RefArrayStart));
8229 auto FS =
8230 std::make_unique<GlobalVarSummary>(Flags, GVF, std::move(Refs));
8231 LastSeenSummary = FS.get();
8232 FS->setModulePath(ModuleIdMap[ModuleId]);
8233 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8234 LastSeenGUID = VI.getGUID();
8235 TheIndex.addGlobalValueSummary(VI, std::move(FS));
8236 break;
8237 }
8238 // FS_COMBINED_ORIGINAL_NAME: [original_name]
8240 uint64_t OriginalName = Record[0];
8241 if (!LastSeenSummary)
8242 return error("Name attachment that does not follow a combined record");
8243 LastSeenSummary->setOriginalName(OriginalName);
8244 TheIndex.addOriginalName(LastSeenGUID, OriginalName);
8245 // Reset the LastSeenSummary
8246 LastSeenSummary = nullptr;
8247 LastSeenGUID = 0;
8248 break;
8249 }
8251 assert(PendingTypeTests.empty());
8252 llvm::append_range(PendingTypeTests, Record);
8253 break;
8254
8256 assert(PendingTypeTestAssumeVCalls.empty());
8257 for (unsigned I = 0; I != Record.size(); I += 2)
8258 PendingTypeTestAssumeVCalls.push_back({Record[I], Record[I+1]});
8259 break;
8260
8262 assert(PendingTypeCheckedLoadVCalls.empty());
8263 for (unsigned I = 0; I != Record.size(); I += 2)
8264 PendingTypeCheckedLoadVCalls.push_back({Record[I], Record[I+1]});
8265 break;
8266
8268 PendingTypeTestAssumeConstVCalls.push_back(
8269 {{Record[0], Record[1]}, {Record.begin() + 2, Record.end()}});
8270 break;
8271
8273 PendingTypeCheckedLoadConstVCalls.push_back(
8274 {{Record[0], Record[1]}, {Record.begin() + 2, Record.end()}});
8275 break;
8276
8278 auto &CfiFunctionDefs = TheIndex.cfiFunctionDefs();
8279 if (Version < 14) {
8280 for (unsigned I = 0; I != Record.size(); I += 2) {
8281 StringRef Name(Strtab.data() + Record[I],
8282 static_cast<size_t>(Record[I + 1]));
8285 CfiFunctionDefs.addSymbolWithThinLTOGUID(Name, GUID);
8286 }
8287 } else {
8288 for (unsigned I = 0; I != Record.size(); I += 3) {
8289 GlobalValue::GUID ThinLTOGUID = Record[I];
8290 StringRef Name(Strtab.data() + Record[I + 1],
8291 static_cast<size_t>(Record[I + 2]));
8292 CfiFunctionDefs.addSymbolWithThinLTOGUID(Name, ThinLTOGUID);
8293 }
8294 }
8295 break;
8296 }
8297
8299 auto &CfiFunctionDecls = TheIndex.cfiFunctionDecls();
8300 if (Version < 14) {
8301 for (unsigned I = 0; I != Record.size(); I += 2) {
8302 StringRef Name(Strtab.data() + Record[I],
8303 static_cast<size_t>(Record[I + 1]));
8306 CfiFunctionDecls.addSymbolWithThinLTOGUID(Name, GUID);
8307 }
8308 } else {
8309 for (unsigned I = 0; I != Record.size(); I += 3) {
8310 GlobalValue::GUID ThinLTOGUID = Record[I];
8311 StringRef Name(Strtab.data() + Record[I + 1],
8312 static_cast<size_t>(Record[I + 2]));
8313 CfiFunctionDecls.addSymbolWithThinLTOGUID(Name, ThinLTOGUID);
8314 }
8315 }
8316 break;
8317 }
8318
8319 case bitc::FS_TYPE_ID:
8320 parseTypeIdSummaryRecord(Record, Strtab, TheIndex);
8321 break;
8322
8324 parseTypeIdCompatibleVtableSummaryRecord(Record);
8325 break;
8326
8328 TheIndex.addBlockCount(Record[0]);
8329 break;
8330
8331 case bitc::FS_PARAM_ACCESS: {
8332 PendingParamAccesses = parseParamAccesses(Record);
8333 break;
8334 }
8335
8336 case bitc::FS_STACK_IDS: { // [n x stackid]
8337 // Save stack ids in the reader to consult when adding stack ids from the
8338 // lists in the stack node and alloc node entries.
8339 assert(StackIds.empty());
8340 if (Version <= 11) {
8341 StackIds = ArrayRef<uint64_t>(Record);
8342 } else {
8343 // This is an array of 32-bit fixed-width values, holding each 64-bit
8344 // context id as a pair of adjacent (most significant first) 32-bit
8345 // words.
8346 assert(Record.size() % 2 == 0);
8347 StackIds.reserve(Record.size() / 2);
8348 for (auto R = Record.begin(); R != Record.end(); R += 2)
8349 StackIds.push_back(*R << 32 | *(R + 1));
8350 }
8351 assert(StackIdToIndex.empty());
8352 // Initialize with a marker to support lazy population.
8353 StackIdToIndex.resize(StackIds.size(), UninitializedStackIdIndex);
8354 break;
8355 }
8356
8357 case bitc::FS_CONTEXT_RADIX_TREE_ARRAY: { // [n x entry]
8358 RadixArray = ArrayRef<uint64_t>(Record);
8359 break;
8360 }
8361
8363 // If they are in the new order (following), they are skipped when they
8364 // follow a non-prevailing summary (CurrentPrevailingFS will be null).
8365 if (MemProfAfterFunctionSummary && !CurrentPrevailingFS)
8366 break;
8367 unsigned ValueID = Record[0];
8368 SmallVector<unsigned> StackIdList;
8369 for (uint64_t R : drop_begin(Record)) {
8370 assert(R < StackIds.size());
8371 StackIdList.push_back(getStackIdIndex(R));
8372 }
8373 ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
8374 if (MemProfAfterFunctionSummary)
8375 CurrentPrevailingFS->addCallsite(
8376 CallsiteInfo({VI, std::move(StackIdList)}));
8377 else
8378 PendingCallsites.push_back(CallsiteInfo({VI, std::move(StackIdList)}));
8379 break;
8380 }
8381
8383 // In the combined index case we don't have a prevailing check,
8384 // so we should always have a CurrentPrevailingFS.
8385 assert(!MemProfAfterFunctionSummary || CurrentPrevailingFS);
8386 auto RecordIter = Record.begin();
8387 unsigned ValueID = *RecordIter++;
8388 unsigned NumStackIds = *RecordIter++;
8389 unsigned NumVersions = *RecordIter++;
8390 assert(Record.size() == 3 + NumStackIds + NumVersions);
8391 SmallVector<unsigned> StackIdList;
8392 for (unsigned J = 0; J < NumStackIds; J++) {
8393 assert(*RecordIter < StackIds.size());
8394 StackIdList.push_back(getStackIdIndex(*RecordIter++));
8395 }
8396 SmallVector<unsigned> Versions;
8397 for (unsigned J = 0; J < NumVersions; J++)
8398 Versions.push_back(*RecordIter++);
8399 ValueInfo VI = std::get<0>(
8400 getValueInfoFromValueId</*AllowNullValueInfo*/ true>(ValueID));
8401 if (MemProfAfterFunctionSummary)
8402 CurrentPrevailingFS->addCallsite(
8403 CallsiteInfo({VI, std::move(Versions), std::move(StackIdList)}));
8404 else
8405 PendingCallsites.push_back(
8406 CallsiteInfo({VI, std::move(Versions), std::move(StackIdList)}));
8407 break;
8408 }
8409
8411 // If they are in the new order (following), they are skipped when they
8412 // follow a non-prevailing summary (CurrentPrevailingFS will be null).
8413 if (MemProfAfterFunctionSummary && !CurrentPrevailingFS)
8414 break;
8415 // This is an array of 32-bit fixed-width values, holding each 64-bit
8416 // context id as a pair of adjacent (most significant first) 32-bit words.
8417 assert(Record.size() % 2 == 0);
8418 PendingContextIds.reserve(Record.size() / 2);
8419 for (auto R = Record.begin(); R != Record.end(); R += 2)
8420 PendingContextIds.push_back(*R << 32 | *(R + 1));
8421 break;
8422 }
8423
8425 // If they are in the new order (following), they are skipped when they
8426 // follow a non-prevailing summary (CurrentPrevailingFS will be null).
8427 if (MemProfAfterFunctionSummary && !CurrentPrevailingFS) {
8428 PendingContextIds.clear();
8429 break;
8430 }
8431 unsigned I = 0;
8432 std::vector<MIBInfo> MIBs;
8433 unsigned NumMIBs = 0;
8434 if (Version >= 10)
8435 NumMIBs = Record[I++];
8436 unsigned MIBsRead = 0;
8437 while ((Version >= 10 && MIBsRead++ < NumMIBs) ||
8438 (Version < 10 && I < Record.size())) {
8439 assert(Record.size() - I >= 2);
8441 auto StackIdList = parseAllocInfoContext(Record, I);
8442 MIBs.push_back(MIBInfo(AllocType, std::move(StackIdList)));
8443 }
8444 // We either have nothing left or at least NumMIBs context size info
8445 // indices left (for the total sizes included when reporting of hinted
8446 // bytes is enabled).
8447 assert(I == Record.size() || Record.size() - I >= NumMIBs);
8448 std::vector<std::vector<ContextTotalSize>> AllContextSizes;
8449 if (I < Record.size()) {
8450 assert(!PendingContextIds.empty() &&
8451 "Missing context ids for alloc sizes");
8452 unsigned ContextIdIndex = 0;
8453 MIBsRead = 0;
8454 // The sizes are a linearized array of sizes, where for each MIB there
8455 // is 1 or more sizes (due to context trimming, each MIB in the metadata
8456 // and summarized here can correspond to more than one original context
8457 // from the profile).
8458 while (MIBsRead++ < NumMIBs) {
8459 // First read the number of contexts recorded for this MIB.
8460 unsigned NumContextSizeInfoEntries = Record[I++];
8461 assert(Record.size() - I >= NumContextSizeInfoEntries);
8462 std::vector<ContextTotalSize> ContextSizes;
8463 ContextSizes.reserve(NumContextSizeInfoEntries);
8464 for (unsigned J = 0; J < NumContextSizeInfoEntries; J++) {
8465 assert(ContextIdIndex < PendingContextIds.size());
8466 // Skip any 0 entries for MIBs without the context size info.
8467 if (PendingContextIds[ContextIdIndex] == 0) {
8468 // The size should also be 0 if the context was 0.
8469 assert(!Record[I]);
8470 ContextIdIndex++;
8471 I++;
8472 continue;
8473 }
8474 // PendingContextIds read from the preceding FS_ALLOC_CONTEXT_IDS
8475 // should be in the same order as the total sizes.
8476 ContextSizes.push_back(
8477 {PendingContextIds[ContextIdIndex++], Record[I++]});
8478 }
8479 AllContextSizes.push_back(std::move(ContextSizes));
8480 }
8481 PendingContextIds.clear();
8482 }
8483 AllocInfo AI(std::move(MIBs));
8484 if (!AllContextSizes.empty()) {
8485 assert(AI.MIBs.size() == AllContextSizes.size());
8486 AI.ContextSizeInfos = std::move(AllContextSizes);
8487 }
8488
8489 if (MemProfAfterFunctionSummary)
8490 CurrentPrevailingFS->addAlloc(std::move(AI));
8491 else
8492 PendingAllocs.push_back(std::move(AI));
8493 break;
8494 }
8495
8498 // In the combined index case we don't have a prevailing check,
8499 // so we should always have a CurrentPrevailingFS.
8500 assert(!MemProfAfterFunctionSummary || CurrentPrevailingFS);
8501 unsigned I = 0;
8502 std::vector<MIBInfo> MIBs;
8503 unsigned NumMIBs = Record[I++];
8504 unsigned NumVersions = Record[I++];
8505 unsigned MIBsRead = 0;
8506 while (MIBsRead++ < NumMIBs) {
8507 assert(Record.size() - I >= 2);
8509 SmallVector<unsigned> StackIdList;
8510 if (BitCode == bitc::FS_COMBINED_ALLOC_INFO)
8511 StackIdList = parseAllocInfoContext(Record, I);
8512 MIBs.push_back(MIBInfo(AllocType, std::move(StackIdList)));
8513 }
8514 assert(Record.size() - I >= NumVersions);
8515 SmallVector<uint8_t> Versions;
8516 for (unsigned J = 0; J < NumVersions; J++)
8517 Versions.push_back(Record[I++]);
8518 assert(I == Record.size());
8519 AllocInfo AI(std::move(Versions), std::move(MIBs));
8520 if (MemProfAfterFunctionSummary)
8521 CurrentPrevailingFS->addAlloc(std::move(AI));
8522 else
8523 PendingAllocs.push_back(std::move(AI));
8524 break;
8525 }
8526 }
8527 }
8528 llvm_unreachable("Exit infinite loop");
8529}
8530
8531// Parse the module string table block into the Index.
8532// This populates the ModulePathStringTable map in the index.
8533Error ModuleSummaryIndexBitcodeReader::parseModuleStringTable() {
8535 return Err;
8536
8537 SmallVector<uint64_t, 64> Record;
8538
8539 SmallString<128> ModulePath;
8540 ModuleSummaryIndex::ModuleInfo *LastSeenModule = nullptr;
8541
8542 while (true) {
8543 Expected<BitstreamEntry> MaybeEntry = Stream.advanceSkippingSubblocks();
8544 if (!MaybeEntry)
8545 return MaybeEntry.takeError();
8546 BitstreamEntry Entry = MaybeEntry.get();
8547
8548 switch (Entry.Kind) {
8549 case BitstreamEntry::SubBlock: // Handled for us already.
8551 return error("Malformed block");
8553 return Error::success();
8555 // The interesting case.
8556 break;
8557 }
8558
8559 Record.clear();
8560 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
8561 if (!MaybeRecord)
8562 return MaybeRecord.takeError();
8563 switch (MaybeRecord.get()) {
8564 default: // Default behavior: ignore.
8565 break;
8566 case bitc::MST_CODE_ENTRY: {
8567 // MST_ENTRY: [modid, namechar x N]
8568 uint64_t ModuleId = Record[0];
8569
8570 if (convertToString(Record, 1, ModulePath))
8571 return error("Invalid code_entry record");
8572
8573 LastSeenModule = TheIndex.addModule(ModulePath);
8574 ModuleIdMap[ModuleId] = LastSeenModule->first();
8575
8576 ModulePath.clear();
8577 break;
8578 }
8579 /// MST_CODE_HASH: [5*i32]
8580 case bitc::MST_CODE_HASH: {
8581 if (Record.size() != 5)
8582 return error("Invalid hash length " + Twine(Record.size()));
8583 if (!LastSeenModule)
8584 return error("Invalid hash that does not follow a module path");
8585 int Pos = 0;
8586 for (auto &Val : Record) {
8587 assert(!(Val >> 32) && "Unexpected high bits set");
8588 LastSeenModule->second[Pos++] = Val;
8589 }
8590 // Reset LastSeenModule to avoid overriding the hash unexpectedly.
8591 LastSeenModule = nullptr;
8592 break;
8593 }
8594 }
8595 }
8596 llvm_unreachable("Exit infinite loop");
8597}
8598
8599namespace {
8600
8601// FIXME: This class is only here to support the transition to llvm::Error. It
8602// will be removed once this transition is complete. Clients should prefer to
8603// deal with the Error value directly, rather than converting to error_code.
8604class BitcodeErrorCategoryType : public std::error_category {
8605 const char *name() const noexcept override {
8606 return "llvm.bitcode";
8607 }
8608
8609 std::string message(int IE) const override {
8610 BitcodeError E = static_cast<BitcodeError>(IE);
8611 switch (E) {
8612 case BitcodeError::CorruptedBitcode:
8613 return "Corrupted bitcode";
8614 }
8615 llvm_unreachable("Unknown error type!");
8616 }
8617};
8618
8619} // end anonymous namespace
8620
8621const std::error_category &llvm::BitcodeErrorCategory() {
8622 static BitcodeErrorCategoryType ErrorCategory;
8623 return ErrorCategory;
8624}
8625
8627 unsigned Block, unsigned RecordID) {
8628 if (Error Err = Stream.EnterSubBlock(Block))
8629 return std::move(Err);
8630
8631 StringRef Strtab;
8632 while (true) {
8633 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
8634 if (!MaybeEntry)
8635 return MaybeEntry.takeError();
8636 llvm::BitstreamEntry Entry = MaybeEntry.get();
8637
8638 switch (Entry.Kind) {
8640 return Strtab;
8641
8643 return error("Malformed block");
8644
8646 if (Error Err = Stream.SkipBlock())
8647 return std::move(Err);
8648 break;
8649
8651 StringRef Blob;
8653 Expected<unsigned> MaybeRecord =
8654 Stream.readRecord(Entry.ID, Record, &Blob);
8655 if (!MaybeRecord)
8656 return MaybeRecord.takeError();
8657 if (MaybeRecord.get() == RecordID)
8658 Strtab = Blob;
8659 break;
8660 }
8661 }
8662}
8663
8664//===----------------------------------------------------------------------===//
8665// External interface
8666//===----------------------------------------------------------------------===//
8667
8668Expected<std::vector<BitcodeModule>>
8670 auto FOrErr = getBitcodeFileContents(Buffer);
8671 if (!FOrErr)
8672 return FOrErr.takeError();
8673 return std::move(FOrErr->Mods);
8674}
8675
8678 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
8679 if (!StreamOrErr)
8680 return StreamOrErr.takeError();
8681 BitstreamCursor &Stream = *StreamOrErr;
8682
8684 while (true) {
8685 uint64_t BCBegin = Stream.getCurrentByteNo();
8686
8687 // We may be consuming bitcode from a client that leaves garbage at the end
8688 // of the bitcode stream (e.g. Apple's ar tool). If we are close enough to
8689 // the end that there cannot possibly be another module, stop looking.
8690 if (BCBegin + 8 >= Stream.getBitcodeBytes().size())
8691 return F;
8692
8693 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
8694 if (!MaybeEntry)
8695 return MaybeEntry.takeError();
8696 llvm::BitstreamEntry Entry = MaybeEntry.get();
8697
8698 switch (Entry.Kind) {
8701 return error("Malformed block");
8702
8704 uint64_t IdentificationBit = -1ull;
8705 if (Entry.ID == bitc::IDENTIFICATION_BLOCK_ID) {
8706 IdentificationBit = Stream.GetCurrentBitNo() - BCBegin * 8;
8707 if (Error Err = Stream.SkipBlock())
8708 return std::move(Err);
8709
8710 {
8711 Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
8712 if (!MaybeEntry)
8713 return MaybeEntry.takeError();
8714 Entry = MaybeEntry.get();
8715 }
8716
8717 if (Entry.Kind != BitstreamEntry::SubBlock ||
8718 Entry.ID != bitc::MODULE_BLOCK_ID)
8719 return error("Malformed block");
8720 }
8721
8722 if (Entry.ID == bitc::MODULE_BLOCK_ID) {
8723 uint64_t ModuleBit = Stream.GetCurrentBitNo() - BCBegin * 8;
8724 if (Error Err = Stream.SkipBlock())
8725 return std::move(Err);
8726
8727 F.Mods.push_back({Stream.getBitcodeBytes().slice(
8728 BCBegin, Stream.getCurrentByteNo() - BCBegin),
8729 Buffer.getBufferIdentifier(), IdentificationBit,
8730 ModuleBit});
8731 continue;
8732 }
8733
8734 if (Entry.ID == bitc::STRTAB_BLOCK_ID) {
8735 Expected<StringRef> Strtab =
8737 if (!Strtab)
8738 return Strtab.takeError();
8739 // This string table is used by every preceding bitcode module that does
8740 // not have its own string table. A bitcode file may have multiple
8741 // string tables if it was created by binary concatenation, for example
8742 // with "llvm-cat -b".
8743 for (BitcodeModule &I : llvm::reverse(F.Mods)) {
8744 if (!I.Strtab.empty())
8745 break;
8746 I.Strtab = *Strtab;
8747 }
8748 // Similarly, the string table is used by every preceding symbol table;
8749 // normally there will be just one unless the bitcode file was created
8750 // by binary concatenation.
8751 if (!F.Symtab.empty() && F.StrtabForSymtab.empty())
8752 F.StrtabForSymtab = *Strtab;
8753 continue;
8754 }
8755
8756 if (Entry.ID == bitc::SYMTAB_BLOCK_ID) {
8757 Expected<StringRef> SymtabOrErr =
8759 if (!SymtabOrErr)
8760 return SymtabOrErr.takeError();
8761
8762 // We can expect the bitcode file to have multiple symbol tables if it
8763 // was created by binary concatenation. In that case we silently
8764 // ignore any subsequent symbol tables, which is fine because this is a
8765 // low level function. The client is expected to notice that the number
8766 // of modules in the symbol table does not match the number of modules
8767 // in the input file and regenerate the symbol table.
8768 if (F.Symtab.empty())
8769 F.Symtab = *SymtabOrErr;
8770 continue;
8771 }
8772
8773 if (Error Err = Stream.SkipBlock())
8774 return std::move(Err);
8775 continue;
8776 }
8778 if (Error E = Stream.skipRecord(Entry.ID).takeError())
8779 return std::move(E);
8780 continue;
8781 }
8782 }
8783}
8784
8785/// Get a lazy one-at-time loading module from bitcode.
8786///
8787/// This isn't always used in a lazy context. In particular, it's also used by
8788/// \a parseModule(). If this is truly lazy, then we need to eagerly pull
8789/// in forward-referenced functions from block address references.
8790///
8791/// \param[in] MaterializeAll Set to \c true if we should materialize
8792/// everything.
8794BitcodeModule::getModuleImpl(LLVMContext &Context, bool MaterializeAll,
8795 bool ShouldLazyLoadMetadata, bool IsImporting,
8796 ParserCallbacks Callbacks) {
8797 BitstreamCursor Stream(Buffer);
8798
8799 std::string ProducerIdentification;
8800 if (IdentificationBit != -1ull) {
8801 if (Error JumpFailed = Stream.JumpToBit(IdentificationBit))
8802 return std::move(JumpFailed);
8803 if (Error E =
8804 readIdentificationBlock(Stream).moveInto(ProducerIdentification))
8805 return std::move(E);
8806 }
8807
8808 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8809 return std::move(JumpFailed);
8810 auto *R = new BitcodeReader(std::move(Stream), Strtab, ProducerIdentification,
8811 Context);
8812
8813 std::unique_ptr<Module> M =
8814 std::make_unique<Module>(ModuleIdentifier, Context);
8815 M->setMaterializer(R);
8816
8817 // Delay parsing Metadata if ShouldLazyLoadMetadata is true.
8818 if (Error Err = R->parseBitcodeInto(M.get(), ShouldLazyLoadMetadata,
8819 IsImporting, Callbacks))
8820 return std::move(Err);
8821
8822 if (MaterializeAll) {
8823 // Read in the entire module, and destroy the BitcodeReader.
8824 if (Error Err = M->materializeAll())
8825 return std::move(Err);
8826 } else {
8827 // Resolve forward references from blockaddresses.
8828 if (Error Err = R->materializeForwardReferencedFunctions())
8829 return std::move(Err);
8830 }
8831
8832 return std::move(M);
8833}
8834
8835Expected<std::unique_ptr<Module>>
8836BitcodeModule::getLazyModule(LLVMContext &Context, bool ShouldLazyLoadMetadata,
8837 bool IsImporting, ParserCallbacks Callbacks) {
8838 return getModuleImpl(Context, false, ShouldLazyLoadMetadata, IsImporting,
8839 Callbacks);
8840}
8841
8842// Parse the specified bitcode buffer and merge the index into CombinedIndex.
8843// We don't use ModuleIdentifier here because the client may need to control the
8844// module path used in the combined summary (e.g. when reading summaries for
8845// regular LTO modules).
8847 StringRef ModulePath,
8848 std::function<bool(StringRef)> IsPrevailing,
8849 std::function<void(ValueInfo)> OnValueInfo) {
8850 BitstreamCursor Stream(Buffer);
8851 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8852 return JumpFailed;
8853
8854 ModuleSummaryIndexBitcodeReader R(std::move(Stream), Strtab, CombinedIndex,
8855 ModulePath, IsPrevailing, OnValueInfo);
8856 return R.parseModule();
8857}
8858
8859// Parse the specified bitcode buffer, returning the function info index.
8861 BitstreamCursor Stream(Buffer);
8862 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8863 return std::move(JumpFailed);
8864
8865 auto Index = std::make_unique<ModuleSummaryIndex>(/*HaveGVs=*/false);
8866 ModuleSummaryIndexBitcodeReader R(std::move(Stream), Strtab, *Index,
8867 ModuleIdentifier, 0);
8868
8869 if (Error Err = R.parseModule())
8870 return std::move(Err);
8871
8872 return std::move(Index);
8873}
8874
8877 if (Error Err = Stream.EnterSubBlock(ID))
8878 return std::move(Err);
8879
8881 while (true) {
8882 BitstreamEntry Entry;
8883 if (Error E = Stream.advanceSkippingSubblocks().moveInto(Entry))
8884 return std::move(E);
8885
8886 switch (Entry.Kind) {
8887 case BitstreamEntry::SubBlock: // Handled for us already.
8889 return error("Malformed block");
8891 // If no flags record found, return both flags as false.
8892 return std::make_pair(false, false);
8893 }
8895 // The interesting case.
8896 break;
8897 }
8898
8899 // Look for the FS_FLAGS record.
8900 Record.clear();
8901 Expected<unsigned> MaybeBitCode = Stream.readRecord(Entry.ID, Record);
8902 if (!MaybeBitCode)
8903 return MaybeBitCode.takeError();
8904 switch (MaybeBitCode.get()) {
8905 default: // Default behavior: ignore.
8906 break;
8907 case bitc::FS_FLAGS: { // [flags]
8908 uint64_t Flags = Record[0];
8909 // Scan flags.
8910 assert(Flags <= 0x7ff && "Unexpected bits in flag");
8911
8912 bool EnableSplitLTOUnit = Flags & 0x8;
8913 bool UnifiedLTO = Flags & 0x200;
8914 return std::make_pair(EnableSplitLTOUnit, UnifiedLTO);
8915 }
8916 }
8917 }
8918 llvm_unreachable("Exit infinite loop");
8919}
8920
8921// Check if the given bitcode buffer contains a global value summary block.
8923 BitstreamCursor Stream(Buffer);
8924 if (Error JumpFailed = Stream.JumpToBit(ModuleBit))
8925 return std::move(JumpFailed);
8926
8927 if (Error Err = Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
8928 return std::move(Err);
8929
8930 while (true) {
8932 if (Error E = Stream.advance().moveInto(Entry))
8933 return std::move(E);
8934
8935 switch (Entry.Kind) {
8937 return error("Malformed block");
8939 return BitcodeLTOInfo{/*IsThinLTO=*/false, /*HasSummary=*/false,
8940 /*EnableSplitLTOUnit=*/false, /*UnifiedLTO=*/false};
8941
8943 if (Entry.ID == bitc::GLOBALVAL_SUMMARY_BLOCK_ID ||
8946 getEnableSplitLTOUnitAndUnifiedFlag(Stream, Entry.ID);
8947 if (!Flags)
8948 return Flags.takeError();
8949 BitcodeLTOInfo LTOInfo;
8950 std::tie(LTOInfo.EnableSplitLTOUnit, LTOInfo.UnifiedLTO) = Flags.get();
8951 LTOInfo.IsThinLTO = (Entry.ID == bitc::GLOBALVAL_SUMMARY_BLOCK_ID);
8952 LTOInfo.HasSummary = true;
8953 return LTOInfo;
8954 }
8955
8956 // Ignore other sub-blocks.
8957 if (Error Err = Stream.SkipBlock())
8958 return std::move(Err);
8959 continue;
8960
8962 if (Expected<unsigned> StreamFailed = Stream.skipRecord(Entry.ID))
8963 continue;
8964 else
8965 return StreamFailed.takeError();
8966 }
8967 }
8968}
8969
8972 if (!MsOrErr)
8973 return MsOrErr.takeError();
8974
8975 if (MsOrErr->size() != 1)
8976 return error("Expected a single module");
8977
8978 return (*MsOrErr)[0];
8979}
8980
8981Expected<std::unique_ptr<Module>>
8983 bool ShouldLazyLoadMetadata, bool IsImporting,
8984 ParserCallbacks Callbacks) {
8986 if (!BM)
8987 return BM.takeError();
8988
8989 return BM->getLazyModule(Context, ShouldLazyLoadMetadata, IsImporting,
8990 Callbacks);
8991}
8992
8994 std::unique_ptr<MemoryBuffer> &&Buffer, LLVMContext &Context,
8995 bool ShouldLazyLoadMetadata, bool IsImporting, ParserCallbacks Callbacks) {
8996 auto MOrErr = getLazyBitcodeModule(*Buffer, Context, ShouldLazyLoadMetadata,
8997 IsImporting, Callbacks);
8998 if (MOrErr)
8999 (*MOrErr)->setOwnedMemoryBuffer(std::move(Buffer));
9000 return MOrErr;
9001}
9002
9005 return getModuleImpl(Context, true, false, false, Callbacks);
9006 // TODO: Restore the use-lists to the in-memory state when the bitcode was
9007 // written. We must defer until the Module has been fully materialized.
9008}
9009
9012 ParserCallbacks Callbacks) {
9014 if (!BM)
9015 return BM.takeError();
9016
9017 return BM->parseModule(Context, Callbacks);
9018}
9019
9021 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
9022 if (!StreamOrErr)
9023 return StreamOrErr.takeError();
9024
9025 return readTriple(*StreamOrErr);
9026}
9027
9029 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
9030 if (!StreamOrErr)
9031 return StreamOrErr.takeError();
9032
9033 return hasObjCCategory(*StreamOrErr);
9034}
9035
9037 Expected<BitstreamCursor> StreamOrErr = initStream(Buffer);
9038 if (!StreamOrErr)
9039 return StreamOrErr.takeError();
9040
9041 return readIdentificationCode(*StreamOrErr);
9042}
9043
9045 ModuleSummaryIndex &CombinedIndex) {
9047 if (!BM)
9048 return BM.takeError();
9049
9050 return BM->readSummary(CombinedIndex, BM->getModuleIdentifier());
9051}
9052
9056 if (!BM)
9057 return BM.takeError();
9058
9059 return BM->getSummary();
9060}
9061
9064 if (!BM)
9065 return BM.takeError();
9066
9067 return BM->getLTOInfo();
9068}
9069
9072 bool IgnoreEmptyThinLTOIndexFile) {
9075 if (!FileOrErr)
9076 return errorCodeToError(FileOrErr.getError());
9077 if (IgnoreEmptyThinLTOIndexFile && !(*FileOrErr)->getBufferSize())
9078 return nullptr;
9079 return getModuleSummaryIndex(**FileOrErr);
9080}
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)
Provides a way to construct any of the CastInst subclasses using an opcode instead of the subclass's ...
static LLVM_ABI bool castIsValid(Instruction::CastOps op, Type *SrcTy, Type *DstTy)
This method can be used to determine if a cast from SrcTy to DstTy using Opcode op is valid or not.
static CatchPadInst * Create(Value *CatchSwitch, ArrayRef< Value * > Args, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static CatchReturnInst * Create(Value *CatchPad, BasicBlock *BB, InsertPosition InsertBefore=nullptr)
static CatchSwitchInst * Create(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumHandlers, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static CleanupPadInst * Create(Value *ParentPad, ArrayRef< Value * > Args={}, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static CleanupReturnInst * Create(Value *CleanupPad, BasicBlock *UnwindBB=nullptr, InsertPosition InsertBefore=nullptr)
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
Definition InstrTypes.h:740
static LLVM_ABI CmpInst * Create(OtherOps Op, Predicate Pred, Value *S1, Value *S2, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Construct a compare instruction, given the opcode, the predicate and the two operands.
bool isFPPredicate() const
Definition InstrTypes.h:845
bool isIntPredicate() const
Definition InstrTypes.h:846
@ Largest
The linker will choose the largest COMDAT.
Definition Comdat.h:39
@ SameSize
The data referenced by the COMDAT must be the same size.
Definition Comdat.h:41
@ Any
The linker may choose any COMDAT.
Definition Comdat.h:37
@ NoDeduplicate
No deduplication is performed.
Definition Comdat.h:40
@ ExactMatch
The data referenced by the COMDAT must be the same.
Definition Comdat.h:38
static CondBrInst * Create(Value *Cond, BasicBlock *IfTrue, BasicBlock *IfFalse, InsertPosition InsertBefore=nullptr)
static LLVM_ABI Constant * get(ArrayType *T, ArrayRef< Constant * > V)
static LLVM_ABI Constant * getString(LLVMContext &Context, StringRef Initializer, bool AddNull=true, bool ByteString=false)
This method constructs a CDS and initializes it with a text string.
static LLVM_ABI bool isElementTypeCompatible(Type *Ty)
Return true if a ConstantDataSequential can be formed with a vector or array of the specified element...
static Constant * getRaw(StringRef Data, uint64_t NumElements, Type *ElementTy)
getRaw() constructor - Return a constant with vector type with an element count and element type matc...
Definition Constants.h:981
static LLVM_ABI Constant * getExtractElement(Constant *Vec, Constant *Idx, Type *OnlyIfReducedTy=nullptr)
static LLVM_ABI Constant * getCast(unsigned ops, Constant *C, Type *Ty, bool OnlyIfReduced=false)
Convenience function for getting a Cast operation.
static LLVM_ABI Constant * getInsertElement(Constant *Vec, Constant *Elt, Constant *Idx, Type *OnlyIfReducedTy=nullptr)
static LLVM_ABI Constant * getShuffleVector(Constant *V1, Constant *V2, ArrayRef< int > Mask, Type *OnlyIfReducedTy=nullptr)
static bool isSupportedGetElementPtr(const Type *SrcElemTy)
Whether creating a constant expression for this getelementptr type is supported.
Definition Constants.h:1598
static LLVM_ABI Constant * get(unsigned Opcode, Constant *C1, Constant *C2, unsigned Flags=0, Type *OnlyIfReducedTy=nullptr)
get - Return a binary or shift operator constant expression, folding if possible.
static LLVM_ABI bool isSupportedBinOp(unsigned Opcode)
Whether creating a constant expression for this binary operator is supported.
static Constant * getGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList, GEPNoWrapFlags NW=GEPNoWrapFlags::none(), std::optional< ConstantRange > InRange=std::nullopt, Type *OnlyIfReducedTy=nullptr)
Getelementptr form.
Definition Constants.h:1470
static LLVM_ABI bool isSupportedCastOp(unsigned Opcode)
Whether creating a constant expression for this cast is supported.
static ConstantInt * getSigned(IntegerType *Ty, int64_t V, bool ImplicitTrunc=false)
Return a ConstantInt with the specified value for the specified type.
Definition Constants.h:135
uint64_t getZExtValue() const
Return the constant as a 64-bit unsigned integer value after it has been zero extended as appropriate...
Definition Constants.h:168
static LLVM_ABI ConstantPointerNull * get(PointerType *T)
Static factory methods - Return objects of the specified value.
static LLVM_ABI ConstantPtrAuth * get(Constant *Ptr, ConstantInt *Key, ConstantInt *Disc, Constant *AddrDisc, Constant *DeactivationSymbol)
Return a pointer signed with the specified parameters.
static LLVM_ABI bool isOrderedRanges(ArrayRef< ConstantRange > RangesRef)
LLVM_ABI bool isUpperSignWrapped() const
Return true if the (exclusive) upper bound wraps around the signed domain.
LLVM_ABI bool isFullSet() const
Return true if this set contains all of the elements possible for this data-type.
static LLVM_ABI Constant * get(StructType *T, ArrayRef< Constant * > V)
static LLVM_ABI Constant * get(ArrayRef< Constant * > V)
static LLVM_ABI Constant * getNullValue(Type *Ty)
Constructor to create a '0' constant of arbitrary type.
static LLVM_ABI DSOLocalEquivalent * get(GlobalValue *GV)
Return a DSOLocalEquivalent for the specified global value.
static LLVM_ABI Expected< DataLayout > parse(StringRef LayoutString)
Parse a data layout string and return the layout.
static DeadOnReturnInfo createFromIntValue(uint64_t Data)
Definition Attributes.h:79
ValueT lookup(const_arg_type_t< KeyT > Val) const
Return the entry for the specified key, or a default constructed value if no such entry exists.
Definition DenseMap.h:250
iterator find(const_arg_type_t< KeyT > Val)
Definition DenseMap.h:223
bool erase(const KeyT &Val)
Definition DenseMap.h:377
unsigned size() const
Definition DenseMap.h:172
bool empty() const
Definition DenseMap.h:171
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Definition DenseMap.h:219
iterator end()
Definition DenseMap.h:141
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition DenseMap.h:284
Base class for error info classes.
Definition Error.h:44
virtual std::string message() const
Return the error message as a string.
Definition Error.h:52
virtual std::error_code convertToErrorCode() const =0
Convert this error to a std::error_code.
Represents either an error or a value T.
Definition ErrorOr.h:56
std::error_code getError() const
Definition ErrorOr.h:152
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
static ErrorSuccess success()
Create a success value.
Definition Error.h:336
Tagged union holding either a T or a Error.
Definition Error.h:485
Error takeError()
Take ownership of the stored error.
Definition Error.h:612
reference get()
Returns a reference to the stored T value.
Definition Error.h:582
static ExtractElementInst * Create(Value *Vec, Value *Idx, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static ExtractValueInst * Create(Value *Agg, ArrayRef< unsigned > Idxs, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Convenience struct for specifying and reasoning about fast-math flags.
Definition FMF.h:23
void setFast(bool B=true)
Definition FMF.h:96
bool any() const
Definition FMF.h:56
void setAllowContract(bool B=true)
Definition FMF.h:90
void setAllowReciprocal(bool B=true)
Definition FMF.h:87
void setNoSignedZeros(bool B=true)
Definition FMF.h:84
void setNoNaNs(bool B=true)
Definition FMF.h:78
void setAllowReassoc(bool B=true)
Flag setters.
Definition FMF.h:75
void setApproxFunc(bool B=true)
Definition FMF.h:93
void setNoInfs(bool B=true)
Definition FMF.h:81
static LLVM_ABI FixedVectorType * get(Type *ElementType, unsigned NumElts)
Definition Type.cpp:867
void addCallsite(CallsiteInfo &&Callsite)
std::pair< ValueInfo, CalleeInfo > EdgeTy
<CalleeValueInfo, CalleeInfo> call edge pair.
void addAlloc(AllocInfo &&Alloc)
static Function * Create(FunctionType *Ty, LinkageTypes Linkage, unsigned AddrSpace, const Twine &N="", Module *M=nullptr)
Definition Function.h:168
BasicBlockListType::iterator iterator
Definition Function.h:70
bool empty() const
Definition Function.h:843
iterator begin()
Definition Function.h:837
iterator end()
Definition Function.h:839
Represents flags for the getelementptr instruction/expression.
static GEPNoWrapFlags inBounds()
static GEPNoWrapFlags noUnsignedWrap()
static GEPNoWrapFlags noUnsignedSignedWrap()
static GetElementPtrInst * Create(Type *PointeeType, Value *Ptr, ArrayRef< Value * > IdxList, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static LLVM_ABI GlobalAlias * create(Type *Ty, unsigned AddressSpace, LinkageTypes Linkage, const Twine &Name, Constant *Aliasee, Module *Parent)
If a parent module is specified, the alias is automatically inserted into the end of the specified mo...
Definition Globals.cpp:692
static LLVM_ABI GlobalIFunc * create(Type *Ty, unsigned AddressSpace, LinkageTypes Linkage, const Twine &Name, Constant *Resolver, Module *Parent)
If a parent module is specified, the ifunc is automatically inserted into the end of the specified mo...
Definition Globals.cpp:749
LLVM_ABI void setComdat(Comdat *C)
Definition Globals.cpp:287
LLVM_ABI void setSection(StringRef S)
Change the section for this global.
Definition Globals.cpp:348
void setOriginalName(GlobalValue::GUID Name)
Initialize the original name hash in this summary.
static LLVM_ABI GUID getGUIDAssumingExternalLinkage(StringRef GlobalName)
Return a 64-bit global unique ID constructed from the name of a global symbol.
Definition Globals.cpp:80
static bool isLocalLinkage(LinkageTypes Linkage)
void setUnnamedAddr(UnnamedAddr Val)
uint64_t GUID
Declare a type to represent a global unique identifier for a global value.
bool hasLocalLinkage() const
bool hasDefaultVisibility() const
static StringRef dropLLVMManglingEscape(StringRef Name)
If the given string begins with the GlobalValue name mangling escape character '\1',...
void setDLLStorageClass(DLLStorageClassTypes C)
void setThreadLocalMode(ThreadLocalMode Val)
bool hasExternalWeakLinkage() const
DLLStorageClassTypes
Storage classes of global values for PE targets.
Definition GlobalValue.h:74
@ DLLExportStorageClass
Function to be accessible from DLL.
Definition GlobalValue.h:77
@ DLLImportStorageClass
Function to be imported from DLL.
Definition GlobalValue.h:76
void setDSOLocal(bool Local)
PointerType * getType() const
Global values are always pointers.
VisibilityTypes
An enumeration for the kinds of visibility of global values.
Definition GlobalValue.h:67
@ DefaultVisibility
The GV is visible.
Definition GlobalValue.h:68
@ HiddenVisibility
The GV is hidden.
Definition GlobalValue.h:69
@ ProtectedVisibility
The GV is protected.
Definition GlobalValue.h:70
static LLVM_ABI std::string getGlobalIdentifier(StringRef Name, GlobalValue::LinkageTypes Linkage, StringRef FileName)
Return the modified name for a global value suitable to be used as the key for a global lookup (e....
Definition Globals.cpp:234
void setVisibility(VisibilityTypes V)
LLVM_ABI void setSanitizerMetadata(SanitizerMetadata Meta)
Definition Globals.cpp:324
LinkageTypes
An enumeration for the kinds of linkage for global values.
Definition GlobalValue.h:52
@ PrivateLinkage
Like Internal, but omit from symbol table.
Definition GlobalValue.h:61
@ CommonLinkage
Tentative definitions.
Definition GlobalValue.h:63
@ InternalLinkage
Rename collisions when linking (static functions).
Definition GlobalValue.h:60
@ LinkOnceAnyLinkage
Keep one copy of function when linking (inline)
Definition GlobalValue.h:55
@ WeakODRLinkage
Same, but only replaced by something equivalent.
Definition GlobalValue.h:58
@ ExternalLinkage
Externally visible function.
Definition GlobalValue.h:53
@ WeakAnyLinkage
Keep one copy of named function when linking (weak)
Definition GlobalValue.h:57
@ AppendingLinkage
Special purpose, only applies to global arrays.
Definition GlobalValue.h:59
@ AvailableExternallyLinkage
Available for inspection, not emission.
Definition GlobalValue.h:54
@ ExternalWeakLinkage
ExternalWeak linkage description.
Definition GlobalValue.h:62
@ LinkOnceODRLinkage
Same, but only replaced by something equivalent.
Definition GlobalValue.h:56
LLVM_ABI void setPartition(StringRef Part)
Definition Globals.cpp:301
void setAttributes(AttributeSet A)
Set attribute list for this global.
LLVM_ABI void setCodeModel(CodeModel::Model CM)
Change the code model for this global.
Definition Globals.cpp:660
void setAlignment(Align Align)
Sets the alignment attribute of the GlobalVariable.
LLVM_ABI void addDestination(BasicBlock *Dest)
Add a destination.
static IndirectBrInst * Create(Value *Address, unsigned NumDests, InsertPosition InsertBefore=nullptr)
unsigned getNumDestinations() const
return the number of possible destinations in this indirectbr instruction.
static LLVM_ABI InlineAsm * get(FunctionType *Ty, StringRef AsmString, StringRef Constraints, bool hasSideEffects, bool isAlignStack=false, AsmDialect asmDialect=AD_ATT, bool canThrow=false)
InlineAsm::get - Return the specified uniqued inline asm string.
Definition InlineAsm.cpp:43
std::vector< ConstraintInfo > ConstraintInfoVector
Definition InlineAsm.h:123
static InsertElementInst * Create(Value *Vec, Value *NewElt, Value *Idx, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static InsertValueInst * Create(Value *Agg, Value *Val, ArrayRef< unsigned > Idxs, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
bool isCast() const
bool isBinaryOp() const
LLVM_ABI void replaceSuccessorWith(BasicBlock *OldBB, BasicBlock *NewBB)
Replace specified successor OldBB to point at the provided block.
const char * getOpcodeName() const
bool isUnaryOp() const
LLVM_ABI InstListType::iterator insertInto(BasicBlock *ParentBB, InstListType::iterator It)
Inserts an unlinked instruction into ParentBB at position It and returns the iterator of the inserted...
static LLVM_ABI IntegerType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing an IntegerType.
Definition Type.cpp:348
@ MIN_INT_BITS
Minimum number of bits that can be specified.
@ MAX_INT_BITS
Maximum number of bits that can be specified.
static InvokeInst * Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value * > Args, const Twine &NameStr, InsertPosition InsertBefore=nullptr)
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
static LLVM_ABI LandingPadInst * Create(Type *RetTy, unsigned NumReservedClauses, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Constructors - NumReservedClauses is a hint for the number of incoming clauses that this landingpad w...
LLVM_ABI void addClause(Constant *ClauseVal)
Add a catch or filter clause to the landing pad.
void setCleanup(bool V)
Indicate that this landingpad instruction is a cleanup.
LLVM_ABI StringRef getString() const
Definition Metadata.cpp:633
ValueT lookup(const KeyT &Key) const
Definition MapVector.h:110
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition MapVector.h:126
size_t getBufferSize() const
StringRef getBufferIdentifier() const
const char * getBufferStart() const
static ErrorOr< std::unique_ptr< MemoryBuffer > > getFileOrSTDIN(const Twine &Filename, bool IsText=false, bool RequiresNullTerminator=true, std::optional< Align > Alignment=std::nullopt)
Open the specified file as a MemoryBuffer, or open stdin if the Filename is "-".
static MemoryEffectsBase readOnly()
Definition ModRef.h:133
MemoryEffectsBase getWithModRef(Location Loc, ModRefInfo MR) const
Get new MemoryEffectsBase with modified ModRefInfo for Loc.
Definition ModRef.h:224
static MemoryEffectsBase argMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Definition ModRef.h:143
static MemoryEffectsBase inaccessibleMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Definition ModRef.h:149
ModRefInfo getModRef(Location Loc) const
Get ModRefInfo for the given Location.
Definition ModRef.h:219
static MemoryEffectsBase errnoMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Definition ModRef.h:154
static MemoryEffectsBase createFromIntValue(uint32_t Data)
Definition ModRef.h:208
static MemoryEffectsBase writeOnly()
Definition ModRef.h:138
static MemoryEffectsBase otherMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Definition ModRef.h:159
static MemoryEffectsBase inaccessibleOrArgMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Definition ModRef.h:166
static MemoryEffectsBase none()
Definition ModRef.h:128
static MemoryEffectsBase unknown()
Definition ModRef.h:123
static LLVM_ABI MetadataAsValue * get(LLVMContext &Context, Metadata *MD)
Definition Metadata.cpp:111
Class to hold module path string table and global value map, and encapsulate methods for operating on...
TypeIdSummary & getOrInsertTypeIdSummary(StringRef TypeId)
Return an existing or new TypeIdSummary entry for TypeId.
ModulePathStringTableTy::value_type ModuleInfo
ValueInfo getOrInsertValueInfo(GlobalValue::GUID GUID)
Return a ValueInfo for GUID.
static constexpr uint64_t BitcodeSummaryVersion
StringRef saveString(StringRef String)
LLVM_ABI void setFlags(uint64_t Flags)
CfiFunctionIndex & cfiFunctionDecls()
ModuleInfo * addModule(StringRef ModPath, ModuleHash Hash=ModuleHash{{0}})
Add a new module with the given Hash, mapped to the given ModID, and return a reference to the module...
void addGlobalValueSummary(const GlobalValue &GV, std::unique_ptr< GlobalValueSummary > Summary)
Add a global value summary for a value.
CfiFunctionIndex & cfiFunctionDefs()
GlobalValueSummary * findSummaryInModule(ValueInfo VI, StringRef ModuleId) const
Find the summary for ValueInfo VI in module ModuleId, or nullptr if not found.
unsigned addOrGetStackIdIndex(uint64_t StackId)
ModuleInfo * getModule(StringRef ModPath)
Return module entry for module with the given ModPath.
void addOriginalName(GlobalValue::GUID ValueGUID, GlobalValue::GUID OrigGUID)
Add an original name for the value of the given GUID.
TypeIdCompatibleVtableInfo & getOrInsertTypeIdCompatibleVtableSummary(StringRef TypeId)
Return an existing or new TypeIdCompatibleVtableMap entry for TypeId.
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
const Triple & getTargetTriple() const
Get the target triple which is a string describing the target host.
Definition Module.h:323
NamedMDNode * getNamedMetadata(StringRef Name) const
Return the first NamedMDNode in the module with the specified name.
Definition Module.cpp:301
NamedMDNode * getOrInsertNamedMetadata(StringRef Name)
Return the named MDNode in the module with the specified name.
Definition Module.cpp:308
Comdat * getOrInsertComdat(StringRef Name)
Return the Comdat in the module with the specified name.
Definition Module.cpp:631
Metadata * getModuleFlag(StringRef Key) const
Return the corresponding value if Key appears in module flags, otherwise return null.
Definition Module.cpp:358
LLVM_ABI void addOperand(MDNode *M)
static LLVM_ABI NoCFIValue * get(GlobalValue *GV)
Return a NoCFIValue for the specified function.
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
static ResumeInst * Create(Value *Exn, InsertPosition InsertBefore=nullptr)
static ReturnInst * Create(LLVMContext &C, Value *retVal=nullptr, InsertPosition InsertBefore=nullptr)
static SelectInst * Create(Value *C, Value *S1, Value *S2, const Twine &NameStr="", InsertPosition InsertBefore=nullptr, const Instruction *MDFrom=nullptr)
ArrayRef< int > getShuffleMask() const
void append(StringRef RHS)
Append from a StringRef.
Definition SmallString.h:68
StringRef str() const
Explicit conversion to StringRef.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void reserve(size_type N)
iterator erase(const_iterator CI)
void append(ItTy in_start, ItTy in_end)
Add the specified range to the end of the SmallVector.
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef first() const
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
std::pair< StringRef, StringRef > split(char Separator) const
Split into two substrings around the first occurrence of a separator character.
Definition StringRef.h:736
constexpr bool empty() const
Check if the string is empty.
Definition StringRef.h:141
constexpr size_t size() const
Get the string size.
Definition StringRef.h:144
constexpr const char * data() const
Get a pointer to the start of the string (which may not be null terminated).
Definition StringRef.h:138
static LLVM_ABI StructType * get(LLVMContext &Context, ArrayRef< Type * > Elements, bool isPacked=false)
This static method is the primary way to create a literal StructType.
Definition Type.cpp:477
static LLVM_ABI StructType * create(LLVMContext &Context, StringRef Name)
This creates an identified struct.
Definition Type.cpp:683
LLVM_ABI void setName(StringRef Name)
Change the name of this type to the specified name, or to a name with a suffix if there is a collisio...
Definition Type.cpp:632
LLVM_ABI Error setBodyOrError(ArrayRef< Type * > Elements, bool isPacked=false)
Specify a body for an opaque identified type or return an error if it would make the type recursive.
Definition Type.cpp:602
static SwitchInst * Create(Value *Value, BasicBlock *Default, unsigned NumCases, InsertPosition InsertBefore=nullptr)
LLVM_ABI bool visitTBAAMetadata(const Instruction *I, const MDNode *MD)
Visit an instruction, or a TBAA node itself as part of a metadata, and return true if it is valid,...
@ HasZeroInit
zeroinitializer is valid for this target extension type.
static LLVM_ABI Expected< TargetExtType * > getOrError(LLVMContext &Context, StringRef Name, ArrayRef< Type * > Types={}, ArrayRef< unsigned > Ints={})
Return a target extension type having the specified name and optional type and integer parameters,...
Definition Type.cpp:966
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:48
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition Twine.h:82
LLVM_ABI std::string str() const
Return the twine contents as a std::string.
Definition Twine.cpp:17
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
LLVM_ABI Type * getStructElementType(unsigned N) const
bool isVectorTy() const
True if this is an instance of VectorType.
Definition Type.h:288
bool isArrayTy() const
True if this is an instance of ArrayType.
Definition Type.h:279
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
Definition Type.cpp:309
bool isLabelTy() const
Return true if this is 'label'.
Definition Type.h:230
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
Definition Type.h:263
bool isPointerTy() const
True if this is an instance of PointerType.
Definition Type.h:282
Type * getArrayElementType() const
Definition Type.h:425
LLVM_ABI unsigned getStructNumElements() const
LLVM_ABI uint64_t getArrayNumElements() const
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return 'this'.
Definition Type.h:368
bool isStructTy() const
True if this is an instance of StructType.
Definition Type.h:276
bool isByteOrByteVectorTy() const
Return true if this is a byte type or a vector of byte types.
Definition Type.h:248
bool isSized(SmallPtrSetImpl< Type * > *Visited=nullptr) const
Return true if it makes sense to take the size of this type.
Definition Type.h:326
LLVMContext & getContext() const
Return the LLVMContext in which this type was uniqued.
Definition Type.h:130
LLVM_ABI unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
Definition Type.cpp:232
bool isFunctionTy() const
True if this is an instance of FunctionType.
Definition Type.h:273
bool isFPOrFPVectorTy() const
Return true if this is a FP type or a vector of FP.
Definition Type.h:227
Type * getContainedType(unsigned i) const
This method is used to implement the type iterator (defined at the end of the file).
Definition Type.h:397
bool isVoidTy() const
Return true if this is 'void'.
Definition Type.h:141
bool isMetadataTy() const
Return true if this is 'metadata'.
Definition Type.h:233
static LLVM_ABI UnaryOperator * Create(UnaryOps Op, Value *S, const Twine &Name=Twine(), InsertPosition InsertBefore=nullptr)
Construct a unary instruction, given the opcode and an operand.
static UncondBrInst * Create(BasicBlock *Target, InsertPosition InsertBefore=nullptr)
static LLVM_ABI UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
static LLVM_ABI ValueAsMetadata * get(Value *V)
Definition Metadata.cpp:510
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:255
LLVM_ABI void setName(const Twine &Name)
Change the name of the value.
Definition Value.cpp:394
LLVM_ABI void deleteValue()
Delete a pointer to a generic Value.
Definition Value.cpp:108
std::pair< iterator, bool > insert(const ValueT &V)
Definition DenseSet.h:209
bool contains(const_arg_type_t< ValueT > V) const
Check if the set contains the given element.
Definition DenseSet.h:182
const ParentTy * getParent() const
Definition ilist_node.h:34
self_iterator getIterator()
Definition ilist_node.h:123
CallInst * Call
This file contains the declaration of the Comdat class, which represents a single COMDAT in LLVM.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
constexpr char TypeName[]
Key for Kernel::Arg::Metadata::mTypeName.
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
constexpr char Attrs[]
Key for Kernel::Metadata::mAttrs.
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
@ Entry
Definition COFF.h:862
constexpr uint8_t RecordLength
Length of the parts of a physical GOFF record.
Definition GOFF.h:28
@ BasicBlock
Various leaf nodes.
Definition ISDOpcodes.h:81
LLVM_ABI AttributeList getAttributes(LLVMContext &C, ID id, FunctionType *FT)
Return the attributes for an intrinsic.
@ SingleThread
Synchronized with respect to signal handlers executing in the same thread.
Definition LLVMContext.h:55
@ System
Synchronized with respect to all concurrently executing threads.
Definition LLVMContext.h:58
@ TYPE_CODE_TARGET_TYPE
@ TYPE_CODE_STRUCT_ANON
@ TYPE_CODE_STRUCT_NAME
@ TYPE_CODE_OPAQUE_POINTER
@ TYPE_CODE_FUNCTION_OLD
@ TYPE_CODE_STRUCT_NAMED
@ FS_CONTEXT_RADIX_TREE_ARRAY
@ FS_COMBINED_GLOBALVAR_INIT_REFS
@ FS_TYPE_CHECKED_LOAD_VCALLS
@ FS_COMBINED_ORIGINAL_NAME
@ FS_PERMODULE_VTABLE_GLOBALVAR_INIT_REFS
@ FS_TYPE_TEST_ASSUME_CONST_VCALL
@ FS_PERMODULE_GLOBALVAR_INIT_REFS
@ FS_TYPE_TEST_ASSUME_VCALLS
@ FS_COMBINED_ALLOC_INFO_NO_CONTEXT
@ FS_CFI_FUNCTION_DECLS
@ FS_COMBINED_CALLSITE_INFO
@ FS_COMBINED_ALLOC_INFO
@ FS_PERMODULE_CALLSITE_INFO
@ FS_PERMODULE_ALLOC_INFO
@ FS_TYPE_CHECKED_LOAD_CONST_VCALL
@ BITCODE_CURRENT_EPOCH
@ IDENTIFICATION_CODE_EPOCH
@ IDENTIFICATION_CODE_STRING
@ CST_CODE_CE_INBOUNDS_GEP
@ CST_CODE_INLINEASM_OLD3
@ CST_CODE_BLOCKADDRESS
@ CST_CODE_NO_CFI_VALUE
@ CST_CODE_CE_SHUFVEC_EX
@ CST_CODE_CE_EXTRACTELT
@ CST_CODE_INLINEASM_OLD
@ CST_CODE_CE_GEP_WITH_INRANGE_INDEX_OLD
@ CST_CODE_CE_SHUFFLEVEC
@ CST_CODE_WIDE_INTEGER
@ CST_CODE_DSO_LOCAL_EQUIVALENT
@ CST_CODE_CE_INSERTELT
@ CST_CODE_INLINEASM_OLD2
@ CST_CODE_CE_GEP_WITH_INRANGE
@ VST_CODE_COMBINED_ENTRY
@ COMDAT_SELECTION_KIND_LARGEST
@ COMDAT_SELECTION_KIND_ANY
@ COMDAT_SELECTION_KIND_SAME_SIZE
@ COMDAT_SELECTION_KIND_EXACT_MATCH
@ COMDAT_SELECTION_KIND_NO_DUPLICATES
@ ATTR_KIND_STACK_PROTECT
@ ATTR_KIND_STACK_PROTECT_STRONG
@ ATTR_KIND_SANITIZE_MEMORY
@ ATTR_KIND_OPTIMIZE_FOR_SIZE
@ ATTR_KIND_SWIFT_ERROR
@ ATTR_KIND_INACCESSIBLEMEM_ONLY
@ ATTR_KIND_NO_CALLBACK
@ ATTR_KIND_FNRETTHUNK_EXTERN
@ ATTR_KIND_NO_DIVERGENCE_SOURCE
@ ATTR_KIND_SANITIZE_ADDRESS
@ ATTR_KIND_NO_IMPLICIT_FLOAT
@ ATTR_KIND_DEAD_ON_UNWIND
@ ATTR_KIND_STACK_ALIGNMENT
@ ATTR_KIND_INACCESSIBLEMEM_OR_ARGMEMONLY
@ ATTR_KIND_STACK_PROTECT_REQ
@ ATTR_KIND_INLINE_HINT
@ ATTR_KIND_NULL_POINTER_IS_VALID
@ ATTR_KIND_SANITIZE_HWADDRESS
@ ATTR_KIND_MUSTPROGRESS
@ ATTR_KIND_RETURNS_TWICE
@ ATTR_KIND_SHADOWCALLSTACK
@ ATTR_KIND_OPT_FOR_FUZZING
@ ATTR_KIND_DENORMAL_FPENV
@ ATTR_KIND_SANITIZE_NUMERICAL_STABILITY
@ ATTR_KIND_INITIALIZES
@ ATTR_KIND_ALLOCATED_POINTER
@ ATTR_KIND_DISABLE_SANITIZER_INSTRUMENTATION
@ ATTR_KIND_SKIP_PROFILE
@ ATTR_KIND_ELEMENTTYPE
@ ATTR_KIND_CORO_ELIDE_SAFE
@ ATTR_KIND_NO_DUPLICATE
@ ATTR_KIND_ALLOC_ALIGN
@ ATTR_KIND_NON_LAZY_BIND
@ ATTR_KIND_DEREFERENCEABLE
@ ATTR_KIND_OPTIMIZE_NONE
@ ATTR_KIND_NO_RED_ZONE
@ ATTR_KIND_DEREFERENCEABLE_OR_NULL
@ ATTR_KIND_SANITIZE_REALTIME
@ ATTR_KIND_SPECULATIVE_LOAD_HARDENING
@ ATTR_KIND_ALWAYS_INLINE
@ ATTR_KIND_SANITIZE_TYPE
@ ATTR_KIND_PRESPLIT_COROUTINE
@ ATTR_KIND_VSCALE_RANGE
@ ATTR_KIND_SANITIZE_ALLOC_TOKEN
@ ATTR_KIND_NO_SANITIZE_COVERAGE
@ ATTR_KIND_NO_CREATE_UNDEF_OR_POISON
@ ATTR_KIND_SPECULATABLE
@ ATTR_KIND_DEAD_ON_RETURN
@ ATTR_KIND_SANITIZE_REALTIME_BLOCKING
@ ATTR_KIND_NO_SANITIZE_BOUNDS
@ ATTR_KIND_SANITIZE_MEMTAG
@ ATTR_KIND_CORO_ONLY_DESTROY_WHEN_COMPLETE
@ ATTR_KIND_SANITIZE_THREAD
@ ATTR_KIND_OPTIMIZE_FOR_DEBUGGING
@ ATTR_KIND_PREALLOCATED
@ ATTR_KIND_SWIFT_ASYNC
@ SYNC_SCOPE_NAMES_BLOCK_ID
@ PARAMATTR_GROUP_BLOCK_ID
@ METADATA_KIND_BLOCK_ID
@ IDENTIFICATION_BLOCK_ID
@ GLOBALVAL_SUMMARY_BLOCK_ID
@ METADATA_ATTACHMENT_ID
@ FULL_LTO_GLOBALVAL_SUMMARY_BLOCK_ID
@ MODULE_STRTAB_BLOCK_ID
@ VALUE_SYMTAB_BLOCK_ID
@ OPERAND_BUNDLE_TAGS_BLOCK_ID
@ BLOCKINFO_BLOCK_ID
BLOCKINFO_BLOCK is used to define metadata about blocks, for example, standard abbrevs that should be...
@ MODULE_CODE_VERSION
@ MODULE_CODE_SOURCE_FILENAME
@ MODULE_CODE_SECTIONNAME
@ MODULE_CODE_DATALAYOUT
@ MODULE_CODE_GLOBALVAR
@ MODULE_CODE_ALIAS_OLD
@ MODULE_CODE_VSTOFFSET
@ MODULE_CODE_ASM_PROPERTY
@ FUNC_CODE_INST_ATOMICRMW_OLD
@ FUNC_CODE_INST_CATCHRET
@ FUNC_CODE_INST_LANDINGPAD
@ FUNC_CODE_INST_EXTRACTVAL
@ FUNC_CODE_INST_CATCHPAD
@ FUNC_CODE_INST_RESUME
@ FUNC_CODE_INST_CALLBR
@ FUNC_CODE_INST_CATCHSWITCH
@ FUNC_CODE_INST_INBOUNDS_GEP_OLD
@ FUNC_CODE_INST_VSELECT
@ FUNC_CODE_INST_GEP_OLD
@ FUNC_CODE_INST_STOREATOMIC_OLD
@ FUNC_CODE_INST_CLEANUPRET
@ FUNC_CODE_INST_LANDINGPAD_OLD
@ FUNC_CODE_DEBUG_RECORD_VALUE
@ FUNC_CODE_INST_LOADATOMIC
@ FUNC_CODE_DEBUG_RECORD_ASSIGN
@ FUNC_CODE_INST_STOREATOMIC
@ FUNC_CODE_INST_ATOMICRMW
@ FUNC_CODE_DEBUG_RECORD_DECLARE_VALUE
@ FUNC_CODE_DEBUG_LOC_AGAIN
@ FUNC_CODE_INST_EXTRACTELT
@ FUNC_CODE_INST_INDIRECTBR
@ FUNC_CODE_INST_INVOKE
@ FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE
@ FUNC_CODE_INST_INSERTVAL
@ FUNC_CODE_DECLAREBLOCKS
@ FUNC_CODE_DEBUG_RECORD_LABEL
@ FUNC_CODE_INST_SWITCH
@ FUNC_CODE_INST_ALLOCA
@ FUNC_CODE_INST_INSERTELT
@ FUNC_CODE_INST_SELECT
@ FUNC_CODE_BLOCKADDR_USERS
@ FUNC_CODE_INST_CLEANUPPAD
@ FUNC_CODE_INST_SHUFFLEVEC
@ FUNC_CODE_INST_STORE_OLD
@ FUNC_CODE_INST_FREEZE
@ FUNC_CODE_INST_CMPXCHG
@ FUNC_CODE_INST_UNREACHABLE
@ FUNC_CODE_INST_CMPXCHG_OLD
@ FUNC_CODE_DEBUG_RECORD_DECLARE
@ FUNC_CODE_OPERAND_BUNDLE
@ PARAMATTR_CODE_ENTRY_OLD
@ PARAMATTR_GRP_CODE_ENTRY
initializer< Ty > init(const Ty &Val)
constexpr double e
NodeAddr< FuncNode * > Func
Definition RDFGraph.h:393
bool empty() const
Definition BasicBlock.h:101
friend class Instruction
Iterator for Instructions in a `BasicBlock.
Definition BasicBlock.h:73
constexpr bool IsBigEndianHost
This is an optimization pass for GlobalISel generic memory operations.
auto drop_begin(T &&RangeOrContainer, size_t N=1)
Return a range covering RangeOrContainer with the first N elements excluded.
Definition STLExtras.h:315
@ Low
Lower the current thread's priority such that it does not affect foreground tasks significantly.
Definition Threading.h:280
@ Offset
Definition DWP.cpp:578
detail::zippy< detail::zip_shortest, T, U, Args... > zip(T &&t, U &&u, Args &&...args)
zip iterator for two or more iteratable types.
Definition STLExtras.h:830
LLVM_ABI void UpgradeIntrinsicCall(CallBase *CB, Function *NewFn)
This is the complement to the above, replacing a specific call to an intrinsic function with a call t...
StringMapEntry< Value * > ValueName
Definition Value.h:56
std::vector< VirtFuncOffset > VTableFuncList
List of functions referenced by a particular vtable definition.
LLVM_ABI const std::error_category & BitcodeErrorCategory()
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
Definition STLExtras.h:1669
LLVM_ABI Expected< std::unique_ptr< Module > > parseBitcodeFile(MemoryBufferRef Buffer, LLVMContext &Context, ParserCallbacks Callbacks={})
Read the specified bitcode file, returning the module.
LLVM_ABI unsigned getBranchWeightOffset(const MDNode *ProfileData)
Return the offset to the first branch weight data.
LLVM_ABI void UpgradeInlineAsmString(std::string *AsmStr)
Upgrade comment in call to inline asm that represents an objc retain release marker.
auto enumerate(FirstRange &&First, RestRanges &&...Rest)
Given two or more input ranges, returns a new range whose values are tuples (A, B,...
Definition STLExtras.h:2554
std::error_code make_error_code(BitcodeError E)
LLVM_ABI bool stripDebugInfo(Function &F)
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
AllocFnKind
Definition Attributes.h:53
LLVM_ABI Expected< bool > isBitcodeContainingObjCCategory(MemoryBufferRef Buffer)
Return true if Buffer contains a bitcode file with ObjC code (category or class) in it.
void handleAllErrors(Error E, HandlerTs &&... Handlers)
Behaves the same as handleErrors, except that by contract all errors must be handled by the given han...
Definition Error.h:1013
LLVM_ABI bool UpgradeIntrinsicFunction(Function *F, Function *&NewFn, bool CanUpgradeDebugIntrinsicsToRecords=true)
This is a more granular function that simply checks an intrinsic function for upgrading,...
LLVM_ABI void UpgradeAttributes(AttrBuilder &B)
Upgrade attributes that changed format or kind.
LLVM_ABI Expected< std::string > getBitcodeTargetTriple(MemoryBufferRef Buffer)
Read the header of the specified bitcode buffer and extract just the triple information.
LLVM_ABI std::unique_ptr< Module > parseModule(const uint8_t *Data, size_t Size, LLVMContext &Context)
Fuzzer friendly interface for the llvm bitcode parser.
void append_range(Container &C, Range &&R)
Wrapper function to append range R to container C.
Definition STLExtras.h:2208
LLVM_ABI Expected< BitcodeFileContents > getBitcodeFileContents(MemoryBufferRef Buffer)
Returns the contents of a bitcode file.
LLVM_ABI void UpgradeNVVMAnnotations(Module &M)
Convert legacy nvvm.annotations metadata to appropriate function attributes.
iterator_range< early_inc_iterator_impl< detail::IterOfRange< RangeT > > > make_early_inc_range(RangeT &&Range)
Make a range that does early increment to allow mutation of the underlying range without disrupting i...
Definition STLExtras.h:633
auto cast_or_null(const Y &Val)
Definition Casting.h:714
LLVM_ABI bool UpgradeModuleFlags(Module &M)
This checks for module flags which should be upgraded.
MemoryEffectsBase< IRMemLocation > MemoryEffects
Summary of how a function affects memory in the program.
Definition ModRef.h:356
LLVM_ABI bool UpgradeCFIFunctionsMetadata(Module &M)
Upgrade the cfi.functions metadata node by calculating and inserting the GUID for each function entry...
LLVM_ABI void copyModuleAttrToFunctions(Module &M)
Copies module attributes to the functions in the module.
auto uninitialized_copy(R &&Src, IterTy Dst)
Definition STLExtras.h:2111
LLVM_ABI Value * getSplatValue(const Value *V)
Get splat value if the input is a splat vector or return nullptr.
bool isa_and_nonnull(const Y &Val)
Definition Casting.h:676
Error createStringError(std::error_code EC, char const *Fmt, const Ts &... Vals)
Create formatted StringError object.
Definition Error.h:1321
LLVM_ABI void UpgradeOperandBundles(std::vector< OperandBundleDef > &OperandBundles)
Upgrade operand bundles (without knowing about their user instruction).
LLVM_ABI Constant * UpgradeBitCastExpr(unsigned Opc, Constant *C, Type *DestTy)
This is an auto-upgrade for bitcast constant expression between pointers with different address space...
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Value
Definition InstrProf.h:143
LLVM_ABI Expected< std::unique_ptr< ModuleSummaryIndex > > getModuleSummaryIndex(MemoryBufferRef Buffer)
Parse the specified bitcode buffer, returning the module summary index.
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
OutputIt transform(R &&Range, OutputIt d_first, UnaryFunction F)
Wrapper function around std::transform to apply a function to a range and store the result elsewhere.
Definition STLExtras.h:2026
LLVM_ABI Expected< std::string > getBitcodeProducerString(MemoryBufferRef Buffer)
Read the header of the specified bitcode buffer and extract just the producer string information.
auto reverse(ContainerTy &&C)
Definition STLExtras.h:407
LLVM_ABI Expected< std::unique_ptr< Module > > getLazyBitcodeModule(MemoryBufferRef Buffer, LLVMContext &Context, bool ShouldLazyLoadMetadata=false, bool IsImporting=false, ParserCallbacks Callbacks={})
Read the header of the specified bitcode buffer and prepare for lazy deserialization of function bodi...
UWTableKind
Definition CodeGen.h:221
constexpr bool isPowerOf2_32(uint32_t Value)
Return true if the argument is a power of two > 0.
Definition MathExtras.h:280
FPClassTest
Floating-point class tests, supported by 'is_fpclass' intrinsic.
detail::ValueMatchesPoly< M > HasValue(M Matcher)
Definition Error.h:221
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition Debug.cpp:209
LLVM_ABI std::string UpgradeDataLayoutString(StringRef DL, StringRef Triple)
Upgrade the datalayout string by adding a section for address space pointers.
bool none_of(R &&Range, UnaryPredicate P)
Provide wrappers to std::none_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1753
LLVM_ABI Expected< std::vector< BitcodeModule > > getBitcodeModuleList(MemoryBufferRef Buffer)
Returns a list of modules in the specified bitcode buffer.
LLVM_ABI Expected< BitcodeLTOInfo > getBitcodeLTOInfo(MemoryBufferRef Buffer)
Returns LTO information for the specified bitcode file.
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ABI GlobalVariable * UpgradeGlobalVariable(GlobalVariable *GV)
This checks for global variables which should be upgraded.
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.
Definition Error.h:340
LLVM_ABI bool StripDebugInfo(Module &M)
Strip debug info in the module if it exists.
AtomicOrdering
Atomic ordering for LLVM's memory model.
ModRefInfo
Flags indicating whether a memory access modifies or references memory.
Definition ModRef.h:28
@ ArgMem
Access to memory via argument pointers.
Definition ModRef.h:62
@ InaccessibleMem
Memory that is inaccessible via LLVM IR.
Definition ModRef.h:64
LLVM_ABI Instruction * UpgradeBitCastInst(unsigned Opc, Value *V, Type *DestTy, Instruction *&Temp)
This is an auto-upgrade for bitcast between pointers with different address spaces: the instruction i...
MaybeAlign decodeMaybeAlign(unsigned Value)
Dual operation of the encode function above.
Definition Alignment.h:209
DWARFExpression::Operation Op
ArrayRef(const T &OneElt) -> ArrayRef< T >
constexpr unsigned BitWidth
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1917
bool SkipBitcodeWrapperHeader(const unsigned char *&BufPtr, const unsigned char *&BufEnd, bool VerifyBufferSize)
SkipBitcodeWrapperHeader - Some systems wrap bc files with a special header for padding or other reas...
bool isBitcodeWrapper(const unsigned char *BufPtr, const unsigned char *BufEnd)
isBitcodeWrapper - Return true if the given bytes are the magic bytes for an LLVM IR bitcode wrapper.
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
gep_type_iterator gep_type_begin(const User *GEP)
LLVM_ABI APInt readWideAPInt(ArrayRef< uint64_t > Vals, unsigned TypeBits)
LLVM_ABI Error errorCodeToError(std::error_code EC)
Helper for converting an std::error_code to a Error.
Definition Error.cpp:107
LLVM_ABI bool UpgradeDebugInfo(Module &M)
Check the debug info version number, if it is out-dated, drop the debug info.
LLVM_ABI void UpgradeFunctionAttributes(Function &F)
Correct any IR that is relying on old function attribute behavior.
std::vector< TypeIdOffsetVtableInfo > TypeIdCompatibleVtableInfo
List of vtable definitions decorated by a particular type identifier, and their corresponding offsets...
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
Definition Allocator.h:390
LLVM_ABI Error readModuleSummaryIndex(MemoryBufferRef Buffer, ModuleSummaryIndex &CombinedIndex)
Parse the specified bitcode buffer and merge the index into CombinedIndex.
void consumeError(Error Err)
Consume a Error without doing anything.
Definition Error.h:1106
LLVM_ABI void UpgradeARCRuntime(Module &M)
Convert calls to ARC runtime functions to intrinsic calls and upgrade the old retain release marker t...
LLVM_ABI Expected< std::unique_ptr< ModuleSummaryIndex > > getModuleSummaryIndexForFile(StringRef Path, bool IgnoreEmptyThinLTOIndexFile=false)
Parse the module summary index out of an IR file and return the module summary index object if found,...
LLVM_ABI Expected< std::unique_ptr< Module > > getOwningLazyBitcodeModule(std::unique_ptr< MemoryBuffer > &&Buffer, LLVMContext &Context, bool ShouldLazyLoadMetadata=false, bool IsImporting=false, ParserCallbacks Callbacks={})
Like getLazyBitcodeModule, except that the module takes ownership of the memory buffer if successful.
LLVM_ABI std::error_code errorToErrorCodeAndEmitErrors(LLVMContext &Ctx, Error Err)
Implement std::hash so that hash_code can be used in STL containers.
Definition BitVector.h:878
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition BitVector.h:880
Basic information extracted from a bitcode module to be used for LTO.
static Bitfield::Type get(StorageType Packed)
Unpacks the field from the Packed value.
Definition Bitfields.h:207
When advancing through a bitstream cursor, each advance can discover a few different kinds of entries...
static constexpr DenormalFPEnv createFromIntValue(uint32_t Data)
Flags specific to function summaries.
static constexpr uint32_t RangeWidth
std::vector< Call > Calls
In the per-module summary, it summarizes the byte offset applied to each pointer parameter before pas...
ConstantRange Use
The range contains byte offsets from the parameter pointer which accessed by the function.
Group flags (Linkage, NotEligibleToImport, etc.) as a bitfield.
static LLVM_ABI const char * BranchWeights
GetContainedTypeIDTy GetContainedTypeID
std::optional< MDTypeCallbackTy > MDType
LLVM_ABI bool set(StringRef Name, std::string Value)
Set a property using a string name.
Definition Module.cpp:1015
std::optional< ValueTypeCallbackTy > ValueType
The ValueType callback is called for every function definition or declaration and allows accessing th...
std::optional< DataLayoutCallbackFuncTy > DataLayout
std::optional< MDTypeCallbackTy > MDType
The MDType callback is called for every value in metadata.
bool SkipDebugIntrinsicUpgrade
If true, do not auto-upgrade debug intrinsic calls (llvm.dbg.
std::map< uint64_t, WholeProgramDevirtResolution > WPDRes
Mapping from byte offset to whole-program devirt resolution for that (typeid, byte offset) pair.
TypeTestResolution TTRes
Kind
Specifies which kind of type check we should emit for this byte array.
unsigned SizeM1BitWidth
Range of size-1 expressed as a bit width.
enum llvm::TypeTestResolution::Kind TheKind
ValID - Represents a reference of a definition of some sort with no type.
Definition LLParser.h:54
Struct that holds a reference to a particular GUID in a global value summary.
enum llvm::WholeProgramDevirtResolution::Kind TheKind
std::map< std::vector< uint64_t >, ByArg > ResByArg
Resolutions for calls with all constant integer arguments (excluding the first argument,...