//===-- CGOps.cpp -- FIR codegen operations -------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/ // //===----------------------------------------------------------------------===// #include "CGOps.h" #include "flang/Optimizer/Dialect/FIRDialect.h" #include "flang/Optimizer/Dialect/FIROps.h" #include "flang/Optimizer/Dialect/FIRType.h" /// FIR codegen dialect constructor. fir::FIRCodeGenDialect::FIRCodeGenDialect(mlir::MLIRContext *ctx) : mlir::Dialect("fircg", ctx, mlir::TypeID::get()) { addOperations< #define GET_OP_LIST #include "flang/Optimizer/CodeGen/CGOps.cpp.inc" >(); } // anchor the class vtable to this compilation unit fir::FIRCodeGenDialect::~FIRCodeGenDialect() { // do nothing } #define GET_OP_CLASSES #include "flang/Optimizer/CodeGen/CGOps.cpp.inc" unsigned fir::cg::XEmboxOp::getOutRank() { if (getSlice().empty()) return getRank(); auto outRank = fir::SliceOp::getOutputRank(getSlice()); assert(outRank >= 1); return outRank; } unsigned fir::cg::XReboxOp::getOutRank() { if (auto seqTy = fir::dyn_cast_ptrOrBoxEleTy(getType()).dyn_cast()) return seqTy.getDimension(); return 0; } unsigned fir::cg::XReboxOp::getRank() { if (auto seqTy = fir::dyn_cast_ptrOrBoxEleTy(getBox().getType()) .dyn_cast()) return seqTy.getDimension(); return 0; } unsigned fir::cg::XArrayCoorOp::getRank() { auto memrefTy = getMemref().getType(); if (memrefTy.isa()) if (auto seqty = fir::dyn_cast_ptrOrBoxEleTy(memrefTy).dyn_cast()) return seqty.getDimension(); return getShape().size(); }