brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · acd1d01 Raw
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 &registry) {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