func.func @multi_result() {
  %input1 = util.unfoldable_constant dense<[
      [1, 2, 3, 4],
      [5, 6, 7, 8],
      [9, 10, 11, 12]]> : tensor<3x4xi32>
  %input2 = util.unfoldable_constant dense<[
      [13, 14, 15, 16],
      [17, 18, 19, 20],
      [21, 22, 23, 24]]> : tensor<3x4xi32>
  %init = linalg.init_tensor [3, 4] : tensor<3x4xi32>
  %0:2 = linalg.generic {
      indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>,
                       affine_map<(d0, d1) -> (d0, d1)>,
                       affine_map<(d0, d1) -> (d0, d1)>,
                       affine_map<(d0, d1) -> (d0, d1)>],
      iterator_types = ["parallel", "parallel"]}
      ins(%input1, %input2 : tensor<3x4xi32>, tensor<3x4xi32>)
      outs(%init, %init : tensor<3x4xi32>, tensor<3x4xi32>) {
      ^bb0(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32) :
          %1 = arith.addi %arg0, %arg1 : i32
          %2 = arith.muli %arg0, %arg1 : i32
          linalg.yield %1, %2 : i32, i32
      } -> (tensor<3x4xi32>, tensor<3x4xi32>)
  check.expect_eq_const(%0#0, dense<[
      [14, 16, 18, 20],
      [22, 24, 26, 28],
      [30, 32, 34, 36]]> : tensor<3x4xi32>) : tensor<3x4xi32>
  check.expect_eq_const(%0#1, dense<[
      [13, 28, 45, 64],
      [85, 108, 133, 160],
      [189, 220, 253, 288]]> : tensor<3x4xi32>) : tensor<3x4xi32>
  return
}

func.func @operand_fusion() {
  %input = util.unfoldable_constant dense<1.0> : tensor<1x225x225x3xf32>
  %filter = util.unfoldable_constant dense<1.0> : tensor<3x3x3x16xf32>
  %bias = util.unfoldable_constant dense<1.0> : tensor<16xf32>
  %init = linalg.init_tensor [1, 112, 112, 16] : tensor<1x112x112x16xf32>
  %cst = arith.constant 0.0 : f32
  %fill = linalg.fill ins(%cst : f32) outs(%init : tensor<1x112x112x16xf32>) -> tensor<1x112x112x16xf32>
  %conv = linalg.conv_2d_nhwc_hwcf
      {dilations = dense<1> : tensor<2xi64>, strides = dense<2> : tensor<2xi64>}
      ins(%input, %filter : tensor<1x225x225x3xf32>, tensor<3x3x3x16xf32>)
      outs(%fill : tensor<1x112x112x16xf32>) -> tensor<1x112x112x16xf32>
  %result = linalg.generic {
      indexing_maps = [affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)>,
                       affine_map<(d0, d1, d2, d3) -> (d3)>,
                       affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)>],
      iterator_types = ["parallel", "parallel", "parallel", "parallel"]}
      ins(%conv, %bias : tensor<1x112x112x16xf32>, tensor<16xf32>)
      outs(%init : tensor<1x112x112x16xf32>) {
      ^bb0(%arg0 : f32, %arg1 : f32, %arg2 : f32):
        %0 = arith.addf %arg0, %arg1 : f32
        linalg.yield %0 : f32
      } -> tensor<1x112x112x16xf32>
  check.expect_eq_const(%result, dense<28.0> : tensor<1x112x112x16xf32>) : tensor<1x112x112x16xf32>
  return
}
