diff options
| author | Stephen Tozer <stephen.tozer@sony.com> | 2023-11-17 14:04:54 +0000 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-17 14:04:54 +0000 | 
| commit | e77af7e1b07ac648c026922e4a0b07e9af35f714 (patch) | |
| tree | aeb3a356b3541261c5423766766799826abffbcb /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | |
| parent | e5e71affb72178ccfedae2083c686999d9fa4941 (diff) | |
| download | llvm-e77af7e1b07ac648c026922e4a0b07e9af35f714.zip llvm-e77af7e1b07ac648c026922e4a0b07e9af35f714.tar.gz llvm-e77af7e1b07ac648c026922e4a0b07e9af35f714.tar.bz2  | |
[DebugInfo] Make DIArgList inherit from Metadata and always unique (#72147)
This patch changes the `DIArgList` class's inheritance from `MDNode` to
`Metadata, ReplaceableMetadataImpl`, and ensures that it is always
unique, i.e. a distinct DIArgList should never be produced.
This should not result in any changes to IR or bitcode parsing and
printing, as the format for DIArgList is unchanged, and the order in which it
appears should also be identical. As a minor note, this patch also fixes
a gap in the verifier, where the ValueAsMetadata operands to a DIArgList
would not be visited.
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
| -rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index d16b5c7..9c21cc6 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -336,8 +336,7 @@ private:                      unsigned Abbrev);    void writeDIMacroFile(const DIMacroFile *N, SmallVectorImpl<uint64_t> &Record,                          unsigned Abbrev); -  void writeDIArgList(const DIArgList *N, SmallVectorImpl<uint64_t> &Record, -                      unsigned Abbrev); +  void writeDIArgList(const DIArgList *N, SmallVectorImpl<uint64_t> &Record);    void writeDIModule(const DIModule *N, SmallVectorImpl<uint64_t> &Record,                       unsigned Abbrev);    void writeDIAssignID(const DIAssignID *N, SmallVectorImpl<uint64_t> &Record, @@ -1975,13 +1974,12 @@ void ModuleBitcodeWriter::writeDIMacroFile(const DIMacroFile *N,  }  void ModuleBitcodeWriter::writeDIArgList(const DIArgList *N, -                                         SmallVectorImpl<uint64_t> &Record, -                                         unsigned Abbrev) { +                                         SmallVectorImpl<uint64_t> &Record) {    Record.reserve(N->getArgs().size());    for (ValueAsMetadata *MD : N->getArgs())      Record.push_back(VE.getMetadataID(MD)); -  Stream.EmitRecord(bitc::METADATA_ARG_LIST, Record, Abbrev); +  Stream.EmitRecord(bitc::METADATA_ARG_LIST, Record);    Record.clear();  } @@ -2264,6 +2262,10 @@ void ModuleBitcodeWriter::writeMetadataRecords(  #include "llvm/IR/Metadata.def"        }      } +    if (auto *AL = dyn_cast<DIArgList>(MD)) { +      writeDIArgList(AL, Record); +      continue; +    }      writeValueAsMetadata(cast<ValueAsMetadata>(MD), Record);    }  }  | 
