diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-binary-reader-opcnt.c | 9 | ||||
-rw-r--r-- | src/wasm-binary-reader-opcnt.h | 5 | ||||
-rw-r--r-- | src/wasmopcodecnt.c | 31 |
3 files changed, 27 insertions, 18 deletions
diff --git a/src/wasm-binary-reader-opcnt.c b/src/wasm-binary-reader-opcnt.c index 74e34c93..1a6a4ff7 100644 --- a/src/wasm-binary-reader-opcnt.c +++ b/src/wasm-binary-reader-opcnt.c @@ -149,11 +149,10 @@ static WasmBinaryReader s_binary_reader = { .on_store_expr = on_store_expr }; -WasmOpcntData* wasm_new_opcnt_data(struct WasmAllocator* allocator) { - WasmOpcntData* result = wasm_alloc_zero(allocator, sizeof(WasmOpcntData), - WASM_DEFAULT_ALIGN); - result->allocator = allocator; - return result; +void wasm_init_opcnt_data(struct WasmAllocator* allocator, + WasmOpcntData* data) { + WASM_ZERO_MEMORY(*data); + data->allocator = allocator; } void wasm_destroy_opcnt_data(struct WasmAllocator* allocator, diff --git a/src/wasm-binary-reader-opcnt.h b/src/wasm-binary-reader-opcnt.h index e2ab1493..426772b3 100644 --- a/src/wasm-binary-reader-opcnt.h +++ b/src/wasm-binary-reader-opcnt.h @@ -52,10 +52,9 @@ typedef struct WasmOpcntData { WasmIntPairCounterVector i32_store_vec; } WasmOpcntData; -WasmOpcntData* wasm_new_opcnt_data(struct WasmAllocator* allocator); - +void wasm_init_opcnt_data(struct WasmAllocator* allocator, WasmOpcntData* data); void wasm_destroy_opcnt_data(struct WasmAllocator* allocator, - WasmOpcntData* Data); + WasmOpcntData* data); WasmResult wasm_read_binary_opcnt(struct WasmAllocator* allocator, const void* data, diff --git a/src/wasmopcodecnt.c b/src/wasmopcodecnt.c index 7d4aeb80..0aeaaf7e 100644 --- a/src/wasmopcodecnt.c +++ b/src/wasmopcodecnt.c @@ -193,6 +193,8 @@ static void display_int_counter_vector( const char* opcode_name) { size_t i; for (i = 0; i < vec->size; ++i) { + if (vec->data[i].count == 0) + continue; if (opcode_name) fprintf(out, "(%s ", opcode_name); display_fcn(out, vec->data[i].value); @@ -208,6 +210,8 @@ static void display_int_pair_counter_vector( const char* opcode_name) { size_t i; for (i = 0; i < vec->size; ++i) { + if (vec->data[i].count == 0) + continue; if (opcode_name) fprintf(out, "(%s ", opcode_name); display_first_fcn(out, vec->data[i].first); @@ -305,6 +309,9 @@ static void display_sorted_int_counter_vector( FILE* out, const char* title, struct WasmAllocator* allocator, WasmIntCounterVector* vec, int_counter_lt_fcn lt_fcn, display_name_fcn display_fcn, const char* opcode_name) { + if (vec->size == 0) + return; + /* First filter out values less than cutoff. This speeds up sorting. */ WasmIntCounterVector filtered_vec; WASM_ZERO_MEMORY(filtered_vec); @@ -329,6 +336,9 @@ static void display_sorted_int_pair_counter_vector( WasmIntPairCounterVector* vec, int_pair_counter_lt_fcn lt_fcn, display_name_fcn display_first_fcn, display_name_fcn display_second_fcn, const char* opcode_name) { + if (vec->size == 0) + return; + WasmIntPairCounterVector filtered_vec; WASM_ZERO_MEMORY(filtered_vec); WasmIntPairCounterVector sorted_vec; @@ -381,40 +391,41 @@ int main(int argc, char** argv) { result = WASM_ERROR; } if (WASM_SUCCEEDED(result)) { - WasmOpcntData* opcnt_data = wasm_new_opcnt_data(allocator); + WasmOpcntData opcnt_data; + wasm_init_opcnt_data(allocator, &opcnt_data); result = wasm_read_binary_opcnt( allocator, data, size, &s_read_binary_options, &s_error_handler, - opcnt_data); + &opcnt_data); if (WASM_SUCCEEDED(result)) { display_sorted_int_counter_vector( - out, "Opcode counts:", allocator, &opcnt_data->opcode_vec, + out, "Opcode counts:", allocator, &opcnt_data.opcode_vec, opcode_counter_gt, display_opcode_name, NULL); display_sorted_int_counter_vector( - out, "\ni32.const", allocator, &opcnt_data->i32_const_vec, + out, "\ni32.const:", allocator, &opcnt_data.i32_const_vec, int_counter_gt, display_intmax, wasm_get_opcode_name(WASM_OPCODE_I32_CONST)); display_sorted_int_counter_vector( - out, "\nget_local:\n", allocator, &opcnt_data->get_local_vec, + out, "\nget_local:", allocator, &opcnt_data.get_local_vec, int_counter_gt, display_intmax, wasm_get_opcode_name(WASM_OPCODE_GET_LOCAL)); display_sorted_int_counter_vector( - out, "\nset_local:\n", allocator, &opcnt_data->set_local_vec, + out, "\nset_local:", allocator, &opcnt_data.set_local_vec, int_counter_gt, display_intmax, wasm_get_opcode_name(WASM_OPCODE_SET_LOCAL)); display_sorted_int_counter_vector( - out, "\ntee_local:\n", allocator, &opcnt_data->tee_local_vec, + out, "\ntee_local:", allocator, &opcnt_data.tee_local_vec, int_counter_gt, display_intmax, wasm_get_opcode_name(WASM_OPCODE_TEE_LOCAL)); display_sorted_int_pair_counter_vector( - out, "\ni32.load:\n", allocator, &opcnt_data->i32_load_vec, + out, "\ni32.load:", allocator, &opcnt_data.i32_load_vec, int_pair_counter_gt, display_intmax, display_intmax, wasm_get_opcode_name(WASM_OPCODE_I32_LOAD)); display_sorted_int_pair_counter_vector( - out, "\ni32.store:\n", allocator, &opcnt_data->i32_store_vec, + out, "\ni32.store:", allocator, &opcnt_data.i32_store_vec, int_pair_counter_gt, display_intmax, display_intmax, wasm_get_opcode_name(WASM_OPCODE_I32_STORE)); } - wasm_destroy_opcnt_data(allocator, opcnt_data); + wasm_destroy_opcnt_data(allocator, &opcnt_data); } wasm_free(allocator, data); wasm_print_allocator_stats(allocator); |