From 5f919cd439d2be94f5e6a5594b163b9015d87d93 Mon Sep 17 00:00:00 2001 From: bixia1 Date: Thu, 13 Oct 2022 08:34:36 -0700 Subject: [PATCH] [mlir][sparse] Move routines for generating memref.alloca to CodegenUtils. This is to allow the use of the routines in the rewrite pass. Reviewed By: aartbik Differential Revision: https://reviews.llvm.org/D135890 --- .../SparseTensor/Transforms/CodegenUtils.cpp | 16 ++++++++++++++++ .../Dialect/SparseTensor/Transforms/CodegenUtils.h | 14 ++++++++++++++ .../Transforms/SparseTensorConversion.cpp | 21 --------------------- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.cpp index d2a07d4..54e206e 100644 --- a/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.cpp +++ b/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.cpp @@ -583,3 +583,19 @@ func::CallOp mlir::sparse_tensor::createFuncCall( Type mlir::sparse_tensor::getOpaquePointerType(OpBuilder &builder) { return LLVM::LLVMPointerType::get(builder.getI8Type()); } + +Value mlir::sparse_tensor::genAlloca(OpBuilder &builder, Location loc, + unsigned sz, Type tp) { + return genAlloca(builder, loc, constantIndex(builder, loc, sz), tp); +} + +Value mlir::sparse_tensor::genAlloca(OpBuilder &builder, Location loc, Value sz, + Type tp) { + auto memTp = MemRefType::get({ShapedType::kDynamicSize}, tp); + return builder.create(loc, memTp, ValueRange{sz}); +} + +Value mlir::sparse_tensor::genAllocaScalar(OpBuilder &builder, Location loc, + Type tp) { + return builder.create(loc, MemRefType::get({}, tp)); +} diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.h b/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.h index 9908060..b4c2fff 100644 --- a/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.h +++ b/mlir/lib/Dialect/SparseTensor/Transforms/CodegenUtils.h @@ -248,6 +248,20 @@ func::CallOp createFuncCall(OpBuilder &builder, Location loc, StringRef name, /// execution engine. Type getOpaquePointerType(OpBuilder &builder); +/// Generates an uninitialized temporary buffer of the given size and +/// type, but returns it as type `memref` (rather than as type +/// `memref<$sz x $tp>`). +Value genAlloca(OpBuilder &builder, Location loc, Value sz, Type tp); + +/// Generates an uninitialized temporary buffer of the given size and +/// type, but returns it as type `memref` (rather than as type +/// `memref<$sz x $tp>`). +Value genAlloca(OpBuilder &builder, Location loc, unsigned sz, Type tp); + +/// Generates an uninitialized temporary buffer with room for one value +/// of the given type, and returns the `memref<$tp>`. +Value genAllocaScalar(OpBuilder &builder, Location loc, Type tp); + //===----------------------------------------------------------------------===// // Inlined constant generators. // diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorConversion.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorConversion.cpp index 00d4525..c7a6048 100644 --- a/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorConversion.cpp +++ b/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorConversion.cpp @@ -155,14 +155,6 @@ static void concatSizesFromInputs(OpBuilder &builder, } } -/// Generates an uninitialized temporary buffer of the given size and -/// type, but returns it as type `memref` (rather than as type -/// `memref<$sz x $tp>`). -static Value genAlloca(OpBuilder &builder, Location loc, Value sz, Type tp) { - auto memTp = MemRefType::get({ShapedType::kDynamicSize}, tp); - return builder.create(loc, memTp, ValueRange{sz}); -} - /// Generates an uninitialized buffer of the given size and type, /// but returns it as type `memref` (rather than as type /// `memref<$sz x $tp>`). Unlike temporary buffers on the stack, @@ -172,19 +164,6 @@ static Value genAlloc(RewriterBase &rewriter, Location loc, Value sz, Type tp) { return rewriter.create(loc, memTp, ValueRange{sz}); } -/// Generates an uninitialized temporary buffer of the given size and -/// type, but returns it as type `memref` (rather than as type -/// `memref<$sz x $tp>`). -static Value genAlloca(OpBuilder &builder, Location loc, unsigned sz, Type tp) { - return genAlloca(builder, loc, constantIndex(builder, loc, sz), tp); -} - -/// Generates an uninitialized temporary buffer with room for one value -/// of the given type, and returns the `memref<$tp>`. -static Value genAllocaScalar(OpBuilder &builder, Location loc, Type tp) { - return builder.create(loc, MemRefType::get({}, tp)); -} - /// Generates a temporary buffer of the given type and given contents. static Value genBuffer(OpBuilder &builder, Location loc, ValueRange values) { unsigned sz = values.size(); -- 2.7.4