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