LLVM: include/llvm/SandboxIR/Value.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_SANDBOXIR_VALUE_H
10#define LLVM_SANDBOXIR_VALUE_H
11
16
18
19
20#define DEF_INSTR(ID, OPC, CLASS) class CLASS;
21#define DEF_CONST(ID, CLASS) class CLASS;
22#define DEF_USER(ID, CLASS) class CLASS;
23#include "llvm/SandboxIR/Values.def"
24class Context;
25class FuncletPadInst;
26class Type;
27class GlobalValue;
28class GlobalObject;
30class UnaryInstruction;
31class CmpInst;
32class IntrinsicInst;
33class Operator;
34class OverflowingBinaryOperator;
35class FPMathOperator;
36class Region;
37
38
39
40class UserUseIterator {
42
45
46public:
52
57 return Use == Other.Use;
58 }
60 return !(*this == Other);
61 }
63};
64
65
67public:
69#define DEF_VALUE(ID, CLASS) ID,
70#define DEF_USER(ID, CLASS) ID,
71#define DEF_CONST(ID, CLASS) ID,
72#define DEF_INSTR(ID, OPC, CLASS) ID,
73#include "llvm/SandboxIR/Values.def"
74 };
75
76protected:
78 switch (ID) {
79#define DEF_VALUE(ID, CLASS) \
80 case ClassID::ID: \
81 return #ID;
82#define DEF_USER(ID, CLASS) \
83 case ClassID::ID: \
84 return #ID;
85#define DEF_CONST(ID, CLASS) \
86 case ClassID::ID: \
87 return #ID;
88#define DEF_INSTR(ID, OPC, CLASS) \
89 case ClassID::ID: \
90 return #ID;
91#include "llvm/SandboxIR/Values.def"
92 }
94 }
95
96
98#ifndef NDEBUG
99
101#endif
102
103
104
105
107
171
172
174 friend class ScoreBoard;
177
178
180
183
185
188
189public:
192
195
204
211
212
216
219
230
237
238
240
241
242
244 unsigned Cnt = 0;
245 for (auto It = use_begin(), ItE = use_end(); It != ItE; ++It) {
246 if (++Cnt >= Num)
247 return true;
248 }
249 return false;
250 }
251
253 unsigned Cnt = 0;
254 for (auto It = use_begin(), ItE = use_end(); It != ItE; ++It) {
255 if (++Cnt > Num)
256 return false;
257 }
258 return Cnt == Num;
259 }
260
262
264
269
270
272
273#ifndef NDEBUG
274
276
277 std::string getUid() const;
284 V.dumpOS(OS);
285 return OS;
286 }
289#endif
290};
291
293protected:
297
298public:
302#ifndef NDEBUG
305 "Expected Metadata or InlineAssembly!");
306 }
311#endif
312};
313
314}
315
316#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds.
Machine Check Debug Module
StringRef - Represent a constant reference to a string, i.e.
LLVM Value Representation.
An efficient, type-erasing, non-owning reference to a callable.
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
static bool classof(const Value *From)
Definition Value.h:299
void dumpOS(raw_ostream &OS) const override
Definition Value.h:307
friend class Context
Definition Value.h:296
void verify() const override
Should crash if there is something wrong with the instruction.
Definition Value.h:303
OpaqueValue(llvm::Value *V, Context &Ctx)
Definition Value.h:294
Just like llvm::Type these are immutable, unique, never get freed and can only be created via static ...
Represents a Def-use/Use-def edge in SandboxIR.
Iterator for the Use edges of a Value's users.
Definition Value.h:40
const sandboxir::Use & getUse() const
Definition Value.h:62
std::input_iterator_tag iterator_category
Definition Value.h:51
std::ptrdiff_t difference_type
Definition Value.h:47
bool operator!=(const UserUseIterator &Other) const
Definition Value.h:59
value_type operator*() const
Definition Value.h:54
value_type * pointer
Definition Value.h:49
bool operator==(const UserUseIterator &Other) const
Definition Value.h:56
value_type & reference
Definition Value.h:50
LLVM_ABI UserUseIterator & operator++()
sandboxir::Use value_type
Definition Value.h:48
friend class Value
Definition Value.h:44
UserUseIterator()=default
A SandboxIR Value has users. This is the base class.
Definition Value.h:66
mapped_iterator< sandboxir::UserUseIterator, UseToUser > user_iterator
Definition Value.h:217
friend class InsertElementInst
Definition Value.h:116
friend class CatchReturnInst
Definition Value.h:132
friend class UnreachableInst
Definition Value.h:145
friend class UnaryOperator
Definition Value.h:138
llvm::Value * Val
The LLVM Value that corresponds to this SandboxIR Value.
Definition Value.h:106
friend class SelectInst
Definition Value.h:114
void dumpCommonFooter(raw_ostream &OS) const
friend class CastInst
Definition Value.h:143
virtual void dumpCommonHeader(raw_ostream &OS) const
friend class ConstantStruct
Definition Value.h:149
friend class FenceInst
Definition Value.h:113
friend class OverflowingBinaryOperator
Definition Value.h:169
const_use_iterator use_end() const
Definition Value.h:201
friend class ConstantVector
Definition Value.h:150
friend class FPMathOperator
Definition Value.h:170
friend class Module
Definition Value.h:166
friend class IntrinsicInst
Definition Value.h:167
ClassID getSubclassID() const
Definition Value.h:191
friend class ConstantDataVector
Definition Value.h:176
void dumpCommonSuffix(raw_ostream &OS) const
StringRef getName() const
\Returns the LLVM IR name of the bottom-most LLVM value.
Definition Value.h:271
virtual void verify() const =0
Should crash if there is something wrong with the instruction.
friend class Operator
Definition Value.h:168
friend class FreezeInst
Definition Value.h:112
LLVM_ABI void replaceAllUsesWith(Value *Other)
friend class ExtractElementInst
Definition Value.h:115
friend class User
Definition Value.h:109
LLVM_ABI unsigned getNumUses() const
\Returns the number of user edges (not necessarily to unique users).
UserUseIterator use_iterator
Definition Value.h:193
void printAsOperandCommon(raw_ostream &OS) const
friend class StoreInst
Definition Value.h:122
Context & Ctx
All values point to the context.
Definition Value.h:179
friend class CmpInst
Definition Value.h:147
friend class ShuffleVectorInst
Definition Value.h:117
friend class ExtractValueInst
Definition Value.h:118
friend class ReturnInst
Definition Value.h:123
friend class BranchInst
Definition Value.h:120
friend class SwitchInst
Definition Value.h:137
ClassID SubclassID
For isa/dyn_cast.
Definition Value.h:97
user_iterator user_end()
Definition Value.h:221
friend class ConstantPointerNull
Definition Value.h:152
LLVM_DUMP_METHOD void dump() const
friend class ConstantPtrAuth
Definition Value.h:163
friend class VAArgInst
Definition Value.h:111
LLVM_ABI Type * getType() const
friend class InsertValueInst
Definition Value.h:119
friend class ScoreBoard
Definition Value.h:174
friend class InvokeInst
Definition Value.h:126
LLVM_ABI Value(ClassID SubclassID, llvm::Value *Val, Context &Ctx)
friend class GlobalAlias
Definition Value.h:161
friend class CatchSwitchInst
Definition Value.h:135
friend class BinaryOperator
Definition Value.h:139
user_iterator const_user_iterator
Definition Value.h:218
friend class Use
Definition Value.h:110
friend class LLVMOpUserItToSBTy
Definition Value.h:182
const_use_iterator use_begin() const
Definition Value.h:197
friend class ConstantExpr
Definition Value.h:164
Context & getContext() const
Definition Value.h:263
const_user_iterator user_begin() const
Definition Value.h:224
friend class CatchPadInst
Definition Value.h:130
friend class ResumeInst
Definition Value.h:134
bool hasNUsesOrMore(unsigned Num) const
Return true if this value has N uses or more.
Definition Value.h:243
friend class PoisonValue
Definition Value.h:154
UserUseIterator const_use_iterator
Definition Value.h:194
friend class LoadInst
Definition Value.h:121
friend class AtomicRMWInst
Definition Value.h:140
Value & operator=(const Value &)=delete
friend class GlobalValue
Definition Value.h:156
iterator_range< const_user_iterator > users() const
Definition Value.h:234
iterator_range< user_iterator > users()
Definition Value.h:231
friend class GlobalVariable
Definition Value.h:160
std::string getUid() const
Returns the unique id in the form 'SB.' like 'SB1.'.
void clearValue()
Definition Value.h:181
LLVM_ABI void replaceUsesWithIf(Value *OtherV, llvm::function_ref< bool(const Use &)> ShouldReplace)
friend class Region
Definition Value.h:173
friend class BlockAddress
Definition Value.h:155
friend class ConstantArray
Definition Value.h:148
friend class CallBase
Definition Value.h:124
friend class Utils
Definition Value.h:165
friend class GlobalIFunc
Definition Value.h:159
bool hasNUses(unsigned Num) const
Return true if this Value has exactly N uses.
Definition Value.h:252
unsigned UID
A unique ID used for forming the name (used for debugging).
Definition Value.h:100
friend class GlobalObject
Definition Value.h:158
friend class Context
Definition Value.h:108
friend class GetElementPtrInst
Definition Value.h:133
virtual void dumpOS(raw_ostream &OS) const =0
friend class PHINode
Definition Value.h:144
use_iterator use_end()
Definition Value.h:200
friend class ConstantDataArray
Definition Value.h:175
friend class CleanupPadInst
Definition Value.h:131
void dumpCommonPrefix(raw_ostream &OS) const
iterator_range< use_iterator > uses()
Definition Value.h:205
const_user_iterator user_end() const
Definition Value.h:227
friend class FuncletPadInst
Definition Value.h:129
friend class AtomicCmpXchgInst
Definition Value.h:141
friend class NoCFIValue
Definition Value.h:162
friend class CatchSwitchAddHandler
Definition Value.h:146
friend class LandingPadInst
Definition Value.h:128
friend class CallBrInst
Definition Value.h:127
static const char * getSubclassIDStr(ClassID ID)
Definition Value.h:77
Value(const Value &)=delete
Disable copies.
friend class CleanupReturnInst
Definition Value.h:136
friend class AllocaInst
Definition Value.h:142
friend class ConstantAggregateZero
Definition Value.h:151
friend class CallInst
Definition Value.h:125
friend raw_ostream & operator<<(raw_ostream &OS, const sandboxir::Value &V)
Definition Value.h:283
LLVM_ABI use_iterator use_begin()
LLVM_ABI user_iterator user_begin()
friend class UndefValue
Definition Value.h:153
ClassID
Definition Value.h:68
friend class DSOLocalEquivalent
Definition Value.h:157
iterator_range< const_use_iterator > uses() const
Definition Value.h:208
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
FunctionAddr VTableAddr Value
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
bool isa(const From &Val)
isa - Return true if the parameter to the template is an instance of one of the template type argu...
Helper for mapped_iterator.
Definition Value.h:213
User * operator()(const Use &Use) const
Definition Value.h:214