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)