blob: efef9a7a7e95e91bf2a77c2fe9c36b5857931eab [file] [log] [blame]
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 = tensor.empty() : 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 = tensor.empty() : 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
}