brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · effd712 Raw
108 lines · cpp
1//===- TemporaryStack.cpp ---- temporary stack 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/TemporaryStack.h"10#include "flang/Optimizer/Builder/FIRBuilder.h"11#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"12#include "flang/Runtime/temporary-stack.h"13 14using namespace Fortran::runtime;15 16mlir::Value fir::runtime::genCreateValueStack(mlir::Location loc,17                                              fir::FirOpBuilder &builder) {18  mlir::func::FuncOp func =19      fir::runtime::getRuntimeFunc<mkRTKey(CreateValueStack)>(loc, builder);20  mlir::FunctionType funcType = func.getFunctionType();21  mlir::Value sourceFile = fir::factory::locationToFilename(builder, loc);22  mlir::Value sourceLine =23      fir::factory::locationToLineNo(builder, loc, funcType.getInput(1));24  auto args = fir::runtime::createArguments(builder, loc, funcType, sourceFile,25                                            sourceLine);26  return fir::CallOp::create(builder, loc, func, args).getResult(0);27}28 29void fir::runtime::genPushValue(mlir::Location loc, fir::FirOpBuilder &builder,30                                mlir::Value opaquePtr, mlir::Value boxValue) {31  mlir::func::FuncOp func =32      fir::runtime::getRuntimeFunc<mkRTKey(PushValue)>(loc, builder);33  mlir::FunctionType funcType = func.getFunctionType();34  auto args = fir::runtime::createArguments(builder, loc, funcType, opaquePtr,35                                            boxValue);36  fir::CallOp::create(builder, loc, func, args);37}38 39void fir::runtime::genValueAt(mlir::Location loc, fir::FirOpBuilder &builder,40                              mlir::Value opaquePtr, mlir::Value i,41                              mlir::Value retValueBox) {42  mlir::func::FuncOp func =43      fir::runtime::getRuntimeFunc<mkRTKey(ValueAt)>(loc, builder);44  mlir::FunctionType funcType = func.getFunctionType();45  auto args = fir::runtime::createArguments(builder, loc, funcType, opaquePtr,46                                            i, retValueBox);47  fir::CallOp::create(builder, loc, func, args);48}49 50void fir::runtime::genDestroyValueStack(mlir::Location loc,51                                        fir::FirOpBuilder &builder,52                                        mlir::Value opaquePtr) {53  mlir::func::FuncOp func =54      fir::runtime::getRuntimeFunc<mkRTKey(DestroyValueStack)>(loc, builder);55  mlir::FunctionType funcType = func.getFunctionType();56  auto args = fir::runtime::createArguments(builder, loc, funcType, opaquePtr);57  fir::CallOp::create(builder, loc, func, args);58}59 60mlir::Value fir::runtime::genCreateDescriptorStack(mlir::Location loc,61                                                   fir::FirOpBuilder &builder) {62  mlir::func::FuncOp func =63      fir::runtime::getRuntimeFunc<mkRTKey(CreateDescriptorStack)>(loc,64                                                                   builder);65  mlir::FunctionType funcType = func.getFunctionType();66  mlir::Value sourceFile = fir::factory::locationToFilename(builder, loc);67  mlir::Value sourceLine =68      fir::factory::locationToLineNo(builder, loc, funcType.getInput(1));69  auto args = fir::runtime::createArguments(builder, loc, funcType, sourceFile,70                                            sourceLine);71  return fir::CallOp::create(builder, loc, func, args).getResult(0);72}73 74void fir::runtime::genPushDescriptor(mlir::Location loc,75                                     fir::FirOpBuilder &builder,76                                     mlir::Value opaquePtr,77                                     mlir::Value boxDescriptor) {78  mlir::func::FuncOp func =79      fir::runtime::getRuntimeFunc<mkRTKey(PushDescriptor)>(loc, builder);80  mlir::FunctionType funcType = func.getFunctionType();81  auto args = fir::runtime::createArguments(builder, loc, funcType, opaquePtr,82                                            boxDescriptor);83  fir::CallOp::create(builder, loc, func, args);84}85 86void fir::runtime::genDescriptorAt(mlir::Location loc,87                                   fir::FirOpBuilder &builder,88                                   mlir::Value opaquePtr, mlir::Value i,89                                   mlir::Value retDescriptorBox) {90  mlir::func::FuncOp func =91      fir::runtime::getRuntimeFunc<mkRTKey(DescriptorAt)>(loc, builder);92  mlir::FunctionType funcType = func.getFunctionType();93  auto args = fir::runtime::createArguments(builder, loc, funcType, opaquePtr,94                                            i, retDescriptorBox);95  fir::CallOp::create(builder, loc, func, args);96}97 98void fir::runtime::genDestroyDescriptorStack(mlir::Location loc,99                                             fir::FirOpBuilder &builder,100                                             mlir::Value opaquePtr) {101  mlir::func::FuncOp func =102      fir::runtime::getRuntimeFunc<mkRTKey(DestroyDescriptorStack)>(loc,103                                                                    builder);104  mlir::FunctionType funcType = func.getFunctionType();105  auto args = fir::runtime::createArguments(builder, loc, funcType, opaquePtr);106  fir::CallOp::create(builder, loc, func, args);107}108