Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 76d7df6

Browse filesBrowse files
committed
[GC] Use MapVector for GCStrategyMap
Use `MapVector`, so `GCStrategyMap` can support forward and reverse iterator, which is required in `AsmPrinter`.
1 parent cf0efb3 commit 76d7df6
Copy full SHA for 76d7df6

File tree

Expand file treeCollapse file tree

3 files changed

+41
-10
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+41
-10
lines changed

‎llvm/include/llvm/CodeGen/GCMetadata.h

Copy file name to clipboardExpand all lines: llvm/include/llvm/CodeGen/GCMetadata.h
+35-2Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#define LLVM_CODEGEN_GCMETADATA_H
3434

3535
#include "llvm/ADT/DenseMap.h"
36+
#include "llvm/ADT/MapVector.h"
3637
#include "llvm/ADT/SmallVector.h"
3738
#include "llvm/ADT/StringMap.h"
3839
#include "llvm/ADT/StringRef.h"
@@ -151,15 +152,47 @@ class GCFunctionInfo {
151152
size_t live_size(const iterator &p) const { return roots_size(); }
152153
};
153154

154-
struct GCStrategyMap {
155-
StringMap<std::unique_ptr<GCStrategy>> StrategyMap;
155+
class GCStrategyMap {
156+
using MapT =
157+
MapVector<std::string, std::unique_ptr<GCStrategy>, StringMap<unsigned>>;
158+
MapT Strategies;
156159

160+
public:
157161
GCStrategyMap() = default;
158162
GCStrategyMap(GCStrategyMap &&) = default;
159163

160164
/// Handle invalidation explicitly.
161165
bool invalidate(Module &M, const PreservedAnalyses &PA,
162166
ModuleAnalysisManager::Invalidator &Inv);
167+
168+
using iterator = MapT::iterator;
169+
using const_iterator = MapT::const_iterator;
170+
using reverse_iterator = MapT::reverse_iterator;
171+
using const_reverse_iterator = MapT::const_reverse_iterator;
172+
173+
iterator begin() { return Strategies.begin(); }
174+
const_iterator begin() const { return Strategies.begin(); }
175+
iterator end() { return Strategies.end(); }
176+
const_iterator end() const { return Strategies.end(); }
177+
178+
reverse_iterator rbegin() { return Strategies.rbegin(); }
179+
const_reverse_iterator rbegin() const { return Strategies.rbegin(); }
180+
reverse_iterator rend() { return Strategies.rend(); }
181+
const_reverse_iterator rend() const { return Strategies.rend(); }
182+
183+
bool empty() const { return Strategies.empty(); }
184+
185+
std::unique_ptr<GCStrategy> &operator[](const std::string &GCName) {
186+
return Strategies[GCName];
187+
}
188+
189+
std::pair<iterator, bool> try_emplace(const std::string &GCName) {
190+
return Strategies.try_emplace(GCName);
191+
}
192+
193+
bool contains(const std::string &GCName) const {
194+
return Strategies.find(GCName) != Strategies.end();
195+
}
163196
};
164197

165198
/// An analysis pass which caches information about the entire Module.

‎llvm/lib/CodeGen/GCMetadata.cpp

Copy file name to clipboardExpand all lines: llvm/lib/CodeGen/GCMetadata.cpp
+5-7Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ bool GCStrategyMap::invalidate(Module &M, const PreservedAnalyses &PA,
2626
for (const auto &F : M) {
2727
if (F.isDeclaration() || !F.hasGC())
2828
continue;
29-
if (!StrategyMap.contains(F.getGC()))
29+
if (!contains(F.getGC()))
3030
return true;
3131
}
3232
return false;
@@ -36,17 +36,16 @@ AnalysisKey CollectorMetadataAnalysis::Key;
3636

3737
CollectorMetadataAnalysis::Result
3838
CollectorMetadataAnalysis::run(Module &M, ModuleAnalysisManager &MAM) {
39-
Result R;
40-
auto &Map = R.StrategyMap;
39+
Result StrategyMap;
4140
for (auto &F : M) {
4241
if (F.isDeclaration() || !F.hasGC())
4342
continue;
4443
auto GCName = F.getGC();
45-
auto [It, Inserted] = Map.try_emplace(GCName);
44+
auto [It, Inserted] = StrategyMap.try_emplace(GCName);
4645
if (Inserted)
4746
It->second = getGCStrategy(GCName);
4847
}
49-
return R;
48+
return StrategyMap;
5049
}
5150

5251
AnalysisKey GCFunctionAnalysis::Key;
@@ -61,8 +60,7 @@ GCFunctionAnalysis::run(Function &F, FunctionAnalysisManager &FAM) {
6160
MAMProxy.cachedResultExists<CollectorMetadataAnalysis>(*F.getParent()) &&
6261
"This pass need module analysis `collector-metadata`!");
6362
auto &Map =
64-
MAMProxy.getCachedResult<CollectorMetadataAnalysis>(*F.getParent())
65-
->StrategyMap;
63+
*MAMProxy.getCachedResult<CollectorMetadataAnalysis>(*F.getParent());
6664
GCFunctionInfo Info(F, *Map[F.getGC()]);
6765
return Info;
6866
}

‎llvm/lib/CodeGen/ShadowStackGCLowering.cpp

Copy file name to clipboardExpand all lines: llvm/lib/CodeGen/ShadowStackGCLowering.cpp
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class ShadowStackGCLowering : public FunctionPass {
109109
PreservedAnalyses ShadowStackGCLoweringPass::run(Module &M,
110110
ModuleAnalysisManager &MAM) {
111111
auto &Map = MAM.getResult<CollectorMetadataAnalysis>(M);
112-
if (Map.StrategyMap.contains("shadow-stack"))
112+
if (!Map.contains("shadow-stack"))
113113
return PreservedAnalyses::all();
114114

115115
ShadowStackGCLoweringImpl Impl;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.