LLVM: include/llvm/Support/AtomicOrdering.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef LLVM_SUPPORT_ATOMICORDERING_H
18#define LLVM_SUPPORT_ATOMICORDERING_H
19
20#include
21
22namespace llvm {
23
24
25
26
27
36
41
42
43
48
49
50
51
52
53
54
55
67
72
73
74
80
81
83 static const char *names[8] = {"not_atomic", "unordered", "monotonic",
84 "consume", "acquire", "release",
85 "acq_rel", "seq_cst"};
86 return names[static_cast<size_t>(ao)];
87}
88
89
90
92 static const bool lookup[8][8] = {
93
94 {false, false, false, false, false, false, false, false},
95 { true, false, false, false, false, false, false, false},
96 { true, true, false, false, false, false, false, false},
97 { true, true, true, false, false, false, false, false},
98 { true, true, true, true, false, false, false, false},
99 { true, true, true, false, false, false, false, false},
100 { true, true, true, true, true, true, false, false},
101 { true, true, true, true, true, true, true, false},
102 };
103 return lookup[static_cast<size_t>(AO)][static_cast<size_t>(Other)];
104}
105
107 static const bool lookup[8][8] = {
108
109 { true, false, false, false, false, false, false, false},
110 { true, true, false, false, false, false, false, false},
111 { true, true, true, false, false, false, false, false},
112 { true, true, true, true, false, false, false, false},
113 { true, true, true, true, true, false, false, false},
114 { true, true, true, false, false, true, false, false},
115 { true, true, true, true, true, true, true, false},
116 { true, true, true, true, true, true, true, true},
117 };
118 return lookup[static_cast<size_t>(AO)][static_cast<size_t>(Other)];
119}
120
124
128
132
136
137
138
146
157 };
158 return lookup[static_cast<size_t>(AO)];
159}
160
161}
162
163#endif
static bool lookup(const GsymReader &GR, DataExtractor &Data, uint64_t &Offset, uint64_t BaseAddr, uint64_t Addr, SourceLocations &SrcLocs, llvm::Error &Err)
A Lookup helper functions.
This is an optimization pass for GlobalISel generic memory operations.
bool isValidAtomicOrderingCABI(Int I)
Definition AtomicOrdering.h:44
bool operator<(int64_t V1, const APSInt &V2)
bool isValidAtomicOrdering(Int I)
Definition AtomicOrdering.h:75
bool isStrongerThanMonotonic(AtomicOrdering AO)
Definition AtomicOrdering.h:125
bool operator>=(int64_t V1, const APSInt &V2)
bool isStrongerThanUnordered(AtomicOrdering AO)
Definition AtomicOrdering.h:121
bool isReleaseOrStronger(AtomicOrdering AO)
Definition AtomicOrdering.h:133
const char * toIRString(AtomicOrdering ao)
String used by LLVM IR to represent atomic ordering.
Definition AtomicOrdering.h:82
AtomicOrderingCABI
Atomic ordering for C11 / C++11's memory models.
Definition AtomicOrdering.h:28
@ release
Definition AtomicOrdering.h:32
@ seq_cst
Definition AtomicOrdering.h:34
@ relaxed
Definition AtomicOrdering.h:29
@ acquire
Definition AtomicOrdering.h:31
@ consume
Definition AtomicOrdering.h:30
@ acq_rel
Definition AtomicOrdering.h:33
AtomicOrderingCABI toCABI(AtomicOrdering AO)
Definition AtomicOrdering.h:147
bool operator>(int64_t V1, const APSInt &V2)
AtomicOrdering getMergedAtomicOrdering(AtomicOrdering AO, AtomicOrdering Other)
Return a single atomic ordering that is at least as strong as both the AO and Other orderings for an ...
Definition AtomicOrdering.h:139
bool isAtLeastOrStrongerThan(AtomicOrdering AO, AtomicOrdering Other)
Definition AtomicOrdering.h:106
AtomicOrdering
Atomic ordering for LLVM's memory model.
Definition AtomicOrdering.h:56
@ Monotonic
Definition AtomicOrdering.h:59
@ Unordered
Definition AtomicOrdering.h:58
@ NotAtomic
Definition AtomicOrdering.h:57
@ AcquireRelease
Definition AtomicOrdering.h:63
@ Acquire
Definition AtomicOrdering.h:61
@ Release
Definition AtomicOrdering.h:62
@ SequentiallyConsistent
Definition AtomicOrdering.h:64
@ LAST
Definition AtomicOrdering.h:65
bool isAcquireOrStronger(AtomicOrdering AO)
Definition AtomicOrdering.h:129
bool isStrongerThan(AtomicOrdering AO, AtomicOrdering Other)
Returns true if ao is stronger than other as defined by the AtomicOrdering lattice,...
Definition AtomicOrdering.h:91
bool operator<=(int64_t V1, const APSInt &V2)