[lite] Add new types for ReadVariable and AssignVariables ops in MLIR converter for TFLite.
This is in progress and currently experimental.
PiperOrigin-RevId: 354678544
Change-Id: I6f32122e90fa126042a1ad4383bae6a80009d716
diff --git a/tensorflow/compiler/mlir/lite/converter_gen.cc b/tensorflow/compiler/mlir/lite/converter_gen.cc
index 69fee0b..ec7f851 100644
--- a/tensorflow/compiler/mlir/lite/converter_gen.cc
+++ b/tensorflow/compiler/mlir/lite/converter_gen.cc
@@ -241,9 +241,15 @@
for (const auto *def : defs) {
StringRef op_name = def->getName().drop_front(4);
+ auto operator_name = GetOperatorName(*def);
+ // TODO(b/149099381): Remove this part after kernels are added as
+ // builtin op.
+ if (operator_name == "ASSIGN_VARIABLE" ||
+ operator_name == "READ_VARIABLE") {
+ continue;
+ }
os << " if (isa<mlir::TFL::" << op_name << ">(op))\n"
- << " return tflite::BuiltinOperator_" << GetOperatorName(*def)
- << ";\n";
+ << " return tflite::BuiltinOperator_" << operator_name << ";\n";
}
os << " return llvm::None;\n"
diff --git a/tensorflow/compiler/mlir/lite/ir/tfl_ops.td b/tensorflow/compiler/mlir/lite/ir/tfl_ops.td
index aec6bf0..929b6cf 100644
--- a/tensorflow/compiler/mlir/lite/ir/tfl_ops.td
+++ b/tensorflow/compiler/mlir/lite/ir/tfl_ops.td
@@ -4556,4 +4556,41 @@
);
}
+
+def TFL_AssignVariableOp : TFL_Op<"assign_variable", []> {
+ let summary = "Assigns a new value to a variable.";
+
+ let description = [{
+Any ReadVariableOp with a control dependency on this op is guaranteed to return
+this value or a subsequent newer value of the variable.
+ }];
+
+ let arguments = (ins
+ // TODO(b/149099381): Remove integer IDs after adding the new variable
+ // handle type.
+ TFL_TensorOf<[I32]>:$resource_id,
+ // TODO(b/149099381): Support other types too.
+ TFL_TensorOf<[F32]>:$value
+ );
+
+ let results = (outs);
+}
+
+def TFL_ReadVariableOp : TFL_Op<"read_variable", []> {
+ let summary = "Reads variable value.";
+
+ let description = [{
+Read variable data identified by 'resource_id'.
+ }];
+
+ let arguments = (ins
+ // TODO(b/149099381): Remove integer IDs after adding the new variable
+ // handle type.
+ TFL_TensorOf<[I32]>:$resource_id
+ );
+
+ // TODO(b/149099381): Support other types too.
+ let results = (outs TFL_TensorOf<[F32]>:$result);
+}
+
#endif // TFL_OPS