diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/Metrics.cpp | 7 | ||||
-rw-r--r-- | src/passes/Print.cpp | 7 | ||||
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 2 | ||||
-rw-r--r-- | src/wasm/wasm.cpp | 166 | ||||
-rw-r--r-- | src/wasm2js.h | 2 |
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; } }; |