forked from OSchip/llvm-project
Simplify dbg.value handling in SDISel with early returns
No functional change other than improving dbgs logging accuracy on constant dbg values. Previously we would add things like "i32 42" as debug values, and then log that we were dropping the debug info, which is silly. Delete some dead code that was checking for static allocas. This remained after r207165, but served no purpose. Currently, static alloca dbg.values are always sent through the DanglingDebugInfoMap, and are usually made valid the first time the alloca is used. llvm-svn: 302267
This commit is contained in:
parent
03cdd1241f
commit
ac1a97b32f
|
@ -4992,45 +4992,33 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
|||
SDV = DAG.getConstantDbgValue(Variable, Expression, V, Offset, dl,
|
||||
SDNodeOrder);
|
||||
DAG.AddDbgValue(SDV, nullptr, false);
|
||||
} else {
|
||||
// Do not use getValue() in here; we don't want to generate code at
|
||||
// this point if it hasn't been done yet.
|
||||
SDValue N = NodeMap[V];
|
||||
if (!N.getNode() && isa<Argument>(V))
|
||||
// Check unused arguments map.
|
||||
N = UnusedArgNodeMap[V];
|
||||
if (N.getNode()) {
|
||||
if (!EmitFuncArgumentDbgValue(V, Variable, Expression, dl, Offset,
|
||||
false, N)) {
|
||||
SDV = getDbgValue(N, Variable, Expression, Offset, dl, SDNodeOrder);
|
||||
DAG.AddDbgValue(SDV, N.getNode(), false);
|
||||
}
|
||||
} else if (!V->use_empty() ) {
|
||||
// Do not call getValue(V) yet, as we don't want to generate code.
|
||||
// Remember it for later.
|
||||
DanglingDebugInfo DDI(&DI, dl, SDNodeOrder);
|
||||
DanglingDebugInfoMap[V] = DDI;
|
||||
} else {
|
||||
// We may expand this to cover more cases. One case where we have no
|
||||
// data available is an unreferenced parameter.
|
||||
DEBUG(dbgs() << "Dropping debug info for " << DI << "\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Build a debug info table entry.
|
||||
if (const BitCastInst *BCI = dyn_cast<BitCastInst>(V))
|
||||
V = BCI->getOperand(0);
|
||||
const AllocaInst *AI = dyn_cast<AllocaInst>(V);
|
||||
// Don't handle byval struct arguments or VLAs, for example.
|
||||
if (!AI) {
|
||||
DEBUG(dbgs() << "Dropping debug location info for:\n " << DI << "\n");
|
||||
DEBUG(dbgs() << " Last seen at:\n " << *V << "\n");
|
||||
return nullptr;
|
||||
}
|
||||
DenseMap<const AllocaInst*, int>::iterator SI =
|
||||
FuncInfo.StaticAllocaMap.find(AI);
|
||||
if (SI == FuncInfo.StaticAllocaMap.end())
|
||||
return nullptr; // VLAs.
|
||||
|
||||
// Do not use getValue() in here; we don't want to generate code at
|
||||
// this point if it hasn't been done yet.
|
||||
SDValue N = NodeMap[V];
|
||||
if (!N.getNode() && isa<Argument>(V)) // Check unused arguments map.
|
||||
N = UnusedArgNodeMap[V];
|
||||
if (N.getNode()) {
|
||||
if (EmitFuncArgumentDbgValue(V, Variable, Expression, dl, Offset, false,
|
||||
N))
|
||||
return nullptr;
|
||||
SDV = getDbgValue(N, Variable, Expression, Offset, dl, SDNodeOrder);
|
||||
DAG.AddDbgValue(SDV, N.getNode(), false);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!V->use_empty() ) {
|
||||
// Do not call getValue(V) yet, as we don't want to generate code.
|
||||
// Remember it for later.
|
||||
DanglingDebugInfo DDI(&DI, dl, SDNodeOrder);
|
||||
DanglingDebugInfoMap[V] = DDI;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DEBUG(dbgs() << "Dropping debug location info for:\n " << DI << "\n");
|
||||
DEBUG(dbgs() << " Last seen at:\n " << *V << "\n");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue