[llvm-branch-commits] [llvm] eba928f - Revert "[RemoveDIs] Read/write DbgRecords directly from/to bitcode (#83251)"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Mar 15 04:03:56 PDT 2024
Author: Orlando Cazalet-Hyams
Date: 2024-03-15T11:03:53Z
New Revision: eba928f0b9851e5fa78f152ddc1be2a28564e705
URL: https://github.com/llvm/llvm-project/commit/eba928f0b9851e5fa78f152ddc1be2a28564e705
DIFF: https://github.com/llvm/llvm-project/commit/eba928f0b9851e5fa78f152ddc1be2a28564e705.diff
LOG: Revert "[RemoveDIs] Read/write DbgRecords directly from/to bitcode (#83251)"
This reverts commit d6d3d96b654012d72ad170d272cb2fe2c8def90d.
Added:
Modified:
llvm/include/llvm/Bitcode/LLVMBitCodes.h
llvm/lib/Bitcode/Reader/BitcodeAnalyzer.cpp
llvm/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp
llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
llvm/lib/IR/BasicBlock.cpp
llvm/lib/Linker/IRMover.cpp
llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp
llvm/tools/llvm-as/llvm-as.cpp
llvm/tools/verify-uselistorder/verify-uselistorder.cpp
Removed:
llvm/test/Bitcode/dbg-record-roundtrip.ll
################################################################################
diff --git a/llvm/include/llvm/Bitcode/LLVMBitCodes.h b/llvm/include/llvm/Bitcode/LLVMBitCodes.h
index 39303e64852141..c0a52d64a101d0 100644
--- a/llvm/include/llvm/Bitcode/LLVMBitCodes.h
+++ b/llvm/include/llvm/Bitcode/LLVMBitCodes.h
@@ -624,17 +624,6 @@ enum FunctionCodes {
// operation, align, vol,
// ordering, synchscope]
FUNC_CODE_BLOCKADDR_USERS = 60, // BLOCKADDR_USERS: [value...]
-
- FUNC_CODE_DEBUG_RECORD_VALUE =
- 61, // [DILocation, DILocalVariable, DIExpression, ValueAsMetadata]
- FUNC_CODE_DEBUG_RECORD_DECLARE =
- 62, // [DILocation, DILocalVariable, DIExpression, ValueAsMetadata]
- FUNC_CODE_DEBUG_RECORD_ASSIGN =
- 63, // [DILocation, DILocalVariable, DIExpression, ValueAsMetadata,
- // DIAssignID, DIExpression (addr), ValueAsMetadata (addr)]
- FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE =
- 64, // [DILocation, DILocalVariable, DIExpression, Value]
- FUNC_CODE_DEBUG_RECORD_LABEL = 65, // [DILocation, DILabel]
};
enum UseListCodes {
diff --git a/llvm/lib/Bitcode/Reader/BitcodeAnalyzer.cpp b/llvm/lib/Bitcode/Reader/BitcodeAnalyzer.cpp
index c085c715179ba6..7005011980ebc9 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeAnalyzer.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeAnalyzer.cpp
@@ -270,11 +270,6 @@ GetCodeName(unsigned CodeID, unsigned BlockID,
STRINGIFY_CODE(FUNC_CODE, INST_CMPXCHG)
STRINGIFY_CODE(FUNC_CODE, INST_CALLBR)
STRINGIFY_CODE(FUNC_CODE, BLOCKADDR_USERS)
- STRINGIFY_CODE(FUNC_CODE, DEBUG_RECORD_DECLARE)
- STRINGIFY_CODE(FUNC_CODE, DEBUG_RECORD_VALUE)
- STRINGIFY_CODE(FUNC_CODE, DEBUG_RECORD_ASSIGN)
- STRINGIFY_CODE(FUNC_CODE, DEBUG_RECORD_VALUE_SIMPLE)
- STRINGIFY_CODE(FUNC_CODE, DEBUG_RECORD_LABEL)
}
case bitc::VALUE_SYMTAB_BLOCK_ID:
switch (CodeID) {
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index d284c9823c9ede..9c63116114f3c5 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 {
@@ -4276,10 +4279,6 @@ Error BitcodeReader::parseGlobalIndirectSymbolRecord(
Error BitcodeReader::parseModule(uint64_t ResumeBit,
bool ShouldLazyLoadMetadata,
ParserCallbacks Callbacks) {
- // Force the debug-info mode into the old format for now.
- // FIXME: Remove this once all tools support RemoveDIs.
- TheModule->IsNewDbgInfoFormat = false;
-
this->ValueTypeCallback = std::move(Callbacks.ValueType);
if (ResumeBit) {
if (Error JumpFailed = Stream.JumpToBit(ResumeBit))
@@ -6399,89 +6398,6 @@ Error BitcodeReader::parseFunctionBody(Function *F) {
InstructionList.push_back(I);
break;
}
- case bitc::FUNC_CODE_DEBUG_RECORD_LABEL: {
- // DPLabels are placed after the Instructions that they are attached to.
- Instruction *Inst = getLastInstruction();
- if (!Inst)
- return error("Invalid dbg record: missing instruction");
- DILocation *DIL = cast<DILocation>(getFnMetadataByID(Record[0]));
- DILabel *Label = cast<DILabel>(getFnMetadataByID(Record[1]));
- Inst->getParent()->insertDbgRecordBefore(
- new DPLabel(Label, DebugLoc(DIL)), Inst->getIterator());
- continue; // This isn't an instruction.
- }
- case bitc::FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE:
- case bitc::FUNC_CODE_DEBUG_RECORD_VALUE:
- case bitc::FUNC_CODE_DEBUG_RECORD_DECLARE:
- case bitc::FUNC_CODE_DEBUG_RECORD_ASSIGN: {
- // DPValues are placed after the Instructions that they are attached to.
- Instruction *Inst = getLastInstruction();
- if (!Inst)
- return error("Invalid dbg record: missing instruction");
-
- // First 3 fields are common to all kinds:
- // DILocation, DILocalVariable, DIExpression
- // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE)
- // ..., LocationMetadata
- // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE - abbrev'd)
- // ..., Value
- // dbg_declare (FUNC_CODE_DEBUG_RECORD_DECLARE)
- // ..., LocationMetadata
- // dbg_assign (FUNC_CODE_DEBUG_RECORD_ASSIGN)
- // ..., LocationMetadata, DIAssignID, DIExpression, LocationMetadata
- unsigned Slot = 0;
- // Common fields (0-2).
- DILocation *DIL = cast<DILocation>(getFnMetadataByID(Record[Slot++]));
- DILocalVariable *Var =
- cast<DILocalVariable>(getFnMetadataByID(Record[Slot++]));
- DIExpression *Expr =
- cast<DIExpression>(getFnMetadataByID(Record[Slot++]));
-
- // Union field (3: LocationMetadata | Value).
- Metadata *RawLocation = nullptr;
- if (BitCode == bitc::FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE) {
- Value *V = nullptr;
- unsigned TyID = 0;
- // We never expect to see a fwd reference value here because
- // use-before-defs are encoded with the standard non-abbrev record
- // type (they'd require encoding the type too, and they're rare). As a
- // result, getValueTypePair only ever increments Slot by one here (once
- // for the value, never twice for value and type).
- unsigned SlotBefore = Slot;
- if (getValueTypePair(Record, Slot, NextValueNo, V, TyID, CurBB))
- return error("Invalid dbg record: invalid value");
- (void)SlotBefore;
- assert((SlotBefore == Slot - 1) && "unexpected fwd ref");
- RawLocation = ValueAsMetadata::get(V);
- } else {
- RawLocation = getFnMetadataByID(Record[Slot++]);
- }
-
- DPValue *DPV = nullptr;
- switch (BitCode) {
- case bitc::FUNC_CODE_DEBUG_RECORD_VALUE:
- case bitc::FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE:
- DPV = new DPValue(RawLocation, Var, Expr, DIL,
- DPValue::LocationType::Value);
- break;
- case bitc::FUNC_CODE_DEBUG_RECORD_DECLARE:
- DPV = new DPValue(RawLocation, Var, Expr, DIL,
- DPValue::LocationType::Declare);
- break;
- case bitc::FUNC_CODE_DEBUG_RECORD_ASSIGN: {
- DIAssignID *ID = cast<DIAssignID>(getFnMetadataByID(Record[Slot++]));
- DIExpression *AddrExpr =
- cast<DIExpression>(getFnMetadataByID(Record[Slot++]));
- Metadata *Addr = getFnMetadataByID(Record[Slot++]);
- DPV = new DPValue(RawLocation, Var, Expr, ID, Addr, AddrExpr, DIL);
- break;
- }
- default:
- llvm_unreachable("Unknown DPValue bitcode");
- }
- Inst->getParent()->insertDbgRecordBefore(DPV, Inst->getIterator());
- continue; // This isn't an instruction.
- }
case bitc::FUNC_CODE_INST_CALL: {
// CALL: [paramattrs, cc, fmf, fnty, fnid, arg0, arg1...]
if (Record.size() < 3)
@@ -6761,21 +6677,10 @@ Error BitcodeReader::materialize(GlobalValue *GV) {
// Move the bit stream to the saved position of the deferred function body.
if (Error JumpFailed = Stream.JumpToBit(DFII->second))
return JumpFailed;
-
- // Set the debug info mode to "new", forcing a mismatch between
- // module and function debug modes. This is okay because we'll convert
- // everything back to the old mode after parsing.
- // FIXME: Remove this once all tools support RemoveDIs.
- F->IsNewDbgInfoFormat = true;
-
if (Error Err = parseFunctionBody(F))
return Err;
F->setIsMaterializable(false);
- // Convert new debug info records into intrinsics.
- // FIXME: Remove this once all tools support RemoveDIs.
- F->convertFromNewDbgValues();
-
if (StripDebugInfo)
stripDebugInfo(*F);
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index 6f0879a4e0ee74..597f49332fad25 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -99,9 +99,6 @@ namespace llvm {
extern FunctionSummary::ForceSummaryHotnessType ForceSummaryEdgesCold;
}
-extern bool WriteNewDbgInfoFormatToBitcode;
-extern llvm::cl::opt<bool> UseNewDbgInfoFormat;
-
namespace {
/// These are manifest constants used by the bitcode writer. They do not need to
@@ -131,7 +128,6 @@ enum {
FUNCTION_INST_RET_VAL_ABBREV,
FUNCTION_INST_UNREACHABLE_ABBREV,
FUNCTION_INST_GEP_ABBREV,
- FUNCTION_DEBUG_RECORD_VALUE_ABBREV,
};
/// Abstract class to manage the bitcode writing, subclassed for each bitcode
@@ -3516,95 +3512,25 @@ void ModuleBitcodeWriter::writeFunction(
NeedsMetadataAttachment |= I.hasMetadataOtherThanDebugLoc();
// If the instruction has a debug location, emit it.
- if (DILocation *DL = I.getDebugLoc()) {
- if (DL == LastDL) {
- // Just repeat the same debug loc as last time.
- Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals);
- } else {
- Vals.push_back(DL->getLine());
- Vals.push_back(DL->getColumn());
- Vals.push_back(VE.getMetadataOrNullID(DL->getScope()));
- Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt()));
- Vals.push_back(DL->isImplicitCode());
- Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals);
- Vals.clear();
- LastDL = DL;
- }
- }
+ DILocation *DL = I.getDebugLoc();
+ if (!DL)
+ continue;
- // If the instruction has DbgRecords attached to it, emit them. Note that
- // they come after the instruction so that it's easy to attach them again
- // when reading the bitcode, even though conceptually the debug locations
- // start "before" the instruction.
- if (I.hasDbgRecords() && WriteNewDbgInfoFormatToBitcode) {
- /// Try to push the value only (unwrapped), otherwise push the
- /// metadata wrapped value. Returns true if the value was pushed
- /// without the ValueAsMetadata wrapper.
- auto PushValueOrMetadata = [&Vals, InstID,
- this](Metadata *RawLocation) {
- assert(RawLocation && "RawLocation unexpectedly null in DPValue");
- if (ValueAsMetadata *VAM = dyn_cast<ValueAsMetadata>(RawLocation)) {
- SmallVector<unsigned, 2> ValAndType;
- // If the value is a fwd-ref the type is also pushed. We don't
- // want the type, so fwd-refs are kept wrapped (pushValueAndType
- // returns false if the value is pushed without type).
- if (!pushValueAndType(VAM->getValue(), InstID, ValAndType)) {
- Vals.push_back(ValAndType[0]);
- return true;
- }
- }
- // The metadata is a DIArgList, or ValueAsMetadata wrapping a
- // fwd-ref. Push the metadata ID.
- Vals.push_back(VE.getMetadataID(RawLocation));
- return false;
- };
-
- // Write out non-instruction debug information attached to this
- // instruction. Write it after the instruction so that it's easy to
- // re-attach to the instruction reading the records in.
- for (DbgRecord &DR : I.DbgMarker->getDbgRecordRange()) {
- if (DPLabel *DPL = dyn_cast<DPLabel>(&DR)) {
- Vals.push_back(VE.getMetadataID(&*DPL->getDebugLoc()));
- Vals.push_back(VE.getMetadataID(DPL->getLabel()));
- Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_RECORD_LABEL, Vals);
- Vals.clear();
- continue;
- }
-
- // First 3 fields are common to all kinds:
- // DILocation, DILocalVariable, DIExpression
- // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE)
- // ..., LocationMetadata
- // dbg_value (FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE - abbrev'd)
- // ..., Value
- // dbg_declare (FUNC_CODE_DEBUG_RECORD_DECLARE)
- // ..., LocationMetadata
- // dbg_assign (FUNC_CODE_DEBUG_RECORD_ASSIGN)
- // ..., LocationMetadata, DIAssignID, DIExpression, LocationMetadata
- DPValue &DPV = cast<DPValue>(DR);
- Vals.push_back(VE.getMetadataID(&*DPV.getDebugLoc()));
- Vals.push_back(VE.getMetadataID(DPV.getVariable()));
- Vals.push_back(VE.getMetadataID(DPV.getExpression()));
- if (DPV.isDbgValue()) {
- if (PushValueOrMetadata(DPV.getRawLocation()))
- Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE, Vals,
- FUNCTION_DEBUG_RECORD_VALUE_ABBREV);
- else
- Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_RECORD_VALUE, Vals);
- } else if (DPV.isDbgDeclare()) {
- Vals.push_back(VE.getMetadataID(DPV.getRawLocation()));
- Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_RECORD_DECLARE, Vals);
- } else {
- assert(DPV.isDbgAssign() && "Unexpected DbgRecord kind");
- Vals.push_back(VE.getMetadataID(DPV.getRawLocation()));
- Vals.push_back(VE.getMetadataID(DPV.getAssignID()));
- Vals.push_back(VE.getMetadataID(DPV.getAddressExpression()));
- Vals.push_back(VE.getMetadataID(DPV.getRawAddress()));
- Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_RECORD_ASSIGN, Vals);
- }
- Vals.clear();
- }
+ if (DL == LastDL) {
+ // Just repeat the same debug loc as last time.
+ Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals);
+ continue;
}
+
+ Vals.push_back(DL->getLine());
+ Vals.push_back(DL->getColumn());
+ Vals.push_back(VE.getMetadataOrNullID(DL->getScope()));
+ Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt()));
+ Vals.push_back(DL->isImplicitCode());
+ Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals);
+ Vals.clear();
+
+ LastDL = DL;
}
if (BlockAddress *BA = BlockAddress::lookup(&BB)) {
@@ -3845,17 +3771,7 @@ void ModuleBitcodeWriter::writeBlockInfo() {
FUNCTION_INST_GEP_ABBREV)
llvm_unreachable("Unexpected abbrev ordering!");
}
- {
- auto Abbv = std::make_shared<BitCodeAbbrev>();
- Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_DEBUG_RECORD_VALUE_SIMPLE));
- Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 7)); // dbgloc
- Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 7)); // var
- Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 7)); // expr
- Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // val
- if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, Abbv) !=
- FUNCTION_DEBUG_RECORD_VALUE_ABBREV)
- llvm_unreachable("Unexpected abbrev ordering! 1");
- }
+
Stream.ExitBlock();
}
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp
index de2396f31f6669..0eb9c246f2a9b6 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriterPass.cpp
@@ -18,12 +18,11 @@
#include "llvm/Pass.h"
using namespace llvm;
-extern bool WriteNewDbgInfoFormatToBitcode;
-
PreservedAnalyses BitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {
- bool ConvertToOldDbgFormatForWrite =
- M.IsNewDbgInfoFormat && !WriteNewDbgInfoFormatToBitcode;
- if (ConvertToOldDbgFormatForWrite)
+ // RemoveDIs: there's no bitcode representation of the DbgRecord debug-info,
+ // convert to dbg.values before writing out.
+ bool IsNewDbgInfoFormat = M.IsNewDbgInfoFormat;
+ if (IsNewDbgInfoFormat)
M.convertFromNewDbgValues();
const ModuleSummaryIndex *Index =
@@ -31,7 +30,7 @@ PreservedAnalyses BitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {
: nullptr;
WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, Index, EmitModuleHash);
- if (ConvertToOldDbgFormatForWrite)
+ if (IsNewDbgInfoFormat)
M.convertToNewDbgValues();
return PreservedAnalyses::all();
@@ -57,15 +56,16 @@ namespace {
StringRef getPassName() const override { return "Bitcode Writer"; }
bool runOnModule(Module &M) override {
- bool ConvertToOldDbgFormatForWrite =
- M.IsNewDbgInfoFormat && !WriteNewDbgInfoFormatToBitcode;
- if (ConvertToOldDbgFormatForWrite)
+ // RemoveDIs: there's no bitcode representation of the DbgRecord
+ // debug-info, convert to dbg.values before writing out.
+ bool IsNewDbgInfoFormat = M.IsNewDbgInfoFormat;
+ if (IsNewDbgInfoFormat)
M.convertFromNewDbgValues();
WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, /*Index=*/nullptr,
/*EmitModuleHash=*/false);
- if (ConvertToOldDbgFormatForWrite)
+ if (IsNewDbgInfoFormat)
M.convertToNewDbgValues();
return false;
}
diff --git a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
index 1c439c9543210e..fccb2a606f7ed9 100644
--- a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
+++ b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
@@ -134,28 +134,20 @@ static OrderMap orderModule(const Module &M) {
// Metadata used by instructions is decoded before the actual instructions,
// so visit any constants used by it beforehand.
for (const BasicBlock &BB : F)
- for (const Instruction &I : BB) {
- auto OrderConstantFromMetadata = [&](Metadata *MD) {
- if (const auto *VAM = dyn_cast<ValueAsMetadata>(MD)) {
- orderConstantValue(VAM->getValue());
- } else if (const auto *AL = dyn_cast<DIArgList>(MD)) {
- for (const auto *VAM : AL->getArgs())
+ for (const Instruction &I : BB)
+ for (const Value *V : I.operands()) {
+ if (const auto *MAV = dyn_cast<MetadataAsValue>(V)) {
+ if (const auto *VAM =
+ dyn_cast<ValueAsMetadata>(MAV->getMetadata())) {
orderConstantValue(VAM->getValue());
+ } else if (const auto *AL =
+ dyn_cast<DIArgList>(MAV->getMetadata())) {
+ for (const auto *VAM : AL->getArgs())
+ orderConstantValue(VAM->getValue());
+ }
}
- };
-
- for (DPValue &DPV : filterDbgVars(I.getDbgRecordRange())) {
- OrderConstantFromMetadata(DPV.getRawLocation());
- if (DPV.isDbgAssign())
- OrderConstantFromMetadata(DPV.getRawAddress());
}
- for (const Value *V : I.operands()) {
- if (const auto *MAV = dyn_cast<MetadataAsValue>(V))
- OrderConstantFromMetadata(MAV->getMetadata());
- }
- }
-
for (const Argument &A : F.args())
orderValue(&A, OM);
for (const BasicBlock &BB : F)
@@ -269,39 +261,33 @@ static UseListOrderStack predictUseListOrder(const Module &M) {
// constants in the last Function they're used in. Module-level constants
// have already been visited above.
for (const Function &F : llvm::reverse(M)) {
- auto PredictValueOrderFromMetadata = [&](Metadata *MD) {
- if (const auto *VAM = dyn_cast<ValueAsMetadata>(MD)) {
- predictValueUseListOrder(VAM->getValue(), &F, OM, Stack);
- } else if (const auto *AL = dyn_cast<DIArgList>(MD)) {
- for (const auto *VAM : AL->getArgs())
- predictValueUseListOrder(VAM->getValue(), &F, OM, Stack);
- }
- };
if (F.isDeclaration())
continue;
for (const BasicBlock &BB : F)
predictValueUseListOrder(&BB, &F, OM, Stack);
for (const Argument &A : F.args())
predictValueUseListOrder(&A, &F, OM, Stack);
- for (const BasicBlock &BB : F) {
+ for (const BasicBlock &BB : F)
for (const Instruction &I : BB) {
- for (DPValue &DPV : filterDbgVars(I.getDbgRecordRange())) {
- PredictValueOrderFromMetadata(DPV.getRawLocation());
- if (DPV.isDbgAssign())
- PredictValueOrderFromMetadata(DPV.getRawAddress());
- }
for (const Value *Op : I.operands()) {
if (isa<Constant>(*Op) || isa<InlineAsm>(*Op)) // Visit GlobalValues.
predictValueUseListOrder(Op, &F, OM, Stack);
- if (const auto *MAV = dyn_cast<MetadataAsValue>(Op))
- PredictValueOrderFromMetadata(MAV->getMetadata());
+ if (const auto *MAV = dyn_cast<MetadataAsValue>(Op)) {
+ if (const auto *VAM =
+ dyn_cast<ValueAsMetadata>(MAV->getMetadata())) {
+ predictValueUseListOrder(VAM->getValue(), &F, OM, Stack);
+ } else if (const auto *AL =
+ dyn_cast<DIArgList>(MAV->getMetadata())) {
+ for (const auto *VAM : AL->getArgs())
+ predictValueUseListOrder(VAM->getValue(), &F, OM, Stack);
+ }
+ }
}
if (auto *SVI = dyn_cast<ShuffleVectorInst>(&I))
predictValueUseListOrder(SVI->getShuffleMaskForBitcode(), &F, OM,
Stack);
predictValueUseListOrder(&I, &F, OM, Stack);
}
- }
}
// Visit globals last, since the module-level use-list block will be seen
@@ -423,41 +409,6 @@ ValueEnumerator::ValueEnumerator(const Module &M,
for (const BasicBlock &BB : F)
for (const Instruction &I : BB) {
- // Local metadata is enumerated during function-incorporation, but
- // any ConstantAsMetadata arguments in a DIArgList should be examined
- // now.
- auto EnumerateNonLocalValuesFromMetadata = [&](Metadata *MD) {
- assert(MD && "Metadata unexpectedly null");
- if (const auto *AL = dyn_cast<DIArgList>(MD)) {
- for (const auto *VAM : AL->getArgs()) {
- if (isa<ConstantAsMetadata>(VAM))
- EnumerateMetadata(&F, VAM);
- }
- return;
- }
-
- if (!isa<LocalAsMetadata>(MD))
- EnumerateMetadata(&F, MD);
- };
-
- for (DbgRecord &DR : I.getDbgRecordRange()) {
- if (DPLabel *DPL = dyn_cast<DPLabel>(&DR)) {
- EnumerateMetadata(&F, DPL->getLabel());
- EnumerateMetadata(&F, &*DPL->getDebugLoc());
- continue;
- }
- // Enumerate non-local location metadata.
- DPValue &DPV = cast<DPValue>(DR);
- EnumerateNonLocalValuesFromMetadata(DPV.getRawLocation());
- EnumerateMetadata(&F, DPV.getExpression());
- EnumerateMetadata(&F, DPV.getVariable());
- EnumerateMetadata(&F, &*DPV.getDebugLoc());
- if (DPV.isDbgAssign()) {
- EnumerateNonLocalValuesFromMetadata(DPV.getRawAddress());
- EnumerateMetadata(&F, DPV.getAssignID());
- EnumerateMetadata(&F, DPV.getAddressExpression());
- }
- }
for (const Use &Op : I.operands()) {
auto *MD = dyn_cast<MetadataAsValue>(&Op);
if (!MD) {
@@ -465,7 +416,19 @@ ValueEnumerator::ValueEnumerator(const Module &M,
continue;
}
- EnumerateNonLocalValuesFromMetadata(MD->getMetadata());
+ // Local metadata is enumerated during function-incorporation, but
+ // any ConstantAsMetadata arguments in a DIArgList should be examined
+ // now.
+ if (isa<LocalAsMetadata>(MD->getMetadata()))
+ continue;
+ if (auto *AL = dyn_cast<DIArgList>(MD->getMetadata())) {
+ for (auto *VAM : AL->getArgs())
+ if (isa<ConstantAsMetadata>(VAM))
+ EnumerateMetadata(&F, VAM);
+ continue;
+ }
+
+ EnumerateMetadata(&F, MD->getMetadata());
}
if (auto *SVI = dyn_cast<ShuffleVectorInst>(&I))
EnumerateType(SVI->getShuffleMaskForBitcode()->getType());
@@ -1101,41 +1064,27 @@ 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))
- AddFnLocalMetadata(MD->getMetadata());
- }
- /// RemoveDIs: Add non-instruction function-local metadata uses.
- for (DPValue &DPV : filterDbgVars(I.getDbgRecordRange())) {
- assert(DPV.getRawLocation() && "DPValue location unexpectedly null");
- AddFnLocalMetadata(DPV.getRawLocation());
- if (DPV.isDbgAssign()) {
- assert(DPV.getRawAddress() && "DPValue location unexpectedly null");
- AddFnLocalMetadata(DPV.getRawAddress());
+ 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 (!I.getType()->isVoidTy())
EnumerateValue(&I);
}
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp
index 5f0780847938f3..4dd1bdd6e2f4ad 100644
--- a/llvm/lib/IR/BasicBlock.cpp
+++ b/llvm/lib/IR/BasicBlock.cpp
@@ -36,11 +36,6 @@ cl::opt<bool>
"through iterators, eliminating intrinsics"),
cl::init(true));
-bool WriteNewDbgInfoFormatToBitcode /*set default value in cl::init() below*/;
-cl::opt<bool, true> WriteNewDbgInfoFormatToBitcode2(
- "write-experimental-debuginfo-iterators-to-bitcode", cl::Hidden,
- cl::location(WriteNewDbgInfoFormatToBitcode), cl::init(false));
-
DPMarker *BasicBlock::createMarker(Instruction *I) {
assert(IsNewDbgInfoFormat &&
"Tried to create a marker in a non new debug-info block!");
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp
index a7e6db82e5c23c..37d21119447b9c 100644
--- a/llvm/lib/Linker/IRMover.cpp
+++ b/llvm/lib/Linker/IRMover.cpp
@@ -8,7 +8,6 @@
#include "llvm/Linker/IRMover.h"
#include "LinkDiagnosticInfo.h"
-#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
@@ -1547,23 +1546,7 @@ Error IRLinker::run() {
if (Error Err = SrcM->getMaterializer()->materializeMetadata())
return Err;
- // Convert source module to match dest for the duration of the link.
- bool SrcModuleNewDbgFormat = SrcM->IsNewDbgInfoFormat;
- if (DstM.IsNewDbgInfoFormat != SrcM->IsNewDbgInfoFormat) {
- if (DstM.IsNewDbgInfoFormat)
- SrcM->convertToNewDbgValues();
- else
- SrcM->convertFromNewDbgValues();
- }
- // Undo debug mode conversion afterwards.
- auto Cleanup = make_scope_exit([&]() {
- if (SrcModuleNewDbgFormat != SrcM->IsNewDbgInfoFormat) {
- if (SrcModuleNewDbgFormat)
- SrcM->convertToNewDbgValues();
- else
- SrcM->convertFromNewDbgValues();
- }
- });
+ DstM.IsNewDbgInfoFormat = SrcM->IsNewDbgInfoFormat;
// Inherit the target data from the source module if the destination module
// doesn't have one already.
@@ -1792,6 +1775,8 @@ IRMover::IRMover(Module &M) : Composite(M) {
Error IRMover::move(std::unique_ptr<Module> Src,
ArrayRef<GlobalValue *> ValuesToLink,
LazyCallback AddLazyFor, bool IsPerformingImport) {
+ if (getModule().IsNewDbgInfoFormat)
+ Src->convertToNewDbgValues();
IRLinker TheIRLinker(Composite, SharedMDs, IdentifiedStructTypes,
std::move(Src), ValuesToLink, std::move(AddLazyFor),
IsPerformingImport);
diff --git a/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp b/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp
index 6b9a1f6777fc30..dd6062d303d42e 100644
--- a/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp
+++ b/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp
@@ -575,7 +575,7 @@ bool writeThinLTOBitcode(raw_ostream &OS, raw_ostream *ThinLinkOS,
}
} // anonymous namespace
-extern bool WriteNewDbgInfoFormatToBitcode;
+
PreservedAnalyses
llvm::ThinLTOBitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {
FunctionAnalysisManager &FAM =
@@ -583,9 +583,8 @@ llvm::ThinLTOBitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {
// RemoveDIs: there's no bitcode representation of the DPValue debug-info,
// convert to dbg.values before writing out.
- bool ConvertToOldDbgFormatForWrite =
- M.IsNewDbgInfoFormat && !WriteNewDbgInfoFormatToBitcode;
- if (ConvertToOldDbgFormatForWrite)
+ bool IsNewDbgInfoFormat = M.IsNewDbgInfoFormat;
+ if (IsNewDbgInfoFormat)
M.convertFromNewDbgValues();
bool Changed = writeThinLTOBitcode(
@@ -595,7 +594,7 @@ llvm::ThinLTOBitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {
},
M, &AM.getResult<ModuleSummaryIndexAnalysis>(M));
- if (ConvertToOldDbgFormatForWrite)
+ if (IsNewDbgInfoFormat)
M.convertToNewDbgValues();
return Changed ? PreservedAnalyses::none() : PreservedAnalyses::all();
diff --git a/llvm/test/Bitcode/dbg-record-roundtrip.ll b/llvm/test/Bitcode/dbg-record-roundtrip.ll
deleted file mode 100644
index be6f65c34214ea..00000000000000
--- a/llvm/test/Bitcode/dbg-record-roundtrip.ll
+++ /dev/null
@@ -1,128 +0,0 @@
-;; Roundtrip tests.
-; RUN: llvm-as --write-experimental-debuginfo-iterators-to-bitcode=true %s -o - | llvm-dis | FileCheck %s
-;; Check that verify-uselistorder passes regardless of input format.
-; RUN: llvm-as %s -o - --write-experimental-debuginfo-iterators-to-bitcode=true | verify-uselistorder
-; RUN: verify-uselistorder %s
-
-;; Confirm we're producing RemoveDI records from various tools.
-; RUN: opt %s -o - --write-experimental-debuginfo-iterators-to-bitcode=true | llvm-bcanalyzer - | FileCheck %s --check-prefix=BITCODE
-; RUN: llvm-as %s -o - --write-experimental-debuginfo-iterators-to-bitcode=true | llvm-bcanalyzer - | FileCheck %s --check-prefix=BITCODE
-; BITCODE-DAG: DEBUG_RECORD_LABEL
-; BITCODE-DAG: DEBUG_RECORD_VALUE
-; BITCODE-DAG: DEBUG_RECORD_ASSIGN
-; BITCODE-DAG: DEBUG_RECORD_DECLARE
-
-;; Check that llvm-link doesn't explode if we give it
diff erent formats to
-;; link.
-; RUN: llvm-as %s --experimental-debuginfo-iterators=true --write-experimental-debuginfo-iterators-to-bitcode=true -o - | llvm-link %s --experimental-debuginfo-iterators=false
-; RUN: llvm-as %s --experimental-debuginfo-iterators=false -o - | llvm-link %s --experimental-debuginfo-iterators=true
-
-;; Checks inline.
-
- at g = internal dso_local global i32 0, align 4, !dbg !0
-
-define internal dso_local noundef i32 @_Z3funv(i32 %p, ptr %storage) !dbg !13 {
-entry:
-;; Dbg record at top of block, check dbg.value configurations.
-; CHECK: entry:
-; CHECK-NEXT: dbg.value(metadata i32 %p, metadata ![[e:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg:[0-9]+]]
-; CHECK-NEXT: dbg.value(metadata ![[empty:[0-9]+]], metadata ![[e]], metadata !DIExpression()), !dbg ![[dbg]]
-; CHECK-NEXT: dbg.value(metadata i32 poison, metadata ![[e]], metadata !DIExpression()), !dbg ![[dbg]]
-; CHECK-NEXT: dbg.value(metadata i32 1, metadata ![[f:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg]]
- tail call void @llvm.dbg.value(metadata i32 %p, metadata !32, metadata !DIExpression()), !dbg !19
- tail call void @llvm.dbg.value(metadata !29, metadata !32, metadata !DIExpression()), !dbg !19
- tail call void @llvm.dbg.value(metadata i32 poison, metadata !32, metadata !DIExpression()), !dbg !19
- tail call void @llvm.dbg.value(metadata i32 1, metadata !33, metadata !DIExpression()), !dbg !19
-;; Arglist with an argument, constant, local use before def, poison.
-; CHECK-NEXT: dbg.value(metadata !DIArgList(i32 %p, i32 0, i32 %0, i32 poison), metadata ![[f]], metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus, DW_OP_LLVM_arg, 2, DW_OP_LLVM_arg, 3, DW_OP_plus, DW_OP_minus)), !dbg ![[dbg]]
- tail call void @llvm.dbg.value(metadata !DIArgList(i32 %p, i32 0, i32 %0, i32 poison), metadata !33, metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus, DW_OP_LLVM_arg, 2, DW_OP_LLVM_arg, 3, DW_OP_plus, DW_OP_minus)), !dbg !19
-;; Check dbg.assign use before def (value, addr and ID). Check expression order too.
-; CHECK: dbg.assign(metadata i32 %0, metadata ![[i:[0-9]+]], metadata !DIExpression(DW_OP_plus_uconst, 0),
-; CHECK-SAME: metadata ![[ID:[0-9]+]], metadata ptr %a, metadata !DIExpression(DW_OP_plus_uconst, 1)), !dbg ![[dbg]]
- tail call void @llvm.dbg.assign(metadata i32 %0, metadata !36, metadata !DIExpression(DW_OP_plus_uconst, 0), metadata !37, metadata ptr %a, metadata !DIExpression(DW_OP_plus_uconst, 1)), !dbg !19
- %a = alloca i32, align 4, !DIAssignID !37
-; CHECK: %a = alloca i32, align 4, !DIAssignID ![[ID]]
-;; Check dbg.declare configurations.
-; CHECK-NEXT: dbg.declare(metadata ptr %a, metadata ![[a:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg]]
-; CHECK-NEXT: dbg.declare(metadata ![[empty:[0-9]+]], metadata ![[b:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg]]
-; CHECK-NEXT: dbg.declare(metadata ptr poison, metadata ![[c:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg]]
-; CHECK-NEXT: dbg.declare(metadata ptr null, metadata ![[d:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg]]
-; CHECK-NEXT: dbg.declare(metadata ptr @g, metadata ![[h:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg]]
- tail call void @llvm.dbg.declare(metadata ptr %a, metadata !17, metadata !DIExpression()), !dbg !19
- tail call void @llvm.dbg.declare(metadata !29, metadata !28, metadata !DIExpression()), !dbg !19
- tail call void @llvm.dbg.declare(metadata ptr poison, metadata !30, metadata !DIExpression()), !dbg !19
- tail call void @llvm.dbg.declare(metadata ptr null, metadata !31, metadata !DIExpression()), !dbg !19
- tail call void @llvm.dbg.declare(metadata ptr @g, metadata !35, metadata !DIExpression()), !dbg !19
-;; Argument value dbg.declare.
-; CHECK: dbg.declare(metadata ptr %storage, metadata ![[g:[0-9]+]], metadata !DIExpression()), !dbg ![[dbg]]
- tail call void @llvm.dbg.declare(metadata ptr %storage, metadata !34, metadata !DIExpression()), !dbg !19
-;; Use before def dbg.value.
-; CHECK: dbg.value(metadata i32 %0, metadata ![[e]], metadata !DIExpression()), !dbg ![[dbg]]
- tail call void @llvm.dbg.value(metadata i32 %0, metadata !32, metadata !DIExpression()), !dbg !19
- %0 = load i32, ptr @g, align 4, !dbg !20
-;; Non-argument local value dbg.value.
-; CHECK: dbg.value(metadata i32 %0, metadata ![[e]], metadata !DIExpression()), !dbg ![[dbg]]
- tail call void @llvm.dbg.value(metadata i32 %0, metadata !32, metadata !DIExpression()), !dbg !19
- store i32 %0, ptr %a, align 4, !dbg !19
- %1 = load i32, ptr %a, align 4, !dbg !25
-; CHECK: dbg.label(metadata ![[label:[0-9]+]]), !dbg ![[dbg]]
- tail call void @llvm.dbg.label(metadata !38), !dbg !19
- ret i32 %1, !dbg !27
-}
-
-; CHECK-DAG: ![[a]] = !DILocalVariable(name: "a",
-; CHECK-DAG: ![[b]] = !DILocalVariable(name: "b",
-; CHECK-DAG: ![[c]] = !DILocalVariable(name: "c",
-; CHECK-DAG: ![[d]] = !DILocalVariable(name: "d",
-; CHECK-DAG: ![[e]] = !DILocalVariable(name: "e",
-; CHECK-DAG: ![[f]] = !DILocalVariable(name: "f",
-; CHECK-DAG: ![[g]] = !DILocalVariable(name: "g",
-; CHECK-DAG: ![[h]] = !DILocalVariable(name: "h",
-; CHECK-DAG: ![[i]] = !DILocalVariable(name: "i",
-; CHECK-DAG: ![[empty]] = !{}
-; CHECK-DAG: ![[label]] = !DILabel
-
-declare void @llvm.dbg.declare(metadata, metadata, metadata)
-declare void @llvm.dbg.value(metadata, metadata, metadata)
-declare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata)
-declare void @llvm.dbg.label(metadata)
-
-!llvm.dbg.cu = !{!2}
-!llvm.module.flags = !{!6, !7, !8, !9, !10, !11}
-!llvm.ident = !{!12}
-
-!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
-!1 = distinct !DIGlobalVariable(name: "g", scope: !2, file: !3, line: 1, type: !5, isLocal: false, isDefinition: true)
-!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !3, producer: "clang version 19.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, nameTableKind: None)
-!3 = !DIFile(filename: "test.cpp", directory: "/")
-!4 = !{!0}
-!5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!6 = !{i32 7, !"Dwarf Version", i32 5}
-!7 = !{i32 2, !"Debug Info Version", i32 3}
-!8 = !{i32 1, !"wchar_size", i32 4}
-!9 = !{i32 8, !"PIC Level", i32 2}
-!10 = !{i32 7, !"PIE Level", i32 2}
-!11 = !{i32 7, !"uwtable", i32 2}
-!12 = !{!"clang version 19.0.0"}
-!13 = distinct !DISubprogram(name: "fun", linkageName: "_Z3funv", scope: !3, file: !3, line: 2, type: !14, scopeLine: 2, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !16)
-!14 = !DISubroutineType(types: !15)
-!15 = !{!5}
-!16 = !{!17}
-!17 = !DILocalVariable(name: "a", scope: !13, file: !3, line: 3, type: !5)
-!18 = !DILocation(line: 3, column: 3, scope: !13)
-!19 = !DILocation(line: 3, column: 7, scope: !13)
-!20 = !DILocation(line: 3, column: 11, scope: !13)
-!25 = !DILocation(line: 4, column: 12, scope: !13)
-!26 = !DILocation(line: 5, column: 1, scope: !13)
-!27 = !DILocation(line: 4, column: 5, scope: !13)
-!28 = !DILocalVariable(name: "b", scope: !13, file: !3, line: 3, type: !5)
-!29 = !{}
-!30 = !DILocalVariable(name: "c", scope: !13, file: !3, line: 3, type: !5)
-!31 = !DILocalVariable(name: "d", scope: !13, file: !3, line: 3, type: !5)
-!32 = !DILocalVariable(name: "e", scope: !13, file: !3, line: 3, type: !5)
-!33 = !DILocalVariable(name: "f", scope: !13, file: !3, line: 3, type: !5)
-!34 = !DILocalVariable(name: "g", scope: !13, file: !3, line: 3, type: !5)
-!35 = !DILocalVariable(name: "h", scope: !13, file: !3, line: 3, type: !5)
-!36 = !DILocalVariable(name: "i", scope: !13, file: !3, line: 3, type: !5)
-!37 = distinct !DIAssignID()
-!38 = !DILabel(scope: !13, name: "label", file: !3, line: 1)
diff --git a/llvm/tools/llvm-as/llvm-as.cpp b/llvm/tools/llvm-as/llvm-as.cpp
index fd852563838f37..1c869e1739319e 100644
--- a/llvm/tools/llvm-as/llvm-as.cpp
+++ b/llvm/tools/llvm-as/llvm-as.cpp
@@ -67,7 +67,6 @@ static cl::opt<std::string> ClDataLayout("data-layout",
cl::desc("data layout string to use"),
cl::value_desc("layout-string"),
cl::init(""), cl::cat(AsCat));
-extern bool WriteNewDbgInfoFormatToBitcode;
static void WriteOutputFile(const Module *M, const ModuleSummaryIndex *Index) {
// Infer the output filename if needed.
@@ -140,12 +139,6 @@ int main(int argc, char **argv) {
Err.print(argv[0], errs());
return 1;
}
-
- // Convert to new debug format if requested.
- assert(!M->IsNewDbgInfoFormat && "Unexpectedly in new debug mode");
- if (UseNewDbgInfoFormat && WriteNewDbgInfoFormatToBitcode)
- M->convertToNewDbgValues();
-
std::unique_ptr<ModuleSummaryIndex> Index = std::move(ModuleAndIndex.Index);
if (!DisableVerify) {
diff --git a/llvm/tools/verify-uselistorder/verify-uselistorder.cpp b/llvm/tools/verify-uselistorder/verify-uselistorder.cpp
index d929ae09958a1f..9afe6817fefb9f 100644
--- a/llvm/tools/verify-uselistorder/verify-uselistorder.cpp
+++ b/llvm/tools/verify-uselistorder/verify-uselistorder.cpp
@@ -166,11 +166,6 @@ std::unique_ptr<Module> TempFile::readBitcode(LLVMContext &Context) const {
"verify-uselistorder: error: ");
return nullptr;
}
-
- // verify-uselistoder currently only supports old-style debug info mode.
- // FIXME: Update mapping code for RemoveDIs.
- assert(!ModuleOr.get()->IsNewDbgInfoFormat &&
- "Unexpectedly in new debug info mode");
return std::move(ModuleOr.get());
}
@@ -180,9 +175,6 @@ std::unique_ptr<Module> TempFile::readAssembly(LLVMContext &Context) const {
std::unique_ptr<Module> 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.
- assert(!M->IsNewDbgInfoFormat && "Unexpectedly in new debug info mode");
return M;
}
@@ -549,9 +541,6 @@ int main(int argc, char **argv) {
// Load the input module...
std::unique_ptr<Module> M = parseIRFile(InputFilename, Err, Context);
- // verify-uselistoder currently only supports old-style debug info mode.
- // FIXME: Update mapping code for RemoveDIs.
- assert(!M->IsNewDbgInfoFormat && "Unexpectedly in new debug info mode");
if (!M.get()) {
Err.print(argv[0], errs());
More information about the llvm-branch-commits
mailing list