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