//===----------------------------------------------------------------------===//
// Pointwise convolution ops.
// Naming convention: '_'.join(
//   [conv,
//    {input-spatial-dims},
//    {output-spatial-dims},
//    {filter-dims},
//    {output-size x input-size}])
//===----------------------------------------------------------------------===//

func.func @conv_244_112_3x3_3x32() -> tensor<1x112x112x32xf32> {
    %input = util.unfoldable_constant dense<1.0> : tensor<1x224x224x3xf32>
    %filter = util.unfoldable_constant dense<1.0> : tensor<3x3x3x32xf32>
    %0 = "mhlo.convolution"(%input, %filter) {
        batch_group_count = 1 : i64,
        dimension_numbers = #mhlo.conv<raw
            input_batch_dimension = 0,
            input_feature_dimension = 3,
            input_spatial_dimensions = [1, 2],
            kernel_input_feature_dimension = 2,
            kernel_output_feature_dimension = 3,
            kernel_spatial_dimensions = [0, 1],
            output_batch_dimension = 0,
            output_feature_dimension = 3,
            output_spatial_dimensions = [1, 2]
        >,
        feature_group_count = 1 : i64,
        padding = dense<[[0, 1], [0, 1]]> : tensor<2x2xi64>,
        rhs_dilation = dense<1> : tensor<2xi64>,
        window_strides = dense<2> : tensor<2xi64>
    } : (tensor<1x224x224x3xf32>, tensor<3x3x3x32xf32>) -> tensor<1x112x112x32xf32>
    return %0 : tensor<1x112x112x32xf32>
}

func.func @conv_112_112_1x1_32x64() -> tensor<1x112x112x64xf32> {
    %input = util.unfoldable_constant dense<1.0> : tensor<1x112x112x32xf32>
    %filter = util.unfoldable_constant dense<1.0> : tensor<1x1x32x64xf32>
    %0 = "mhlo.convolution"(%input, %filter) {
        batch_group_count = 1 : i64,
        dimension_numbers = #mhlo.conv<raw
            input_batch_dimension = 0,
            input_feature_dimension = 3,
            input_spatial_dimensions = [1, 2],
            kernel_input_feature_dimension = 2,
            kernel_output_feature_dimension = 3,
            kernel_spatial_dimensions = [0, 1],
            output_batch_dimension = 0,
            output_feature_dimension = 3,
            output_spatial_dimensions = [1, 2]
        >,
        feature_group_count = 1 : i64,
        padding = dense<0> : tensor<2x2xi64>,
        rhs_dilation = dense<1> : tensor<2xi64>,
        window_strides = dense<1> : tensor<2xi64>
    } : (tensor<1x112x112x32xf32>, tensor<1x1x32x64xf32>) -> tensor<1x112x112x64xf32>
    return %0 : tensor<1x112x112x64xf32>
}

func.func @conv_7_7_1x1_1024x1024() -> tensor<1x7x7x1024xf32> {
    %input = util.unfoldable_constant dense<1.0> : tensor<1x7x7x1024xf32>
    %filter = util.unfoldable_constant dense<1.0> : tensor<1x1x1024x1024xf32>
    %0 = "mhlo.convolution"(%input, %filter) {
        batch_group_count = 1 : i64,
        dimension_numbers = #mhlo.conv<raw
            input_batch_dimension = 0,
            input_feature_dimension = 3,
            input_spatial_dimensions = [1, 2],
            kernel_input_feature_dimension = 2,
            kernel_output_feature_dimension = 3,
            kernel_spatial_dimensions = [0, 1],
            output_batch_dimension = 0,
            output_feature_dimension = 3,
            output_spatial_dimensions = [1, 2]
        >,
        feature_group_count = 1 : i64,
        padding = dense<0> : tensor<2x2xi64>,
        rhs_dilation = dense<1> : tensor<2xi64>,
        window_strides = dense<1> : tensor<2xi64>
    } : (tensor<1x7x7x1024xf32>, tensor<1x1x1024x1024xf32>) -> tensor<1x7x7x1024xf32>
    return %0 : tensor<1x7x7x1024xf32>
}

//===----------------------------------------------------------------------===//
// Depthwise convolution ops.
// Naming convention: '_'.join(
//   [depthwise_conv,
//    {input-spatial-dim},
//    {output-spatial-dim},
//    {filter-size},
//    {output-size x input-size},
//    {feature-group}])
//===----------------------------------------------------------------------===//

func.func @depthwise_conv_15x1_1x1_15x1_1x1024_1024() -> tensor<1x1x1x1024xf32> {
  %input = util.unfoldable_constant dense<1.0> : tensor<1x15x1x1024xf32>
  %filter = util.unfoldable_constant dense<1.0> : tensor<15x1x1x1024xf32>
  %res = "mhlo.convolution"(%input, %filter) {
    batch_group_count = 1 : i64,
    dimension_numbers = #mhlo.conv<raw
      input_batch_dimension = 0,
      input_feature_dimension = 3,
      input_spatial_dimensions = [1, 2],
      kernel_input_feature_dimension = 2,
      kernel_output_feature_dimension = 3,
      kernel_spatial_dimensions = [0, 1],
      output_batch_dimension = 0,
      output_feature_dimension = 3,
      output_spatial_dimensions = [1, 2]
      >,
    feature_group_count = 1024 : i64,
    padding = dense<0> : tensor<2x2xi64>,
    rhs_dilation = dense<1> : tensor<2xi64>,
    window_strides = dense<1> : tensor<2xi64>
  } : (tensor<1x15x1x1024xf32>, tensor<15x1x1x1024xf32>) -> tensor<1x1x1x1024xf32>
  return %res : tensor<1x1x1x1024xf32>
}

func.func @depthwise_conv_15x1_1x1_15x1_1x512_512() -> tensor<1x1x1x512xf32> {
  %input = util.unfoldable_constant dense<1.0> : tensor<1x15x1x512xf32>
  %filter = util.unfoldable_constant dense<1.0> : tensor<15x1x1x512xf32>
  %res = "mhlo.convolution"(%input, %filter) {
    batch_group_count = 1 : i64,
    dimension_numbers = #mhlo.conv<raw
      input_batch_dimension = 0,
      input_feature_dimension = 3,
      input_spatial_dimensions = [1, 2],
      kernel_input_feature_dimension = 2,
      kernel_output_feature_dimension = 3,
      kernel_spatial_dimensions = [0, 1],
      output_batch_dimension = 0,
      output_feature_dimension = 3,
      output_spatial_dimensions = [1, 2]
    >,
    feature_group_count = 512 : i64,
    padding = dense<0> : tensor<2x2xi64>,
    rhs_dilation = dense<1> : tensor<2xi64>,
    window_strides = dense<1> : tensor<2xi64>
  } : (tensor<1x15x1x512xf32>, tensor<15x1x1x512xf32>) -> tensor<1x1x1x512xf32>
  return %res : tensor<1x1x1x512xf32>
}

func.func @depthwise_conv_16x1_2x1_16x1_1x512_512() -> tensor<1x2x1x512xf32> {
  %input = util.unfoldable_constant dense<1.0> : tensor<1x16x1x512xf32>
  %filter = util.unfoldable_constant dense<1.0> : tensor<15x1x1x512xf32>
  %res = "mhlo.convolution"(%input, %filter) {
    batch_group_count = 1 : i64,
    dimension_numbers = #mhlo.conv<raw
      input_batch_dimension = 0,
      input_feature_dimension = 3,
      input_spatial_dimensions = [1, 2],
      kernel_input_feature_dimension = 2,
      kernel_output_feature_dimension = 3,
      kernel_spatial_dimensions = [0, 1],
      output_batch_dimension = 0,
      output_feature_dimension = 3,
      output_spatial_dimensions = [1, 2]
    >,
    feature_group_count = 512 : i64,
    padding = dense<0> : tensor<2x2xi64>,
    rhs_dilation = dense<1> : tensor<2xi64>,
    window_strides = dense<1> : tensor<2xi64>
  } : (tensor<1x16x1x512xf32>, tensor<15x1x1x512xf32>) -> tensor<1x2x1x512xf32>
  return %res : tensor<1x2x1x512xf32>
}
