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