[Mlir-commits] [mlir] fd74694 - [mlir][sparse] attach bufferizableOpInterface to InsertOp

Peiming Liu llvmlistbot at llvm.org
Thu Oct 20 13:54:42 PDT 2022


Author: Peiming Liu
Date: 2022-10-20T20:54:37Z
New Revision: fd7469404bcd5c4142070ef17d94007a57268ff3

URL: https://github.com/llvm/llvm-project/commit/fd7469404bcd5c4142070ef17d94007a57268ff3
DIFF: https://github.com/llvm/llvm-project/commit/fd7469404bcd5c4142070ef17d94007a57268ff3.diff

LOG: [mlir][sparse] attach bufferizableOpInterface to InsertOp

To fix D136286

Reviewed By: aartbik

Differential Revision: https://reviews.llvm.org/D136372

Added: 
    

Modified: 
    mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp
index aa6c6e9870cc..7c16cf6933a1 100644
--- a/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp
+++ b/mlir/lib/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.cpp
@@ -94,6 +94,45 @@ struct NewOpInterface
   }
 };
 
+struct InsertOpInterface
+    : public BufferizableOpInterface::ExternalModel<InsertOpInterface,
+                                                    sparse_tensor::InsertOp> {
+  bool bufferizesToAllocation(Operation *op, OpResult opResult) const {
+    // Does bufferization handle realloc?
+    return false;
+  }
+
+  bool bufferizesToMemoryRead(Operation *op, OpOperand &opOperand,
+                              const AnalysisState &state) const {
+    return false;
+  }
+
+  bool bufferizesToMemoryWrite(Operation *op, OpOperand &opOperand,
+                               const AnalysisState &state) const {
+    // InsertOp writes to memory.
+    return true;
+  }
+
+  SmallVector<OpResult> getAliasingOpResult(Operation *op, OpOperand &opOperand,
+                                            const AnalysisState &state) const {
+    // InsertOp returns an alias of its operand.
+    assert(op->getNumResults() == 1);
+    return op->getResults();
+  }
+
+  BufferRelation bufferRelation(Operation *oo, OpResult opResult,
+                                const AnalysisState &state) const {
+    // InsertOp returns the same object (realloc should not invalidate
+    // aliases).
+    return BufferRelation::Equivalent;
+  }
+
+  bool isWritable(Operation *op, Value value,
+                  const AnalysisState &state) const {
+    return true;
+  }
+};
+
 } // namespace
 } // namespace sparse_tensor
 } // namespace mlir
@@ -105,5 +144,6 @@ void mlir::sparse_tensor::registerBufferizableOpInterfaceExternalModels(
         sparse_tensor::ConvertOp::attachInterface<ConvertOpInterface>(*ctx);
         sparse_tensor::LoadOp::attachInterface<LoadOpInterface>(*ctx);
         sparse_tensor::NewOp::attachInterface<NewOpInterface>(*ctx);
+        sparse_tensor::InsertOp::attachInterface<InsertOpInterface>(*ctx);
       });
 }


        


More information about the Mlir-commits mailing list