Skip to content

Commit

Permalink
[饾榾饾椊饾椏] initial version
Browse files Browse the repository at this point in the history
Created using spr 1.3.6-beta.1
  • Loading branch information
slinder1 committed Nov 8, 2023
2 parents ef6d187 + f1931b6 commit 28e8baf
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,18 @@ static void handleNewDebugValue(InlinedEntity Var, const MachineInstr &DV,
DbgValueHistoryMap &HistMap) {
EntryIndex NewIndex;
if (HistMap.startDbgValue(Var, DV, NewIndex)) {
// As we already need to iterate all LiveEntries when handling a DbgValue,
// we use this map to avoid a more expensive check against RegVars. There
// is an assert that we handle this correclty in addRegDescribedVar.
//
// In other terms, the presense in this map indicates the presense of a
// corresponding entry in RegVars.
//
// The bool value then tracks whether an entry is to be retained (true) or
// removed (false); as we end previous entries we speculatively assume they
// can be dropped from RegVars, but we then also visit the new entry whose
// set of debug register operands may overlap and "save" a reg from being
// dropped.
SmallDenseMap<unsigned, bool, 4> TrackedRegs;

// If we have created a new debug value entry, close all preceding
Expand Down Expand Up @@ -466,9 +478,6 @@ void llvm::calculateDbgEntityHistory(const MachineFunction *MF,
for (const auto &MI : MBB) {
if (MI.isDebugValue()) {
assert(MI.getNumOperands() > 1 && "Invalid DBG_VALUE instruction!");
// Use the base variable (without any DW_OP_piece expressions)
// as index into History. The full variables including the
// piece expressions are attached to the MI.
const DILocalVariable *RawVar = MI.getDebugVariable();
assert(RawVar->isValidLocationForIntrinsic(MI.getDebugLoc()) &&
"Expected inlined-at fields to agree");
Expand All @@ -492,8 +501,7 @@ void llvm::calculateDbgEntityHistory(const MachineFunction *MF,
if (MI.isMetaInstruction())
continue;

// Not a DBG_VALUE instruction. It may clobber registers which describe
// some variables.
// Other instruction may clobber registers which describe some variables.
for (const MachineOperand &MO : MI.operands()) {
if (MO.isReg() && MO.isDef() && MO.getReg()) {
// Ignore call instructions that claim to clobber SP. The AArch64
Expand Down

0 comments on commit 28e8baf

Please sign in to comment.