79 lines · cpp
1//===-- RegisterOpenACCExtensions.cpp -------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Registration for OpenACC extensions as applied to FIR dialect.10//11//===----------------------------------------------------------------------===//12 13#include "flang/Optimizer/OpenACC/Support/RegisterOpenACCExtensions.h"14 15#include "flang/Optimizer/Dialect/FIRDialect.h"16#include "flang/Optimizer/Dialect/FIROps.h"17#include "flang/Optimizer/Dialect/FIRType.h"18#include "flang/Optimizer/HLFIR/HLFIRDialect.h"19#include "flang/Optimizer/HLFIR/HLFIROps.h"20#include "flang/Optimizer/OpenACC/Support/FIROpenACCOpsInterfaces.h"21#include "flang/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.h"22 23namespace fir::acc {24void registerOpenACCExtensions(mlir::DialectRegistry ®istry) {25 registry.addExtension(+[](mlir::MLIRContext *ctx,26 fir::FIROpsDialect *dialect) {27 fir::BoxType::attachInterface<OpenACCMappableModel<fir::BaseBoxType>>(*ctx);28 fir::ClassType::attachInterface<OpenACCMappableModel<fir::BaseBoxType>>(29 *ctx);30 fir::ReferenceType::attachInterface<31 OpenACCMappableModel<fir::ReferenceType>>(*ctx);32 fir::PointerType::attachInterface<OpenACCMappableModel<fir::PointerType>>(33 *ctx);34 fir::HeapType::attachInterface<OpenACCMappableModel<fir::HeapType>>(*ctx);35 36 fir::ReferenceType::attachInterface<37 OpenACCPointerLikeModel<fir::ReferenceType>>(*ctx);38 fir::PointerType::attachInterface<39 OpenACCPointerLikeModel<fir::PointerType>>(*ctx);40 fir::HeapType::attachInterface<OpenACCPointerLikeModel<fir::HeapType>>(41 *ctx);42 43 fir::LLVMPointerType::attachInterface<44 OpenACCPointerLikeModel<fir::LLVMPointerType>>(*ctx);45 46 fir::ArrayCoorOp::attachInterface<47 PartialEntityAccessModel<fir::ArrayCoorOp>>(*ctx);48 fir::CoordinateOp::attachInterface<49 PartialEntityAccessModel<fir::CoordinateOp>>(*ctx);50 fir::DeclareOp::attachInterface<PartialEntityAccessModel<fir::DeclareOp>>(51 *ctx);52 53 fir::AddrOfOp::attachInterface<AddressOfGlobalModel>(*ctx);54 fir::GlobalOp::attachInterface<GlobalVariableModel>(*ctx);55 56 fir::AllocaOp::attachInterface<IndirectGlobalAccessModel<fir::AllocaOp>>(57 *ctx);58 fir::EmboxOp::attachInterface<IndirectGlobalAccessModel<fir::EmboxOp>>(59 *ctx);60 fir::ReboxOp::attachInterface<IndirectGlobalAccessModel<fir::ReboxOp>>(61 *ctx);62 fir::TypeDescOp::attachInterface<63 IndirectGlobalAccessModel<fir::TypeDescOp>>(*ctx);64 });65 66 // Register HLFIR operation interfaces67 registry.addExtension(68 +[](mlir::MLIRContext *ctx, hlfir::hlfirDialect *dialect) {69 hlfir::DesignateOp::attachInterface<70 PartialEntityAccessModel<hlfir::DesignateOp>>(*ctx);71 hlfir::DeclareOp::attachInterface<72 PartialEntityAccessModel<hlfir::DeclareOp>>(*ctx);73 });74 75 registerAttrsExtensions(registry);76}77 78} // namespace fir::acc79