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