aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
-rw-r--r--llvm/lib/Bitcode/Writer/BitcodeWriter.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index d9086bf..bec0cae 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -395,6 +395,8 @@ private:
void writeModuleConstants();
bool pushValueAndType(const Value *V, unsigned InstID,
SmallVectorImpl<unsigned> &Vals);
+ bool pushValueOrMetadata(const Value *V, unsigned InstID,
+ SmallVectorImpl<unsigned> &Vals);
void writeOperandBundles(const CallBase &CB, unsigned InstID);
void pushValue(const Value *V, unsigned InstID,
SmallVectorImpl<unsigned> &Vals);
@@ -2931,6 +2933,19 @@ bool ModuleBitcodeWriter::pushValueAndType(const Value *V, unsigned InstID,
return false;
}
+bool ModuleBitcodeWriter::pushValueOrMetadata(const Value *V, unsigned InstID,
+ SmallVectorImpl<unsigned> &Vals) {
+ bool IsMetadata = V->getType()->isMetadataTy();
+ if (IsMetadata) {
+ Vals.push_back(bitc::OB_METADATA);
+ Metadata *MD = cast<MetadataAsValue>(V)->getMetadata();
+ unsigned ValID = VE.getMetadataID(MD);
+ Vals.push_back(InstID - ValID);
+ return false;
+ }
+ return pushValueAndType(V, InstID, Vals);
+}
+
void ModuleBitcodeWriter::writeOperandBundles(const CallBase &CS,
unsigned InstID) {
SmallVector<unsigned, 64> Record;
@@ -2941,7 +2956,7 @@ void ModuleBitcodeWriter::writeOperandBundles(const CallBase &CS,
Record.push_back(C.getOperandBundleTagID(Bundle.getTagName()));
for (auto &Input : Bundle.Inputs)
- pushValueAndType(Input, InstID, Record);
+ pushValueOrMetadata(Input, InstID, Record);
Stream.EmitRecord(bitc::FUNC_CODE_OPERAND_BUNDLE, Record);
Record.clear();