blob: aec0b0b12fa3d5a433d84c9bb8116d56280977fb [file] [log] [blame]
#map0 = affine_map<(d1) -> (d1)>
#map1 = affine_map<(d1) -> (0)>
func.func @demote() {
%input = util.unfoldable_constant dense<3.0> : tensor<8388608xf32>
%cst_0 = arith.constant 0.000000e+00 : f64
%init = tensor.empty() : tensor<1xf64>
%zeros = linalg.fill ins(%cst_0 : f64) outs(%init : tensor<1xf64>) -> tensor<1xf64>
%accum = linalg.generic {indexing_maps = [#map0, #map1], iterator_types = ["reduction"]} ins(%input : tensor<8388608xf32>) outs(%init : tensor<1xf64>) {
^bb0(%arg1: f32, %arg2: f64):
%ext = arith.extf %arg1 : f32 to f64
%add = arith.addf %ext, %arg2 : f64
linalg.yield %add : f64
} -> tensor<1xf64>
%init2 = tensor.empty() : tensor<1xf32>
%result = linalg.generic {indexing_maps = [#map0, #map0], iterator_types = ["parallel"]} ins(%accum : tensor<1xf64>) outs(%init2 : tensor<1xf32>) {
^bb0(%arg1: f64, %arg2: f32):
%res = arith.truncf %arg1 : f64 to f32
linalg.yield %res : f32
} -> tensor<1xf32>
check.expect_almost_eq_const(%result, dense<[25165824.0]> : tensor<1xf32>) : tensor<1xf32>
return
}