[Mlir-commits] [mlir] [mlir][gpu] Introduce `gpu.dynamic_shared_memory` Op (PR #71546)
Fabian Mora
llvmlistbot at llvm.org
Fri Nov 10 05:33:04 PST 2023
================
@@ -554,6 +557,104 @@ static IntegerAttr wrapNumericMemorySpace(MLIRContext *ctx, unsigned space) {
return IntegerAttr::get(IntegerType::get(ctx, 64), space);
}
+/// Generates a symbol with 0-sized array type for dynamic shared memory usage,
+/// or uses existing symbol.
+LLVM::GlobalOp getDynamicSharedMemorySymbol(
+ ConversionPatternRewriter &rewriter, gpu::DynamicSharedMemoryOp op,
+ const LLVMTypeConverter *typeConverter, MemRefType memrefType,
+ unsigned alignmentBit, unsigned addressSpace) {
+ LLVM::LLVMFuncOp funcOp = op->getParentOfType<LLVM::LLVMFuncOp>();
+ assert(funcOp && "cannot find llvm.func op");
+
+ gpu::GPUModuleOp moduleOp = funcOp->getParentOfType<gpu::GPUModuleOp>();
+ assert(moduleOp && "cannot find gpu.module op");
+
+ // Step 1. Return existing global op if it exists
+ uint64_t alignmentByte = alignmentBit / memrefType.getElementTypeBitWidth();
+ for (auto &innerOp : moduleOp->getRegions().front().front().getOperations()) {
+ if (auto globalOp = dyn_cast<LLVM::GlobalOp>(innerOp)) {
----------------
fabianmcg wrote:
It's called [`getOps`](https://github.com/llvm/llvm-project/blob/main/mlir/include/mlir/IR/Block.h#L186-L190).
https://github.com/llvm/llvm-project/pull/71546
More information about the Mlir-commits
mailing list