[llvm] [RemoveDIs][DebugInfo] Enable creation of DPVAssigns, update outstanding AT tests (PR #79148)
Orlando Cazalet-Hyams via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 23 07:27:27 PST 2024
================
@@ -2206,32 +2217,40 @@ bool AssignmentTrackingPass::runOnFunction(Function &F) {
// storage" is limited to Allocas). We'll use this to find dbg.declares to
// delete after running `trackAssignments`.
DenseMap<const AllocaInst *, SmallPtrSet<DbgDeclareInst *, 2>> DbgDeclares;
+ DenseMap<const AllocaInst *, SmallPtrSet<DPValue *, 2>> DPVDeclares;
// Create another similar map of {storage : variables} that we'll pass to
// trackAssignments.
StorageToVarsMap Vars;
+ auto ProcessDeclare = [&](auto *Declare, auto &DeclareList) {
+ // FIXME: trackAssignments doesn't let you specify any modifiers to the
+ // variable (e.g. fragment) or location (e.g. offset), so we have to
+ // leave dbg.declares with non-empty expressions in place.
+ if (Declare->getExpression()->getNumElements() != 0)
+ return;
+ if (!Declare->getAddress())
+ return;
+ if (AllocaInst *Alloca =
+ dyn_cast<AllocaInst>(Declare->getAddress()->stripPointerCasts())) {
+ // FIXME: Skip VLAs for now (let these variables use dbg.declares).
+ if (!Alloca->isStaticAlloca())
+ return;
+ // Similarly, skip scalable vectors (use dbg.declares instead).
+ if (auto Sz = Alloca->getAllocationSize(*DL); Sz && Sz->isScalable())
+ return;
+ DeclareList[Alloca].insert(Declare);
+ Vars[Alloca].insert(VarRecord(Declare));
+ }
+ };
for (auto &BB : F) {
for (auto &I : BB) {
+ for (auto &DPV : I.getDbgValueRange()) {
+ if (DPV.isDbgDeclare())
+ ProcessDeclare(&DPV, DPVDeclares);
+ }
DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(&I);
if (!DDI)
continue;
- // FIXME: trackAssignments doesn't let you specify any modifiers to the
- // variable (e.g. fragment) or location (e.g. offset), so we have to
- // leave dbg.declares with non-empty expressions in place.
- if (DDI->getExpression()->getNumElements() != 0)
- continue;
- if (!DDI->getAddress())
- continue;
- if (AllocaInst *Alloca =
- dyn_cast<AllocaInst>(DDI->getAddress()->stripPointerCasts())) {
- // FIXME: Skip VLAs for now (let these variables use dbg.declares).
- if (!Alloca->isStaticAlloca())
- continue;
- // Similarly, skip scalable vectors (use dbg.declares instead).
- if (auto Sz = Alloca->getAllocationSize(*DL); Sz && Sz->isScalable())
- continue;
- DbgDeclares[Alloca].insert(DDI);
- Vars[Alloca].insert(VarRecord(DDI));
- }
+ ProcessDeclare(DDI, DbgDeclares);
----------------
OCHyams wrote:
nit, I think this should be simplified to:
```
if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(&I))
ProcessDeclare(DDI, DbgDeclares);
```
https://github.com/llvm/llvm-project/pull/79148
More information about the llvm-commits
mailing list