From: Lei Zhang Date: Tue, 17 Aug 2021 19:44:31 +0000 (-0400) Subject: [mlir][linalg] Don't drop existing attributes when creating ops X-Git-Tag: upstream/15.0.7~33706 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4c15ad23212a1d588083e2bc65a2bd30dc5ebb6c;p=platform%2Fupstream%2Fllvm.git [mlir][linalg] Don't drop existing attributes when creating ops Reviewed By: mravishankar Differential Revision: https://reviews.llvm.org/D108219 --- diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp index 8b54b6d..a58d91e 100644 --- a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp +++ b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp @@ -729,6 +729,15 @@ struct DeduplicateGenericOpInputs : public OpRewritePattern { outputOperands, rewriter.getAffineMapArrayAttr(newIndexingMaps), genericOp.iterator_types(), genericOp.docAttr(), genericOp.library_callAttr()); + + // Copy over unknown attributes. They might be load bearing for some flow. + ArrayRef odsAttrs = genericOp.getAttributeNames(); + for (NamedAttribute kv : genericOp->getAttrs()) { + if (!llvm::is_contained(odsAttrs, kv.first.c_str())) { + newOp->setAttr(kv.first, kv.second); + } + } + rewriter.inlineRegionBefore(genericOp.region(), newOp.region(), newOp.region().begin()); diff --git a/mlir/test/Dialect/Linalg/canonicalize-duplicate-inputs.mlir b/mlir/test/Dialect/Linalg/canonicalize-duplicate-inputs.mlir index 73a1031..4e1e8c7 100644 --- a/mlir/test/Dialect/Linalg/canonicalize-duplicate-inputs.mlir +++ b/mlir/test/Dialect/Linalg/canonicalize-duplicate-inputs.mlir @@ -8,11 +8,12 @@ // CHECK-LABEL: @basic func @basic(%arg0: tensor) -> tensor { // CHECK: linalg.generic{{.*}}[#[[$MAP]], #[[$MAP]]] + // CHECK: attrs = {someattr} // CHECK: ^bb0(%[[BBARG:.*]]: f32, %{{.*}}: f32): // CHECK: addf %[[BBARG]], %[[BBARG]] %0 = linalg.generic {indexing_maps = [#map, #map, #map], iterator_types = ["parallel"]} ins(%arg0, %arg0 : tensor, tensor) - outs(%arg0 : tensor) { + outs(%arg0 : tensor) attrs = {someattr} { ^bb0(%arg1: f32, %arg2: f32, %arg3: f32): %1 = addf %arg1, %arg2 : f32 linalg.yield %1 : f32