1*97d8972cSEric Schweitz //===-- CGOps.cpp -- FIR codegen operations -------------------------------===// 2*97d8972cSEric Schweitz // 3*97d8972cSEric Schweitz // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*97d8972cSEric Schweitz // See https://llvm.org/LICENSE.txt for license information. 5*97d8972cSEric Schweitz // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*97d8972cSEric Schweitz // 7*97d8972cSEric Schweitz //===----------------------------------------------------------------------===// 8*97d8972cSEric Schweitz // 9*97d8972cSEric Schweitz // Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/ 10*97d8972cSEric Schweitz // 11*97d8972cSEric Schweitz //===----------------------------------------------------------------------===// 12*97d8972cSEric Schweitz 13*97d8972cSEric Schweitz #include "CGOps.h" 14*97d8972cSEric Schweitz #include "flang/Optimizer/Dialect/FIRDialect.h" 15*97d8972cSEric Schweitz #include "flang/Optimizer/Dialect/FIROps.h" 16*97d8972cSEric Schweitz #include "flang/Optimizer/Dialect/FIRType.h" 17*97d8972cSEric Schweitz 18*97d8972cSEric Schweitz /// FIR codegen dialect constructor. FIRCodeGenDialect(mlir::MLIRContext * ctx)19*97d8972cSEric Schweitzfir::FIRCodeGenDialect::FIRCodeGenDialect(mlir::MLIRContext *ctx) 20*97d8972cSEric Schweitz : mlir::Dialect("fircg", ctx, mlir::TypeID::get<FIRCodeGenDialect>()) { 21*97d8972cSEric Schweitz addOperations< 22*97d8972cSEric Schweitz #define GET_OP_LIST 23*97d8972cSEric Schweitz #include "flang/Optimizer/CodeGen/CGOps.cpp.inc" 24*97d8972cSEric Schweitz >(); 25*97d8972cSEric Schweitz } 26*97d8972cSEric Schweitz 27*97d8972cSEric Schweitz // anchor the class vtable to this compilation unit ~FIRCodeGenDialect()28*97d8972cSEric Schweitzfir::FIRCodeGenDialect::~FIRCodeGenDialect() { 29*97d8972cSEric Schweitz // do nothing 30*97d8972cSEric Schweitz } 31*97d8972cSEric Schweitz 32*97d8972cSEric Schweitz #define GET_OP_CLASSES 33*97d8972cSEric Schweitz #include "flang/Optimizer/CodeGen/CGOps.cpp.inc" 34*97d8972cSEric Schweitz getOutRank()35*97d8972cSEric Schweitzunsigned fir::cg::XEmboxOp::getOutRank() { 36*97d8972cSEric Schweitz if (slice().empty()) 37*97d8972cSEric Schweitz return getRank(); 38*97d8972cSEric Schweitz auto outRank = fir::SliceOp::getOutputRank(slice()); 39*97d8972cSEric Schweitz assert(outRank >= 1); 40*97d8972cSEric Schweitz return outRank; 41*97d8972cSEric Schweitz } 42*97d8972cSEric Schweitz getOutRank()43*97d8972cSEric Schweitzunsigned fir::cg::XReboxOp::getOutRank() { 44*97d8972cSEric Schweitz if (auto seqTy = 45*97d8972cSEric Schweitz fir::dyn_cast_ptrOrBoxEleTy(getType()).dyn_cast<fir::SequenceType>()) 46*97d8972cSEric Schweitz return seqTy.getDimension(); 47*97d8972cSEric Schweitz return 0; 48*97d8972cSEric Schweitz } 49*97d8972cSEric Schweitz getRank()50*97d8972cSEric Schweitzunsigned fir::cg::XReboxOp::getRank() { 51*97d8972cSEric Schweitz if (auto seqTy = fir::dyn_cast_ptrOrBoxEleTy(box().getType()) 52*97d8972cSEric Schweitz .dyn_cast<fir::SequenceType>()) 53*97d8972cSEric Schweitz return seqTy.getDimension(); 54*97d8972cSEric Schweitz return 0; 55*97d8972cSEric Schweitz } 56*97d8972cSEric Schweitz getRank()57*97d8972cSEric Schweitzunsigned fir::cg::XArrayCoorOp::getRank() { 58*97d8972cSEric Schweitz auto memrefTy = memref().getType(); 59*97d8972cSEric Schweitz if (memrefTy.isa<fir::BoxType>()) 60*97d8972cSEric Schweitz if (auto seqty = 61*97d8972cSEric Schweitz fir::dyn_cast_ptrOrBoxEleTy(memrefTy).dyn_cast<fir::SequenceType>()) 62*97d8972cSEric Schweitz return seqty.getDimension(); 63*97d8972cSEric Schweitz return shape().size(); 64*97d8972cSEric Schweitz } 65