| #map = affine_map<() -> ()> | |
| func.func @simpleDAG() { | |
| %arg0 = arith.constant dense<1.0> : tensor<f32> | |
| %arg1 = arith.constant dense<2.0> : tensor<f32> | |
| %arg2 = arith.constant dense<3.0> : tensor<f32> | |
| %arg3 = arith.constant dense<4.0> : tensor<f32> | |
| %0 = tensor.empty() : tensor<f32> | |
| %1 = linalg.generic {indexing_maps = [#map, #map, #map], iterator_types = []} | |
| ins(%arg0, %arg1 : tensor<f32>, tensor<f32>) outs(%0 : tensor<f32>) { | |
| ^bb0(%b0: f32, %b1 : f32, %b2 : f32) : | |
| %2 = arith.addf %b0, %b1 : f32 | |
| linalg.yield %2 : f32 | |
| } -> tensor<f32> | |
| %3 = linalg.generic {indexing_maps = [#map, #map, #map], iterator_types = []} | |
| ins(%arg2, %arg3 : tensor<f32>, tensor<f32>) outs(%0 : tensor<f32>) { | |
| ^bb0(%b0: f32, %b1 : f32, %b2 : f32) : | |
| %4 = arith.mulf %b0, %b1 : f32 | |
| linalg.yield %4 : f32 | |
| } -> tensor<f32> | |
| %5 = linalg.generic {indexing_maps = [#map, #map, #map], iterator_types = []} | |
| ins(%1, %3 : tensor<f32>, tensor<f32>) outs(%0 : tensor<f32>) { | |
| ^bb0(%b0: f32, %b1 : f32, %b2 : f32) : | |
| %6 = arith.subf %b1, %b0 : f32 | |
| linalg.yield %6 : f32 | |
| } -> tensor<f32> | |
| check.expect_almost_eq_const(%1, dense<3.0> : tensor<f32>) : tensor<f32> | |
| check.expect_almost_eq_const(%5, dense<9.0> : tensor<f32>) : tensor<f32> | |
| return | |
| } | |
| func.func @simpleHorizontal() { | |
| %arg0 = arith.constant dense<1.0> : tensor<f32> | |
| %arg1 = arith.constant dense<2.0> : tensor<f32> | |
| %arg2 = arith.constant dense<3.0> : tensor<f32> | |
| %arg3 = arith.constant dense<4.0> : tensor<f32> | |
| %0 = tensor.empty() : tensor<f32> | |
| %1 = linalg.generic {indexing_maps = [#map, #map, #map], iterator_types = []} | |
| ins(%arg0, %arg1 : tensor<f32>, tensor<f32>) outs(%0 : tensor<f32>) { | |
| ^bb0(%b0: f32, %b1 : f32, %b2 : f32) : | |
| %2 = arith.addf %b0, %b1 : f32 | |
| linalg.yield %2 : f32 | |
| } -> tensor<f32> | |
| %3 = linalg.generic {indexing_maps = [#map, #map, #map], iterator_types = []} | |
| ins(%1, %arg2 : tensor<f32>, tensor<f32>) outs(%0 : tensor<f32>) { | |
| ^bb0(%b0: f32, %b1 : f32, %b2 : f32) : | |
| %4 = arith.mulf %b0, %b1 : f32 | |
| linalg.yield %4 : f32 | |
| } -> tensor<f32> | |
| %5 = linalg.generic {indexing_maps = [#map, #map], iterator_types = []} | |
| ins(%arg3 : tensor<f32>) outs(%0 : tensor<f32>) { | |
| ^bb0(%b0: f32, %b1 : f32) : | |
| %6 = arith.addf %b0, %b0 : f32 | |
| linalg.yield %6 : f32 | |
| } -> tensor<f32> | |
| check.expect_almost_eq_const(%3, dense<9.0> : tensor<f32>) : tensor<f32> | |
| check.expect_almost_eq_const(%5, dense<8.0> : tensor<f32>) : tensor<f32> | |
| return | |
| } |