Support f32 in the VM by default in the compiler. (#6744)
Addresses this comment: https://github.com/google/iree/issues/1159#issuecomment-895580262
diff --git a/iree/base/config.h b/iree/base/config.h
index d2f4ed0..71ac96b 100644
--- a/iree/base/config.h
+++ b/iree/base/config.h
@@ -157,7 +157,7 @@
// available extensions in order to ensure that the compiled modules only use
// features available on the target they are to run on.
//
-// See the `-iree-vm-target-extension=` compiler option for more information.
+// See the `-iree-vm-target-extension-*` compiler options for more information.
#if !defined(IREE_VM_BACKTRACE_ENABLE)
// Enables backtraces in VM failures when debugging information is available.
@@ -166,19 +166,19 @@
#if !defined(IREE_VM_EXT_I64_ENABLE)
// Enables the 64-bit integer instruction extension.
-// Targeted from the compiler with `-iree-vm-target-extension=i64`.
+// Targeted from the compiler with `-iree-vm-target-extension-i64`.
#define IREE_VM_EXT_I64_ENABLE 1
#endif // !IREE_VM_EXT_I64_ENABLE
#if !defined(IREE_VM_EXT_F32_ENABLE)
// Enables the 32-bit floating-point instruction extension.
-// Targeted from the compiler with `-iree-vm-target-extension=f32`.
+// Targeted from the compiler with `-iree-vm-target-extension-f32`.
#define IREE_VM_EXT_F32_ENABLE 1
#endif // !IREE_VM_EXT_F32_ENABLE
#if !defined(IREE_VM_EXT_F64_ENABLE)
// Enables the 64-bit floating-point instruction extension.
-// Targeted from the compiler with `-iree-vm-target-extension=f64`.
+// Targeted from the compiler with `-iree-vm-target-extension-f64`.
#define IREE_VM_EXT_F64_ENABLE 0
#endif // !IREE_VM_EXT_F64_ENABLE
diff --git a/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/buffer_ops.mlir b/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/buffer_ops.mlir
index 12f13ee..ae78f27 100644
--- a/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/buffer_ops.mlir
+++ b/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/buffer_ops.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-opt -split-input-file -iree-convert-hal-to-vm -iree-vm-target-extension=f32 %s | IreeFileCheck %s
+// RUN: iree-opt -split-input-file -iree-convert-hal-to-vm %s | IreeFileCheck %s
// CHECK-LABEL: @buffer_subspan
func @buffer_subspan(%arg0 : !hal.buffer) -> !hal.buffer {
diff --git a/iree/compiler/Dialect/VM/Conversion/MathToVM/test/arithmetic_ops.mlir b/iree/compiler/Dialect/VM/Conversion/MathToVM/test/arithmetic_ops.mlir
index ba3bd00..73f4a3f 100644
--- a/iree/compiler/Dialect/VM/Conversion/MathToVM/test/arithmetic_ops.mlir
+++ b/iree/compiler/Dialect/VM/Conversion/MathToVM/test/arithmetic_ops.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-opt -split-input-file -iree-vm-conversion -iree-vm-target-extension=f32 %s | IreeFileCheck %s
+// RUN: iree-opt -split-input-file -iree-vm-conversion %s | IreeFileCheck %s
module {
// CHECK-LABEL: vm.func private @arithmetic
diff --git a/iree/compiler/Dialect/VM/Conversion/MemRefToVM/test/load_store_ops.mlir b/iree/compiler/Dialect/VM/Conversion/MemRefToVM/test/load_store_ops.mlir
index b6f64cc..f5d60b1 100644
--- a/iree/compiler/Dialect/VM/Conversion/MemRefToVM/test/load_store_ops.mlir
+++ b/iree/compiler/Dialect/VM/Conversion/MemRefToVM/test/load_store_ops.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-opt -split-input-file -iree-vm-conversion -iree-vm-target-extension=f32 %s | IreeFileCheck %s
+// RUN: iree-opt -split-input-file -iree-vm-conversion %s | IreeFileCheck %s
module {
// CHECK-LABEL: vm.func private @load_store
diff --git a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp
index a122bdb..aa024bd 100644
--- a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp
@@ -154,6 +154,10 @@
ConstantOp srcOp, ArrayRef<Value> operands,
ConversionPatternRewriter &rewriter) const override {
auto targetType = typeConverter.convertType(srcOp.getType());
+ if (!targetType) {
+ return srcOp.emitError() << "could not convert type: " << srcOp.getType()
+ << " (check -iree-vm-target-* options)";
+ }
if (targetType.isa<IntegerType>()) {
auto integerAttr = srcOp.getValue().dyn_cast<IntegerAttr>();
if (!integerAttr) {
diff --git a/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/const_ops.mlir b/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/const_ops.mlir
index 3246a8f..97f2d18 100644
--- a/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/const_ops.mlir
+++ b/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/const_ops.mlir
@@ -27,3 +27,31 @@
}
}
+
+// -----
+// CHECK-LABEL: @t002_const.f32.nonzero
+module @t002_const.f32.nonzero {
+
+module {
+ func @non_zero() -> (f32) {
+ // CHECK: vm.const.f32 1.000000e+00 : f32
+ %1 = constant 1. : f32
+ return %1 : f32
+ }
+}
+
+}
+
+// -----
+// CHECK-LABEL: @t003_const.f32.zero
+module @t003_const.f32.zero {
+
+module {
+ func @zero() -> (f32) {
+ // CHECK: vm.const.f32.zero : f32
+ %1 = constant 0. : f32
+ return %1 : f32
+ }
+}
+
+}
diff --git a/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/conversion_ops.mlir b/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/conversion_ops.mlir
index a01bf75..4bb5eb0 100644
--- a/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/conversion_ops.mlir
+++ b/iree/compiler/Dialect/VM/Conversion/StandardToVM/test/conversion_ops.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-opt -split-input-file -pass-pipeline='test-iree-convert-std-to-vm' -iree-vm-target-extension=f32 %s | IreeFileCheck %s
+// RUN: iree-opt -split-input-file -pass-pipeline='test-iree-convert-std-to-vm' %s | IreeFileCheck %s
// CHECK-LABEL: @t001_bitcast_i32_f32
module @t001_bitcast_i32_f32 {
diff --git a/iree/compiler/Dialect/VM/Conversion/TargetOptions.cpp b/iree/compiler/Dialect/VM/Conversion/TargetOptions.cpp
index 4dc3448..2f74c57 100644
--- a/iree/compiler/Dialect/VM/Conversion/TargetOptions.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/TargetOptions.cpp
@@ -23,15 +23,23 @@
llvm::cl::desc("Bit width of index types."),
llvm::cl::cat(vmTargetOptionsCategory),
};
- static auto *extensionsFlag = new llvm::cl::list<OpcodeExtension>{
- "iree-vm-target-extension",
- llvm::cl::ZeroOrMore,
- llvm::cl::desc("Supported target opcode extensions."),
+ static auto *i64ExtensionFlag = new llvm::cl::opt<bool>{
+ "iree-vm-target-extension-i64",
+ llvm::cl::init(false),
+ llvm::cl::desc("Support i64 target opcode extensions."),
llvm::cl::cat(vmTargetOptionsCategory),
- llvm::cl::values(
- clEnumValN(OpcodeExtension::kI64, "i64", "i64 type support"),
- clEnumValN(OpcodeExtension::kF32, "f32", "f32 type support"),
- clEnumValN(OpcodeExtension::kF64, "f64", "f64 type support")),
+ };
+ static auto *f32ExtensionFlag = new llvm::cl::opt<bool>{
+ "iree-vm-target-extension-f32",
+ llvm::cl::init(true),
+ llvm::cl::desc("Support f32 target opcode extensions."),
+ llvm::cl::cat(vmTargetOptionsCategory),
+ };
+ static auto *f64ExtensionFlag = new llvm::cl::opt<bool>{
+ "iree-vm-target-extension-f64",
+ llvm::cl::init(false),
+ llvm::cl::desc("Support f64 target opcode extensions."),
+ llvm::cl::cat(vmTargetOptionsCategory),
};
static auto *truncateUnsupportedIntegersFlag = new llvm::cl::opt<bool>{
"iree-vm-target-truncate-unsupported-integers",
@@ -48,18 +56,14 @@
TargetOptions targetOptions;
targetOptions.indexBits = *indexBitsFlag;
- for (auto ext : *extensionsFlag) {
- switch (ext) {
- case OpcodeExtension::kI64:
- targetOptions.i64Extension = true;
- break;
- case OpcodeExtension::kF32:
- targetOptions.f32Extension = true;
- break;
- case OpcodeExtension::kF64:
- targetOptions.f64Extension = true;
- break;
- }
+ if (*i64ExtensionFlag) {
+ targetOptions.i64Extension = true;
+ }
+ if (*f32ExtensionFlag) {
+ targetOptions.f32Extension = true;
+ }
+ if (*f64ExtensionFlag) {
+ targetOptions.f64Extension = true;
}
targetOptions.truncateUnsupportedIntegers = *truncateUnsupportedIntegersFlag;
targetOptions.truncateUnsupportedFloats = *truncateUnsupportedFloatsFlag;
diff --git a/iree/test/e2e/tosa_ops/BUILD b/iree/test/e2e/tosa_ops/BUILD
index 7ca8b46..58b962f 100644
--- a/iree/test/e2e/tosa_ops/BUILD
+++ b/iree/test/e2e/tosa_ops/BUILD
@@ -131,7 +131,7 @@
# really should not be emulating it with 64-bit math. Having this
# prevents any of these tests from being executed on a runtime compiled
# without the VM's I64 extension.
- "-iree-vm-target-extension=i64",
+ "-iree-vm-target-extension-i64",
],
driver = "vmvx",
target_backend = "vmvx",
diff --git a/iree/test/e2e/tosa_ops/CMakeLists.txt b/iree/test/e2e/tosa_ops/CMakeLists.txt
index 8f3d802..8a0e0a0 100644
--- a/iree/test/e2e/tosa_ops/CMakeLists.txt
+++ b/iree/test/e2e/tosa_ops/CMakeLists.txt
@@ -107,7 +107,7 @@
"vmvx"
COMPILER_FLAGS
"-iree-input-type=tosa"
- "-iree-vm-target-extension=i64"
+ "-iree-vm-target-extension-i64"
)
iree_check_single_backend_test_suite(