[WASM] Add missing f64 musl builtins for ONNX operations (#24953) LLVMCPU executable linking fails with undefined references when generated code calls `exp`, `floor`, `log`, or `round`. This is because their f64 implementations and dependencies are missing from IREE's embedded musl bitcode. Added the missing sources and dependencies to wasm32 and wasm64 musl Makefiles and regenerated the bitcode libraries. During embedded linking, LLVMCPU uses the generic wasm32 and wasm64 bitcode libraries to provide C math functions to 32-bit and 64-bit targets. Removed the twelve now-passing ONNX cases from O0 and O2 expected-compilation-failure list. Progress on #24378. Assisted-by: Codex --------- Signed-off-by: Prajit-Rahul <prajitrahul05@gmail.com>
diff --git a/runtime/src/iree/builtins/musl/Makefile_wasm32.iree b/runtime/src/iree/builtins/musl/Makefile_wasm32.iree index 869ed87..3416541 100644 --- a/runtime/src/iree/builtins/musl/Makefile_wasm32.iree +++ b/runtime/src/iree/builtins/musl/Makefile_wasm32.iree
@@ -25,7 +25,18 @@ src/math/__math_invalidf.c \ src/math/__math_oflowf.c \ src/math/__math_uflowf.c \ - src/math/__math_xflowf.c) + src/math/__math_xflowf.c \ + src/math/exp.c \ + src/math/exp_data.c \ + src/math/floor.c \ + src/math/log.c \ + src/math/log_data.c \ + src/math/round.c \ + src/math/__math_divzero.c \ + src/math/__math_invalid.c \ + src/math/__math_oflow.c \ + src/math/__math_uflow.c \ + src/math/__math_xflow.c) IREE_BASE_LLS = $(patsubst $(srcdir)/%,%.ll,$(basename $(IREE_BASE_SRCS))) IREE_BASE_BCS = $(patsubst $(srcdir)/%,%.bc,$(basename $(IREE_BASE_SRCS))) IREE_LL_FILES = $(addprefix obj/, $(IREE_BASE_LLS))
diff --git a/runtime/src/iree/builtins/musl/Makefile_wasm64.iree b/runtime/src/iree/builtins/musl/Makefile_wasm64.iree index 486d9de..16150e5 100644 --- a/runtime/src/iree/builtins/musl/Makefile_wasm64.iree +++ b/runtime/src/iree/builtins/musl/Makefile_wasm64.iree
@@ -25,7 +25,18 @@ src/math/__math_invalidf.c \ src/math/__math_oflowf.c \ src/math/__math_uflowf.c \ - src/math/__math_xflowf.c) + src/math/__math_xflowf.c \ + src/math/exp.c \ + src/math/exp_data.c \ + src/math/floor.c \ + src/math/log.c \ + src/math/log_data.c \ + src/math/round.c \ + src/math/__math_divzero.c \ + src/math/__math_invalid.c \ + src/math/__math_oflow.c \ + src/math/__math_uflow.c \ + src/math/__math_xflow.c) IREE_BASE_LLS = $(patsubst $(srcdir)/%,%.ll,$(basename $(IREE_BASE_SRCS))) IREE_BASE_BCS = $(patsubst $(srcdir)/%,%.bc,$(basename $(IREE_BASE_SRCS))) IREE_LL_FILES = $(addprefix obj/, $(IREE_BASE_LLS))
diff --git a/runtime/src/iree/builtins/musl/bin/libmusl_wasm32_generic.bc b/runtime/src/iree/builtins/musl/bin/libmusl_wasm32_generic.bc index 8c81f49..4cc737f 100644 --- a/runtime/src/iree/builtins/musl/bin/libmusl_wasm32_generic.bc +++ b/runtime/src/iree/builtins/musl/bin/libmusl_wasm32_generic.bc Binary files differ
diff --git a/runtime/src/iree/builtins/musl/bin/libmusl_wasm64_generic.bc b/runtime/src/iree/builtins/musl/bin/libmusl_wasm64_generic.bc index 0767285..d13dd70 100644 --- a/runtime/src/iree/builtins/musl/bin/libmusl_wasm64_generic.bc +++ b/runtime/src/iree/builtins/musl/bin/libmusl_wasm64_generic.bc Binary files differ
diff --git a/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O0.json b/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O0.json index 09edc6a..b91d549 100644 --- a/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O0.json +++ b/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O0.json
@@ -88,7 +88,6 @@ "onnx/node/generated/test_maxpool_with_argmax_2d_precomputed_strides", "onnx/node/generated/test_maxunpool_export_with_output_shape", "onnx/node/generated/test_maxunpool_export_without_output_shape", - "onnx/node/generated/test_mod_mixed_sign_float64", "onnx/node/generated/test_nllloss_NCd1", "onnx/node/generated/test_nllloss_NCd1_ii", "onnx/node/generated/test_nllloss_NCd1_mean_weight_negative_ii", @@ -106,15 +105,6 @@ "onnx/node/generated/test_nllloss_NCd1d2d3d4d5_mean_weight", "onnx/node/generated/test_nllloss_NCd1d2d3d4d5_none_no_weight", "onnx/node/generated/test_nonmaxsuppression_two_classes", - "onnx/node/generated/test_nonzero_example", - "onnx/node/generated/test_pow_types_float32_int32", - "onnx/node/generated/test_pow_types_float32_int64", - "onnx/node/generated/test_pow_types_float32_uint32", - "onnx/node/generated/test_pow_types_float32_uint64", - "onnx/node/generated/test_pow_types_int32_float32", - "onnx/node/generated/test_pow_types_int32_int32", - "onnx/node/generated/test_pow_types_int64_float32", - "onnx/node/generated/test_pow_types_int64_int64", "onnx/node/generated/test_quantizelinear_axis", "onnx/node/generated/test_quantizelinear_blocked_asymmetric", "onnx/node/generated/test_quantizelinear_blocked_symmetric", @@ -156,9 +146,7 @@ "onnx/node/generated/test_reduce_log_sum_desc_axes_expanded", "onnx/node/generated/test_reduce_log_sum_empty_set", "onnx/node/generated/test_reduce_log_sum_empty_set_expanded", - "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_example", "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_example_expanded", - "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_random", "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_random_expanded", "onnx/node/generated/test_reduce_log_sum_exp_do_not_keepdims_example", "onnx/node/generated/test_reduce_log_sum_exp_do_not_keepdims_example_expanded",
diff --git a/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O2.json b/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O2.json index 9f9dae1..a3055a7a 100644 --- a/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O2.json +++ b/tests/external/iree-test-suites/onnx_ops/onnx_ops_cpu_llvm_sync_O2.json
@@ -89,7 +89,6 @@ "onnx/node/generated/test_maxpool_with_argmax_2d_precomputed_strides", "onnx/node/generated/test_maxunpool_export_with_output_shape", "onnx/node/generated/test_maxunpool_export_without_output_shape", - "onnx/node/generated/test_mod_mixed_sign_float64", "onnx/node/generated/test_nllloss_NCd1", "onnx/node/generated/test_nllloss_NCd1_ii", "onnx/node/generated/test_nllloss_NCd1_mean_weight_negative_ii", @@ -107,15 +106,6 @@ "onnx/node/generated/test_nllloss_NCd1d2d3d4d5_mean_weight", "onnx/node/generated/test_nllloss_NCd1d2d3d4d5_none_no_weight", "onnx/node/generated/test_nonmaxsuppression_two_classes", - "onnx/node/generated/test_nonzero_example", - "onnx/node/generated/test_pow_types_float32_int32", - "onnx/node/generated/test_pow_types_float32_int64", - "onnx/node/generated/test_pow_types_float32_uint32", - "onnx/node/generated/test_pow_types_float32_uint64", - "onnx/node/generated/test_pow_types_int32_float32", - "onnx/node/generated/test_pow_types_int32_int32", - "onnx/node/generated/test_pow_types_int64_float32", - "onnx/node/generated/test_pow_types_int64_int64", "onnx/node/generated/test_quantizelinear_axis", "onnx/node/generated/test_quantizelinear_blocked_asymmetric", "onnx/node/generated/test_quantizelinear_blocked_symmetric", @@ -157,9 +147,7 @@ "onnx/node/generated/test_reduce_log_sum_desc_axes_expanded", "onnx/node/generated/test_reduce_log_sum_empty_set", "onnx/node/generated/test_reduce_log_sum_empty_set_expanded", - "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_example", "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_example_expanded", - "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_random", "onnx/node/generated/test_reduce_log_sum_exp_default_axes_keepdims_random_expanded", "onnx/node/generated/test_reduce_log_sum_exp_do_not_keepdims_example", "onnx/node/generated/test_reduce_log_sum_exp_do_not_keepdims_example_expanded",