From 4a1e522c5320b77f98d9a15f83a5dc18a323bc7e Mon Sep 17 00:00:00 2001 From: Huang Qi Date: Mon, 24 Oct 2022 10:20:05 +0800 Subject: [PATCH] Move indirect mode optimization to the last of LLVM pipelines (#1627) The general optimizations may create some intrinsic function calls like llvm.memset, so we move indirect mode optimization after them to remove these function calls at last. Signed-off-by: Huang Qi --- core/iwasm/compilation/aot_compiler.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/core/iwasm/compilation/aot_compiler.c b/core/iwasm/compilation/aot_compiler.c index 24dfb0441f..61e216134f 100644 --- a/core/iwasm/compilation/aot_compiler.c +++ b/core/iwasm/compilation/aot_compiler.c @@ -2704,15 +2704,6 @@ aot_compile_wasm(AOTCompContext *comp_ctx) /* Run IR optimization before feeding in ORCJIT and AOT codegen */ if (comp_ctx->optimize) { - /* Run specific passes for AOT indirect mode */ - if (!comp_ctx->is_jit_mode && comp_ctx->is_indirect_mode) { - bh_print_time("Begin to run optimization passes " - "for indirect mode"); - if (!apply_passes_for_indirect_mode(comp_ctx)) { - return false; - } - } - /* Run passes for AOT/JIT mode. TODO: Apply these passes in the do_ir_transform callback of TransformLayer when compiling each jit function, so as to @@ -2721,6 +2712,17 @@ aot_compile_wasm(AOTCompContext *comp_ctx) possible core dump. */ bh_print_time("Begin to run llvm optimization passes"); aot_apply_llvm_new_pass_manager(comp_ctx, comp_ctx->module); + + /* Run specific passes for AOT indirect mode in last since general + optimization may create some intrinsic function calls like + llvm.memset, so let's remove these function calls here. */ + if (!comp_ctx->is_jit_mode && comp_ctx->is_indirect_mode) { + bh_print_time("Begin to run optimization passes " + "for indirect mode"); + if (!apply_passes_for_indirect_mode(comp_ctx)) { + return false; + } + } bh_print_time("Finish llvm optimization passes"); }