diff --git a/mlir/lib/IR/AffineMap.cpp b/mlir/lib/IR/AffineMap.cpp --- a/mlir/lib/IR/AffineMap.cpp +++ b/mlir/lib/IR/AffineMap.cpp @@ -257,7 +257,8 @@ results.push_back( expr.replaceDimsAndSymbols(dimReplacements, symReplacements)); - return get(numResultDims, numResultSyms, results); + return results.empty() ? get(numResultDims, 0, getContext()) + : get(numResultDims, numResultSyms, results); } AffineMap AffineMap::compose(AffineMap map) { diff --git a/mlir/test/Dialect/Linalg/fusion-tensor.mlir b/mlir/test/Dialect/Linalg/fusion-tensor.mlir --- a/mlir/test/Dialect/Linalg/fusion-tensor.mlir +++ b/mlir/test/Dialect/Linalg/fusion-tensor.mlir @@ -105,3 +105,28 @@ }: tensor, tensor -> tensor return %2 : tensor } + +// ----- + +// CHECK: #[[MAP0:.*]] = affine_map<() -> ()> +#map0 = affine_map<() -> ()> + +// CHECK-LABEL: @add_mul_scalar_fusion +func @add_mul_scalar_fusion(%arg0: tensor, %arg1: tensor, %arg2: tensor) -> tensor +{ + %0 = linalg.generic {args_in = 2 : i64, args_out = 1 : i64, indexing_maps = [#map0, #map0, #map0], iterator_types = []} %arg0, %arg1 { + ^bb0(%arg3: f32, %arg4: f32): // no predecessors + %1 = addf %arg3, %arg4 : f32 + linalg.yield %1 : f32 + }: tensor, tensor -> tensor + // CHECK: linalg.generic {args_in = 2 : i64, args_out = 1 : i64 + // CHECK: addf + // CHECK: mulf + %1 = linalg.generic {args_in = 2 : i64, args_out = 1 : i64, indexing_maps = [#map0, #map0, #map0], iterator_types = []} %0, %arg2 { + ^bb0(%arg3: f32, %arg4: f32): // no predecessors + %1 = mulf %arg3, %arg4 : f32 + linalg.yield %1 : f32 + }: tensor, tensor -> tensor + + return %1 : tensor +}