xref: /llvm-project/flang/lib/Optimizer/Builder/Runtime/Exceptions.cpp (revision ff862d6de92f478253a332ec48cfc2c2add76bb3)
13aba9264Svdonaldson //===-- Exceptions.cpp ----------------------------------------------------===//
23aba9264Svdonaldson //
33aba9264Svdonaldson // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43aba9264Svdonaldson // See https://llvm.org/LICENSE.txt for license information.
53aba9264Svdonaldson // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63aba9264Svdonaldson //
73aba9264Svdonaldson //===----------------------------------------------------------------------===//
83aba9264Svdonaldson 
93aba9264Svdonaldson #include "flang/Optimizer/Builder/Runtime/Exceptions.h"
103aba9264Svdonaldson #include "flang/Optimizer/Builder/FIRBuilder.h"
113aba9264Svdonaldson #include "flang/Optimizer/Builder/Runtime/RTBuilder.h"
123aba9264Svdonaldson #include "flang/Runtime/exceptions.h"
133aba9264Svdonaldson 
143aba9264Svdonaldson using namespace Fortran::runtime;
153aba9264Svdonaldson 
164cdc19b8Svdonaldson mlir::Value fir::runtime::genMapExcept(fir::FirOpBuilder &builder,
173aba9264Svdonaldson                                        mlir::Location loc,
184cdc19b8Svdonaldson                                        mlir::Value excepts) {
193aba9264Svdonaldson   mlir::func::FuncOp func{
203aba9264Svdonaldson       fir::runtime::getRuntimeFunc<mkRTKey(MapException)>(loc, builder)};
214cdc19b8Svdonaldson   return builder.create<fir::CallOp>(loc, func, excepts).getResult(0);
223aba9264Svdonaldson }
236003be7eSvdonaldson 
24c28a7c1eSvdonaldson mlir::Value fir::runtime::genSupportHalting(fir::FirOpBuilder &builder,
25c28a7c1eSvdonaldson                                             mlir::Location loc,
26c28a7c1eSvdonaldson                                             mlir::Value excepts) {
27c28a7c1eSvdonaldson   mlir::func::FuncOp func{
28c28a7c1eSvdonaldson       fir::runtime::getRuntimeFunc<mkRTKey(SupportHalting)>(loc, builder)};
29c28a7c1eSvdonaldson   return builder.create<fir::CallOp>(loc, func, excepts).getResult(0);
30c28a7c1eSvdonaldson }
31c28a7c1eSvdonaldson 
326003be7eSvdonaldson mlir::Value fir::runtime::genGetUnderflowMode(fir::FirOpBuilder &builder,
336003be7eSvdonaldson                                               mlir::Location loc) {
346003be7eSvdonaldson   mlir::func::FuncOp func{
356003be7eSvdonaldson       fir::runtime::getRuntimeFunc<mkRTKey(GetUnderflowMode)>(loc, builder)};
366003be7eSvdonaldson   return builder.create<fir::CallOp>(loc, func).getResult(0);
376003be7eSvdonaldson }
386003be7eSvdonaldson 
396003be7eSvdonaldson void fir::runtime::genSetUnderflowMode(fir::FirOpBuilder &builder,
406003be7eSvdonaldson                                        mlir::Location loc, mlir::Value flag) {
416003be7eSvdonaldson   mlir::func::FuncOp func{
426003be7eSvdonaldson       fir::runtime::getRuntimeFunc<mkRTKey(SetUnderflowMode)>(loc, builder)};
436003be7eSvdonaldson   builder.create<fir::CallOp>(loc, func, flag);
446003be7eSvdonaldson }
45*ff862d6dSvdonaldson 
46*ff862d6dSvdonaldson mlir::Value fir::runtime::genGetModesTypeSize(fir::FirOpBuilder &builder,
47*ff862d6dSvdonaldson                                               mlir::Location loc) {
48*ff862d6dSvdonaldson   mlir::func::FuncOp func{
49*ff862d6dSvdonaldson       fir::runtime::getRuntimeFunc<mkRTKey(GetModesTypeSize)>(loc, builder)};
50*ff862d6dSvdonaldson   return builder.create<fir::CallOp>(loc, func).getResult(0);
51*ff862d6dSvdonaldson }
52*ff862d6dSvdonaldson 
53*ff862d6dSvdonaldson mlir::Value fir::runtime::genGetStatusTypeSize(fir::FirOpBuilder &builder,
54*ff862d6dSvdonaldson                                                mlir::Location loc) {
55*ff862d6dSvdonaldson   mlir::func::FuncOp func{
56*ff862d6dSvdonaldson       fir::runtime::getRuntimeFunc<mkRTKey(GetStatusTypeSize)>(loc, builder)};
57*ff862d6dSvdonaldson   return builder.create<fir::CallOp>(loc, func).getResult(0);
58*ff862d6dSvdonaldson }
59