diff options
-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 | ||||
-rw-r--r-- | test/passes/O3_low-memory-unused_metrics.txt | 32 | ||||
-rw-r--r-- | test/passes/converge_O3_metrics.bin.txt | 60 | ||||
-rw-r--r-- | test/passes/func-metrics.txt | 48 | ||||
-rw-r--r-- | test/passes/fuzz_metrics_noprint.bin.txt | 40 | ||||
-rw-r--r-- | test/passes/metrics_all-features.txt | 10 | ||||
-rw-r--r-- | test/passes/metrics_strip-debug_metrics.bin.txt | 4 | ||||
-rw-r--r-- | test/passes/metrics_strip-producers_metrics.bin.txt | 4 | ||||
-rw-r--r-- | test/passes/print_g_metrics.bin.txt | 22 | ||||
-rw-r--r-- | test/passes/too_much_for_liveness.bin.txt | 16 | ||||
-rw-r--r-- | test/passes/translate-to-fuzz_all-features_metrics_noprint.txt | 56 |
15 files changed, 166 insertions, 310 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; } }; diff --git a/test/passes/O3_low-memory-unused_metrics.txt b/test/passes/O3_low-memory-unused_metrics.txt index ce7ea2333..1ec56ef2c 100644 --- a/test/passes/O3_low-memory-unused_metrics.txt +++ b/test/passes/O3_low-memory-unused_metrics.txt @@ -8,22 +8,22 @@ total [table-data] : 0 [total] : 1964 [vars] : 9 - binary : 240 - block : 68 - break : 90 - call : 22 - call_indirect : 1 - const : 175 - drop : 8 - if : 27 - load : 313 - local.get : 633 - local.set : 181 - loop : 3 - return : 3 - select : 11 - store : 160 - unary : 29 + Binary : 240 + Block : 68 + Break : 90 + Call : 22 + CallIndirect : 1 + Const : 175 + Drop : 8 + If : 27 + Load : 313 + LocalGet : 633 + LocalSet : 181 + Loop : 3 + Return : 3 + Select : 11 + Store : 160 + Unary : 29 (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) diff --git a/test/passes/converge_O3_metrics.bin.txt b/test/passes/converge_O3_metrics.bin.txt index bb68dd500..1764458f6 100644 --- a/test/passes/converge_O3_metrics.bin.txt +++ b/test/passes/converge_O3_metrics.bin.txt @@ -8,21 +8,21 @@ total [table-data] : 429 [total] : 129 [vars] : 4 - binary : 12 - block : 8 - break : 3 - call : 3 - call_indirect : 4 - const : 45 - drop : 3 - global.get : 1 - global.set : 1 - if : 2 - load : 16 - local.get : 18 - local.set : 7 - loop : 1 - store : 5 + Binary : 12 + Block : 8 + Break : 3 + Call : 3 + CallIndirect : 4 + Const : 45 + Drop : 3 + GlobalGet : 1 + GlobalSet : 1 + If : 2 + Load : 16 + LocalGet : 18 + LocalSet : 7 + Loop : 1 + Store : 5 (module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) @@ -249,21 +249,21 @@ total [table-data] : 429 [total] : 129 [vars] : 4 - binary : 12 - block : 8 - break : 3 - call : 3 - call_indirect : 4 - const : 45 - drop : 3 - global.get : 1 - global.set : 1 - if : 2 - load : 16 - local.get : 18 - local.set : 7 - loop : 1 - store : 5 + Binary : 12 + Block : 8 + Break : 3 + Call : 3 + CallIndirect : 4 + Const : 45 + Drop : 3 + GlobalGet : 1 + GlobalSet : 1 + If : 2 + Load : 16 + LocalGet : 18 + LocalSet : 7 + Loop : 1 + Store : 5 (module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) diff --git a/test/passes/func-metrics.txt b/test/passes/func-metrics.txt index 44476f975..117d9baf7 100644 --- a/test/passes/func-metrics.txt +++ b/test/passes/func-metrics.txt @@ -7,30 +7,30 @@ global [memory-data] : 9 [table-data] : 3 [total] : 3 - const : 3 + Const : 3 func: empty [binary-bytes] : 3 [total] : 1 [vars] : 0 - nop : 1 + Nop : 1 func: small [binary-bytes] : 9 [total] : 5 [vars] : 0 - block : 1 - const : 1 - drop : 1 - nop : 1 - return : 1 + Block : 1 + Const : 1 + Drop : 1 + Nop : 1 + Return : 1 func: ifs [binary-bytes] : 51 [total] : 24 [vars] : 1 - binary : 1 - block : 1 - const : 12 - drop : 6 - if : 4 + Binary : 1 + Block : 1 + Const : 12 + Drop : 6 + If : 4 (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) @@ -109,20 +109,20 @@ func: func_a [binary-bytes] : 16 [total] : 8 [vars] : 0 - block : 1 - call : 7 + Block : 1 + Call : 7 func: func_b [binary-bytes] : 22 [total] : 11 [vars] : 0 - block : 1 - call : 10 + Block : 1 + Call : 10 func: func_c [binary-bytes] : 32 [total] : 16 [vars] : 0 - block : 1 - call : 15 + Block : 1 + Call : 15 export: a (func_a) [removable-bytes-without-it]: 72 [total] : 0 @@ -184,8 +184,8 @@ func: func_a [binary-bytes] : 12 [total] : 6 [vars] : 0 - block : 1 - call : 5 + Block : 1 + Call : 5 export: a (func_a) [removable-bytes-without-it]: 7 [total] : 0 @@ -216,8 +216,8 @@ func: func_a [binary-bytes] : 12 [total] : 6 [vars] : 0 - block : 1 - call : 5 + Block : 1 + Call : 5 start: func_a [removable-bytes-without-it]: 57 [total] : 0 @@ -240,12 +240,12 @@ global [globals] : 1 [imports] : 1 [total] : 1 - global.get : 1 + GlobalGet : 1 func: 0 [binary-bytes] : 4 [total] : 1 [vars] : 0 - global.get : 1 + GlobalGet : 1 export: stackSave (0) [removable-bytes-without-it]: 56 [total] : 0 diff --git a/test/passes/fuzz_metrics_noprint.bin.txt b/test/passes/fuzz_metrics_noprint.bin.txt index 9e9b6f4f8..13861d353 100644 --- a/test/passes/fuzz_metrics_noprint.bin.txt +++ b/test/passes/fuzz_metrics_noprint.bin.txt @@ -8,23 +8,23 @@ total [table-data] : 18 [total] : 4870 [vars] : 236 - binary : 368 - block : 699 - break : 191 - call : 300 - call_indirect : 39 - const : 847 - drop : 91 - global.get : 403 - global.set : 171 - if : 260 - load : 85 - local.get : 374 - local.set : 251 - loop : 111 - nop : 86 - return : 187 - select : 30 - store : 36 - unary : 340 - unreachable : 1 + Binary : 368 + Block : 699 + Break : 191 + Call : 300 + CallIndirect : 39 + Const : 847 + Drop : 91 + GlobalGet : 403 + GlobalSet : 171 + If : 260 + Load : 85 + LocalGet : 374 + LocalSet : 251 + Loop : 111 + Nop : 86 + Return : 187 + Select : 30 + Store : 36 + Unary : 340 + Unreachable : 1 diff --git a/test/passes/metrics_all-features.txt b/test/passes/metrics_all-features.txt index 5d7a92ae1..79381a62d 100644 --- a/test/passes/metrics_all-features.txt +++ b/test/passes/metrics_all-features.txt @@ -8,11 +8,11 @@ total [table-data] : 3 [total] : 27 [vars] : 1 - binary : 1 - block : 1 - const : 15 - drop : 6 - if : 4 + Binary : 1 + Block : 1 + Const : 15 + Drop : 6 + If : 4 (module (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) diff --git a/test/passes/metrics_strip-debug_metrics.bin.txt b/test/passes/metrics_strip-debug_metrics.bin.txt index 5d1ba4b6e..f873992bb 100644 --- a/test/passes/metrics_strip-debug_metrics.bin.txt +++ b/test/passes/metrics_strip-debug_metrics.bin.txt @@ -6,7 +6,7 @@ total [imports] : 0 [total] : 1 [vars] : 0 - nop : 1 + Nop : 1 total [events] : 0 [exports] : 1 @@ -15,7 +15,7 @@ total [imports] : 0 [total] : 1 [vars] : 0 - nop : 1 + Nop : 1 (module (type $none_=>_none (func)) (export "a" (func $0)) diff --git a/test/passes/metrics_strip-producers_metrics.bin.txt b/test/passes/metrics_strip-producers_metrics.bin.txt index 991b5a972..f20d10e0b 100644 --- a/test/passes/metrics_strip-producers_metrics.bin.txt +++ b/test/passes/metrics_strip-producers_metrics.bin.txt @@ -6,7 +6,7 @@ total [imports] : 0 [total] : 1 [vars] : 0 - nop : 1 + Nop : 1 total [events] : 0 [exports] : 1 @@ -15,7 +15,7 @@ total [imports] : 0 [total] : 1 [vars] : 0 - nop : 1 + Nop : 1 (module (type $none_=>_none (func)) (export "a" (func $0)) diff --git a/test/passes/print_g_metrics.bin.txt b/test/passes/print_g_metrics.bin.txt index 3d3d1f1be..57a1d2745 100644 --- a/test/passes/print_g_metrics.bin.txt +++ b/test/passes/print_g_metrics.bin.txt @@ -72,17 +72,17 @@ total [imports] : 0 [total] : 37 [vars] : 0 - binary : 11 - block : 2 - break : 1 - const : 8 - global.get : 1 - global.set : 1 - if : 1 - local.get : 8 - local.set : 2 - loop : 1 - nop : 1 + Binary : 11 + Block : 2 + Break : 1 + Const : 8 + GlobalGet : 1 + GlobalSet : 1 + If : 1 + LocalGet : 8 + LocalSet : 2 + Loop : 1 + Nop : 1 (module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) diff --git a/test/passes/too_much_for_liveness.bin.txt b/test/passes/too_much_for_liveness.bin.txt index 62aaf25f1..1d0e2df2d 100644 --- a/test/passes/too_much_for_liveness.bin.txt +++ b/test/passes/too_much_for_liveness.bin.txt @@ -6,10 +6,10 @@ total [imports] : 0 [total] : 4 [vars] : 65536 - block : 1 - const : 1 - local.get : 1 - local.set : 1 + Block : 1 + Const : 1 + LocalGet : 1 + LocalSet : 1 total [events] : 0 [exports] : 1 @@ -18,10 +18,10 @@ total [imports] : 0 [total] : 4 [vars] : 65536 - block : 1 - const : 1 - local.get : 1 - local.set : 1 + Block : 1 + Const : 1 + LocalGet : 1 + LocalSet : 1 (module (type $none_=>_i32 (func (result i32))) (export "foo" (func $0)) diff --git a/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt b/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt index c11b58362..083d7ce8f 100644 --- a/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt +++ b/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt @@ -8,31 +8,31 @@ total [table-data] : 1 [total] : 461 [vars] : 11 - atomic.rmw : 1 - binary : 72 - block : 40 - break : 5 - call : 13 - call_ref : 1 - const : 124 - drop : 3 - global.get : 20 - global.set : 11 - i31.get : 1 - i31.new : 8 - if : 17 - load : 19 - local.get : 34 - local.set : 18 - loop : 4 - memory.init : 1 - nop : 8 - ref.func : 1 - ref.null : 11 - return : 14 - select : 1 - simd_extract : 2 - store : 3 - tuple.extract : 1 - tuple.make : 8 - unary : 20 + AtomicRMW : 1 + Binary : 72 + Block : 40 + Break : 5 + Call : 13 + CallRef : 1 + Const : 124 + Drop : 3 + GlobalGet : 20 + GlobalSet : 11 + I31Get : 1 + I31New : 8 + If : 17 + Load : 19 + LocalGet : 34 + LocalSet : 18 + Loop : 4 + MemoryInit : 1 + Nop : 8 + RefFunc : 1 + RefNull : 11 + Return : 14 + SIMDExtract : 2 + Select : 1 + Store : 3 + TupleExtract : 1 + TupleMake : 8 + Unary : 20 |