summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/Metrics.cpp7
-rw-r--r--src/passes/Print.cpp7
-rw-r--r--src/wasm/wasm-emscripten.cpp2
-rw-r--r--src/wasm/wasm.cpp166
-rw-r--r--src/wasm2js.h2
5 files changed, 20 insertions, 164 deletions
diff --git a/src/passes/Metrics.cpp b/src/passes/Metrics.cpp
index 56d04802a..3dda70d9b 100644
--- a/src/passes/Metrics.cpp
+++ b/src/passes/Metrics.cpp
@@ -171,6 +171,13 @@ struct Metrics
counts["[total]"] = total;
// sort
sort(keys.begin(), keys.end(), [](const char* a, const char* b) -> bool {
+ // Sort the [..] ones first.
+ if (a[0] == '[' && b[0] != '[') {
+ return true;
+ }
+ if (a[0] != '[' && b[0] == '[') {
+ return false;
+ }
return strcmp(b, a) > 0;
});
o << title << "\n";
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index a6efd5f1f..23590ebd5 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -3200,15 +3200,12 @@ static std::ostream& printExpression(Expression* expression,
static std::ostream&
printStackInst(StackInst* inst, std::ostream& o, Function* func) {
switch (inst->op) {
- case StackInst::Basic: {
- PrintExpressionContents(func, o).visit(inst->origin);
- break;
- }
+ case StackInst::Basic:
case StackInst::BlockBegin:
case StackInst::IfBegin:
case StackInst::LoopBegin:
case StackInst::TryBegin: {
- o << getExpressionName(inst->origin);
+ PrintExpressionContents(func, o).visit(inst->origin);
break;
}
case StackInst::BlockEnd:
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp
index 2e3a5cf23..8f0d4f9c8 100644
--- a/src/wasm/wasm-emscripten.cpp
+++ b/src/wasm/wasm-emscripten.cpp
@@ -310,7 +310,7 @@ void AsmConstWalker::visitCall(Call* curr) {
}
}
- Fatal() << "Unexpected arg0 type (" << getExpressionName(arg)
+ Fatal() << "Unexpected arg0 type (" << *arg
<< ") in call to: " << importName;
}
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index 2921f4974..690c96f67 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -102,164 +102,16 @@ void Expression::dump() { std::cout << *this << '\n'; }
const char* getExpressionName(Expression* curr) {
switch (curr->_id) {
- case Expression::Id::InvalidId:
- WASM_UNREACHABLE("invalid expr id");
- case Expression::Id::BlockId:
- return "block";
- case Expression::Id::IfId:
- return "if";
- case Expression::Id::LoopId:
- return "loop";
- case Expression::Id::BreakId:
- return "break";
- case Expression::Id::SwitchId:
- return "switch";
- case Expression::Id::CallId:
- return "call";
- case Expression::Id::CallIndirectId:
- return "call_indirect";
- case Expression::Id::LocalGetId:
- return "local.get";
- case Expression::Id::LocalSetId:
- return "local.set";
- case Expression::Id::GlobalGetId:
- return "global.get";
- case Expression::Id::GlobalSetId:
- return "global.set";
- case Expression::Id::LoadId:
- return "load";
- case Expression::Id::StoreId:
- return "store";
- case Expression::Id::ConstId:
- return "const";
- case Expression::Id::UnaryId:
- return "unary";
- case Expression::Id::BinaryId:
- return "binary";
- case Expression::Id::SelectId:
- return "select";
- case Expression::Id::DropId:
- return "drop";
- case Expression::Id::ReturnId:
- return "return";
- case Expression::Id::MemorySizeId:
- return "memory.size";
- case Expression::Id::MemoryGrowId:
- return "memory.grow";
- case Expression::Id::NopId:
- return "nop";
- case Expression::Id::UnreachableId:
- return "unreachable";
- case Expression::Id::AtomicCmpxchgId:
- return "atomic.cmpxchg";
- case Expression::Id::AtomicRMWId:
- return "atomic.rmw";
- case Expression::Id::AtomicWaitId:
- return "atomic.wait";
- case Expression::Id::AtomicNotifyId:
- return "atomic.notify";
- case Expression::Id::AtomicFenceId:
- return "atomic.fence";
- case Expression::Id::SIMDExtractId:
- return "simd_extract";
- case Expression::Id::SIMDReplaceId:
- return "simd_replace";
- case Expression::Id::SIMDShuffleId:
- return "simd_shuffle";
- case Expression::Id::SIMDTernaryId:
- return "simd_ternary";
- case Expression::Id::SIMDShiftId:
- return "simd_shift";
- case Expression::Id::SIMDLoadId:
- return "simd_load";
- case Expression::Id::SIMDLoadStoreLaneId:
- return "simd_load_store_lane";
- case Expression::Id::PrefetchId:
- return "prefetch";
- case Expression::Id::MemoryInitId:
- return "memory.init";
- case Expression::Id::DataDropId:
- return "data.drop";
- case Expression::Id::MemoryCopyId:
- return "memory.copy";
- case Expression::Id::MemoryFillId:
- return "memory.fill";
- case Expression::Id::PopId:
- return "pop";
- case Expression::Id::RefNullId:
- return "ref.null";
- case Expression::Id::RefIsId:
- switch (curr->cast<RefIs>()->op) {
- case RefIsNull:
- return "ref.is_null";
- case RefIsFunc:
- return "ref.is_func";
- case RefIsData:
- return "ref.is_data";
- case RefIsI31:
- return "ref.is_i31";
- default:
- WASM_UNREACHABLE("unimplemented ref.is_*");
- }
- case Expression::Id::RefFuncId:
- return "ref.func";
- case Expression::Id::RefEqId:
- return "ref.eq";
- case Expression::Id::TryId:
- return "try";
- case Expression::Id::ThrowId:
- return "throw";
- case Expression::Id::RethrowId:
- return "rethrow";
- case Expression::Id::TupleMakeId:
- return "tuple.make";
- case Expression::Id::TupleExtractId:
- return "tuple.extract";
- case Expression::Id::I31NewId:
- return "i31.new";
- case Expression::Id::I31GetId:
- return "i31.get";
- case Expression::Id::CallRefId:
- return "call_ref";
- case Expression::Id::RefTestId:
- return "ref.test";
- case Expression::Id::RefCastId:
- return "ref.cast";
- case Expression::Id::BrOnCastId:
- return "br_on_cast";
- case Expression::Id::RttCanonId:
- return "rtt.canon";
- case Expression::Id::RttSubId:
- return "rtt.sub";
- case Expression::Id::StructNewId:
- return "struct.new";
- case Expression::Id::StructGetId:
- return "struct.get";
- case Expression::Id::StructSetId:
- return "struct.set";
- case Expression::Id::ArrayNewId:
- return "array.new";
- case Expression::Id::ArrayGetId:
- return "array.get";
- case Expression::Id::ArraySetId:
- return "array.set";
- case Expression::Id::ArrayLenId:
- return "array.len";
- case Expression::Id::RefAsId:
- switch (curr->cast<RefAs>()->op) {
- case RefAsFunc:
- return "ref.as_func";
- case RefAsData:
- return "ref.as_data";
- case RefAsI31:
- return "ref.as_i31";
- default:
- WASM_UNREACHABLE("unimplemented ref.is_*");
- }
- case Expression::Id::NumExpressionIds:
- WASM_UNREACHABLE("invalid expr id");
+
+#define DELEGATE(CLASS_TO_VISIT) \
+ case Expression::Id::CLASS_TO_VISIT##Id: \
+ return #CLASS_TO_VISIT;
+
+#include "wasm-delegations.h"
+
+ default:
+ WASM_UNREACHABLE("invalid id");
}
- WASM_UNREACHABLE("invalid expr id");
}
Literal getLiteralFromConstExpression(Expression* curr) {
diff --git a/src/wasm2js.h b/src/wasm2js.h
index 382cde895..23d8a7b8b 100644
--- a/src/wasm2js.h
+++ b/src/wasm2js.h
@@ -2263,7 +2263,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m,
}
void unimplemented(Expression* curr) {
- Fatal() << "wasm2js cannot convert " << getExpressionName(curr);
+ Fatal() << "wasm2js cannot convert " << *curr;
}
};