Add support for MicroKernel for VMVX regular HAL

Enable microkernel for VMVX regular (non-inline) HAL

Also add the microkernel target for microbenchmark.

Change-Id: Idf11bf22e6898ccf9b4b6623f9ca5a92515644d5
diff --git a/cmake/springbok_vmvx_module.cmake b/cmake/springbok_vmvx_module.cmake
index 479fad6..e63b583 100644
--- a/cmake/springbok_vmvx_module.cmake
+++ b/cmake/springbok_vmvx_module.cmake
@@ -75,6 +75,7 @@
     list(APPEND _COMPILER_ARGS "--iree-hal-target-backends=vmvx-inline")
   else()
     list(APPEND _COMPILER_ARGS "--iree-hal-target-backends=vmvx")
+    list(APPEND _COMPILER_ARGS "--iree-vmvx-enable-microkernels")
   endif()
 
   if(_RULE_EMITC)
diff --git a/samples/microbenchmarks/CMakeLists.txt b/samples/microbenchmarks/CMakeLists.txt
index ee7135a..68ff7d0 100644
--- a/samples/microbenchmarks/CMakeLists.txt
+++ b/samples/microbenchmarks/CMakeLists.txt
@@ -17,6 +17,34 @@
   PUBLIC
 )
 
+springbok_vmvx_module(
+  NAME
+    conv1x1_test_vmvx
+  SRC
+    "conv1x1_test.mlir"
+  FLAGS
+    "-iree-input-type=tosa"
+    "-riscv-v-vector-bits-min=512"
+    "-riscv-v-fixed-length-vector-lmul-max=8"
+  EMITC
+  VMVX
+  PUBLIC
+)
+
+iree_cc_binary(
+  NAME
+    conv1x1_test_emitc_vmvx
+  SRCS
+    "conv1x1_test.c"
+  DEPS
+    ::conv1x1_test_vmvx_emitc
+    model_util::util_vmvx
+  LINKOPTS
+    "LINKER:--defsym=__stack_size__=64k"
+  COPTS
+    "-DBUILD_VMVX"
+)
+
 springbok_test(
   NAME
     conv1x1_test_emitc_static
@@ -28,8 +56,6 @@
     model_util::util_static
   LINKOPTS
     "LINKER:--defsym=__stack_size__=64k"
-  COPTS
-    "-DBUILD_EMITC_STATIC"
   TESTFILES
     "conv1x1_test.run"
 )
diff --git a/samples/microbenchmarks/conv1x1_test.c b/samples/microbenchmarks/conv1x1_test.c
index 8e88743..1bd5bfa 100644
--- a/samples/microbenchmarks/conv1x1_test.c
+++ b/samples/microbenchmarks/conv1x1_test.c
@@ -3,8 +3,12 @@
 #include "iree/base/api.h"
 #include "iree/hal/api.h"
 #include "model_util/util.h"
+#if defined(BUILD_VMVX)
+#include "samples/microbenchmarks/conv1x1_test_vmvx_emitc.h"
+#else
 #include "samples/microbenchmarks/conv1x1_test_c.h"
 #include "samples/microbenchmarks/conv1x1_test_emitc.h"
+#endif
 
 const MlModel kModel = {
     .num_input = 1,
@@ -25,9 +29,11 @@
   return module_create(instance, iree_allocator_system(), module);
 }
 
+#if !defined(BUILD_VMVX)
 iree_hal_executable_library_query_fn_t library_query(void) {
   return conv1x1_test_linked_llvm_cpu_library_query;
 }
+#endif
 
 iree_status_t load_input_data(const MlModel *model, void **buffer,
                               iree_const_byte_span_t **byte_span) {
diff --git a/samples/microbenchmarks/conv1x1_test.run b/samples/microbenchmarks/conv1x1_test.run
index 2aa9a92..cc653cf 100644
--- a/samples/microbenchmarks/conv1x1_test.run
+++ b/samples/microbenchmarks/conv1x1_test.run
@@ -1 +1,2 @@
 // RUN: ${TEST_RUNNER_CMD} %S/conv1x1_test_emitc_static
+// RUN: ${TEST_RUNNER_CMD} %S/conv1x1_test_emitc_vmvx