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