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(