|  | //===----------------------------------------------------------------------===// | 
|  | // 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> | 
|  | } |