[llvm] [RemoveDIs] Read/write DbgRecords directly from/to bitcode (PR #83251)
Jeremy Morse via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 4 10:10:28 PST 2024
================
@@ -1064,27 +1101,41 @@ void ValueEnumerator::incorporateFunction(const Function &F) {
SmallVector<LocalAsMetadata *, 8> FnLocalMDVector;
SmallVector<DIArgList *, 8> ArgListMDVector;
+
+ auto AddFnLocalMetadata = [&](Metadata *MD) {
+ if (!MD)
+ return;
+ if (auto *Local = dyn_cast<LocalAsMetadata>(MD)) {
+ // Enumerate metadata after the instructions they might refer to.
+ FnLocalMDVector.push_back(Local);
+ } else if (auto *ArgList = dyn_cast<DIArgList>(MD)) {
+ ArgListMDVector.push_back(ArgList);
+ for (ValueAsMetadata *VMD : ArgList->getArgs()) {
+ if (auto *Local = dyn_cast<LocalAsMetadata>(VMD)) {
+ // Enumerate metadata after the instructions they might refer
+ // to.
+ FnLocalMDVector.push_back(Local);
+ }
+ }
+ }
+ };
+
// Add all of the instructions.
for (const BasicBlock &BB : F) {
for (const Instruction &I : BB) {
for (const Use &OI : I.operands()) {
- if (auto *MD = dyn_cast<MetadataAsValue>(&OI)) {
- if (auto *Local = dyn_cast<LocalAsMetadata>(MD->getMetadata())) {
- // Enumerate metadata after the instructions they might refer to.
- FnLocalMDVector.push_back(Local);
- } else if (auto *ArgList = dyn_cast<DIArgList>(MD->getMetadata())) {
- ArgListMDVector.push_back(ArgList);
- for (ValueAsMetadata *VMD : ArgList->getArgs()) {
- if (auto *Local = dyn_cast<LocalAsMetadata>(VMD)) {
- // Enumerate metadata after the instructions they might refer
- // to.
- FnLocalMDVector.push_back(Local);
- }
- }
- }
+ if (auto *MD = dyn_cast<MetadataAsValue>(&OI))
+ AddFnLocalMetadata(MD->getMetadata());
+ }
+ /// RemoteDIs: Add non-instruction function-local metadata uses.
----------------
jmorse wrote:
RemoveDIs
https://github.com/llvm/llvm-project/pull/83251
More information about the llvm-commits
mailing list