message: Convert TF::Conv2D into TFL::Conv2D
  Added TF::Conv2D op and TFL::Conv2D op, and converted TF::Conv2D to
  TFL::Conv2D, which need to address the operand numberr mismatch
  and attribute conversion.
diff: @@ -44,6 +44,8 @@ class Vector<Type t, list<int> dims> : Type {
  // rank, size.
  def Tensor : Type;
  +def String : Type;
  +
  // The operands of an op.
  class Operands<list<Type> types> {
  list<Type> operandTypes = types;
  @@ -87,6 +89,10 @@ class I32Attr : Attr<I<32>> {
  let returnType = [{ int }];
  let convertFromStorage = [{ return {0}.getSExtValue(); }];
  }
  +class StrAttr : Attr<String> {
  + let storageType = [{ StringAttr }];
  + let returnType = [{ StringRef }];
  +}
  // Class representing a Trait (defined in a C++ file that needs to be included
  // before the generated op definitions).
  @@ -160,6 +166,9 @@ class BinaryOp<string mnemonic, list<OpProperty> props> :
  let printer = [{ return mlir::impl::printBinaryOp(getOperation(), p); }];
  }
  +class TernaryOp<string mnemonic, list<OpProperty> props> :
  + Op<mnemonic, props>, Operands<[Tensor, Tensor, Tensor]>;
  +
  class UnaryOp<string mnemonic, list<OpProperty> props> :
  Op<mnemonic, props>, Operands<[Tensor]>, Results<[Tensor]> {
  let builder = [{
  