diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index a027d0c..5b233fb 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -100,6 +100,9 @@ static cl::opt<bool> ExpandConstantExprs( cl::desc( "Expand constant expressions to instructions for testing purposes")); +// Declare external flag for whether we're using the new debug-info format. +extern llvm::cl::opt<bool> UseNewDbgInfoFormat; + namespace { enum { @@ -6629,6 +6632,9 @@ Error BitcodeReader::materialize(GlobalValue *GV) { if (Error Err = materializeMetadata()) return Err; + bool NewDebugInfoRequested = F->IsNewDbgInfoFormat; + F->IsNewDbgInfoFormat = false; + // Move the bit stream to the saved position of the deferred function body. if (Error JumpFailed = Stream.JumpToBit(DFII->second)) return JumpFailed; @@ -6704,6 +6710,14 @@ Error BitcodeReader::materialize(GlobalValue *GV) { // Look for functions that rely on old function attribute behavior. UpgradeFunctionAttributes(*F); + // If we've materialized a function set up in "new" debug-info mode, the + // contents just loaded will still be in dbg.value mode. Switch to the new + // mode now. NB: we can add more complicated logic here in the future to + // correctly identify when we do and don't need to autoupgrade. + if (NewDebugInfoRequested) { + F->convertToNewDbgValues(); + } + // Bring in any functions that this function forward-referenced via // blockaddresses. return materializeForwardReferencedFunctions(); @@ -8027,6 +8041,15 @@ BitcodeModule::getModuleImpl(LLVMContext &Context, bool MaterializeAll, if (Error Err = R->materializeForwardReferencedFunctions()) return std::move(Err); } + + // If we are operating in a "new debug-info" context, upgrade the debug-info + // in the loaded module. This is a transitional approach as we enable "new" + // debug-info in LLVM, which will eventually be pushed down into the + // autoupgrade path once the bitcode-encoding is finalised. Non-materialised + // functions will be upgraded in the materialize method. + if (UseNewDbgInfoFormat && !M->IsNewDbgInfoFormat) + M->convertToNewDbgValues(); + return std::move(M); } |