1a8efe28a44996978faa42a387f1a6087a7b942c7Evan Cheng//===-- llvm/CodeGen/SDNodeDbgValue.h - SelectionDAG dbg_value --*- C++ -*-===// 206a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// 306a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// The LLVM Compiler Infrastructure 406a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// 506a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// This file is distributed under the University of Illinois Open Source 606a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// License. See LICENSE.TXT for details. 706a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// 806a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen//===----------------------------------------------------------------------===// 906a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// 1006a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// This file declares the SDDbgValue class. 1106a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen// 1206a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen//===----------------------------------------------------------------------===// 1306a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 14a8efe28a44996978faa42a387f1a6087a7b942c7Evan Cheng#ifndef LLVM_CODEGEN_SDNODEDBGVALUE_H 15a8efe28a44996978faa42a387f1a6087a7b942c7Evan Cheng#define LLVM_CODEGEN_SDNODEDBGVALUE_H 1606a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 1706a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen#include "llvm/ADT/SmallVector.h" 181f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/DataTypes.h" 19a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "llvm/Support/DebugLoc.h" 2006a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 2106a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesennamespace llvm { 2206a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 2306a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesenclass MDNode; 2406a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesenclass SDNode; 2506a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesenclass Value; 2606a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 2706a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen/// SDDbgValue - Holds the information from a dbg_value node through SDISel. 2806a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen/// We do not use SDValue here to avoid including its header. 2906a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 3006a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesenclass SDDbgValue { 31bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesenpublic: 32bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen enum DbgValueKind { 33e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen SDNODE = 0, // value is the result of an expression 34e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen CONST = 1, // value is a constant 35e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen FRAMEIX = 2 // value is contents of a stack location 36bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen }; 37bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesenprivate: 38bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen enum DbgValueKind kind; 39bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen union { 40bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen struct { 41e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen SDNode *Node; // valid for expressions 42e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen unsigned ResNo; // valid for expressions 43bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen } s; 4446510a73e977273ec67747eb34cbdb43f815e451Dan Gohman const Value *Const; // valid for constants 45bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen unsigned FrameIx; // valid for stack objects 46bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen } u; 4706a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen MDNode *mdPtr; 4806a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen uint64_t Offset; 4906a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen DebugLoc DL; 50fab4a25d46cdd178c20e6a8029a2eed10f61f0baDale Johannesen unsigned Order; 51bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng bool Invalid; 5206a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesenpublic: 5306a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen // Constructor for non-constants. 54fab4a25d46cdd178c20e6a8029a2eed10f61f0baDale Johannesen SDDbgValue(MDNode *mdP, SDNode *N, unsigned R, uint64_t off, DebugLoc dl, 55bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng unsigned O) : mdPtr(mdP), Offset(off), DL(dl), Order(O), 56bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng Invalid(false) { 57e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen kind = SDNODE; 58bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen u.s.Node = N; 59bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen u.s.ResNo = R; 60bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen } 6106a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 6206a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen // Constructor for constants. 6346510a73e977273ec67747eb34cbdb43f815e451Dan Gohman SDDbgValue(MDNode *mdP, const Value *C, uint64_t off, DebugLoc dl, 6446510a73e977273ec67747eb34cbdb43f815e451Dan Gohman unsigned O) : 65c388ace6f9012c503630eb633e3977e0fc42bb00Evan Cheng mdPtr(mdP), Offset(off), DL(dl), Order(O), Invalid(false) { 66e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen kind = CONST; 67bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen u.Const = C; 68bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen } 69bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen 70bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen // Constructor for frame indices. 71bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen SDDbgValue(MDNode *mdP, unsigned FI, uint64_t off, DebugLoc dl, unsigned O) : 72c388ace6f9012c503630eb633e3977e0fc42bb00Evan Cheng mdPtr(mdP), Offset(off), DL(dl), Order(O), Invalid(false) { 73e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen kind = FRAMEIX; 74bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen u.FrameIx = FI; 75bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen } 76bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen 77bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen // Returns the kind. 78bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen DbgValueKind getKind() { return kind; } 7906a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 8006a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen // Returns the MDNode pointer. 8106a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen MDNode *getMDPtr() { return mdPtr; } 8206a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 83bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen // Returns the SDNode* for a register ref 84e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen SDNode *getSDNode() { assert (kind==SDNODE); return u.s.Node; } 85bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen 86bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen // Returns the ResNo for a register ref 87e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen unsigned getResNo() { assert (kind==SDNODE); return u.s.ResNo; } 8806a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 89bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen // Returns the Value* for a constant 9046510a73e977273ec67747eb34cbdb43f815e451Dan Gohman const Value *getConst() { assert (kind==CONST); return u.Const; } 9106a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 92bfdf7f38523bd38ae0538861a2bfd8bdc46e5c33Dale Johannesen // Returns the FrameIx for a stack object 93e3b8533e711718ffa5366cbc8fdf7c6881b8cb02Dale Johannesen unsigned getFrameIx() { assert (kind==FRAMEIX); return u.FrameIx; } 9406a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 9506a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen // Returns the offset. 9606a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen uint64_t getOffset() { return Offset; } 9706a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 9806a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen // Returns the DebugLoc. 9906a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen DebugLoc getDebugLoc() { return DL; } 100fab4a25d46cdd178c20e6a8029a2eed10f61f0baDale Johannesen 101fab4a25d46cdd178c20e6a8029a2eed10f61f0baDale Johannesen // Returns the SDNodeOrder. This is the order of the preceding node in the 102fab4a25d46cdd178c20e6a8029a2eed10f61f0baDale Johannesen // input. 103fab4a25d46cdd178c20e6a8029a2eed10f61f0baDale Johannesen unsigned getOrder() { return Order; } 104bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng 105bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng // setIsInvalidated / isInvalidated - Setter / getter of the "Invalidated" 106bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng // property. A SDDbgValue is invalid if the SDNode that produces the value is 107bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng // deleted. 108bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng void setIsInvalidated() { Invalid = true; } 109bfcb3051899b7141a946d769fcf6e8a8453bc530Evan Cheng bool isInvalidated() { return Invalid; } 11006a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen}; 11106a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 11206a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen} // end llvm namespace 11306a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen 11406a26637daff1bb785ef0945d1ba05f6ccdfab86Dale Johannesen#endif 115