diff --git a/BUILD.bazel b/BUILD.bazel
index b015dec..6c5d50c 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -84,9 +84,6 @@
     "src/f32-argmaxpool/9x-scalar-c1.c",
     "src/f32-avgpool/9p8x-scalar-c1.c",
     "src/f32-avgpool/9x-scalar-c1.c",
-    "src/f32-bilinear/gen/scalar-c1.c",
-    "src/f32-bilinear/gen/scalar-c2.c",
-    "src/f32-bilinear/gen/scalar-c4.c",
     "src/f32-clamp/scalar.c",
     "src/f32-conv-hwc/3x3s2p0p1c3x4-scalar-1x1.c",
     "src/f32-conv-hwc/3x3s2p1c3x4-scalar-1x1.c",
@@ -120,6 +117,9 @@
     "src/f32-hswish/gen/scalar-x1.c",
     "src/f32-hswish/gen/scalar-x2.c",
     "src/f32-hswish/gen/scalar-x4.c",
+    "src/f32-ibilinear/gen/scalar-c1.c",
+    "src/f32-ibilinear/gen/scalar-c2.c",
+    "src/f32-ibilinear/gen/scalar-c4.c",
     "src/f32-igemm/gen/1x4-scalar.c",
     "src/f32-igemm/gen/2x4-scalar.c",
     "src/f32-igemm/gen/4x2-scalar.c",
@@ -336,8 +336,6 @@
     "src/f32-argmaxpool/9x-psimd-c4.c",
     "src/f32-avgpool/9p8x-psimd-c4.c",
     "src/f32-avgpool/9x-psimd-c4.c",
-    "src/f32-bilinear/gen/psimd-c4.c",
-    "src/f32-bilinear/gen/psimd-c8.c",
     "src/f32-clamp/psimd.c",
     "src/f32-dwconv/gen/up4x25-psimd-acc2.c",
     "src/f32-dwconv/gen/up4x25-psimd.c",
@@ -374,6 +372,8 @@
     "src/f32-gemm/gen-inc/6x8s4-psimd.c",
     "src/f32-hswish/gen/psimd-x4.c",
     "src/f32-hswish/gen/psimd-x8.c",
+    "src/f32-ibilinear/gen/psimd-c4.c",
+    "src/f32-ibilinear/gen/psimd-c8.c",
     "src/f32-igemm/gen/1x8-psimd-loadsplat.c",
     "src/f32-igemm/gen/1x8-psimd-splat.c",
     "src/f32-igemm/gen/1x8s4-psimd.c",
@@ -458,8 +458,6 @@
 NEON_UKERNELS = [
     "src/f32-avgpool/9p8x-neon-c4.c",
     "src/f32-avgpool/9x-neon-c4.c",
-    "src/f32-bilinear/gen/neon-c4.c",
-    "src/f32-bilinear/gen/neon-c8.c",
     "src/f32-clamp/neon.c",
     "src/f32-dwconv/gen/up4x9-neon.c",
     "src/f32-dwconv/gen/up4x9-neon-acc2.c",
@@ -501,6 +499,8 @@
     "src/f32-gemm/gen-inc/8x8s4-neon.c",
     "src/f32-hswish/gen/neon-x4.c",
     "src/f32-hswish/gen/neon-x8.c",
+    "src/f32-ibilinear/gen/neon-c4.c",
+    "src/f32-ibilinear/gen/neon-c8.c",
     "src/f32-igemm/gen/1x8-neon-lane-ld64.c",
     "src/f32-igemm/gen/4x2-neon-lane-ld64.c",
     "src/f32-igemm/gen/4x4-neon-lane-ld64.c",
@@ -629,8 +629,8 @@
 ]
 
 NEONFMA_UKERNELS = [
-    "src/f32-bilinear/gen/neonfma-c4.c",
-    "src/f32-bilinear/gen/neonfma-c8.c",
+    "src/f32-ibilinear/gen/neonfma-c4.c",
+    "src/f32-ibilinear/gen/neonfma-c8.c",
     "src/f32-igemm/gen/1x8-neonfma-dup-ld64.c",
     "src/f32-igemm/gen/4x8-neonfma-dup-ld128.c",
     "src/f32-igemm/gen/4x8-neonfma-dup-ld64.c",
@@ -866,8 +866,6 @@
 SSE_UKERNELS = [
     "src/f32-avgpool/9p8x-sse-c4.c",
     "src/f32-avgpool/9x-sse-c4.c",
-    "src/f32-bilinear/gen/sse-c4.c",
-    "src/f32-bilinear/gen/sse-c8.c",
     "src/f32-clamp/sse.c",
     "src/f32-dwconv-spchw/3x3p1-sse.c",
     "src/f32-dwconv-spchw/3x3s2p1-sse.c",
@@ -901,6 +899,8 @@
     "src/f32-gemm/gen-inc/4x8s4-sse.c",
     "src/f32-hswish/gen/sse-x4.c",
     "src/f32-hswish/gen/sse-x8.c",
+    "src/f32-ibilinear/gen/sse-c4.c",
+    "src/f32-ibilinear/gen/sse-c8.c",
     "src/f32-igemm/gen/1x8-sse-dup.c",
     "src/f32-igemm/gen/1x8-sse-load1.c",
     "src/f32-igemm/gen/1x8s4-sse.c",
@@ -1465,7 +1465,6 @@
     "src/requantization/gemmlowp-requantization.h",
     "src/xnnpack/argmaxpool.h",
     "src/xnnpack/avgpool.h",
-    "src/xnnpack/bilinear.h",
     "src/xnnpack/clamp.h",
     "src/xnnpack/common.h",
     "src/xnnpack/conv.h",
@@ -1473,6 +1472,7 @@
     "src/xnnpack/gavgpool.h",
     "src/xnnpack/gemm.h",
     "src/xnnpack/hswish.h",
+    "src/xnnpack/ibilinear.h",
     "src/xnnpack/igemm.h",
     "src/xnnpack/intrinsics-polyfill.h",
     "src/xnnpack/lut.h",
@@ -2418,10 +2418,10 @@
 )
 
 xnnpack_unit_test(
-    name = "f32_bilinear_test",
+    name = "f32_ibilinear_test",
     srcs = [
-        "test/f32-bilinear.cc",
-        "test/bilinear-microkernel-tester.h",
+        "test/f32-ibilinear.cc",
+        "test/ibilinear-microkernel-tester.h",
         "src/xnnpack/AlignedAllocator.h",
     ] + MICROKERNEL_TEST_HDRS,
     deps = MICROKERNEL_TEST_DEPS,
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ad936e5..549afa9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -183,9 +183,6 @@
   src/f32-argmaxpool/9x-scalar-c1.c
   src/f32-avgpool/9p8x-scalar-c1.c
   src/f32-avgpool/9x-scalar-c1.c
-  src/f32-bilinear/gen/scalar-c1.c
-  src/f32-bilinear/gen/scalar-c2.c
-  src/f32-bilinear/gen/scalar-c4.c
   src/f32-clamp/scalar.c
   src/f32-conv-hwc/3x3s2p1c3x4-scalar-1x1.c
   src/f32-conv-hwc/3x3s2p0p1c3x4-scalar-1x1.c
@@ -219,6 +216,9 @@
   src/f32-hswish/gen/scalar-x1.c
   src/f32-hswish/gen/scalar-x2.c
   src/f32-hswish/gen/scalar-x4.c
+  src/f32-ibilinear/gen/scalar-c1.c
+  src/f32-ibilinear/gen/scalar-c2.c
+  src/f32-ibilinear/gen/scalar-c4.c
   src/f32-igemm/gen/1x4-scalar.c
   src/f32-igemm/gen/2x4-scalar.c
   src/f32-igemm/gen/4x2-scalar.c
@@ -352,8 +352,6 @@
   src/f32-argmaxpool/9x-psimd-c4.c
   src/f32-avgpool/9p8x-psimd-c4.c
   src/f32-avgpool/9x-psimd-c4.c
-  src/f32-bilinear/gen/psimd-c4.c
-  src/f32-bilinear/gen/psimd-c8.c
   src/f32-clamp/psimd.c
   src/f32-dwconv/gen/up4x25-psimd-acc2.c
   src/f32-dwconv/gen/up4x25-psimd.c
@@ -390,6 +388,8 @@
   src/f32-gemm/gen-inc/6x8s4-psimd.c
   src/f32-hswish/gen/psimd-x4.c
   src/f32-hswish/gen/psimd-x8.c
+  src/f32-ibilinear/gen/psimd-c4.c
+  src/f32-ibilinear/gen/psimd-c8.c
   src/f32-igemm/gen/1x8-psimd-loadsplat.c
   src/f32-igemm/gen/1x8-psimd-splat.c
   src/f32-igemm/gen/1x8s4-psimd.c
@@ -471,8 +471,6 @@
 SET(XNNPACK_NEON_MICROKERNEL_SRCS
   src/f32-avgpool/9p8x-neon-c4.c
   src/f32-avgpool/9x-neon-c4.c
-  src/f32-bilinear/gen/neon-c4.c
-  src/f32-bilinear/gen/neon-c8.c
   src/f32-clamp/neon.c
   src/f32-dwconv/gen/up4x9-neon.c
   src/f32-dwconv/gen/up4x9-neon-acc2.c
@@ -514,6 +512,8 @@
   src/f32-gemm/gen-inc/8x8s4-neon.c
   src/f32-hswish/gen/neon-x4.c
   src/f32-hswish/gen/neon-x8.c
+  src/f32-ibilinear/gen/neon-c4.c
+  src/f32-ibilinear/gen/neon-c8.c
   src/f32-igemm/gen/1x8-neon-lane-ld64.c
   src/f32-igemm/gen/4x2-neon-lane-ld64.c
   src/f32-igemm/gen/4x4-neon-lane-ld64.c
@@ -641,8 +641,8 @@
   src/requantization/gemmlowp-neon.c)
 
 SET(XNNPACK_NEONFMA_MICROKERNEL_SRCS
-  src/f32-bilinear/gen/neonfma-c4.c
-  src/f32-bilinear/gen/neonfma-c8.c
+  src/f32-ibilinear/gen/neonfma-c4.c
+  src/f32-ibilinear/gen/neonfma-c8.c
   src/f32-igemm/gen/1x8-neonfma-dup-ld64.c
   src/f32-igemm/gen/4x8-neonfma-dup-ld128.c
   src/f32-igemm/gen/4x8-neonfma-dup-ld64.c
@@ -867,8 +867,6 @@
 SET(XNNPACK_SSE_MICROKERNEL_SRCS
   src/f32-avgpool/9p8x-sse-c4.c
   src/f32-avgpool/9x-sse-c4.c
-  src/f32-bilinear/gen/sse-c4.c
-  src/f32-bilinear/gen/sse-c8.c
   src/f32-clamp/sse.c
   src/f32-dwconv-spchw/3x3p1-sse.c
   src/f32-dwconv-spchw/3x3s2p1-sse.c
@@ -902,6 +900,8 @@
   src/f32-gemm/gen-inc/4x8s4-sse.c
   src/f32-hswish/gen/sse-x4.c
   src/f32-hswish/gen/sse-x8.c
+  src/f32-ibilinear/gen/sse-c4.c
+  src/f32-ibilinear/gen/sse-c8.c
   src/f32-igemm/gen/1x8-sse-dup.c
   src/f32-igemm/gen/1x8-sse-load1.c
   src/f32-igemm/gen/1x8s4-sse.c
@@ -1893,15 +1893,6 @@
   TARGET_LINK_LIBRARIES(f32-avgpool-test PRIVATE XNNPACK cpuinfo fp16 gtest gtest_main)
   ADD_TEST(f32-avgpool-test f32-avgpool-test)
 
-  ADD_EXECUTABLE(f32-bilinear-test test/f32-bilinear.cc)
-  SET_TARGET_PROPERTIES(f32-bilinear-test PROPERTIES
-    CXX_STANDARD 11
-    CXX_STANDARD_REQUIRED YES
-    CXX_EXTENSIONS YES)
-  TARGET_INCLUDE_DIRECTORIES(f32-bilinear-test PRIVATE src test)
-  TARGET_LINK_LIBRARIES(f32-bilinear-test PRIVATE XNNPACK cpuinfo fp16 gtest gtest_main)
-  ADD_TEST(f32-bilinear-test f32-bilinear-test)
-
   ADD_EXECUTABLE(f32-clamp-test test/f32-clamp.cc)
   SET_TARGET_PROPERTIES(f32-clamp-test PROPERTIES
     CXX_STANDARD 11
@@ -1992,6 +1983,15 @@
   TARGET_LINK_LIBRARIES(f32-hswish-test PRIVATE XNNPACK cpuinfo fp16 gtest gtest_main)
   ADD_TEST(f32-hswish-test f32-hswish-test)
 
+  ADD_EXECUTABLE(f32-ibilinear-test test/f32-ibilinear.cc)
+  SET_TARGET_PROPERTIES(f32-ibilinear-test PROPERTIES
+    CXX_STANDARD 11
+    CXX_STANDARD_REQUIRED YES
+    CXX_EXTENSIONS YES)
+  TARGET_INCLUDE_DIRECTORIES(f32-ibilinear-test PRIVATE src test)
+  TARGET_LINK_LIBRARIES(f32-ibilinear-test PRIVATE XNNPACK cpuinfo fp16 gtest gtest_main)
+  ADD_TEST(f32-ibilinear-test f32-ibilinear-test)
+
   ADD_EXECUTABLE(f32-igemm-test test/f32-igemm.cc)
   SET_TARGET_PROPERTIES(f32-igemm-test PROPERTIES
     CXX_STANDARD 11
diff --git a/scripts/generate-f32-bilinear.sh b/scripts/generate-f32-bilinear.sh
deleted file mode 100755
index 75fe719..0000000
--- a/scripts/generate-f32-bilinear.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-# Copyright 2019 Google LLC
-#
-# This source code is licensed under the BSD-style license found in the
-# LICENSE file in the root directory of this source tree.
-
-#################################### Scalar ###################################
-tools/xngen src/f32-bilinear/scalar.c.in -D CHANNEL_TILE=1 -D PIXEL_TILE=1 -o src/f32-bilinear/gen/scalar-c1.c
-tools/xngen src/f32-bilinear/scalar.c.in -D CHANNEL_TILE=2 -D PIXEL_TILE=1 -o src/f32-bilinear/gen/scalar-c2.c
-tools/xngen src/f32-bilinear/scalar.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -o src/f32-bilinear/gen/scalar-c4.c
-
-################################### ARM NEON ##################################
-tools/xngen src/f32-bilinear/neon.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -D FMA=0 -o src/f32-bilinear/gen/neon-c4.c
-tools/xngen src/f32-bilinear/neon.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -D FMA=0 -o src/f32-bilinear/gen/neon-c8.c
-
-tools/xngen src/f32-bilinear/neon.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -D FMA=1 -o src/f32-bilinear/gen/neonfma-c4.c
-tools/xngen src/f32-bilinear/neon.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -D FMA=1 -o src/f32-bilinear/gen/neonfma-c8.c
-
-#################################### PSIMD ####################################
-tools/xngen src/f32-bilinear/psimd.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -o src/f32-bilinear/gen/psimd-c4.c
-tools/xngen src/f32-bilinear/psimd.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -o src/f32-bilinear/gen/psimd-c8.c
-
-################################### x86 SSE ###################################
-tools/xngen src/f32-bilinear/sse.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -o src/f32-bilinear/gen/sse-c4.c
-tools/xngen src/f32-bilinear/sse.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -o src/f32-bilinear/gen/sse-c8.c
-
-################################## Unit tests #################################
-tools/generate-bilinear-test.py --spec test/f32-bilinear.yaml --output test/f32-bilinear.cc
diff --git a/scripts/generate-f32-ibilinear.sh b/scripts/generate-f32-ibilinear.sh
new file mode 100755
index 0000000..dc76d0c
--- /dev/null
+++ b/scripts/generate-f32-ibilinear.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+# Copyright 2019 Google LLC
+#
+# This source code is licensed under the BSD-style license found in the
+# LICENSE file in the root directory of this source tree.
+
+#################################### Scalar ###################################
+tools/xngen src/f32-ibilinear/scalar.c.in -D CHANNEL_TILE=1 -D PIXEL_TILE=1 -o src/f32-ibilinear/gen/scalar-c1.c
+tools/xngen src/f32-ibilinear/scalar.c.in -D CHANNEL_TILE=2 -D PIXEL_TILE=1 -o src/f32-ibilinear/gen/scalar-c2.c
+tools/xngen src/f32-ibilinear/scalar.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -o src/f32-ibilinear/gen/scalar-c4.c
+
+################################### ARM NEON ##################################
+tools/xngen src/f32-ibilinear/neon.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -D FMA=0 -o src/f32-ibilinear/gen/neon-c4.c
+tools/xngen src/f32-ibilinear/neon.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -D FMA=0 -o src/f32-ibilinear/gen/neon-c8.c
+
+tools/xngen src/f32-ibilinear/neon.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -D FMA=1 -o src/f32-ibilinear/gen/neonfma-c4.c
+tools/xngen src/f32-ibilinear/neon.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -D FMA=1 -o src/f32-ibilinear/gen/neonfma-c8.c
+
+#################################### PSIMD ####################################
+tools/xngen src/f32-ibilinear/psimd.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -o src/f32-ibilinear/gen/psimd-c4.c
+tools/xngen src/f32-ibilinear/psimd.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -o src/f32-ibilinear/gen/psimd-c8.c
+
+################################### x86 SSE ###################################
+tools/xngen src/f32-ibilinear/sse.c.in -D CHANNEL_TILE=4 -D PIXEL_TILE=1 -o src/f32-ibilinear/gen/sse-c4.c
+tools/xngen src/f32-ibilinear/sse.c.in -D CHANNEL_TILE=8 -D PIXEL_TILE=1 -o src/f32-ibilinear/gen/sse-c8.c
+
+################################## Unit tests #################################
+tools/generate-ibilinear-test.py --spec test/f32-ibilinear.yaml --output test/f32-ibilinear.cc
diff --git a/src/f32-bilinear/gen/neon-c4.c b/src/f32-ibilinear/gen/neon-c4.c
similarity index 95%
rename from src/f32-bilinear/gen/neon-c4.c
rename to src/f32-ibilinear/gen/neon-c4.c
index 95b7bc0..bc29c74 100644
--- a/src/f32-bilinear/gen/neon-c4.c
+++ b/src/f32-ibilinear/gen/neon-c4.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/neon.c.in
+//   Template: src/f32-ibilinear/neon.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -12,10 +12,10 @@
 #include <arm_neon.h>
 
 #include <xnnpack/common.h>
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__neon_c4(
+void xnn_f32_ibilinear_ukernel__neon_c4(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/neon-c8.c b/src/f32-ibilinear/gen/neon-c8.c
similarity index 97%
rename from src/f32-bilinear/gen/neon-c8.c
rename to src/f32-ibilinear/gen/neon-c8.c
index 9551bd4..4baf353 100644
--- a/src/f32-bilinear/gen/neon-c8.c
+++ b/src/f32-ibilinear/gen/neon-c8.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/neon.c.in
+//   Template: src/f32-ibilinear/neon.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -12,10 +12,10 @@
 #include <arm_neon.h>
 
 #include <xnnpack/common.h>
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__neon_c8(
+void xnn_f32_ibilinear_ukernel__neon_c8(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/neonfma-c4.c b/src/f32-ibilinear/gen/neonfma-c4.c
similarity index 96%
rename from src/f32-bilinear/gen/neonfma-c4.c
rename to src/f32-ibilinear/gen/neonfma-c4.c
index b3b14d0..11c3c3c 100644
--- a/src/f32-bilinear/gen/neonfma-c4.c
+++ b/src/f32-ibilinear/gen/neonfma-c4.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/neon.c.in
+//   Template: src/f32-ibilinear/neon.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -12,10 +12,10 @@
 #include <arm_neon.h>
 
 #include <xnnpack/common.h>
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__neonfma_c4(
+void xnn_f32_ibilinear_ukernel__neonfma_c4(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/neonfma-c8.c b/src/f32-ibilinear/gen/neonfma-c8.c
similarity index 97%
rename from src/f32-bilinear/gen/neonfma-c8.c
rename to src/f32-ibilinear/gen/neonfma-c8.c
index 36db988..4a60fa4 100644
--- a/src/f32-bilinear/gen/neonfma-c8.c
+++ b/src/f32-ibilinear/gen/neonfma-c8.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/neon.c.in
+//   Template: src/f32-ibilinear/neon.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -12,10 +12,10 @@
 #include <arm_neon.h>
 
 #include <xnnpack/common.h>
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__neonfma_c8(
+void xnn_f32_ibilinear_ukernel__neonfma_c8(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/psimd-c4.c b/src/f32-ibilinear/gen/psimd-c4.c
similarity index 95%
rename from src/f32-bilinear/gen/psimd-c4.c
rename to src/f32-ibilinear/gen/psimd-c4.c
index efa9947..d86fb90 100644
--- a/src/f32-bilinear/gen/psimd-c4.c
+++ b/src/f32-ibilinear/gen/psimd-c4.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/psimd.c.in
+//   Template: src/f32-ibilinear/psimd.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -11,10 +11,10 @@
 
 #include <psimd.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__psimd_c4(
+void xnn_f32_ibilinear_ukernel__psimd_c4(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/psimd-c8.c b/src/f32-ibilinear/gen/psimd-c8.c
similarity index 97%
rename from src/f32-bilinear/gen/psimd-c8.c
rename to src/f32-ibilinear/gen/psimd-c8.c
index 84dfbfc..a6492bd 100644
--- a/src/f32-bilinear/gen/psimd-c8.c
+++ b/src/f32-ibilinear/gen/psimd-c8.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/psimd.c.in
+//   Template: src/f32-ibilinear/psimd.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -11,10 +11,10 @@
 
 #include <psimd.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__psimd_c8(
+void xnn_f32_ibilinear_ukernel__psimd_c8(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/scalar-c1.c b/src/f32-ibilinear/gen/scalar-c1.c
similarity index 92%
rename from src/f32-bilinear/gen/scalar-c1.c
rename to src/f32-ibilinear/gen/scalar-c1.c
index 91fcd4d..f76affc 100644
--- a/src/f32-bilinear/gen/scalar-c1.c
+++ b/src/f32-ibilinear/gen/scalar-c1.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/scalar.c.in
+//   Template: src/f32-ibilinear/scalar.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -9,10 +9,10 @@
 
 #include <assert.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__scalar_c1(
+void xnn_f32_ibilinear_ukernel__scalar_c1(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/scalar-c2.c b/src/f32-ibilinear/gen/scalar-c2.c
similarity index 95%
rename from src/f32-bilinear/gen/scalar-c2.c
rename to src/f32-ibilinear/gen/scalar-c2.c
index 26822c4..b66caff 100644
--- a/src/f32-bilinear/gen/scalar-c2.c
+++ b/src/f32-ibilinear/gen/scalar-c2.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/scalar.c.in
+//   Template: src/f32-ibilinear/scalar.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -9,10 +9,10 @@
 
 #include <assert.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__scalar_c2(
+void xnn_f32_ibilinear_ukernel__scalar_c2(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/scalar-c4.c b/src/f32-ibilinear/gen/scalar-c4.c
similarity index 96%
rename from src/f32-bilinear/gen/scalar-c4.c
rename to src/f32-ibilinear/gen/scalar-c4.c
index 7a1d592..c1e844c 100644
--- a/src/f32-bilinear/gen/scalar-c4.c
+++ b/src/f32-ibilinear/gen/scalar-c4.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/scalar.c.in
+//   Template: src/f32-ibilinear/scalar.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -9,10 +9,10 @@
 
 #include <assert.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__scalar_c4(
+void xnn_f32_ibilinear_ukernel__scalar_c4(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/sse-c4.c b/src/f32-ibilinear/gen/sse-c4.c
similarity index 96%
rename from src/f32-bilinear/gen/sse-c4.c
rename to src/f32-ibilinear/gen/sse-c4.c
index 4707cf4..321b6e1 100644
--- a/src/f32-bilinear/gen/sse-c4.c
+++ b/src/f32-ibilinear/gen/sse-c4.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/sse.c.in
+//   Template: src/f32-ibilinear/sse.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -11,10 +11,10 @@
 
 #include <xmmintrin.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__sse_c4(
+void xnn_f32_ibilinear_ukernel__sse_c4(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/gen/sse-c8.c b/src/f32-ibilinear/gen/sse-c8.c
similarity index 97%
rename from src/f32-bilinear/gen/sse-c8.c
rename to src/f32-ibilinear/gen/sse-c8.c
index 31c34a2..2bd65f3 100644
--- a/src/f32-bilinear/gen/sse-c8.c
+++ b/src/f32-ibilinear/gen/sse-c8.c
@@ -1,5 +1,5 @@
 // Auto-generated file. Do not edit!
-//   Template: src/f32-bilinear/sse.c.in
+//   Template: src/f32-ibilinear/sse.c.in
 //   Generator: tools/xngen
 //
 // Copyright 2019 Google LLC
@@ -11,10 +11,10 @@
 
 #include <xmmintrin.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__sse_c8(
+void xnn_f32_ibilinear_ukernel__sse_c8(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/neon.c.in b/src/f32-ibilinear/neon.c.in
similarity index 97%
rename from src/f32-bilinear/neon.c.in
rename to src/f32-ibilinear/neon.c.in
index 4ae2bb9..081ba66 100644
--- a/src/f32-bilinear/neon.c.in
+++ b/src/f32-ibilinear/neon.c.in
@@ -13,10 +13,10 @@
 #include <arm_neon.h>
 
 #include <xnnpack/common.h>
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__${"neonfma" if FMA else "neon"}_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
+void xnn_f32_ibilinear_ukernel__${"neonfma" if FMA else "neon"}_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/psimd.c.in b/src/f32-ibilinear/psimd.c.in
similarity index 96%
rename from src/f32-bilinear/psimd.c.in
rename to src/f32-ibilinear/psimd.c.in
index 84ee83b..c65c6b3 100644
--- a/src/f32-bilinear/psimd.c.in
+++ b/src/f32-ibilinear/psimd.c.in
@@ -11,10 +11,10 @@
 
 #include <psimd.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__psimd_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
+void xnn_f32_ibilinear_ukernel__psimd_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/scalar.c.in b/src/f32-ibilinear/scalar.c.in
similarity index 95%
rename from src/f32-bilinear/scalar.c.in
rename to src/f32-ibilinear/scalar.c.in
index 43aa085..e29205a 100644
--- a/src/f32-bilinear/scalar.c.in
+++ b/src/f32-ibilinear/scalar.c.in
@@ -8,10 +8,10 @@
 $ABC = "0123456789ABCDEFGHIJKLMN"
 #include <assert.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__scalar_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
+void xnn_f32_ibilinear_ukernel__scalar_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/f32-bilinear/sse.c.in b/src/f32-ibilinear/sse.c.in
similarity index 97%
rename from src/f32-bilinear/sse.c.in
rename to src/f32-ibilinear/sse.c.in
index a0a1cd0..c1e7fd3 100644
--- a/src/f32-bilinear/sse.c.in
+++ b/src/f32-ibilinear/sse.c.in
@@ -11,10 +11,10 @@
 
 #include <xmmintrin.h>
 
-#include <xnnpack/bilinear.h>
+#include <xnnpack/ibilinear.h>
 
 
-void xnn_f32_bilinear_ukernel__sse_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
+void xnn_f32_ibilinear_ukernel__sse_c${CHANNEL_TILE}${"" if PIXEL_TILE == 1 else "x%d" % PIXEL_TILE}(
     size_t output_pixels,
     size_t channels,
     const float**restrict input,
diff --git a/src/init.c b/src/init.c
index 51eeebf..8263459 100644
--- a/src/init.c
+++ b/src/init.c
@@ -20,7 +20,6 @@
 #include <xnnpack.h>
 #include <xnnpack/argmaxpool.h>
 #include <xnnpack/avgpool.h>
-#include <xnnpack/bilinear.h>
 #include <xnnpack/clamp.h>
 #include <xnnpack/common.h>
 #include <xnnpack/conv.h>
@@ -28,6 +27,7 @@
 #include <xnnpack/gavgpool.h>
 #include <xnnpack/gemm.h>
 #include <xnnpack/hswish.h>
+#include <xnnpack/ibilinear.h>
 #include <xnnpack/igemm.h>
 #include <xnnpack/log.h>
 #include <xnnpack/lut.h>
@@ -249,8 +249,8 @@
       .mr = 9,
       .qr = 8,
     };
-    xnn_params.f32.bilinear = (struct bilinear_parameters) {
-      .ukernel = (xnn_bilinear_ukernel_function) xnn_f32_bilinear_ukernel__neon_c8,
+    xnn_params.f32.ibilinear = (struct ibilinear_parameters) {
+      .ukernel = (xnn_ibilinear_ukernel_function) xnn_f32_ibilinear_ukernel__neon_c8,
       .pixel_tile = 1,
       .channel_tile = 8,
     };
@@ -556,8 +556,8 @@
       .mr = 9,
       .qr = 8,
     };
-    xnn_params.f32.bilinear = (struct bilinear_parameters) {
-      .ukernel = (xnn_bilinear_ukernel_function) xnn_f32_bilinear_ukernel__neonfma_c8,
+    xnn_params.f32.ibilinear = (struct ibilinear_parameters) {
+      .ukernel = (xnn_ibilinear_ukernel_function) xnn_f32_ibilinear_ukernel__neonfma_c8,
       .pixel_tile = 1,
       .channel_tile = 8,
     };
@@ -899,8 +899,8 @@
       .mr = 9,
       .qr = 8,
     };
-    xnn_params.f32.bilinear = (struct bilinear_parameters) {
-      .ukernel = (xnn_bilinear_ukernel_function) xnn_f32_bilinear_ukernel__sse_c8,
+    xnn_params.f32.ibilinear = (struct ibilinear_parameters) {
+      .ukernel = (xnn_ibilinear_ukernel_function) xnn_f32_ibilinear_ukernel__sse_c8,
       .pixel_tile = 1,
       .channel_tile = 8,
     };
@@ -1226,8 +1226,8 @@
       .mr = 9,
       .qr = 8,
     };
-    xnn_params.f32.bilinear = (struct bilinear_parameters) {
-      .ukernel = (xnn_bilinear_ukernel_function) xnn_f32_bilinear_ukernel__psimd_c8,
+    xnn_params.f32.ibilinear = (struct ibilinear_parameters) {
+      .ukernel = (xnn_ibilinear_ukernel_function) xnn_f32_ibilinear_ukernel__psimd_c8,
       .pixel_tile = 1,
       .channel_tile = 8,
     };
@@ -1434,8 +1434,8 @@
       .mr = 9,
       .qr = 8,
     };
-    xnn_params.f32.bilinear = (struct bilinear_parameters) {
-      .ukernel = (xnn_bilinear_ukernel_function) xnn_f32_bilinear_ukernel__scalar_c2,
+    xnn_params.f32.ibilinear = (struct ibilinear_parameters) {
+      .ukernel = (xnn_ibilinear_ukernel_function) xnn_f32_ibilinear_ukernel__scalar_c2,
       .pixel_tile = 1,
       .channel_tile = 2,
     };
diff --git a/src/resize-bilinear-nhwc.c b/src/resize-bilinear-nhwc.c
index f8ff604..73e1ba7 100644
--- a/src/resize-bilinear-nhwc.c
+++ b/src/resize-bilinear-nhwc.c
@@ -195,7 +195,7 @@
     .output_pixel_stride = output_pixel_stride_in_bytes,
     .output_batch_stride = output_pixel_stride_in_bytes * output_height * output_width,
     .log2_wsize = 3 /* log2(2 * sizeof(float)) */,
-    .ukernel = xnn_params.f32.bilinear.ukernel,
+    .ukernel = xnn_params.f32.ibilinear.ukernel,
   };
 
   const size_t output_size = output_height * output_width;
@@ -205,7 +205,7 @@
     const size_t target_tiles_per_thread = 5;
     const size_t max_output_size_tile = divide_round_up(output_size, num_threads * target_tiles_per_thread);
     if (max_output_size_tile < output_size_tile) {
-      const uint32_t output_size_subtile = xnn_params.f32.bilinear.pixel_tile;
+      const uint32_t output_size_subtile = xnn_params.f32.ibilinear.pixel_tile;
       output_size_tile =
         min(output_size_tile,
           divide_round_up(output_size_tile, max_output_size_tile * output_size_subtile) * output_size_subtile);
diff --git a/src/xnnpack/bilinear.h b/src/xnnpack/bilinear.h
deleted file mode 100644
index 570cbe9..0000000
--- a/src/xnnpack/bilinear.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree.
-
-#pragma once
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <xnnpack/params.h>
-#include <xnnpack/common.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(fn_name) \
-  XNN_INTERNAL void fn_name(                           \
-      size_t output_pixels,                            \
-      size_t channels,                                 \
-      const float** input,                             \
-      size_t input_offset,                             \
-      const float* weights,                            \
-      float* output,                                   \
-      size_t output_increment);
-
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__scalar_c1)
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__scalar_c2)
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__scalar_c4)
-
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__neon_c4)
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__neon_c8)
-
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__neonfma_c4)
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__neonfma_c8)
-
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__sse_c4)
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__sse_c8)
-
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__psimd_c4)
-DECLARE_F32_BILINEAR_UKERNEL_FUNCTION(xnn_f32_bilinear_ukernel__psimd_c8)
-
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
diff --git a/src/xnnpack/compute.h b/src/xnnpack/compute.h
index 1d205bf..dd16210 100644
--- a/src/xnnpack/compute.h
+++ b/src/xnnpack/compute.h
@@ -567,7 +567,7 @@
   // log2(sizeof(weight element)).
   uint32_t log2_wsize;
   // Pointer to BILINEAR micro-kernel function.
-  xnn_bilinear_ukernel_function ukernel;
+  xnn_ibilinear_ukernel_function ukernel;
 };
 
 #ifndef __cplusplus
diff --git a/src/xnnpack/ibilinear.h b/src/xnnpack/ibilinear.h
new file mode 100644
index 0000000..173a796
--- /dev/null
+++ b/src/xnnpack/ibilinear.h
@@ -0,0 +1,48 @@
+// Copyright 2019 Google LLC
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#pragma once
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <xnnpack/params.h>
+#include <xnnpack/common.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(fn_name) \
+  XNN_INTERNAL void fn_name(                            \
+      size_t output_pixels,                             \
+      size_t channels,                                  \
+      const float** input,                              \
+      size_t input_offset,                              \
+      const float* weights,                             \
+      float* output,                                    \
+      size_t output_increment);
+
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__scalar_c1)
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__scalar_c2)
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__scalar_c4)
+
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neon_c4)
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neon_c8)
+
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neonfma_c4)
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neonfma_c8)
+
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__sse_c4)
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__sse_c8)
+
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__psimd_c4)
+DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__psimd_c8)
+
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
diff --git a/src/xnnpack/params.h b/src/xnnpack/params.h
index d0e9131..28222f1 100644
--- a/src/xnnpack/params.h
+++ b/src/xnnpack/params.h
@@ -727,7 +727,7 @@
     size_t output_increment,
     const void* params);
 
-typedef void (*xnn_f32_bilinear_ukernel_function)(
+typedef void (*xnn_f32_ibilinear_ukernel_function)(
     size_t output_pixels,
     size_t channels,
     const float** input,
@@ -736,7 +736,7 @@
     float* output,
     size_t output_increment);
 
-typedef void (*xnn_bilinear_ukernel_function)(
+typedef void (*xnn_ibilinear_ukernel_function)(
     size_t output_pixels,
     size_t channels,
     const void** input,
@@ -1307,8 +1307,8 @@
   uint8_t qr;
 };
 
-struct bilinear_parameters {
-  xnn_bilinear_ukernel_function ukernel;
+struct ibilinear_parameters {
+  xnn_ibilinear_ukernel_function ukernel;
   // Number of output pixels in a tile.
   // For best efficiency, micro-kernel must produce a multiple of this number of pixels in each call.
   uint8_t pixel_tile;
@@ -1375,7 +1375,7 @@
     struct maxpool_parameters maxpool;
     struct argmaxpool_parameters argmaxpool[XNN_MAX_F32_ARGMAXPOOL_UKERNELS];
     // Bilinear interpolation (2D).
-    struct bilinear_parameters bilinear;
+    struct ibilinear_parameters ibilinear;
     xnn_univector_ukernel_function clamp;
     xnn_univector_ukernel_function hswish;
     xnn_univector_ukernel_function sigmoid;
diff --git a/test/f32-bilinear.cc b/test/f32-bilinear.cc
deleted file mode 100644
index a85cede..0000000
--- a/test/f32-bilinear.cc
+++ /dev/null
@@ -1,827 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree.
-//
-// Auto-generated file. Do not edit!
-//   Specification: test/f32-bilinear.yaml
-//   Generator: tools/generate-bilinear-test.py
-
-
-#include <gtest/gtest.h>
-
-#include <xnnpack/common.h>
-#include <xnnpack/isa-checks.h>
-
-#include <xnnpack/bilinear.h>
-#include "bilinear-microkernel-tester.h"
-
-
-TEST(F32_BILINEAR__SCALAR_C1, channels_eq_1) {
-  BilinearMicrokernelTester()
-    .pixels(1)
-    .channels(1)
-    .Test(xnn_f32_bilinear_ukernel__scalar_c1);
-}
-
-TEST(F32_BILINEAR__SCALAR_C1, channels_gt_1) {
-  for (size_t channels = 2; channels < 10; channels++) {
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(channels)
-      .Test(xnn_f32_bilinear_ukernel__scalar_c1);
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C1, pixels_gt_1) {
-  for (size_t pixels = 2; pixels < 3; pixels++) {
-    for (size_t channels = 1; channels <= 5; channels += 1) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c1);
-    }
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C1, input_offset) {
-  for (size_t pixels = 1; pixels < 5; pixels += 1) {
-    for (size_t channels = 1; channels <= 5; channels += 1) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .input_offset(7)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c1);
-    }
-  }
-}
-TEST(F32_BILINEAR__SCALAR_C1, output_stride) {
-  for (size_t pixels = 1; pixels < 5; pixels += 1) {
-    for (size_t channels = 1; channels <= 5; channels += 1) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .output_stride(7)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c1);
-    }
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C2, channels_eq_2) {
-  BilinearMicrokernelTester()
-    .pixels(1)
-    .channels(2)
-    .Test(xnn_f32_bilinear_ukernel__scalar_c2);
-}
-
-TEST(F32_BILINEAR__SCALAR_C2, channels_div_2) {
-  for (size_t channels = 4; channels < 20; channels += 2) {
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(channels)
-      .Test(xnn_f32_bilinear_ukernel__scalar_c2);
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C2, channels_lt_2) {
-  for (size_t channels = 1; channels < 2; channels++) {
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(channels)
-      .Test(xnn_f32_bilinear_ukernel__scalar_c2);
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C2, channels_gt_2) {
-  for (size_t channels = 3; channels < 4; channels++) {
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(channels)
-      .Test(xnn_f32_bilinear_ukernel__scalar_c2);
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C2, pixels_gt_1) {
-  for (size_t pixels = 2; pixels < 3; pixels++) {
-    for (size_t channels = 1; channels <= 10; channels += 1) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c2);
-    }
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C2, input_offset) {
-  for (size_t pixels = 1; pixels < 5; pixels += 1) {
-    for (size_t channels = 1; channels <= 10; channels += 1) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .input_offset(13)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c2);
-    }
-  }
-}
-TEST(F32_BILINEAR__SCALAR_C2, output_stride) {
-  for (size_t pixels = 1; pixels < 5; pixels += 1) {
-    for (size_t channels = 1; channels <= 10; channels += 1) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .output_stride(13)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c2);
-    }
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C4, channels_eq_4) {
-  BilinearMicrokernelTester()
-    .pixels(1)
-    .channels(4)
-    .Test(xnn_f32_bilinear_ukernel__scalar_c4);
-}
-
-TEST(F32_BILINEAR__SCALAR_C4, channels_div_4) {
-  for (size_t channels = 8; channels < 40; channels += 4) {
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(channels)
-      .Test(xnn_f32_bilinear_ukernel__scalar_c4);
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C4, channels_lt_4) {
-  for (size_t channels = 1; channels < 4; channels++) {
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(channels)
-      .Test(xnn_f32_bilinear_ukernel__scalar_c4);
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C4, channels_gt_4) {
-  for (size_t channels = 5; channels < 8; channels++) {
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(channels)
-      .Test(xnn_f32_bilinear_ukernel__scalar_c4);
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C4, pixels_gt_1) {
-  for (size_t pixels = 2; pixels < 3; pixels++) {
-    for (size_t channels = 1; channels <= 20; channels += 3) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c4);
-    }
-  }
-}
-
-TEST(F32_BILINEAR__SCALAR_C4, input_offset) {
-  for (size_t pixels = 1; pixels < 5; pixels += 1) {
-    for (size_t channels = 1; channels <= 20; channels += 3) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .input_offset(23)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c4);
-    }
-  }
-}
-TEST(F32_BILINEAR__SCALAR_C4, output_stride) {
-  for (size_t pixels = 1; pixels < 5; pixels += 1) {
-    for (size_t channels = 1; channels <= 20; channels += 3) {
-      BilinearMicrokernelTester()
-        .pixels(pixels)
-        .channels(channels)
-        .output_stride(23)
-        .Test(xnn_f32_bilinear_ukernel__scalar_c4);
-    }
-  }
-}
-
-#if XNN_ARCH_ARM || XNN_ARCH_ARM64
-  TEST(F32_BILINEAR__NEON_C4, channels_eq_4) {
-    TEST_REQUIRES_ARM_NEON;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(4)
-      .Test(xnn_f32_bilinear_ukernel__neon_c4);
-  }
-
-  TEST(F32_BILINEAR__NEON_C4, channels_div_4) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t channels = 8; channels < 40; channels += 4) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neon_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C4, channels_lt_4) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t channels = 1; channels < 4; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neon_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C4, channels_gt_4) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t channels = 5; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neon_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C4, pixels_gt_1) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__neon_c4);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C4, input_offset) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(23)
-          .Test(xnn_f32_bilinear_ukernel__neon_c4);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__NEON_C4, output_stride) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(23)
-          .Test(xnn_f32_bilinear_ukernel__neon_c4);
-      }
-    }
-  }
-#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
-
-
-#if XNN_ARCH_ARM || XNN_ARCH_ARM64
-  TEST(F32_BILINEAR__NEON_C8, channels_eq_8) {
-    TEST_REQUIRES_ARM_NEON;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(8)
-      .Test(xnn_f32_bilinear_ukernel__neon_c8);
-  }
-
-  TEST(F32_BILINEAR__NEON_C8, channels_div_8) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t channels = 16; channels < 80; channels += 8) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neon_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C8, channels_lt_8) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t channels = 1; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neon_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C8, channels_gt_8) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t channels = 9; channels < 16; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neon_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C8, pixels_gt_1) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__neon_c8);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__NEON_C8, input_offset) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(43)
-          .Test(xnn_f32_bilinear_ukernel__neon_c8);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__NEON_C8, output_stride) {
-    TEST_REQUIRES_ARM_NEON;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(43)
-          .Test(xnn_f32_bilinear_ukernel__neon_c8);
-      }
-    }
-  }
-#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
-
-
-#if XNN_ARCH_ARM || XNN_ARCH_ARM64
-  TEST(F32_BILINEAR__NEONFMA_C4, channels_eq_4) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(4)
-      .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C4, channels_div_4) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t channels = 8; channels < 40; channels += 4) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C4, channels_lt_4) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t channels = 1; channels < 4; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C4, channels_gt_4) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t channels = 5; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C4, pixels_gt_1) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C4, input_offset) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(23)
-          .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__NEONFMA_C4, output_stride) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(23)
-          .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
-      }
-    }
-  }
-#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
-
-
-#if XNN_ARCH_ARM || XNN_ARCH_ARM64
-  TEST(F32_BILINEAR__NEONFMA_C8, channels_eq_8) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(8)
-      .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C8, channels_div_8) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t channels = 16; channels < 80; channels += 8) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C8, channels_lt_8) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t channels = 1; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C8, channels_gt_8) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t channels = 9; channels < 16; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C8, pixels_gt_1) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__NEONFMA_C8, input_offset) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(43)
-          .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__NEONFMA_C8, output_stride) {
-    TEST_REQUIRES_ARM_NEON_FMA;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(43)
-          .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
-      }
-    }
-  }
-#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
-
-
-#if XNN_ARCH_X86 || XNN_ARCH_X86_64
-  TEST(F32_BILINEAR__SSE_C4, channels_eq_4) {
-    TEST_REQUIRES_X86_SSE;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(4)
-      .Test(xnn_f32_bilinear_ukernel__sse_c4);
-  }
-
-  TEST(F32_BILINEAR__SSE_C4, channels_div_4) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t channels = 8; channels < 40; channels += 4) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__sse_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C4, channels_lt_4) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t channels = 1; channels < 4; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__sse_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C4, channels_gt_4) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t channels = 5; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__sse_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C4, pixels_gt_1) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__sse_c4);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C4, input_offset) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(23)
-          .Test(xnn_f32_bilinear_ukernel__sse_c4);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__SSE_C4, output_stride) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(23)
-          .Test(xnn_f32_bilinear_ukernel__sse_c4);
-      }
-    }
-  }
-#endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
-
-
-#if XNN_ARCH_X86 || XNN_ARCH_X86_64
-  TEST(F32_BILINEAR__SSE_C8, channels_eq_8) {
-    TEST_REQUIRES_X86_SSE;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(8)
-      .Test(xnn_f32_bilinear_ukernel__sse_c8);
-  }
-
-  TEST(F32_BILINEAR__SSE_C8, channels_div_8) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t channels = 16; channels < 80; channels += 8) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__sse_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C8, channels_lt_8) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t channels = 1; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__sse_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C8, channels_gt_8) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t channels = 9; channels < 16; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__sse_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C8, pixels_gt_1) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__sse_c8);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__SSE_C8, input_offset) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(43)
-          .Test(xnn_f32_bilinear_ukernel__sse_c8);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__SSE_C8, output_stride) {
-    TEST_REQUIRES_X86_SSE;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(43)
-          .Test(xnn_f32_bilinear_ukernel__sse_c8);
-      }
-    }
-  }
-#endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
-
-
-#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
-  TEST(F32_BILINEAR__PSIMD_C4, channels_eq_4) {
-    TEST_REQUIRES_PSIMD;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(4)
-      .Test(xnn_f32_bilinear_ukernel__psimd_c4);
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C4, channels_div_4) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t channels = 8; channels < 40; channels += 4) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__psimd_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C4, channels_lt_4) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t channels = 1; channels < 4; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__psimd_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C4, channels_gt_4) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t channels = 5; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__psimd_c4);
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C4, pixels_gt_1) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__psimd_c4);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C4, input_offset) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(23)
-          .Test(xnn_f32_bilinear_ukernel__psimd_c4);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__PSIMD_C4, output_stride) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 20; channels += 3) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(23)
-          .Test(xnn_f32_bilinear_ukernel__psimd_c4);
-      }
-    }
-  }
-#endif  // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
-
-
-#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
-  TEST(F32_BILINEAR__PSIMD_C8, channels_eq_8) {
-    TEST_REQUIRES_PSIMD;
-    BilinearMicrokernelTester()
-      .pixels(1)
-      .channels(8)
-      .Test(xnn_f32_bilinear_ukernel__psimd_c8);
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C8, channels_div_8) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t channels = 16; channels < 80; channels += 8) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__psimd_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C8, channels_lt_8) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t channels = 1; channels < 8; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__psimd_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C8, channels_gt_8) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t channels = 9; channels < 16; channels++) {
-      BilinearMicrokernelTester()
-        .pixels(1)
-        .channels(channels)
-        .Test(xnn_f32_bilinear_ukernel__psimd_c8);
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C8, pixels_gt_1) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t pixels = 2; pixels < 3; pixels++) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .Test(xnn_f32_bilinear_ukernel__psimd_c8);
-      }
-    }
-  }
-
-  TEST(F32_BILINEAR__PSIMD_C8, input_offset) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .input_offset(43)
-          .Test(xnn_f32_bilinear_ukernel__psimd_c8);
-      }
-    }
-  }
-  TEST(F32_BILINEAR__PSIMD_C8, output_stride) {
-    TEST_REQUIRES_PSIMD;
-    for (size_t pixels = 1; pixels < 5; pixels += 1) {
-      for (size_t channels = 1; channels <= 40; channels += 7) {
-        BilinearMicrokernelTester()
-          .pixels(pixels)
-          .channels(channels)
-          .output_stride(43)
-          .Test(xnn_f32_bilinear_ukernel__psimd_c8);
-      }
-    }
-  }
-#endif  // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
diff --git a/test/f32-bilinear.yaml b/test/f32-bilinear.yaml
deleted file mode 100644
index 76cfc84..0000000
--- a/test/f32-bilinear.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2019 Google LLC
-#
-# This source code is licensed under the BSD-style license found in the
-# LICENSE file in the root directory of this source tree.
-- name: xnn_f32_bilinear_ukernel__scalar_c1
-- name: xnn_f32_bilinear_ukernel__scalar_c2
-- name: xnn_f32_bilinear_ukernel__scalar_c4
-- name: xnn_f32_bilinear_ukernel__neon_c4
-- name: xnn_f32_bilinear_ukernel__neon_c8
-- name: xnn_f32_bilinear_ukernel__neonfma_c4
-- name: xnn_f32_bilinear_ukernel__neonfma_c8
-- name: xnn_f32_bilinear_ukernel__sse_c4
-- name: xnn_f32_bilinear_ukernel__sse_c8
-- name: xnn_f32_bilinear_ukernel__psimd_c4
-- name: xnn_f32_bilinear_ukernel__psimd_c8
diff --git a/test/f32-ibilinear.cc b/test/f32-ibilinear.cc
new file mode 100644
index 0000000..e5f75de
--- /dev/null
+++ b/test/f32-ibilinear.cc
@@ -0,0 +1,827 @@
+// Copyright 2019 Google LLC
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+//
+// Auto-generated file. Do not edit!
+//   Specification: test/f32-ibilinear.yaml
+//   Generator: tools/generate-ibilinear-test.py
+
+
+#include <gtest/gtest.h>
+
+#include <xnnpack/common.h>
+#include <xnnpack/isa-checks.h>
+
+#include <xnnpack/ibilinear.h>
+#include "ibilinear-microkernel-tester.h"
+
+
+TEST(F32_IBILINEAR__SCALAR_C1, channels_eq_1) {
+  IBilinearMicrokernelTester()
+    .pixels(1)
+    .channels(1)
+    .Test(xnn_f32_ibilinear_ukernel__scalar_c1);
+}
+
+TEST(F32_IBILINEAR__SCALAR_C1, channels_gt_1) {
+  for (size_t channels = 2; channels < 10; channels++) {
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(channels)
+      .Test(xnn_f32_ibilinear_ukernel__scalar_c1);
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C1, pixels_gt_1) {
+  for (size_t pixels = 2; pixels < 3; pixels++) {
+    for (size_t channels = 1; channels <= 5; channels += 1) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c1);
+    }
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C1, input_offset) {
+  for (size_t pixels = 1; pixels < 5; pixels += 1) {
+    for (size_t channels = 1; channels <= 5; channels += 1) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .input_offset(7)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c1);
+    }
+  }
+}
+TEST(F32_IBILINEAR__SCALAR_C1, output_stride) {
+  for (size_t pixels = 1; pixels < 5; pixels += 1) {
+    for (size_t channels = 1; channels <= 5; channels += 1) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .output_stride(7)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c1);
+    }
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C2, channels_eq_2) {
+  IBilinearMicrokernelTester()
+    .pixels(1)
+    .channels(2)
+    .Test(xnn_f32_ibilinear_ukernel__scalar_c2);
+}
+
+TEST(F32_IBILINEAR__SCALAR_C2, channels_div_2) {
+  for (size_t channels = 4; channels < 20; channels += 2) {
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(channels)
+      .Test(xnn_f32_ibilinear_ukernel__scalar_c2);
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C2, channels_lt_2) {
+  for (size_t channels = 1; channels < 2; channels++) {
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(channels)
+      .Test(xnn_f32_ibilinear_ukernel__scalar_c2);
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C2, channels_gt_2) {
+  for (size_t channels = 3; channels < 4; channels++) {
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(channels)
+      .Test(xnn_f32_ibilinear_ukernel__scalar_c2);
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C2, pixels_gt_1) {
+  for (size_t pixels = 2; pixels < 3; pixels++) {
+    for (size_t channels = 1; channels <= 10; channels += 1) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c2);
+    }
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C2, input_offset) {
+  for (size_t pixels = 1; pixels < 5; pixels += 1) {
+    for (size_t channels = 1; channels <= 10; channels += 1) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .input_offset(13)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c2);
+    }
+  }
+}
+TEST(F32_IBILINEAR__SCALAR_C2, output_stride) {
+  for (size_t pixels = 1; pixels < 5; pixels += 1) {
+    for (size_t channels = 1; channels <= 10; channels += 1) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .output_stride(13)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c2);
+    }
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C4, channels_eq_4) {
+  IBilinearMicrokernelTester()
+    .pixels(1)
+    .channels(4)
+    .Test(xnn_f32_ibilinear_ukernel__scalar_c4);
+}
+
+TEST(F32_IBILINEAR__SCALAR_C4, channels_div_4) {
+  for (size_t channels = 8; channels < 40; channels += 4) {
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(channels)
+      .Test(xnn_f32_ibilinear_ukernel__scalar_c4);
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C4, channels_lt_4) {
+  for (size_t channels = 1; channels < 4; channels++) {
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(channels)
+      .Test(xnn_f32_ibilinear_ukernel__scalar_c4);
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C4, channels_gt_4) {
+  for (size_t channels = 5; channels < 8; channels++) {
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(channels)
+      .Test(xnn_f32_ibilinear_ukernel__scalar_c4);
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C4, pixels_gt_1) {
+  for (size_t pixels = 2; pixels < 3; pixels++) {
+    for (size_t channels = 1; channels <= 20; channels += 3) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c4);
+    }
+  }
+}
+
+TEST(F32_IBILINEAR__SCALAR_C4, input_offset) {
+  for (size_t pixels = 1; pixels < 5; pixels += 1) {
+    for (size_t channels = 1; channels <= 20; channels += 3) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .input_offset(23)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c4);
+    }
+  }
+}
+TEST(F32_IBILINEAR__SCALAR_C4, output_stride) {
+  for (size_t pixels = 1; pixels < 5; pixels += 1) {
+    for (size_t channels = 1; channels <= 20; channels += 3) {
+      IBilinearMicrokernelTester()
+        .pixels(pixels)
+        .channels(channels)
+        .output_stride(23)
+        .Test(xnn_f32_ibilinear_ukernel__scalar_c4);
+    }
+  }
+}
+
+#if XNN_ARCH_ARM || XNN_ARCH_ARM64
+  TEST(F32_IBILINEAR__NEON_C4, channels_eq_4) {
+    TEST_REQUIRES_ARM_NEON;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(4)
+      .Test(xnn_f32_ibilinear_ukernel__neon_c4);
+  }
+
+  TEST(F32_IBILINEAR__NEON_C4, channels_div_4) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t channels = 8; channels < 40; channels += 4) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neon_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C4, channels_lt_4) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t channels = 1; channels < 4; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neon_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C4, channels_gt_4) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t channels = 5; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neon_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C4, pixels_gt_1) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__neon_c4);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C4, input_offset) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(23)
+          .Test(xnn_f32_ibilinear_ukernel__neon_c4);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__NEON_C4, output_stride) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(23)
+          .Test(xnn_f32_ibilinear_ukernel__neon_c4);
+      }
+    }
+  }
+#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
+
+
+#if XNN_ARCH_ARM || XNN_ARCH_ARM64
+  TEST(F32_IBILINEAR__NEON_C8, channels_eq_8) {
+    TEST_REQUIRES_ARM_NEON;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(8)
+      .Test(xnn_f32_ibilinear_ukernel__neon_c8);
+  }
+
+  TEST(F32_IBILINEAR__NEON_C8, channels_div_8) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t channels = 16; channels < 80; channels += 8) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neon_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C8, channels_lt_8) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t channels = 1; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neon_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C8, channels_gt_8) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t channels = 9; channels < 16; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neon_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C8, pixels_gt_1) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__neon_c8);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEON_C8, input_offset) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(43)
+          .Test(xnn_f32_ibilinear_ukernel__neon_c8);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__NEON_C8, output_stride) {
+    TEST_REQUIRES_ARM_NEON;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(43)
+          .Test(xnn_f32_ibilinear_ukernel__neon_c8);
+      }
+    }
+  }
+#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
+
+
+#if XNN_ARCH_ARM || XNN_ARCH_ARM64
+  TEST(F32_IBILINEAR__NEONFMA_C4, channels_eq_4) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(4)
+      .Test(xnn_f32_ibilinear_ukernel__neonfma_c4);
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C4, channels_div_4) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t channels = 8; channels < 40; channels += 4) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neonfma_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C4, channels_lt_4) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t channels = 1; channels < 4; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neonfma_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C4, channels_gt_4) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t channels = 5; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neonfma_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C4, pixels_gt_1) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__neonfma_c4);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C4, input_offset) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(23)
+          .Test(xnn_f32_ibilinear_ukernel__neonfma_c4);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__NEONFMA_C4, output_stride) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(23)
+          .Test(xnn_f32_ibilinear_ukernel__neonfma_c4);
+      }
+    }
+  }
+#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
+
+
+#if XNN_ARCH_ARM || XNN_ARCH_ARM64
+  TEST(F32_IBILINEAR__NEONFMA_C8, channels_eq_8) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(8)
+      .Test(xnn_f32_ibilinear_ukernel__neonfma_c8);
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C8, channels_div_8) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t channels = 16; channels < 80; channels += 8) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neonfma_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C8, channels_lt_8) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t channels = 1; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neonfma_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C8, channels_gt_8) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t channels = 9; channels < 16; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__neonfma_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C8, pixels_gt_1) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__neonfma_c8);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__NEONFMA_C8, input_offset) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(43)
+          .Test(xnn_f32_ibilinear_ukernel__neonfma_c8);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__NEONFMA_C8, output_stride) {
+    TEST_REQUIRES_ARM_NEON_FMA;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(43)
+          .Test(xnn_f32_ibilinear_ukernel__neonfma_c8);
+      }
+    }
+  }
+#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
+
+
+#if XNN_ARCH_X86 || XNN_ARCH_X86_64
+  TEST(F32_IBILINEAR__SSE_C4, channels_eq_4) {
+    TEST_REQUIRES_X86_SSE;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(4)
+      .Test(xnn_f32_ibilinear_ukernel__sse_c4);
+  }
+
+  TEST(F32_IBILINEAR__SSE_C4, channels_div_4) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t channels = 8; channels < 40; channels += 4) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__sse_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C4, channels_lt_4) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t channels = 1; channels < 4; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__sse_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C4, channels_gt_4) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t channels = 5; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__sse_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C4, pixels_gt_1) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__sse_c4);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C4, input_offset) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(23)
+          .Test(xnn_f32_ibilinear_ukernel__sse_c4);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__SSE_C4, output_stride) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(23)
+          .Test(xnn_f32_ibilinear_ukernel__sse_c4);
+      }
+    }
+  }
+#endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
+
+
+#if XNN_ARCH_X86 || XNN_ARCH_X86_64
+  TEST(F32_IBILINEAR__SSE_C8, channels_eq_8) {
+    TEST_REQUIRES_X86_SSE;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(8)
+      .Test(xnn_f32_ibilinear_ukernel__sse_c8);
+  }
+
+  TEST(F32_IBILINEAR__SSE_C8, channels_div_8) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t channels = 16; channels < 80; channels += 8) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__sse_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C8, channels_lt_8) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t channels = 1; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__sse_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C8, channels_gt_8) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t channels = 9; channels < 16; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__sse_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C8, pixels_gt_1) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__sse_c8);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__SSE_C8, input_offset) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(43)
+          .Test(xnn_f32_ibilinear_ukernel__sse_c8);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__SSE_C8, output_stride) {
+    TEST_REQUIRES_X86_SSE;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(43)
+          .Test(xnn_f32_ibilinear_ukernel__sse_c8);
+      }
+    }
+  }
+#endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
+
+
+#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
+  TEST(F32_IBILINEAR__PSIMD_C4, channels_eq_4) {
+    TEST_REQUIRES_PSIMD;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(4)
+      .Test(xnn_f32_ibilinear_ukernel__psimd_c4);
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C4, channels_div_4) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t channels = 8; channels < 40; channels += 4) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__psimd_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C4, channels_lt_4) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t channels = 1; channels < 4; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__psimd_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C4, channels_gt_4) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t channels = 5; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__psimd_c4);
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C4, pixels_gt_1) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__psimd_c4);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C4, input_offset) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(23)
+          .Test(xnn_f32_ibilinear_ukernel__psimd_c4);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__PSIMD_C4, output_stride) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 20; channels += 3) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(23)
+          .Test(xnn_f32_ibilinear_ukernel__psimd_c4);
+      }
+    }
+  }
+#endif  // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
+
+
+#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
+  TEST(F32_IBILINEAR__PSIMD_C8, channels_eq_8) {
+    TEST_REQUIRES_PSIMD;
+    IBilinearMicrokernelTester()
+      .pixels(1)
+      .channels(8)
+      .Test(xnn_f32_ibilinear_ukernel__psimd_c8);
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C8, channels_div_8) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t channels = 16; channels < 80; channels += 8) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__psimd_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C8, channels_lt_8) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t channels = 1; channels < 8; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__psimd_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C8, channels_gt_8) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t channels = 9; channels < 16; channels++) {
+      IBilinearMicrokernelTester()
+        .pixels(1)
+        .channels(channels)
+        .Test(xnn_f32_ibilinear_ukernel__psimd_c8);
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C8, pixels_gt_1) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t pixels = 2; pixels < 3; pixels++) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .Test(xnn_f32_ibilinear_ukernel__psimd_c8);
+      }
+    }
+  }
+
+  TEST(F32_IBILINEAR__PSIMD_C8, input_offset) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .input_offset(43)
+          .Test(xnn_f32_ibilinear_ukernel__psimd_c8);
+      }
+    }
+  }
+  TEST(F32_IBILINEAR__PSIMD_C8, output_stride) {
+    TEST_REQUIRES_PSIMD;
+    for (size_t pixels = 1; pixels < 5; pixels += 1) {
+      for (size_t channels = 1; channels <= 40; channels += 7) {
+        IBilinearMicrokernelTester()
+          .pixels(pixels)
+          .channels(channels)
+          .output_stride(43)
+          .Test(xnn_f32_ibilinear_ukernel__psimd_c8);
+      }
+    }
+  }
+#endif  // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
diff --git a/test/f32-ibilinear.yaml b/test/f32-ibilinear.yaml
new file mode 100644
index 0000000..0fc4eab
--- /dev/null
+++ b/test/f32-ibilinear.yaml
@@ -0,0 +1,15 @@
+# Copyright 2019 Google LLC
+#
+# This source code is licensed under the BSD-style license found in the
+# LICENSE file in the root directory of this source tree.
+- name: xnn_f32_ibilinear_ukernel__scalar_c1
+- name: xnn_f32_ibilinear_ukernel__scalar_c2
+- name: xnn_f32_ibilinear_ukernel__scalar_c4
+- name: xnn_f32_ibilinear_ukernel__neon_c4
+- name: xnn_f32_ibilinear_ukernel__neon_c8
+- name: xnn_f32_ibilinear_ukernel__neonfma_c4
+- name: xnn_f32_ibilinear_ukernel__neonfma_c8
+- name: xnn_f32_ibilinear_ukernel__sse_c4
+- name: xnn_f32_ibilinear_ukernel__sse_c8
+- name: xnn_f32_ibilinear_ukernel__psimd_c4
+- name: xnn_f32_ibilinear_ukernel__psimd_c8
diff --git a/test/bilinear-microkernel-tester.h b/test/ibilinear-microkernel-tester.h
similarity index 89%
rename from test/bilinear-microkernel-tester.h
rename to test/ibilinear-microkernel-tester.h
index abfc4aa..7ec159d 100644
--- a/test/bilinear-microkernel-tester.h
+++ b/test/ibilinear-microkernel-tester.h
@@ -21,9 +21,9 @@
 #include <xnnpack/params.h>
 
 
-class BilinearMicrokernelTester {
+class IBilinearMicrokernelTester {
  public:
-  inline BilinearMicrokernelTester& pixels(uint32_t pixels) {
+  inline IBilinearMicrokernelTester& pixels(uint32_t pixels) {
     assert(pixels >= 1);
     this->pixels_ = pixels;
     return *this;
@@ -33,7 +33,7 @@
     return this->pixels_;
   }
 
-  inline BilinearMicrokernelTester& channels(uint32_t channels) {
+  inline IBilinearMicrokernelTester& channels(uint32_t channels) {
     assert(channels >= 1);
     this->channels_ = channels;
     return *this;
@@ -43,7 +43,7 @@
     return this->channels_;
   }
 
-  inline BilinearMicrokernelTester& input_offset(uint32_t input_offset) {
+  inline IBilinearMicrokernelTester& input_offset(uint32_t input_offset) {
     this->input_offset_ = input_offset;
     return *this;
   }
@@ -52,7 +52,7 @@
     return this->input_offset_;
   }
 
-  inline BilinearMicrokernelTester& output_stride(uint32_t output_stride) {
+  inline IBilinearMicrokernelTester& output_stride(uint32_t output_stride) {
     assert(output_stride != 0);
     this->output_stride_ = output_stride;
     return *this;
@@ -67,7 +67,7 @@
     }
   }
 
-  inline BilinearMicrokernelTester& iterations(size_t iterations) {
+  inline IBilinearMicrokernelTester& iterations(size_t iterations) {
     this->iterations_ = iterations;
     return *this;
   }
@@ -76,7 +76,7 @@
     return this->iterations_;
   }
 
-  void Test(xnn_f32_bilinear_ukernel_function bilinear) const {
+  void Test(xnn_f32_ibilinear_ukernel_function ibilinear) const {
     std::random_device random_device;
     auto rng = std::mt19937(random_device());
     auto f32rng = std::bind(std::uniform_real_distribution<float>(0.0f, 1.0f), rng);
@@ -111,7 +111,7 @@
       }
 
       // Call optimized micro-kernel.
-      bilinear(
+      ibilinear(
         pixels(), channels() * sizeof(float),
         indirection.data(), input_offset() * sizeof(float),
         packed_weights.data(), output.data(),
diff --git a/tools/generate-bilinear-test.py b/tools/generate-ibilinear-test.py
similarity index 91%
rename from tools/generate-bilinear-test.py
rename to tools/generate-ibilinear-test.py
index 6b90820..5bb4869 100755
--- a/tools/generate-bilinear-test.py
+++ b/tools/generate-ibilinear-test.py
@@ -18,7 +18,7 @@
 
 
 parser = argparse.ArgumentParser(
-  description='Bilinear microkernel test generator')
+  description='IBILINEAR microkernel test generator')
 parser.add_argument("-s", "--spec", metavar="FILE", required=True,
                     help="Specification (YAML) file")
 parser.add_argument("-o", "--output", metavar="FILE", required=True,
@@ -27,7 +27,7 @@
 
 
 def split_ukernel_name(name):
-  match = re.match(r"^xnn_(f16|f32)_bilinear_ukernel__(.+)_c(\d+)$", name)
+  match = re.match(r"^xnn_(f16|f32)_ibilinear_ukernel__(.+)_c(\d+)$", name)
   assert match is not None
   channel_tile = int(match.group(3))
   pixel_tile = 1
@@ -36,11 +36,11 @@
   return channel_tile, pixel_tile, arch, isa
 
 
-BILINEAR_TEST_TEMPLATE = """\
+IBILINEAR_TEST_TEMPLATE = """\
 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}) {
   $if ISA_CHECK:
     ${ISA_CHECK};
-  BilinearMicrokernelTester()
+  IBilinearMicrokernelTester()
     .pixels(${PIXEL_TILE})
     .channels(${CHANNEL_TILE})
     .Test(${TEST_FUNC});
@@ -51,7 +51,7 @@
     $if ISA_CHECK:
       ${ISA_CHECK};
     for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*10}; channels += ${CHANNEL_TILE}) {
-      BilinearMicrokernelTester()
+      IBilinearMicrokernelTester()
         .pixels(${PIXEL_TILE})
         .channels(channels)
         .Test(${TEST_FUNC});
@@ -62,7 +62,7 @@
     $if ISA_CHECK:
       ${ISA_CHECK};
     for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
-      BilinearMicrokernelTester()
+      IBilinearMicrokernelTester()
         .pixels(${PIXEL_TILE})
         .channels(channels)
         .Test(${TEST_FUNC});
@@ -73,7 +73,7 @@
   $if ISA_CHECK:
     ${ISA_CHECK};
   for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
-    BilinearMicrokernelTester()
+    IBilinearMicrokernelTester()
       .pixels(${PIXEL_TILE})
       .channels(channels)
       .Test(${TEST_FUNC});
@@ -86,7 +86,7 @@
       ${ISA_CHECK};
     for (size_t pixels = ${PIXEL_TILE*2}; pixels < ${PIXEL_TILE*10}; pixels += ${PIXEL_TILE}) {
       for (size_t channels = 1; channels <= ${CHANNEL_TILE * 5}; channels += ${max(1, CHANNEL_TILE - 1)}) {
-        BilinearMicrokernelTester()
+        IBilinearMicrokernelTester()
           .pixels(pixels)
           .channels(channels)
           .Test(${TEST_FUNC});
@@ -99,7 +99,7 @@
       ${ISA_CHECK};
     for (size_t pixels = 1; pixels < ${PIXEL_TILE}; pixels++) {
       for (size_t channels = 1; channels <= ${CHANNEL_TILE * 5}; channels += ${max(1, CHANNEL_TILE - 1)}) {
-        BilinearMicrokernelTester()
+        IBilinearMicrokernelTester()
           .pixels(pixels)
           .channels(channels)
           .Test(${TEST_FUNC});
@@ -112,7 +112,7 @@
     ${ISA_CHECK};
   for (size_t pixels = ${PIXEL_TILE+1}; pixels < ${max(PIXEL_TILE*2, 3)}; pixels++) {
     for (size_t channels = 1; channels <= ${CHANNEL_TILE * 5}; channels += ${max(1, CHANNEL_TILE - 1)}) {
-      BilinearMicrokernelTester()
+      IBilinearMicrokernelTester()
         .pixels(pixels)
         .channels(channels)
         .Test(${TEST_FUNC});
@@ -125,7 +125,7 @@
     ${ISA_CHECK};
   for (size_t pixels = 1; pixels < ${PIXEL_TILE * 5}; pixels += ${max(1, PIXEL_TILE - 1)}) {
     for (size_t channels = 1; channels <= ${CHANNEL_TILE * 5}; channels += ${max(1, CHANNEL_TILE - 1)}) {
-      BilinearMicrokernelTester()
+      IBilinearMicrokernelTester()
         .pixels(pixels)
         .channels(channels)
         .input_offset(${next_prime(CHANNEL_TILE * 5 + 1)})
@@ -138,7 +138,7 @@
     ${ISA_CHECK};
   for (size_t pixels = 1; pixels < ${PIXEL_TILE * 5}; pixels += ${max(1, PIXEL_TILE - 1)}) {
     for (size_t channels = 1; channels <= ${CHANNEL_TILE * 5}; channels += ${max(1, CHANNEL_TILE - 1)}) {
-      BilinearMicrokernelTester()
+      IBilinearMicrokernelTester()
         .pixels(pixels)
         .channels(channels)
         .output_stride(${next_prime(CHANNEL_TILE * 5 + 1)})
@@ -167,7 +167,7 @@
   _, test_name = ukernel.split("_", 1)
   _, datatype, ukernel_type, _ = ukernel.split("_", 3)
   test_args = [ukernel]
-  return xngen.preprocess(BILINEAR_TEST_TEMPLATE, {
+  return xngen.preprocess(IBILINEAR_TEST_TEMPLATE, {
       "TEST_NAME": test_name.upper().replace("UKERNEL_", ""),
       "TEST_FUNC": ukernel,
       "UKERNEL_TYPE": ukernel_type.upper(),
@@ -203,8 +203,8 @@
 #include <xnnpack/common.h>
 #include <xnnpack/isa-checks.h>
 
-#include <xnnpack/bilinear.h>
-#include "bilinear-microkernel-tester.h"
+#include <xnnpack/ibilinear.h>
+#include "ibilinear-microkernel-tester.h"
 """.format(specification=options.spec, generator=sys.argv[0])
 
     for ukernel_spec in spec_yaml:
