Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
ModRef.h
Go to the documentation of this file.
1//===--- ModRef.h - Memory effect modeling ----------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Definitions of ModRefInfo and MemoryEffects, which are used to
10// describe the memory effects of instructions.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_SUPPORT_MODREF_H
15#define LLVM_SUPPORT_MODREF_H
16
17#include "llvm/ADT/BitmaskEnum.h"
18#include "llvm/ADT/Sequence.h"
19#include "llvm/Support/raw_ostream.h"
20
21namespacellvm {
22
23/// Flags indicating whether a memory access modifies or references memory.
24///
25/// This is no access at all, a modification, a reference, or both
26/// a modification and a reference.
27enum classModRefInfo :uint8_t {
28 /// The access neither references nor modifies the value stored in memory.
29NoModRef = 0,
30 /// The access may reference the value stored in memory.
31Ref = 1,
32 /// The access may modify the value stored in memory.
33Mod = 2,
34 /// The access may reference and may modify the value stored in memory.
35ModRef =Ref |Mod,
36LLVM_MARK_AS_BITMASK_ENUM(ModRef),
37};
38
39[[nodiscard]]inlineboolisNoModRef(constModRefInfoMRI) {
40returnMRI ==ModRefInfo::NoModRef;
41}
42[[nodiscard]]inlineboolisModOrRefSet(constModRefInfoMRI) {
43returnMRI !=ModRefInfo::NoModRef;
44}
45[[nodiscard]]inlineboolisModAndRefSet(constModRefInfoMRI) {
46returnMRI ==ModRefInfo::ModRef;
47}
48[[nodiscard]]inlineboolisModSet(constModRefInfoMRI) {
49returnstatic_cast<int>(MRI) &static_cast<int>(ModRefInfo::Mod);
50}
51[[nodiscard]]inlineboolisRefSet(constModRefInfoMRI) {
52returnstatic_cast<int>(MRI) &static_cast<int>(ModRefInfo::Ref);
53}
54
55/// Debug print ModRefInfo.
56raw_ostream &operator<<(raw_ostream &OS,ModRefInfo MR);
57
58/// The locations at which a function might access memory.
59enum classIRMemLocation {
60 /// Access to memory via argument pointers.
61ArgMem = 0,
62 /// Memory that is inaccessible via LLVM IR.
63InaccessibleMem = 1,
64 /// Any other memory.
65Other = 2,
66
67 /// Helpers to iterate all locations in the MemoryEffectsBase class.
68First =ArgMem,
69Last =Other,
70};
71
72template <typename LocationEnum>classMemoryEffectsBase {
73public:
74usingLocation = LocationEnum;
75
76private:
77uint32_t Data = 0;
78
79staticconstexpruint32_t BitsPerLoc = 2;
80staticconstexpruint32_t LocMask = (1 << BitsPerLoc) - 1;
81
82staticuint32_t getLocationPos(Location Loc) {
83return (uint32_t)Loc * BitsPerLoc;
84 }
85
86MemoryEffectsBase(uint32_t Data) : Data(Data) {}
87
88void setModRef(Location Loc,ModRefInfo MR) {
89 Data &= ~(LocMask << getLocationPos(Loc));
90 Data |=static_cast<uint32_t>(MR) << getLocationPos(Loc);
91 }
92
93public:
94 /// Returns iterator over all supported location kinds.
95staticautolocations() {
96returnenum_seq_inclusive(Location::First, Location::Last,
97force_iteration_on_noniterable_enum);
98 }
99
100 /// Create MemoryEffectsBase that can access only the given location with the
101 /// given ModRefInfo.
102MemoryEffectsBase(Location Loc,ModRefInfo MR) { setModRef(Loc, MR); }
103
104 /// Create MemoryEffectsBase that can access any location with the given
105 /// ModRefInfo.
106explicitMemoryEffectsBase(ModRefInfo MR) {
107for (Location Loc :locations())
108 setModRef(Loc, MR);
109 }
110
111 /// Create MemoryEffectsBase that can read and write any memory.
112staticMemoryEffectsBaseunknown() {
113returnMemoryEffectsBase(ModRefInfo::ModRef);
114 }
115
116 /// Create MemoryEffectsBase that cannot read or write any memory.
117staticMemoryEffectsBasenone() {
118returnMemoryEffectsBase(ModRefInfo::NoModRef);
119 }
120
121 /// Create MemoryEffectsBase that can read any memory.
122staticMemoryEffectsBasereadOnly() {
123returnMemoryEffectsBase(ModRefInfo::Ref);
124 }
125
126 /// Create MemoryEffectsBase that can write any memory.
127staticMemoryEffectsBasewriteOnly() {
128returnMemoryEffectsBase(ModRefInfo::Mod);
129 }
130
131 /// Create MemoryEffectsBase that can only access argument memory.
132staticMemoryEffectsBaseargMemOnly(ModRefInfo MR =ModRefInfo::ModRef) {
133returnMemoryEffectsBase(Location::ArgMem, MR);
134 }
135
136 /// Create MemoryEffectsBase that can only access inaccessible memory.
137staticMemoryEffectsBase
138inaccessibleMemOnly(ModRefInfo MR =ModRefInfo::ModRef) {
139returnMemoryEffectsBase(Location::InaccessibleMem, MR);
140 }
141
142 /// Create MemoryEffectsBase that can only access inaccessible or argument
143 /// memory.
144staticMemoryEffectsBase
145inaccessibleOrArgMemOnly(ModRefInfo MR =ModRefInfo::ModRef) {
146MemoryEffectsBase FRMB =none();
147 FRMB.setModRef(Location::ArgMem, MR);
148 FRMB.setModRef(Location::InaccessibleMem, MR);
149return FRMB;
150 }
151
152 /// Create MemoryEffectsBase from an encoded integer value (used by memory
153 /// attribute).
154staticMemoryEffectsBasecreateFromIntValue(uint32_t Data) {
155returnMemoryEffectsBase(Data);
156 }
157
158 /// Convert MemoryEffectsBase into an encoded integer value (used by memory
159 /// attribute).
160uint32_ttoIntValue() const{
161return Data;
162 }
163
164 /// Get ModRefInfo for the given Location.
165ModRefInfogetModRef(Location Loc) const{
166returnModRefInfo((Data >> getLocationPos(Loc)) & LocMask);
167 }
168
169 /// Get new MemoryEffectsBase with modified ModRefInfo for Loc.
170MemoryEffectsBasegetWithModRef(Location Loc,ModRefInfo MR) const{
171MemoryEffectsBase ME = *this;
172 ME.setModRef(Loc, MR);
173return ME;
174 }
175
176 /// Get new MemoryEffectsBase with NoModRef on the given Loc.
177MemoryEffectsBasegetWithoutLoc(Location Loc) const{
178MemoryEffectsBase ME = *this;
179 ME.setModRef(Loc,ModRefInfo::NoModRef);
180return ME;
181 }
182
183 /// Get ModRefInfo for any location.
184ModRefInfogetModRef() const{
185ModRefInfo MR =ModRefInfo::NoModRef;
186for (Location Loc :locations())
187 MR |=getModRef(Loc);
188return MR;
189 }
190
191 /// Whether this function accesses no memory.
192booldoesNotAccessMemory() const{return Data == 0; }
193
194 /// Whether this function only (at most) reads memory.
195boolonlyReadsMemory() const{return !isModSet(getModRef()); }
196
197 /// Whether this function only (at most) writes memory.
198boolonlyWritesMemory() const{return !isRefSet(getModRef()); }
199
200 /// Whether this function only (at most) accesses argument memory.
201boolonlyAccessesArgPointees() const{
202returngetWithoutLoc(Location::ArgMem).doesNotAccessMemory();
203 }
204
205 /// Whether this function may access argument memory.
206booldoesAccessArgPointees() const{
207returnisModOrRefSet(getModRef(Location::ArgMem));
208 }
209
210 /// Whether this function only (at most) accesses inaccessible memory.
211boolonlyAccessesInaccessibleMem() const{
212returngetWithoutLoc(Location::InaccessibleMem).doesNotAccessMemory();
213 }
214
215 /// Whether this function only (at most) accesses argument and inaccessible
216 /// memory.
217boolonlyAccessesInaccessibleOrArgMem() const{
218returngetWithoutLoc(Location::InaccessibleMem)
219 .getWithoutLoc(Location::ArgMem)
220 .doesNotAccessMemory();
221 }
222
223 /// Intersect with other MemoryEffectsBase.
224MemoryEffectsBaseoperator&(MemoryEffectsBaseOther) const{
225returnMemoryEffectsBase(Data &Other.Data);
226 }
227
228 /// Intersect (in-place) with other MemoryEffectsBase.
229MemoryEffectsBase &operator&=(MemoryEffectsBaseOther) {
230 Data &=Other.Data;
231return *this;
232 }
233
234 /// Union with other MemoryEffectsBase.
235MemoryEffectsBaseoperator|(MemoryEffectsBaseOther) const{
236returnMemoryEffectsBase(Data |Other.Data);
237 }
238
239 /// Union (in-place) with other MemoryEffectsBase.
240MemoryEffectsBase &operator|=(MemoryEffectsBaseOther) {
241 Data |=Other.Data;
242return *this;
243 }
244
245 /// Subtract other MemoryEffectsBase.
246MemoryEffectsBaseoperator-(MemoryEffectsBaseOther) const{
247returnMemoryEffectsBase(Data & ~Other.Data);
248 }
249
250 /// Subtract (in-place) with other MemoryEffectsBase.
251MemoryEffectsBase &operator-=(MemoryEffectsBaseOther) {
252 Data &= ~Other.Data;
253return *this;
254 }
255
256 /// Check whether this is the same as other MemoryEffectsBase.
257booloperator==(MemoryEffectsBaseOther) const{return Data ==Other.Data; }
258
259 /// Check whether this is different from other MemoryEffectsBase.
260booloperator!=(MemoryEffectsBaseOther) const{return !operator==(Other); }
261};
262
263/// Summary of how a function affects memory in the program.
264///
265/// Loads from constant globals are not considered memory accesses for this
266/// interface. Also, functions may freely modify stack space local to their
267/// invocation without having to report it through these interfaces.
268usingMemoryEffects =MemoryEffectsBase<IRMemLocation>;
269
270/// Debug print MemoryEffects.
271raw_ostream &operator<<(raw_ostream &OS,MemoryEffects RMRB);
272
273// Legacy alias.
274usingFunctionModRefBehavior =MemoryEffects;
275
276/// Components of the pointer that may be captured.
277enum classCaptureComponents :uint8_t {
278None = 0,
279AddressIsNull = (1 << 0),
280Address = (1 << 1) |AddressIsNull,
281ReadProvenance = (1 << 2),
282Provenance = (1 << 3) |ReadProvenance,
283All =Address |Provenance,
284LLVM_MARK_AS_BITMASK_ENUM(Provenance),
285};
286
287inlineboolcapturesNothing(CaptureComponentsCC) {
288returnCC ==CaptureComponents::None;
289}
290
291inlineboolcapturesAnything(CaptureComponentsCC) {
292returnCC !=CaptureComponents::None;
293}
294
295inlineboolcapturesAddressIsNullOnly(CaptureComponentsCC) {
296return (CC &CaptureComponents::Address) ==CaptureComponents::AddressIsNull;
297}
298
299inlineboolcapturesAddress(CaptureComponentsCC) {
300return (CC &CaptureComponents::Address) !=CaptureComponents::None;
301}
302
303inlineboolcapturesReadProvenanceOnly(CaptureComponentsCC) {
304return (CC &CaptureComponents::Provenance) ==
305CaptureComponents::ReadProvenance;
306}
307
308inlineboolcapturesFullProvenance(CaptureComponentsCC) {
309return (CC &CaptureComponents::Provenance) ==CaptureComponents::Provenance;
310}
311
312raw_ostream &operator<<(raw_ostream &OS,CaptureComponentsCC);
313
314/// Represents which components of the pointer may be captured in which
315/// location. This represents the captures(...) attribute in IR.
316///
317/// For more information on the precise semantics see LangRef.
318classCaptureInfo {
319CaptureComponents OtherComponents;
320CaptureComponents RetComponents;
321
322public:
323CaptureInfo(CaptureComponents OtherComponents,
324CaptureComponents RetComponents)
325 : OtherComponents(OtherComponents), RetComponents(RetComponents) {}
326
327CaptureInfo(CaptureComponents Components)
328 : OtherComponents(Components), RetComponents(Components) {}
329
330 /// Create CaptureInfo that may capture all components of the pointer.
331staticCaptureInfoall() {returnCaptureInfo(CaptureComponents::All); }
332
333 /// Get components potentially captured by the return value.
334CaptureComponentsgetRetComponents() const{return RetComponents; }
335
336 /// Get components potentially captured through locations other than the
337 /// return value.
338CaptureComponentsgetOtherComponents() const{return OtherComponents; }
339
340 /// Get the potentially captured components of the pointer (regardless of
341 /// location).
342operatorCaptureComponents() const{return OtherComponents | RetComponents; }
343
344booloperator==(CaptureInfoOther) const{
345return OtherComponents ==Other.OtherComponents &&
346 RetComponents ==Other.RetComponents;
347 }
348
349booloperator!=(CaptureInfoOther) const{return !(*this ==Other); }
350
351 /// Compute union of CaptureInfos.
352CaptureInfooperator|(CaptureInfoOther) const{
353returnCaptureInfo(OtherComponents |Other.OtherComponents,
354 RetComponents |Other.RetComponents);
355 }
356
357 /// Compute intersection of CaptureInfos.
358CaptureInfooperator&(CaptureInfoOther) const{
359returnCaptureInfo(OtherComponents &Other.OtherComponents,
360 RetComponents &Other.RetComponents);
361 }
362
363staticCaptureInfocreateFromIntValue(uint32_tData) {
364returnCaptureInfo(CaptureComponents(Data >> 4),
365CaptureComponents(Data & 0xf));
366 }
367
368 /// Convert CaptureInfo into an encoded integer value (used by captures
369 /// attribute).
370uint32_ttoIntValue() const{
371return (uint32_t(OtherComponents) << 4) |uint32_t(RetComponents);
372 }
373};
374
375raw_ostream &operator<<(raw_ostream &OS, CaptureInfoInfo);
376
377}// namespace llvm
378
379#endif
MRI
unsigned const MachineRegisterInfo * MRI
Definition:AArch64AdvSIMDScalarPass.cpp:105
BitmaskEnum.h
Info
Analysis containing CSE Info
Definition:CSEInfo.cpp:27
CC
auto CC
Definition:RISCVRedundantCopyElimination.cpp:79
OS
raw_pwrite_stream & OS
Definition:SampleProfWriter.cpp:51
Sequence.h
Provides some synthesis utilities to produce sequences of values.
llvm::CaptureInfo
Represents which components of the pointer may be captured in which location.
Definition:ModRef.h:318
llvm::CaptureInfo::createFromIntValue
static CaptureInfo createFromIntValue(uint32_t Data)
Definition:ModRef.h:363
llvm::CaptureInfo::getOtherComponents
CaptureComponents getOtherComponents() const
Get components potentially captured through locations other than the return value.
Definition:ModRef.h:338
llvm::CaptureInfo::operator==
bool operator==(CaptureInfo Other) const
Definition:ModRef.h:344
llvm::CaptureInfo::operator!=
bool operator!=(CaptureInfo Other) const
Definition:ModRef.h:349
llvm::CaptureInfo::all
static CaptureInfo all()
Create CaptureInfo that may capture all components of the pointer.
Definition:ModRef.h:331
llvm::CaptureInfo::operator&
CaptureInfo operator&(CaptureInfo Other) const
Compute intersection of CaptureInfos.
Definition:ModRef.h:358
llvm::CaptureInfo::getRetComponents
CaptureComponents getRetComponents() const
Get components potentially captured by the return value.
Definition:ModRef.h:334
llvm::CaptureInfo::CaptureInfo
CaptureInfo(CaptureComponents OtherComponents, CaptureComponents RetComponents)
Definition:ModRef.h:323
llvm::CaptureInfo::operator|
CaptureInfo operator|(CaptureInfo Other) const
Compute union of CaptureInfos.
Definition:ModRef.h:352
llvm::CaptureInfo::toIntValue
uint32_t toIntValue() const
Convert CaptureInfo into an encoded integer value (used by captures attribute).
Definition:ModRef.h:370
llvm::CaptureInfo::CaptureInfo
CaptureInfo(CaptureComponents Components)
Definition:ModRef.h:327
llvm::MemoryEffectsBase
Definition:ModRef.h:72
llvm::MemoryEffectsBase::operator&
MemoryEffectsBase operator&(MemoryEffectsBase Other) const
Intersect with other MemoryEffectsBase.
Definition:ModRef.h:224
llvm::MemoryEffectsBase::readOnly
static MemoryEffectsBase readOnly()
Create MemoryEffectsBase that can read any memory.
Definition:ModRef.h:122
llvm::MemoryEffectsBase::onlyWritesMemory
bool onlyWritesMemory() const
Whether this function only (at most) writes memory.
Definition:ModRef.h:198
llvm::MemoryEffectsBase::getWithoutLoc
MemoryEffectsBase getWithoutLoc(Location Loc) const
Get new MemoryEffectsBase with NoModRef on the given Loc.
Definition:ModRef.h:177
llvm::MemoryEffectsBase::operator|=
MemoryEffectsBase & operator|=(MemoryEffectsBase Other)
Union (in-place) with other MemoryEffectsBase.
Definition:ModRef.h:240
llvm::MemoryEffectsBase::getWithModRef
MemoryEffectsBase getWithModRef(Location Loc, ModRefInfo MR) const
Get new MemoryEffectsBase with modified ModRefInfo for Loc.
Definition:ModRef.h:170
llvm::MemoryEffectsBase::operator!=
bool operator!=(MemoryEffectsBase Other) const
Check whether this is different from other MemoryEffectsBase.
Definition:ModRef.h:260
llvm::MemoryEffectsBase::operator-
MemoryEffectsBase operator-(MemoryEffectsBase Other) const
Subtract other MemoryEffectsBase.
Definition:ModRef.h:246
llvm::MemoryEffectsBase::doesNotAccessMemory
bool doesNotAccessMemory() const
Whether this function accesses no memory.
Definition:ModRef.h:192
llvm::MemoryEffectsBase::argMemOnly
static MemoryEffectsBase argMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Create MemoryEffectsBase that can only access argument memory.
Definition:ModRef.h:132
llvm::MemoryEffectsBase::MemoryEffectsBase
MemoryEffectsBase(ModRefInfo MR)
Create MemoryEffectsBase that can access any location with the given ModRefInfo.
Definition:ModRef.h:106
llvm::MemoryEffectsBase::doesAccessArgPointees
bool doesAccessArgPointees() const
Whether this function may access argument memory.
Definition:ModRef.h:206
llvm::MemoryEffectsBase::inaccessibleMemOnly
static MemoryEffectsBase inaccessibleMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Create MemoryEffectsBase that can only access inaccessible memory.
Definition:ModRef.h:138
llvm::MemoryEffectsBase::onlyAccessesInaccessibleMem
bool onlyAccessesInaccessibleMem() const
Whether this function only (at most) accesses inaccessible memory.
Definition:ModRef.h:211
llvm::MemoryEffectsBase::MemoryEffectsBase
MemoryEffectsBase(Location Loc, ModRefInfo MR)
Create MemoryEffectsBase that can access only the given location with the given ModRefInfo.
Definition:ModRef.h:102
llvm::MemoryEffectsBase::getModRef
ModRefInfo getModRef(Location Loc) const
Get ModRefInfo for the given Location.
Definition:ModRef.h:165
llvm::MemoryEffectsBase::operator&=
MemoryEffectsBase & operator&=(MemoryEffectsBase Other)
Intersect (in-place) with other MemoryEffectsBase.
Definition:ModRef.h:229
llvm::MemoryEffectsBase::getModRef
ModRefInfo getModRef() const
Get ModRefInfo for any location.
Definition:ModRef.h:184
llvm::MemoryEffectsBase::Location
LocationEnum Location
Definition:ModRef.h:74
llvm::MemoryEffectsBase::onlyAccessesArgPointees
bool onlyAccessesArgPointees() const
Whether this function only (at most) accesses argument memory.
Definition:ModRef.h:201
llvm::MemoryEffectsBase::onlyReadsMemory
bool onlyReadsMemory() const
Whether this function only (at most) reads memory.
Definition:ModRef.h:195
llvm::MemoryEffectsBase::createFromIntValue
static MemoryEffectsBase createFromIntValue(uint32_t Data)
Create MemoryEffectsBase from an encoded integer value (used by memory attribute).
Definition:ModRef.h:154
llvm::MemoryEffectsBase::operator-=
MemoryEffectsBase & operator-=(MemoryEffectsBase Other)
Subtract (in-place) with other MemoryEffectsBase.
Definition:ModRef.h:251
llvm::MemoryEffectsBase::writeOnly
static MemoryEffectsBase writeOnly()
Create MemoryEffectsBase that can write any memory.
Definition:ModRef.h:127
llvm::MemoryEffectsBase::operator|
MemoryEffectsBase operator|(MemoryEffectsBase Other) const
Union with other MemoryEffectsBase.
Definition:ModRef.h:235
llvm::MemoryEffectsBase::locations
static auto locations()
Returns iterator over all supported location kinds.
Definition:ModRef.h:95
llvm::MemoryEffectsBase::toIntValue
uint32_t toIntValue() const
Convert MemoryEffectsBase into an encoded integer value (used by memory attribute).
Definition:ModRef.h:160
llvm::MemoryEffectsBase::inaccessibleOrArgMemOnly
static MemoryEffectsBase inaccessibleOrArgMemOnly(ModRefInfo MR=ModRefInfo::ModRef)
Create MemoryEffectsBase that can only access inaccessible or argument memory.
Definition:ModRef.h:145
llvm::MemoryEffectsBase::none
static MemoryEffectsBase none()
Create MemoryEffectsBase that cannot read or write any memory.
Definition:ModRef.h:117
llvm::MemoryEffectsBase::operator==
bool operator==(MemoryEffectsBase Other) const
Check whether this is the same as other MemoryEffectsBase.
Definition:ModRef.h:257
llvm::MemoryEffectsBase::onlyAccessesInaccessibleOrArgMem
bool onlyAccessesInaccessibleOrArgMem() const
Whether this function only (at most) accesses argument and inaccessible memory.
Definition:ModRef.h:217
llvm::MemoryEffectsBase::unknown
static MemoryEffectsBase unknown()
Create MemoryEffectsBase that can read and write any memory.
Definition:ModRef.h:112
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition:raw_ostream.h:52
uint32_t
uint8_t
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::capturesReadProvenanceOnly
bool capturesReadProvenanceOnly(CaptureComponents CC)
Definition:ModRef.h:303
llvm::capturesAddressIsNullOnly
bool capturesAddressIsNullOnly(CaptureComponents CC)
Definition:ModRef.h:295
llvm::enum_seq_inclusive
auto enum_seq_inclusive(EnumT Begin, EnumT End)
Iterate over an enum type from Begin to End inclusive.
Definition:Sequence.h:364
llvm::capturesAddress
bool capturesAddress(CaptureComponents CC)
Definition:ModRef.h:299
llvm::AllocationType::All
@ All
llvm::force_iteration_on_noniterable_enum
constexpr force_iteration_on_noniterable_enum_t force_iteration_on_noniterable_enum
Definition:Sequence.h:108
llvm::capturesFullProvenance
bool capturesFullProvenance(CaptureComponents CC)
Definition:ModRef.h:308
llvm::isModSet
bool isModSet(const ModRefInfo MRI)
Definition:ModRef.h:48
llvm::MemoryEffects
MemoryEffectsBase< IRMemLocation > MemoryEffects
Summary of how a function affects memory in the program.
Definition:ModRef.h:268
llvm::None
@ None
Definition:CodeGenData.h:106
llvm::isModOrRefSet
bool isModOrRefSet(const ModRefInfo MRI)
Definition:ModRef.h:42
llvm::CaptureComponents
CaptureComponents
Components of the pointer that may be captured.
Definition:ModRef.h:277
llvm::CaptureComponents::None
@ None
llvm::CaptureComponents::Provenance
@ Provenance
llvm::CaptureComponents::ReadProvenance
@ ReadProvenance
llvm::CaptureComponents::AddressIsNull
@ AddressIsNull
llvm::CaptureComponents::All
@ All
llvm::CaptureComponents::Address
@ Address
llvm::ModRefInfo
ModRefInfo
Flags indicating whether a memory access modifies or references memory.
Definition:ModRef.h:27
llvm::ModRefInfo::Ref
@ Ref
The access may reference the value stored in memory.
llvm::ModRefInfo::ModRef
@ ModRef
The access may reference and may modify the value stored in memory.
llvm::ModRefInfo::Mod
@ Mod
The access may modify the value stored in memory.
llvm::ModRefInfo::LLVM_MARK_AS_BITMASK_ENUM
@ LLVM_MARK_AS_BITMASK_ENUM
llvm::ModRefInfo::NoModRef
@ NoModRef
The access neither references nor modifies the value stored in memory.
llvm::IRMemLocation
IRMemLocation
The locations at which a function might access memory.
Definition:ModRef.h:59
llvm::IRMemLocation::ArgMem
@ ArgMem
Access to memory via argument pointers.
llvm::IRMemLocation::Other
@ Other
Any other memory.
llvm::IRMemLocation::First
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
llvm::IRMemLocation::InaccessibleMem
@ InaccessibleMem
Memory that is inaccessible via LLVM IR.
llvm::operator<<
raw_ostream & operator<<(raw_ostream &OS, const APFixedPoint &FX)
Definition:APFixedPoint.h:303
llvm::isModAndRefSet
bool isModAndRefSet(const ModRefInfo MRI)
Definition:ModRef.h:45
llvm::PseudoProbeReservedId::Last
@ Last
llvm::capturesAnything
bool capturesAnything(CaptureComponents CC)
Definition:ModRef.h:291
llvm::Data
@ Data
Definition:SIMachineScheduler.h:55
llvm::capturesNothing
bool capturesNothing(CaptureComponents CC)
Definition:ModRef.h:287
llvm::isNoModRef
bool isNoModRef(const ModRefInfo MRI)
Definition:ModRef.h:39
llvm::isRefSet
bool isRefSet(const ModRefInfo MRI)
Definition:ModRef.h:51
raw_ostream.h

Generated on Thu Jul 17 2025 10:17:12 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp