LLVM: lib/Transforms/ObjCARC/BlotMapVector.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_LIB_TRANSFORMS_OBJCARC_BLOTMAPVECTOR_H

10#define LLVM_LIB_TRANSFORMS_OBJCARC_BLOTMAPVECTOR_H

11

13#include

14#include

15#include

16#include

17

18namespace llvm {

19

20

21

23

25 MapTy Map;

26

27

28 using VectorTy = std::vector<std::pair<KeyT, ValueT>>;

29 VectorTy Vector;

30

31public:

32#ifdef EXPENSIVE_CHECKS

34 assert(Vector.size() >= Map.size());

36 ++I) {

37 assert(I->second < Vector.size());

38 assert(Vector[I->second].first == I->first);

39 }

40 for (typename VectorTy::const_iterator I = Vector.begin(), E = Vector.end();

41 I != E; ++I)

42 assert(I->first || (Map.count(I->first) &&

43 Map[I->first] == size_t(I - Vector.begin())));

44 }

45#endif

46

47 using iterator = typename VectorTy::iterator;

49

54

56 std::pair<typename MapTy::iterator, bool> Pair = Map.try_emplace(Arg);

57 if (Pair.second) {

58 size_t Num = Vector.size();

59 Pair.first->second = Num;

60 Vector.push_back(std::make_pair(Arg, ValueT()));

61 return Vector[Num].second;

62 }

63 return Vector[Pair.first->second].second;

64 }

65

66 std::pair<iterator, bool> insert(const std::pair<KeyT, ValueT> &InsertPair) {

67 std::pair<typename MapTy::iterator, bool> Pair =

68 Map.insert(std::make_pair(InsertPair.first, size_t(0)));

69 if (Pair.second) {

70 size_t Num = Vector.size();

71 Pair.first->second = Num;

72 Vector.push_back(InsertPair);

73 return std::make_pair(Vector.begin() + Num, true);

74 }

75 return std::make_pair(Vector.begin() + Pair.first->second, false);

76 }

77

80 if (It == Map.end())

81 return Vector.end();

82 return Vector.begin() + It->second;

83 }

84

87 if (It == Map.end())

88 return Vector.end();

89 return Vector.begin() + It->second;

90 }

91

92

93

94

97 if (It == Map.end())

98 return;

99 Vector[It->second].first = KeyT();

100 Map.erase(It);

101 }

102

104 Map.clear();

105 Vector.clear();

106 }

107

109 assert(Map.empty() == Vector.empty());

110 return Map.empty();

111 }

112};

113

114}

115

116#endif

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")

This file defines the DenseMap class.

An associative container with fast insertion-order (deterministic) iteration over its elements.

Definition BlotMapVector.h:22

void clear()

Definition BlotMapVector.h:103

const_iterator begin() const

Definition BlotMapVector.h:52

void blot(const KeyT &Key)

This is similar to erase, but instead of removing the element from the vector, it just zeros out the ...

Definition BlotMapVector.h:95

iterator find(const KeyT &Key)

Definition BlotMapVector.h:78

iterator end()

Definition BlotMapVector.h:51

typename VectorTy::iterator iterator

Definition BlotMapVector.h:47

typename VectorTy::const_iterator const_iterator

Definition BlotMapVector.h:48

bool empty() const

Definition BlotMapVector.h:108

ValueT & operator[](const KeyT &Arg)

Definition BlotMapVector.h:55

std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &InsertPair)

Definition BlotMapVector.h:66

const_iterator end() const

Definition BlotMapVector.h:53

const_iterator find(const KeyT &Key) const

Definition BlotMapVector.h:85

iterator begin()

Definition BlotMapVector.h:50

DenseMapIterator< KeyT, ValueT, KeyInfoT, BucketT > iterator

DenseMapIterator< KeyT, ValueT, KeyInfoT, BucketT, true > const_iterator

This is an optimization pass for GlobalISel generic memory operations.

LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key