diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp index 4f2486c963e98..5f66e1ea0a835 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp @@ -23,6 +23,8 @@ extern bool WriteNewDbgInfoFormatToBitcode; PreservedAnalyses BitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) { ScopedDbgInfoFormatSetter FormatSetter(M, M.IsNewDbgInfoFormat && WriteNewDbgInfoFormatToBitcode); + if (M.IsNewDbgInfoFormat) + M.removeDebugIntrinsicDeclarations(); const ModuleSummaryIndex *Index = EmitSummaryIndex ? &(AM.getResult(M)) @@ -54,6 +56,8 @@ namespace { bool runOnModule(Module &M) override { ScopedDbgInfoFormatSetter FormatSetter( M, M.IsNewDbgInfoFormat && WriteNewDbgInfoFormatToBitcode); + if (M.IsNewDbgInfoFormat) + M.removeDebugIntrinsicDeclarations(); WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, /*Index=*/nullptr, /*EmitModuleHash=*/false); diff --git a/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp b/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp index 4df18c8249277..9bf29c46938eb 100644 --- a/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp +++ b/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp @@ -581,10 +581,10 @@ llvm::ThinLTOBitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) { FunctionAnalysisManager &FAM = AM.getResult(M).getManager(); - // RemoveDIs: there's no bitcode representation of the DbgVariableRecord - // debug-info, convert to dbg.values before writing out. ScopedDbgInfoFormatSetter FormatSetter(M, M.IsNewDbgInfoFormat && WriteNewDbgInfoFormatToBitcode); + if (M.IsNewDbgInfoFormat) + M.removeDebugIntrinsicDeclarations(); bool Changed = writeThinLTOBitcode( OS, ThinLinkOS, diff --git a/llvm/tools/llvm-as/llvm-as.cpp b/llvm/tools/llvm-as/llvm-as.cpp index fd852563838f3..e48e3f4d22c12 100644 --- a/llvm/tools/llvm-as/llvm-as.cpp +++ b/llvm/tools/llvm-as/llvm-as.cpp @@ -143,8 +143,10 @@ int main(int argc, char **argv) { // Convert to new debug format if requested. assert(!M->IsNewDbgInfoFormat && "Unexpectedly in new debug mode"); - if (UseNewDbgInfoFormat && WriteNewDbgInfoFormatToBitcode) + if (UseNewDbgInfoFormat && WriteNewDbgInfoFormatToBitcode) { M->convertToNewDbgValues(); + M->removeDebugIntrinsicDeclarations(); + } std::unique_ptr Index = std::move(ModuleAndIndex.Index); diff --git a/llvm/tools/llvm-dis/llvm-dis.cpp b/llvm/tools/llvm-dis/llvm-dis.cpp index 6ad1c99568e4a..fbbb5506e43e0 100644 --- a/llvm/tools/llvm-dis/llvm-dis.cpp +++ b/llvm/tools/llvm-dis/llvm-dis.cpp @@ -259,6 +259,8 @@ int main(int argc, char **argv) { if (!DontPrint) { if (M) { ScopedDbgInfoFormatSetter FormatSetter(*M, WriteNewDbgInfoFormat); + if (WriteNewDbgInfoFormat) + M->removeDebugIntrinsicDeclarations(); M->print(Out->os(), Annotator.get(), PreserveAssemblyUseListOrder); } if (Index) diff --git a/llvm/tools/llvm-link/llvm-link.cpp b/llvm/tools/llvm-link/llvm-link.cpp index 8f80cc26f3166..7794f2d81ed06 100644 --- a/llvm/tools/llvm-link/llvm-link.cpp +++ b/llvm/tools/llvm-link/llvm-link.cpp @@ -136,6 +136,8 @@ static cl::opt TryUseNewDbgInfoFormat( extern cl::opt UseNewDbgInfoFormat; extern cl::opt PreserveInputDbgFormat; +extern cl::opt WriteNewDbgInfoFormat; +extern bool WriteNewDbgInfoFormatToBitcode; extern cl::opt LoadBitcodeIntoNewDbgInfoFormat; @@ -545,10 +547,18 @@ int main(int argc, char **argv) { if (Verbose) errs() << "Writing bitcode...\n"; + auto SetFormat = [&](bool NewFormat) { + Composite->setIsNewDbgInfoFormat(NewFormat); + if (NewFormat) + Composite->removeDebugIntrinsicDeclarations(); + }; if (OutputAssembly) { + SetFormat(WriteNewDbgInfoFormat); Composite->print(Out.os(), nullptr, PreserveAssemblyUseListOrder); - } else if (Force || !CheckBitcodeOutputToConsole(Out.os())) + } else if (Force || !CheckBitcodeOutputToConsole(Out.os())) { + SetFormat(WriteNewDbgInfoFormatToBitcode); WriteBitcodeToFile(*Composite, Out.os(), PreserveBitcodeUseListOrder); + } // Declare success. Out.keep(); diff --git a/llvm/tools/verify-uselistorder/verify-uselistorder.cpp b/llvm/tools/verify-uselistorder/verify-uselistorder.cpp index cb07dede1d137..84fc777e1fdff 100644 --- a/llvm/tools/verify-uselistorder/verify-uselistorder.cpp +++ b/llvm/tools/verify-uselistorder/verify-uselistorder.cpp @@ -68,7 +68,7 @@ static cl::opt cl::desc("Number of times to shuffle and verify use-lists"), cl::init(1), cl::cat(Cat)); -extern cl::opt LoadBitcodeIntoNewDbgInfoFormat; +extern cl::opt PreserveInputDbgFormat; namespace { @@ -169,9 +169,6 @@ std::unique_ptr TempFile::readBitcode(LLVMContext &Context) const { return nullptr; } - // verify-uselistoder currently only supports old-style debug info mode. - // FIXME: Update mapping code for RemoveDIs. - ModuleOr.get()->setIsNewDbgInfoFormat(false); return std::move(ModuleOr.get()); } @@ -181,9 +178,6 @@ std::unique_ptr TempFile::readAssembly(LLVMContext &Context) const { std::unique_ptr M = parseAssemblyFile(Filename, Err, Context); if (!M.get()) Err.print("verify-uselistorder", errs()); - // verify-uselistoder currently only supports old-style debug info mode. - // FIXME: Update mapping code for RemoveDIs. - M->setIsNewDbgInfoFormat(false); return M; } @@ -228,8 +222,15 @@ ValueMapping::ValueMapping(const Module &M) { map(&I); // Constants used by instructions. - for (const BasicBlock &BB : F) - for (const Instruction &I : BB) + for (const BasicBlock &BB : F) { + for (const Instruction &I : BB) { + for (const DbgVariableRecord &DVR : + filterDbgVars(I.getDbgRecordRange())) { + for (Value *Op : DVR.location_ops()) + map(Op); + if (DVR.isDbgAssign()) + map(DVR.getAddress()); + } for (const Value *Op : I.operands()) { // Look through a metadata wrapper. if (const auto *MAV = dyn_cast(Op)) @@ -240,6 +241,8 @@ ValueMapping::ValueMapping(const Module &M) { isa(Op)) map(Op); } + } + } } } @@ -536,6 +539,7 @@ static void reverseUseLists(Module &M) { } int main(int argc, char **argv) { + PreserveInputDbgFormat = cl::boolOrDefault::BOU_TRUE; InitLLVM X(argc, argv); // Enable debug stream buffering. @@ -545,18 +549,11 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv, "llvm tool to verify use-list order\n"); - // Do not load bitcode into the new debug info format by default. - if (LoadBitcodeIntoNewDbgInfoFormat == cl::boolOrDefault::BOU_UNSET) - LoadBitcodeIntoNewDbgInfoFormat = cl::boolOrDefault::BOU_FALSE; - LLVMContext Context; SMDiagnostic Err; // Load the input module... std::unique_ptr M = parseIRFile(InputFilename, Err, Context); - // verify-uselistoder currently only supports old-style debug info mode. - // FIXME: Update mapping code for RemoveDIs. - M->setIsNewDbgInfoFormat(false); if (!M.get()) { Err.print(argv[0], errs());