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 Drewniak void 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 Drewniak static 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 Drewniak LogicalResult amdgpu::RawBufferLoadOp::verify() {
48f1f05a91SKrzysztof Drewniak   return verifyRawBufferOp(*this);
49f1f05a91SKrzysztof Drewniak }
50f1f05a91SKrzysztof Drewniak 
verify()51f1f05a91SKrzysztof Drewniak LogicalResult amdgpu::RawBufferStoreOp::verify() {
52f1f05a91SKrzysztof Drewniak   return verifyRawBufferOp(*this);
53f1f05a91SKrzysztof Drewniak }
54f1f05a91SKrzysztof Drewniak 
verify()55f1f05a91SKrzysztof Drewniak LogicalResult 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