Преглед изворни кода

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 <huangqi3@xiaomi.com>
Huang Qi пре 3 година
родитељ
комит
4a1e522c53
1 измењених фајлова са 11 додато и 9 уклоњено
  1. 11 9
      core/iwasm/compilation/aot_compiler.c

+ 11 - 9
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");
     }