brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 336dbdc Raw
98 lines · cpp
1//===-- Assign.cpp -- generate assignment runtime API calls ---------------===//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#include "flang/Optimizer/Builder/Runtime/Assign.h"10#include "flang/Optimizer/Builder/FIRBuilder.h"11#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"12#include "flang/Runtime/assign.h"13 14using namespace Fortran::runtime;15 16void fir::runtime::genAssign(fir::FirOpBuilder &builder, mlir::Location loc,17                             mlir::Value destBox, mlir::Value sourceBox) {18  auto func = fir::runtime::getRuntimeFunc<mkRTKey(Assign)>(loc, builder);19  auto fTy = func.getFunctionType();20  auto sourceFile = fir::factory::locationToFilename(builder, loc);21  auto sourceLine =22      fir::factory::locationToLineNo(builder, loc, fTy.getInput(3));23  auto args = fir::runtime::createArguments(builder, loc, fTy, destBox,24                                            sourceBox, sourceFile, sourceLine);25  fir::CallOp::create(builder, loc, func, args);26}27 28void fir::runtime::genAssignPolymorphic(fir::FirOpBuilder &builder,29                                        mlir::Location loc, mlir::Value destBox,30                                        mlir::Value sourceBox) {31  auto func =32      fir::runtime::getRuntimeFunc<mkRTKey(AssignPolymorphic)>(loc, builder);33  auto fTy = func.getFunctionType();34  auto sourceFile = fir::factory::locationToFilename(builder, loc);35  auto sourceLine =36      fir::factory::locationToLineNo(builder, loc, fTy.getInput(3));37  auto args = fir::runtime::createArguments(builder, loc, fTy, destBox,38                                            sourceBox, sourceFile, sourceLine);39  fir::CallOp::create(builder, loc, func, args);40}41 42void fir::runtime::genAssignExplicitLengthCharacter(fir::FirOpBuilder &builder,43                                                    mlir::Location loc,44                                                    mlir::Value destBox,45                                                    mlir::Value sourceBox) {46  auto func =47      fir::runtime::getRuntimeFunc<mkRTKey(AssignExplicitLengthCharacter)>(48          loc, builder);49  auto fTy = func.getFunctionType();50  auto sourceFile = fir::factory::locationToFilename(builder, loc);51  auto sourceLine =52      fir::factory::locationToLineNo(builder, loc, fTy.getInput(3));53  auto args = fir::runtime::createArguments(builder, loc, fTy, destBox,54                                            sourceBox, sourceFile, sourceLine);55  fir::CallOp::create(builder, loc, func, args);56}57 58void fir::runtime::genAssignTemporary(fir::FirOpBuilder &builder,59                                      mlir::Location loc, mlir::Value destBox,60                                      mlir::Value sourceBox) {61  auto func =62      fir::runtime::getRuntimeFunc<mkRTKey(AssignTemporary)>(loc, builder);63  auto fTy = func.getFunctionType();64  auto sourceFile = fir::factory::locationToFilename(builder, loc);65  auto sourceLine =66      fir::factory::locationToLineNo(builder, loc, fTy.getInput(3));67  auto args = fir::runtime::createArguments(builder, loc, fTy, destBox,68                                            sourceBox, sourceFile, sourceLine);69  fir::CallOp::create(builder, loc, func, args);70}71 72void fir::runtime::genCopyInAssign(fir::FirOpBuilder &builder,73                                   mlir::Location loc, mlir::Value destBox,74                                   mlir::Value sourceBox) {75  auto func = fir::runtime::getRuntimeFunc<mkRTKey(CopyInAssign)>(loc, builder);76  auto fTy = func.getFunctionType();77  auto sourceFile = fir::factory::locationToFilename(builder, loc);78  auto sourceLine =79      fir::factory::locationToLineNo(builder, loc, fTy.getInput(3));80  auto args = fir::runtime::createArguments(builder, loc, fTy, destBox,81                                            sourceBox, sourceFile, sourceLine);82  fir::CallOp::create(builder, loc, func, args);83}84 85void fir::runtime::genCopyOutAssign(fir::FirOpBuilder &builder,86                                    mlir::Location loc, mlir::Value destBox,87                                    mlir::Value sourceBox) {88  auto func =89      fir::runtime::getRuntimeFunc<mkRTKey(CopyOutAssign)>(loc, builder);90  auto fTy = func.getFunctionType();91  auto sourceFile = fir::factory::locationToFilename(builder, loc);92  auto sourceLine =93      fir::factory::locationToLineNo(builder, loc, fTy.getInput(3));94  auto args = fir::runtime::createArguments(builder, loc, fTy, destBox,95                                            sourceBox, sourceFile, sourceLine);96  fir::CallOp::create(builder, loc, func, args);97}98