Enable microkernel VMVX for person_detection model

Enable microkernel for VMVX backend and for person_detection model only.

Change-Id: Ib91f84e5317b2d0a29a1281d0948177d189cbf0e
diff --git a/quant_models/CMakeLists.txt b/quant_models/CMakeLists.txt
index 42cdca3..6dba090 100644
--- a/quant_models/CMakeLists.txt
+++ b/quant_models/CMakeLists.txt
@@ -61,6 +61,7 @@
     "-iree-input-type=tosa"
     "-riscv-v-vector-bits-min=512"
     "-riscv-v-fixed-length-vector-lmul-max=8"
+  VMVX
   PUBLIC
 )
 
@@ -234,6 +235,43 @@
 
 iree_cc_binary(
   NAME
+    person_detection_bytecode_vmvx
+  SRCS
+    "iree_exec/person_detection.c"
+  DEPS
+    ::person_detection_bytecode_module_vmvx_c
+    ::person_detection_quant_input_c
+    iree::vm::bytecode_module
+    model_util::util_vmvx
+  LINKOPTS
+    "LINKER:--defsym=__stack_size__=128k"
+    "LINKER:--defsym=__heap_size__=200k"
+  COPTS
+    "-DBUILD_VMVX"
+)
+
+springbok_test(
+  NAME
+    person_detection_emitc_vmvx
+  SRCS
+    "iree_exec/person_detection.c"
+  DEPS
+    ::person_detection_c_module_vmvx_emitc
+    ::person_detection_quant_input_c
+    model_util::util_vmvx
+  LINKOPTS
+    "LINKER:--defsym=__stack_size__=128k"
+    "LINKER:--defsym=__heap_size__=200k"
+  COPTS
+    "-DBUILD_EMITC"
+    "-DBUILD_VMVX"
+  TESTFILES
+    "iree_exec/person_detection_vmvx_test.run"
+    "iree_exec/person_detection_test.filecheck"
+)
+
+iree_cc_binary(
+  NAME
     person_detection_bytecode_static
   SRCS
     "iree_exec/person_detection.c"
diff --git a/quant_models/iree_exec/person_detection.c b/quant_models/iree_exec/person_detection.c
index 6d96146..41bd9c3 100644
--- a/quant_models/iree_exec/person_detection.c
+++ b/quant_models/iree_exec/person_detection.c
@@ -26,13 +26,21 @@
 #include "iree/hal/api.h"
 
 // Compiled module embedded here to avoid file IO:
+#if defined(BUILD_VMVX)
+#if !defined(BUILD_EMITC)
+#include "person_detection_bytecode_module_vmvx_c.h"
+#else
+#include "person_detection_c_module_vmvx_emitc.h"
+#endif  // !defined(BUILD_EMITC)
+#else
 #if !defined(BUILD_EMITC)
 #include "person_detection_bytecode_module_static.h"
 #include "person_detection_bytecode_module_static_c.h"
 #else
 #include "person_detection_c_module_static_c.h"
 #include "person_detection_c_module_static_emitc.h"
-#endif
+#endif  // !defined(BUILD_EMITC)
+#endif  // defined(BUILD_VMVX)
 #include "person_detection_quant_input_c.h"
 
 __attribute__((section(".model_output"))) PersonDetectionOutput detection;
@@ -40,8 +48,13 @@
 iree_status_t create_module(iree_vm_instance_t *instance,
                             iree_vm_module_t **module) {
 #if !defined(BUILD_EMITC)
+#if defined(BUILD_VMVX)
+  const struct iree_file_toc_t *module_file_toc =
+      quant_models_person_detection_bytecode_module_vmvx_create();
+#else
   const struct iree_file_toc_t *module_file_toc =
       quant_models_person_detection_bytecode_module_static_create();
+#endif
   return iree_vm_bytecode_module_create(
       instance,
       iree_make_const_byte_span(module_file_toc->data, module_file_toc->size),
@@ -51,6 +64,7 @@
 #endif
 }
 
+#if !defined(BUILD_VMVX)
 iree_hal_executable_library_query_fn_t library_query(void) {
 #if !defined(BUILD_EMITC)
   return &person_detection_bytecode_module_static_linked_llvm_cpu_library_query;
@@ -58,6 +72,7 @@
   return &person_detection_c_module_static_linked_llvm_cpu_library_query;
 #endif
 }
+#endif
 
 iree_status_t load_input_data(const MlModel *model, void **buffer,
                               iree_const_byte_span_t **byte_span) {
diff --git a/quant_models/iree_exec/person_detection_test.filecheck b/quant_models/iree_exec/person_detection_test.filecheck
index c84bff9..1a880de 100644
--- a/quant_models/iree_exec/person_detection_test.filecheck
+++ b/quant_models/iree_exec/person_detection_test.filecheck
@@ -1 +1 @@
-// CHECK: Non-person Score: -113; Person Score: 113
+// CHECK: {{Non-person Score: -11[3-4]; Person Score: 11[3-4]}}
diff --git a/quant_models/iree_exec/person_detection_vmvx_test.run b/quant_models/iree_exec/person_detection_vmvx_test.run
new file mode 100644
index 0000000..c0ffdb9
--- /dev/null
+++ b/quant_models/iree_exec/person_detection_vmvx_test.run
@@ -0,0 +1,5 @@
+// RUN: ${TEST_RUNNER_CMD} %S/person_detection_bytecode_vmvx 2>&1 | tee %t
+// RUN: cat %t | FileCheck %S/person_detection_test.filecheck
+
+// RUN: ${TEST_RUNNER_CMD} %S/person_detection_emitc_vmvx 2>&1 | tee %t
+// RUN: cat %t | FileCheck %S/person_detection_test.filecheck