diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp | 38 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h | 25 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 18 |
3 files changed, 19 insertions, 62 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index 7bef90d01a0..001eed9fb8f 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -14,12 +14,8 @@ //===----------------------------------------------------------------------===// #include "LegalizeTypes.h" -#include "SDNodeDbgValue.h" #include "llvm/ADT/SetVector.h" -#include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/IR/CallingConv.h" -#include "llvm/IR/DIBuilder.h" #include "llvm/IR/DataLayout.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ErrorHandling.h" @@ -826,34 +822,6 @@ void DAGTypeLegalizer::GetExpandedInteger(SDValue Op, SDValue &Lo, Hi = Entry.second; } -/// Transfer debug valies by generating fragment expressions for split-up -/// values. -static void transferDbgValues(SelectionDAG &DAG, DIBuilder &DIB, SDValue From, - SDValue To, unsigned OffsetInBits) { - SDNode *FromNode = From.getNode(); - SDNode *ToNode = To.getNode(); - assert(FromNode != ToNode); - - for (SDDbgValue *Dbg : DAG.GetDbgValues(FromNode)) { - if (Dbg->getKind() != SDDbgValue::SDNODE) - break; - - DIVariable *Var = Dbg->getVariable(); - DIExpression *Fragment = DIB.createFragmentExpression( - OffsetInBits, To.getValueSizeInBits(), - cast_or_null<DIExpression>(Dbg->getExpression())); - SDDbgValue *Clone = - DAG.getDbgValue(Var, Fragment, ToNode, To.getResNo(), Dbg->isIndirect(), - Dbg->getDebugLoc(), Dbg->getOrder()); - Dbg->setIsInvalidated(); - DAG.AddDbgValue(Clone, ToNode, false); - - // Add the expression to the metadata graph so isn't lost in MIR dumps. - const Module *M = DAG.getMachineFunction().getMMI().getModule(); - M->getNamedMetadata("llvm.dbg.mir")->addOperand(Fragment); - } -} - void DAGTypeLegalizer::SetExpandedInteger(SDValue Op, SDValue Lo, SDValue Hi) { assert(Lo.getValueType() == @@ -864,12 +832,6 @@ void DAGTypeLegalizer::SetExpandedInteger(SDValue Op, SDValue Lo, AnalyzeNewValue(Lo); AnalyzeNewValue(Hi); - // Transfer debug values. - const Module *M = DAG.getMachineFunction().getMMI().getModule(); - DIBuilder DIB(*const_cast<Module *>(M)); - transferDbgValues(DAG, DIB, Op, Lo, 0); - transferDbgValues(DAG, DIB, Op, Hi, Lo.getValueSizeInBits()); - // Remember that this is the result of the node. std::pair<SDValue, SDValue> &Entry = ExpandedIntegers[Op]; assert(!Entry.first.getNode() && "Node already expanded"); diff --git a/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h b/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h index cd5b4c12f1d..a1b1c78fb8c 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h +++ b/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h @@ -20,8 +20,7 @@ namespace llvm { -class DIVariable; -class DIExpression; +class MDNode; class SDNode; class Value; @@ -44,8 +43,8 @@ private: const Value *Const; // valid for constants unsigned FrameIx; // valid for stack objects } u; - DIVariable *Var; - DIExpression *Expr; + MDNode *Var; + MDNode *Expr; DebugLoc DL; unsigned Order; enum DbgValueKind kind; @@ -54,8 +53,8 @@ private: public: // Constructor for non-constants. - SDDbgValue(DIVariable *Var, DIExpression *Expr, SDNode *N, unsigned R, - bool indir, DebugLoc dl, unsigned O) + SDDbgValue(MDNode *Var, MDNode *Expr, SDNode *N, unsigned R, bool indir, + DebugLoc dl, unsigned O) : Var(Var), Expr(Expr), DL(std::move(dl)), Order(O), IsIndirect(indir) { kind = SDNODE; u.s.Node = N; @@ -63,16 +62,14 @@ public: } // Constructor for constants. - SDDbgValue(DIVariable *Var, DIExpression *Expr, const Value *C, DebugLoc dl, - unsigned O) + SDDbgValue(MDNode *Var, MDNode *Expr, const Value *C, DebugLoc dl, unsigned O) : Var(Var), Expr(Expr), DL(std::move(dl)), Order(O), IsIndirect(false) { kind = CONST; u.Const = C; } // Constructor for frame indices. - SDDbgValue(DIVariable *Var, DIExpression *Expr, unsigned FI, DebugLoc dl, - unsigned O) + SDDbgValue(MDNode *Var, MDNode *Expr, unsigned FI, DebugLoc dl, unsigned O) : Var(Var), Expr(Expr), DL(std::move(dl)), Order(O), IsIndirect(false) { kind = FRAMEIX; u.FrameIx = FI; @@ -81,11 +78,11 @@ public: // Returns the kind. DbgValueKind getKind() const { return kind; } - // Returns the DIVariable pointer for the variable. - DIVariable *getVariable() const { return Var; } + // Returns the MDNode pointer for the variable. + MDNode *getVariable() const { return Var; } - // Returns the DIExpression pointer for the expression. - DIExpression *getExpression() const { return Expr; } + // Returns the MDNode pointer for the expression. + MDNode *getExpression() const { return Expr; } // Returns the SDNode* for a register ref SDNode *getSDNode() const { assert (kind==SDNODE); return u.s.Node; } diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 457c9b1fa1e..0ef8adaabbb 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -6879,8 +6879,8 @@ SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList, /// getDbgValue - Creates a SDDbgValue node. /// /// SDNode -SDDbgValue *SelectionDAG::getDbgValue(DIVariable *Var, DIExpression *Expr, - SDNode *N, unsigned R, bool IsIndirect, +SDDbgValue *SelectionDAG::getDbgValue(MDNode *Var, MDNode *Expr, SDNode *N, + unsigned R, bool IsIndirect, const DebugLoc &DL, unsigned O) { assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) && "Expected inlined-at fields to agree"); @@ -6889,8 +6889,7 @@ SDDbgValue *SelectionDAG::getDbgValue(DIVariable *Var, DIExpression *Expr, } /// Constant -SDDbgValue *SelectionDAG::getConstantDbgValue(DIVariable *Var, - DIExpression *Expr, +SDDbgValue *SelectionDAG::getConstantDbgValue(MDNode *Var, MDNode *Expr, const Value *C, const DebugLoc &DL, unsigned O) { assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) && @@ -6899,9 +6898,8 @@ SDDbgValue *SelectionDAG::getConstantDbgValue(DIVariable *Var, } /// FrameIndex -SDDbgValue *SelectionDAG::getFrameIndexDbgValue(DIVariable *Var, - DIExpression *Expr, unsigned FI, - const DebugLoc &DL, +SDDbgValue *SelectionDAG::getFrameIndexDbgValue(MDNode *Var, MDNode *Expr, + unsigned FI, const DebugLoc &DL, unsigned O) { assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) && "Expected inlined-at fields to agree"); @@ -7339,9 +7337,9 @@ void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) { Dbg->getResNo() == From.getResNo() && !Dbg->isInvalidated()) { assert(FromNode != ToNode && "Should not transfer Debug Values intranode"); - SDDbgValue *Clone = getDbgValue( - Dbg->getVariable(), Dbg->getExpression(), ToNode, Dbg->getResNo(), - Dbg->isIndirect(), Dbg->getDebugLoc(), Dbg->getOrder()); + SDDbgValue *Clone = getDbgValue(Dbg->getVariable(), Dbg->getExpression(), + ToNode, To.getResNo(), Dbg->isIndirect(), + Dbg->getDebugLoc(), Dbg->getOrder()); ClonedDVs.push_back(Clone); Dbg->setIsInvalidated(); } |