1f1f05a91SKrzysztof Drewniak //===- AMDGPUDialect.cpp - MLIR AMDGPU dialect implementation --------===// 2f1f05a91SKrzysztof Drewniak // 3f1f05a91SKrzysztof Drewniak // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4f1f05a91SKrzysztof Drewniak // See https://llvm.org/LICENSE.txt for license information. 5f1f05a91SKrzysztof Drewniak // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6f1f05a91SKrzysztof Drewniak // 7f1f05a91SKrzysztof Drewniak //===----------------------------------------------------------------------===// 8f1f05a91SKrzysztof Drewniak // 9f1f05a91SKrzysztof Drewniak // This file implements the AMDGPU dialect and its operations. 10f1f05a91SKrzysztof Drewniak // 11f1f05a91SKrzysztof Drewniak //===----------------------------------------------------------------------===// 12f1f05a91SKrzysztof Drewniak 13f1f05a91SKrzysztof Drewniak #include "mlir/Dialect/AMDGPU/AMDGPUDialect.h" 14f1f05a91SKrzysztof Drewniak #include "mlir/IR/Builders.h" 15f1f05a91SKrzysztof Drewniak #include "mlir/IR/OpImplementation.h" 16f1f05a91SKrzysztof Drewniak #include "mlir/IR/TypeUtilities.h" 17f1f05a91SKrzysztof Drewniak 18f1f05a91SKrzysztof Drewniak using namespace mlir; 19f1f05a91SKrzysztof Drewniak 20f1f05a91SKrzysztof Drewniak #include "mlir/Dialect/AMDGPU/AMDGPUDialect.cpp.inc" 21f1f05a91SKrzysztof Drewniak initialize()22f1f05a91SKrzysztof Drewniakvoid amdgpu::AMDGPUDialect::initialize() { 23f1f05a91SKrzysztof Drewniak addOperations< 24f1f05a91SKrzysztof Drewniak #define GET_OP_LIST 25f1f05a91SKrzysztof Drewniak #include "mlir/Dialect/AMDGPU/AMDGPU.cpp.inc" 26f1f05a91SKrzysztof Drewniak >(); 27f1f05a91SKrzysztof Drewniak } 28f1f05a91SKrzysztof Drewniak 29f1f05a91SKrzysztof Drewniak //===----------------------------------------------------------------------===// 30f1f05a91SKrzysztof Drewniak // RawBuffer*Op 31f1f05a91SKrzysztof Drewniak //===----------------------------------------------------------------------===// 32f1f05a91SKrzysztof Drewniak template <typename T> verifyRawBufferOp(T & op)33f1f05a91SKrzysztof Drewniakstatic LogicalResult verifyRawBufferOp(T &op) { 34*8df54a6aSJacques Pienaar MemRefType bufferType = op.getMemref().getType().template cast<MemRefType>(); 35f1f05a91SKrzysztof Drewniak if (bufferType.getMemorySpaceAsInt() != 0) 36f1f05a91SKrzysztof Drewniak return op.emitOpError( 37f1f05a91SKrzysztof Drewniak "Buffer ops must operate on a memref in global memory"); 38f1f05a91SKrzysztof Drewniak if (!bufferType.hasRank()) 39f1f05a91SKrzysztof Drewniak return op.emitOpError( 40f1f05a91SKrzysztof Drewniak "Cannot meaningfully buffer_store to an unranked memref"); 41*8df54a6aSJacques Pienaar if (static_cast<int64_t>(op.getIndices().size()) != bufferType.getRank()) 42f1f05a91SKrzysztof Drewniak return op.emitOpError("Expected " + Twine(bufferType.getRank()) + 43f1f05a91SKrzysztof Drewniak " indices to memref"); 44f1f05a91SKrzysztof Drewniak return success(); 45f1f05a91SKrzysztof Drewniak } 46f1f05a91SKrzysztof Drewniak verify()47f1f05a91SKrzysztof DrewniakLogicalResult amdgpu::RawBufferLoadOp::verify() { 48f1f05a91SKrzysztof Drewniak return verifyRawBufferOp(*this); 49f1f05a91SKrzysztof Drewniak } 50f1f05a91SKrzysztof Drewniak verify()51f1f05a91SKrzysztof DrewniakLogicalResult amdgpu::RawBufferStoreOp::verify() { 52f1f05a91SKrzysztof Drewniak return verifyRawBufferOp(*this); 53f1f05a91SKrzysztof Drewniak } 54f1f05a91SKrzysztof Drewniak verify()55f1f05a91SKrzysztof DrewniakLogicalResult amdgpu::RawBufferAtomicFaddOp::verify() { 56f1f05a91SKrzysztof Drewniak return verifyRawBufferOp(*this); 57f1f05a91SKrzysztof Drewniak } 58f1f05a91SKrzysztof Drewniak 59f1f05a91SKrzysztof Drewniak #define GET_OP_CLASSES 60f1f05a91SKrzysztof Drewniak #include "mlir/Dialect/AMDGPU/AMDGPU.cpp.inc" 61