summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp38
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h25
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp18
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();
}
OpenPOWER on IntegriCloud