[llvm] [DebugInfo][RemoveDIs] Interpret DPValue objects in SelectionDAG (PR #72253)
Orlando Cazalet-Hyams via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 15 09:46:39 PST 2023
================
@@ -106,54 +106,44 @@ class SelectionDAGBuilder {
/// Helper type for DanglingDebugInfoMap.
class DanglingDebugInfo {
- using DbgValTy = const DbgValueInst *;
- using VarLocTy = const VarLocInfo *;
- PointerUnion<DbgValTy, VarLocTy> Info;
unsigned SDNodeOrder = 0;
public:
+ DILocalVariable *Variable;
+ DIExpression *Expression;
+ DebugLoc dl;
DanglingDebugInfo() = default;
- DanglingDebugInfo(const DbgValueInst *DI, unsigned SDNO)
- : Info(DI), SDNodeOrder(SDNO) {}
- DanglingDebugInfo(const VarLocInfo *VarLoc, unsigned SDNO)
- : Info(VarLoc), SDNodeOrder(SDNO) {}
-
- DILocalVariable *getVariable(const FunctionVarLocs *Locs) const {
- if (isa<VarLocTy>(Info))
- return Locs->getDILocalVariable(cast<VarLocTy>(Info)->VariableID);
- return cast<DbgValTy>(Info)->getVariable();
+ DanglingDebugInfo(DILocalVariable *Var, DIExpression *Expr, DebugLoc DL, unsigned SDNO)
+ : SDNodeOrder(SDNO), Variable(Var), Expression(Expr), dl(std::move(DL)) {}
+
+ DILocalVariable *getVariable() const {
+ return Variable;
}
DIExpression *getExpression() const {
- if (isa<VarLocTy>(Info))
- return cast<VarLocTy>(Info)->Expr;
- return cast<DbgValTy>(Info)->getExpression();
- }
- Value *getVariableLocationOp(unsigned Idx) const {
- assert(Idx == 0 && "Dangling variadic debug values not supported yet");
- if (isa<VarLocTy>(Info))
- return cast<VarLocTy>(Info)->Values.getVariableLocationOp(Idx);
- return cast<DbgValTy>(Info)->getVariableLocationOp(Idx);
+ return Expression;
}
DebugLoc getDebugLoc() const {
- if (isa<VarLocTy>(Info))
- return cast<VarLocTy>(Info)->DL;
- return cast<DbgValTy>(Info)->getDebugLoc();
+ return dl;
}
unsigned getSDNodeOrder() const { return SDNodeOrder; }
/// Helper for printing DanglingDebugInfo. This hoop-jumping is to
/// accommodate the fact that an argument is required for getVariable.
/// Call SelectionDAGBuilder::printDDI instead of using directly.
struct Print {
- Print(const DanglingDebugInfo &DDI, const FunctionVarLocs *VarLocs)
- : DDI(DDI), VarLocs(VarLocs) {}
+ Print(const Value *V, const DanglingDebugInfo &DDI)
+ : V(V), DDI(DDI) {}
+ const Value *V;
const DanglingDebugInfo &DDI;
- const FunctionVarLocs *VarLocs;
friend raw_ostream &operator<<(raw_ostream &OS,
const DanglingDebugInfo::Print &P) {
- OS << "DDI(var=" << *P.DDI.getVariable(P.VarLocs)
- << ", val= " << *P.DDI.getVariableLocationOp(0)
- << ", expr=" << *P.DDI.getExpression()
+ OS << "DDI(var=" << *P.DDI.getVariable();
----------------
OCHyams wrote:
If the parameter isn't needed anymore `getVariable(P.VarLocs)`
```
/// Helper for printing DanglingDebugInfo. This hoop-jumping is to
/// accommodate the fact that an argument is required for getVariable.
/// Call SelectionDAGBuilder::printDDI instead of using directly.
```
Can we delete this blob of code?
https://github.com/llvm/llvm-project/pull/72253
More information about the llvm-commits
mailing list