summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--test/passes/O3_low-memory-unused_metrics.txt32
-rw-r--r--test/passes/converge_O3_metrics.bin.txt60
-rw-r--r--test/passes/func-metrics.txt48
-rw-r--r--test/passes/fuzz_metrics_noprint.bin.txt40
-rw-r--r--test/passes/metrics_all-features.txt10
-rw-r--r--test/passes/metrics_strip-debug_metrics.bin.txt4
-rw-r--r--test/passes/metrics_strip-producers_metrics.bin.txt4
-rw-r--r--test/passes/print_g_metrics.bin.txt22
-rw-r--r--test/passes/too_much_for_liveness.bin.txt16
-rw-r--r--test/passes/translate-to-fuzz_all-features_metrics_noprint.txt56
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