[mlir][arith] Mark unknown types legal in WIE
authorJakub Kuderski <kubak@google.com>
Tue, 4 Oct 2022 18:59:54 +0000 (14:59 -0400)
committerJakub Kuderski <kubak@google.com>
Tue, 4 Oct 2022 19:00:51 +0000 (15:00 -0400)
Allow unknown types to pass through without being marked as illegal.

Reviewed By: antiagainst

Differential Revision: https://reviews.llvm.org/D135123

mlir/lib/Dialect/Arith/Transforms/EmulateWideInt.cpp
mlir/test/Dialect/Arith/emulate-wide-int.mlir

index dae5864..3bec82c 100644 (file)
@@ -627,6 +627,9 @@ arith::WideIntEmulationConverter::WideIntEmulationConverter(
          "Only power-of-two integers with are supported");
   assert(widestIntSupportedByTarget >= 2 && "Integer type too narrow");
 
+  // Allow unknown types.
+  addConversion([](Type ty) -> Optional<Type> { return ty; });
+
   // Scalar case.
   addConversion([this](IntegerType ty) -> Optional<Type> {
     unsigned width = ty.getWidth();
index 6445ea4..940b125 100644 (file)
@@ -10,6 +10,24 @@ func.func @addi_same_i32(%a : i32) -> i32 {
     return %x : i32
 }
 
+// Expect no conversions, index is not sized.
+// CHECK-LABEL: func @addi_same_index
+// CHECK-SAME:    ([[ARG:%.+]]: index) -> index
+// CHECK-NEXT:    [[X:%.+]] = arith.addi [[ARG]], [[ARG]] : index
+// CHECK-NEXT:    return [[X]] : index
+func.func @addi_same_index(%a : index) -> index {
+    %x = arith.addi %a, %a : index
+    return %x : index
+}
+
+// Expect no conversions, f64 is not an integer type.
+// CHECK-LABEL: func @identity_f64
+// CHECK-SAME:    ([[ARG:%.+]]: f64) -> f64
+// CHECK-NEXT:    return [[ARG]] : f64
+func.func @identity_f64(%a : f64) -> f64 {
+    return %a : f64
+}
+
 // Expect no conversions, i32 is supported.
 // CHECK-LABEL: func @addi_same_vector_i32
 // CHECK-SAME:    ([[ARG:%.+]]: vector<2xi32>) -> vector<2xi32>