aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/MetadataLoader.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
index 641cd1b..e124354 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
@@ -473,7 +473,8 @@ class MetadataLoader::MetadataLoaderImpl {
Error parseOneMetadata(SmallVectorImpl<uint64_t> &Record, unsigned Code,
PlaceholderQueue &Placeholders, StringRef Blob,
- unsigned &NextMetadataNo);
+ unsigned &NextMetadataNo,
+ BasicBlock *ConstExprInsertBB);
Error parseMetadataStrings(ArrayRef<uint64_t> Record, StringRef Blob,
function_ref<void(StringRef)> CallBack);
Error parseGlobalObjectAttachment(GlobalObject &GO,
@@ -742,7 +743,7 @@ public:
TheModule(TheModule), Callbacks(std::move(Callbacks)),
IsImporting(IsImporting) {}
- Error parseMetadata(bool ModuleLevel);
+ Error parseMetadata(bool ModuleLevel, BasicBlock *ConstExprInsertBB);
bool hasFwdRefs() const { return MetadataList.hasFwdRefs(); }
@@ -1067,7 +1068,8 @@ void MetadataLoader::MetadataLoaderImpl::callMDTypeCallback(Metadata **Val,
/// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
/// module level metadata.
-Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) {
+Error MetadataLoader::MetadataLoaderImpl::parseMetadata(
+ bool ModuleLevel, BasicBlock *ConstExprInsertBB) {
if (!ModuleLevel && MetadataList.hasFwdRefs())
return error("Invalid metadata: fwd refs into function blocks");
@@ -1150,7 +1152,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) {
if (Expected<unsigned> MaybeCode =
Stream.readRecord(Entry.ID, Record, &Blob)) {
if (Error Err = parseOneMetadata(Record, MaybeCode.get(), Placeholders,
- Blob, NextMetadataNo))
+ Blob, NextMetadataNo, ConstExprInsertBB))
return Err;
} else
return MaybeCode.takeError();
@@ -1191,7 +1193,8 @@ void MetadataLoader::MetadataLoaderImpl::lazyLoadOneMetadata(
if (Expected<unsigned> MaybeCode =
IndexCursor.readRecord(Entry.ID, Record, &Blob)) {
if (Error Err =
- parseOneMetadata(Record, MaybeCode.get(), Placeholders, Blob, ID))
+ parseOneMetadata(Record, MaybeCode.get(), Placeholders, Blob, ID,
+ /* ConstExprInsertBB */ nullptr))
report_fatal_error("Can't lazyload MD, parseOneMetadata: " +
Twine(toString(std::move(Err))));
} else
@@ -1235,7 +1238,8 @@ void MetadataLoader::MetadataLoaderImpl::resolveForwardRefsAndPlaceholders(
Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
SmallVectorImpl<uint64_t> &Record, unsigned Code,
- PlaceholderQueue &Placeholders, StringRef Blob, unsigned &NextMetadataNo) {
+ PlaceholderQueue &Placeholders, StringRef Blob, unsigned &NextMetadataNo,
+ BasicBlock *ConstExprInsertBB) {
bool IsDistinct = false;
auto getMD = [&](unsigned ID) -> Metadata * {
@@ -1389,8 +1393,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
if (!Ty || Ty->isMetadataTy() || Ty->isVoidTy())
return error("Invalid record");
- Value *V = ValueList.getValueFwdRef(Record[1], Ty, TyID,
- /*ConstExprInsertBB*/ nullptr);
+ Value *V = ValueList.getValueFwdRef(Record[1], Ty, TyID, ConstExprInsertBB);
if (!V)
return error("Invalid value reference from metadata");
@@ -2479,8 +2482,9 @@ MetadataLoader::MetadataLoader(BitstreamCursor &Stream, Module &TheModule,
: Pimpl(std::make_unique<MetadataLoaderImpl>(
Stream, TheModule, ValueList, std::move(Callbacks), IsImporting)) {}
-Error MetadataLoader::parseMetadata(bool ModuleLevel) {
- return Pimpl->parseMetadata(ModuleLevel);
+Error MetadataLoader::parseMetadata(bool ModuleLevel,
+ BasicBlock *ConstExprInsertBB) {
+ return Pimpl->parseMetadata(ModuleLevel, ConstExprInsertBB);
}
bool MetadataLoader::hasFwdRefs() const { return Pimpl->hasFwdRefs(); }