summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-shell.cpp2
-rw-r--r--src/pass.cpp18
-rw-r--r--src/pass.h21
-rw-r--r--src/passes/LowerIfElse.cpp4
-rw-r--r--src/passes/NameManager.cpp2
5 files changed, 25 insertions, 22 deletions
diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp
index 97f7f1346..c7357e141 100644
--- a/src/binaryen-shell.cpp
+++ b/src/binaryen-shell.cpp
@@ -175,7 +175,7 @@ int main(int argc, char **argv) {
std::cout << "passes:\n";
auto allPasses = PassRegistry::get()->getRegisteredNames();
for (auto& name : allPasses) {
- std::cout << " -" << name << "\n";
+ std::cout << " -" << name << " : " << PassRegistry::get()->getPassDescription(name) << "\n";
}
std::cout << "\n";
exit(0);
diff --git a/src/pass.cpp b/src/pass.cpp
index 25e7a41e5..fe147891c 100644
--- a/src/pass.cpp
+++ b/src/pass.cpp
@@ -13,25 +13,29 @@ PassRegistry* PassRegistry::get() {
return manager;
}
-void PassRegistry::registerPass(const char* name, Creator create) {
- assert(passCreatorMap.find(name) == passCreatorMap.end());
- passCreatorMap[name] = create;
+void PassRegistry::registerPass(const char* name, const char *description, Creator create) {
+ assert(passInfos.find(name) == passInfos.end());
+ passInfos[name] = PassInfo(description, create);
}
Pass* PassRegistry::createPass(std::string name) {
- Creator creator = passCreatorMap[name];
- if (!creator) return nullptr;
- return creator();
+ if (passInfos.find(name) == passInfos.end()) return nullptr;
+ return passInfos[name].create();
}
std::vector<std::string> PassRegistry::getRegisteredNames() {
std::vector<std::string> ret;
- for (auto pair : passCreatorMap) {
+ for (auto pair : passInfos) {
ret.push_back(pair.first);
}
return ret;
}
+std::string PassRegistry::getPassDescription(std::string name) {
+ assert(passInfos.find(name) != passInfos.end());
+ return passInfos[name].description;
+}
+
// PassRunner
void PassRunner::add(std::string passName) {
diff --git a/src/pass.h b/src/pass.h
index 638052c70..de22e7daa 100644
--- a/src/pass.h
+++ b/src/pass.h
@@ -16,12 +16,19 @@ struct PassRegistry {
typedef std::function<Pass* ()> Creator;
- void registerPass(const char* name, Creator create);
+ void registerPass(const char* name, const char *description, Creator create);
Pass* createPass(std::string name);
std::vector<std::string> getRegisteredNames();
+ std::string getPassDescription(std::string name);
private:
- std::map<std::string, Creator> passCreatorMap;
+ struct PassInfo {
+ std::string description;
+ Creator create;
+ PassInfo() {}
+ PassInfo(std::string description, Creator create) : description(description), create(create) {}
+ };
+ std::map<std::string, PassInfo> passInfos;
};
//
@@ -29,8 +36,8 @@ private:
//
template<class P>
struct RegisterPass {
- RegisterPass() {
- PassRegistry::get()->registerPass(P().name, []() {
+ RegisterPass(const char* name, const char *description) {
+ PassRegistry::get()->registerPass(name, description, []() {
return new P();
});
}
@@ -64,10 +71,6 @@ struct PassRunner {
// Core pass class
//
struct Pass : public WasmWalker {
- const char* name;
-
- Pass(const char* name) : name(name) {}
-
// Override this to perform preparation work before the pass runs
virtual void prepare(PassRunner* runner, Module *module) {}
@@ -83,8 +86,6 @@ struct Pass : public WasmWalker {
// Handles names in a module, in particular adding names without duplicates
struct NameManager : public Pass {
- NameManager() : Pass("name-manager") {}
-
Name getUnique(std::string prefix);
// TODO: getUniqueInFunction
diff --git a/src/passes/LowerIfElse.cpp b/src/passes/LowerIfElse.cpp
index ff84c6844..1b8376ea4 100644
--- a/src/passes/LowerIfElse.cpp
+++ b/src/passes/LowerIfElse.cpp
@@ -17,8 +17,6 @@
namespace wasm {
struct LowerIfElse : public Pass {
- LowerIfElse() : Pass("lower-if-else") {}
-
MixedArena* allocator;
std::unique_ptr<NameManager> namer;
@@ -45,7 +43,7 @@ struct LowerIfElse : public Pass {
}
};
-static RegisterPass<LowerIfElse> registerPass;
+static RegisterPass<LowerIfElse> registerPass("lower-if-else", "lowers if-elses into ifs, blocks and branches");
} // namespace wasm
diff --git a/src/passes/NameManager.cpp b/src/passes/NameManager.cpp
index 13a6dd9f9..73a09262b 100644
--- a/src/passes/NameManager.cpp
+++ b/src/passes/NameManager.cpp
@@ -62,7 +62,7 @@ void NameManager::visitExport(Export* curr) {
names.insert(curr->name);
}
-static RegisterPass<NameManager> registerPass;
+static RegisterPass<NameManager> registerPass("name-manager", "utility pass to manage names in modules");
} // namespace wasm