//===-- RegisterOpenACCExtensions.cpp -------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Registration for OpenACC extensions as applied to FIR dialect. // //===----------------------------------------------------------------------===// #include "flang/Optimizer/OpenACC/Support/RegisterOpenACCExtensions.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" #include "flang/Optimizer/HLFIR/HLFIRDialect.h" #include "flang/Optimizer/HLFIR/HLFIROps.h" #include "flang/Optimizer/OpenACC/Support/FIROpenACCOpsInterfaces.h" #include "flang/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.h" namespace fir::acc { void registerOpenACCExtensions(mlir::DialectRegistry ®istry) { registry.addExtension(+[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) { fir::BoxType::attachInterface>(*ctx); fir::ClassType::attachInterface>( *ctx); fir::ReferenceType::attachInterface< OpenACCMappableModel>(*ctx); fir::PointerType::attachInterface>( *ctx); fir::HeapType::attachInterface>(*ctx); fir::ReferenceType::attachInterface< OpenACCPointerLikeModel>(*ctx); fir::PointerType::attachInterface< OpenACCPointerLikeModel>(*ctx); fir::HeapType::attachInterface>( *ctx); fir::LLVMPointerType::attachInterface< OpenACCPointerLikeModel>(*ctx); fir::ArrayCoorOp::attachInterface< PartialEntityAccessModel>(*ctx); fir::CoordinateOp::attachInterface< PartialEntityAccessModel>(*ctx); fir::DeclareOp::attachInterface>( *ctx); fir::AddrOfOp::attachInterface(*ctx); fir::GlobalOp::attachInterface(*ctx); fir::AllocaOp::attachInterface>( *ctx); fir::EmboxOp::attachInterface>( *ctx); fir::ReboxOp::attachInterface>( *ctx); fir::TypeDescOp::attachInterface< IndirectGlobalAccessModel>(*ctx); }); // Register HLFIR operation interfaces registry.addExtension( +[](mlir::MLIRContext *ctx, hlfir::hlfirDialect *dialect) { hlfir::DesignateOp::attachInterface< PartialEntityAccessModel>(*ctx); hlfir::DeclareOp::attachInterface< PartialEntityAccessModel>(*ctx); }); registerAttrsExtensions(registry); } } // namespace fir::acc