LLVM  4.0.0
SDNodeDbgValue.h
Go to the documentation of this file.
1 //===-- llvm/CodeGen/SDNodeDbgValue.h - SelectionDAG dbg_value --*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file declares the SDDbgValue class.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_CODEGEN_SELECTIONDAG_SDNODEDBGVALUE_H
15 #define LLVM_LIB_CODEGEN_SELECTIONDAG_SDNODEDBGVALUE_H
16 
17 #include "llvm/IR/DebugLoc.h"
18 #include "llvm/Support/DataTypes.h"
19 #include <utility>
20 
21 namespace llvm {
22 
23 class MDNode;
24 class SDNode;
25 class Value;
26 
27 /// SDDbgValue - Holds the information from a dbg_value node through SDISel.
28 /// We do not use SDValue here to avoid including its header.
29 
30 class SDDbgValue {
31 public:
32  enum DbgValueKind {
33  SDNODE = 0, // value is the result of an expression
34  CONST = 1, // value is a constant
35  FRAMEIX = 2 // value is contents of a stack location
36  };
37 private:
38  union {
39  struct {
40  SDNode *Node; // valid for expressions
41  unsigned ResNo; // valid for expressions
42  } s;
43  const Value *Const; // valid for constants
44  unsigned FrameIx; // valid for stack objects
45  } u;
46  MDNode *Var;
47  MDNode *Expr;
48  uint64_t Offset;
49  DebugLoc DL;
50  unsigned Order;
51  enum DbgValueKind kind;
52  bool IsIndirect;
53  bool Invalid = false;
54 
55 public:
56  // Constructor for non-constants.
57  SDDbgValue(MDNode *Var, MDNode *Expr, SDNode *N, unsigned R, bool indir,
58  uint64_t off, DebugLoc dl, unsigned O)
59  : Var(Var), Expr(Expr), Offset(off), DL(std::move(dl)), Order(O),
60  IsIndirect(indir) {
61  kind = SDNODE;
62  u.s.Node = N;
63  u.s.ResNo = R;
64  }
65 
66  // Constructor for constants.
67  SDDbgValue(MDNode *Var, MDNode *Expr, const Value *C, uint64_t off,
68  DebugLoc dl, unsigned O)
69  : Var(Var), Expr(Expr), Offset(off), DL(std::move(dl)), Order(O),
70  IsIndirect(false) {
71  kind = CONST;
72  u.Const = C;
73  }
74 
75  // Constructor for frame indices.
76  SDDbgValue(MDNode *Var, MDNode *Expr, unsigned FI, uint64_t off, DebugLoc dl,
77  unsigned O)
78  : Var(Var), Expr(Expr), Offset(off), DL(std::move(dl)), Order(O),
79  IsIndirect(false) {
80  kind = FRAMEIX;
81  u.FrameIx = FI;
82  }
83 
84  // Returns the kind.
85  DbgValueKind getKind() const { return kind; }
86 
87  // Returns the MDNode pointer for the variable.
88  MDNode *getVariable() const { return Var; }
89 
90  // Returns the MDNode pointer for the expression.
91  MDNode *getExpression() const { return Expr; }
92 
93  // Returns the SDNode* for a register ref
94  SDNode *getSDNode() const { assert (kind==SDNODE); return u.s.Node; }
95 
96  // Returns the ResNo for a register ref
97  unsigned getResNo() const { assert (kind==SDNODE); return u.s.ResNo; }
98 
99  // Returns the Value* for a constant
100  const Value *getConst() const { assert (kind==CONST); return u.Const; }
101 
102  // Returns the FrameIx for a stack object
103  unsigned getFrameIx() const { assert (kind==FRAMEIX); return u.FrameIx; }
104 
105  // Returns whether this is an indirect value.
106  bool isIndirect() const { return IsIndirect; }
107 
108  // Returns the offset.
109  uint64_t getOffset() const { return Offset; }
110 
111  // Returns the DebugLoc.
112  DebugLoc getDebugLoc() const { return DL; }
113 
114  // Returns the SDNodeOrder. This is the order of the preceding node in the
115  // input.
116  unsigned getOrder() const { return Order; }
117 
118  // setIsInvalidated / isInvalidated - Setter / getter of the "Invalidated"
119  // property. A SDDbgValue is invalid if the SDNode that produces the value is
120  // deleted.
121  void setIsInvalidated() { Invalid = true; }
122  bool isInvalidated() const { return Invalid; }
123 };
124 
125 } // end llvm namespace
126 
127 #endif
struct llvm::SDDbgValue::@261::@262 s
bool isInvalidated() const
A debug info location.
Definition: DebugLoc.h:34
Metadata node.
Definition: Metadata.h:830
const Value * Const
MDNode * getExpression() const
bool isIndirect() const
Function Alias Analysis false
DbgValueKind getKind() const
SDDbgValue(MDNode *Var, MDNode *Expr, SDNode *N, unsigned R, bool indir, uint64_t off, DebugLoc dl, unsigned O)
unsigned getFrameIx() const
SDDbgValue(MDNode *Var, MDNode *Expr, unsigned FI, uint64_t off, DebugLoc dl, unsigned O)
SDNode * getSDNode() const
Represents one node in the SelectionDAG.
static GCRegistry::Add< ShadowStackGC > C("shadow-stack","Very portable GC for uncooperative code generators")
#define N
DebugLoc getDebugLoc() const
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
const Value * getConst() const
uint64_t getOffset() const
LLVM Value Representation.
Definition: Value.h:71
unsigned getResNo() const
SDDbgValue(MDNode *Var, MDNode *Expr, const Value *C, uint64_t off, DebugLoc dl, unsigned O)
MDNode * getVariable() const
SDDbgValue - Holds the information from a dbg_value node through SDISel.
unsigned getOrder() const