FLANG
include
flang
Evaluate
intrinsics-library.h
1
//===-- include/flang/Evaluate/intrinsics-library.h -------------*- C++ -*-===//
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef FORTRAN_EVALUATE_INTRINSICS_LIBRARY_H_
10
#define FORTRAN_EVALUATE_INTRINSICS_LIBRARY_H_
11
12
// Defines structures to be used in F18 for folding intrinsic function with host
13
// runtime libraries.
14
15
#include <functional>
16
#include <optional>
17
#include <string>
18
#include <vector>
19
20
namespace
Fortran::evaluate
{
21
class
FoldingContext
;
22
class
DynamicType
;
23
struct
SomeType
;
24
template
<
typename
>
class
Expr
;
25
26
// Define a callable type that is used to fold scalar intrinsic function using
27
// host runtime. These callables are responsible for the conversions between
28
// host types and Fortran abstract types (Scalar<T>). They also deal with
29
// floating point environment (To set it up to match the Fortran compiling
30
// options and to clean it up after the call). Floating point errors are
31
// reported to the FoldingContext. For 16bits float types, 32bits float host
32
// runtime plus conversions may be used to build the host wrappers if no 16bits
33
// runtime is available. IEEE 128bits float may also be used for x87 float.
34
// Potential conversion overflows are reported by the HostRuntimeWrapper in the
35
// FoldingContext.
36
using
HostRuntimeWrapper = std::function<Expr<SomeType>(
37
FoldingContext
&, std::vector<
Expr<SomeType>
> &&)>;
38
39
// Returns the folder using host runtime given the intrinsic function name,
40
// result and argument types. Nullopt if no host runtime is available for such
41
// intrinsic function.
42
std::optional<HostRuntimeWrapper> GetHostRuntimeWrapper(
const
std::string &name,
43
DynamicType
resultType,
const
std::vector<DynamicType> &argTypes);
44
}
// namespace Fortran::evaluate
45
#endif
// FORTRAN_EVALUATE_INTRINSICS_LIBRARY_H_
Fortran::evaluate::DynamicType
Definition
type.h:74
Fortran::evaluate::Expr
Definition
common.h:214
Fortran::evaluate::FoldingContext
Definition
common.h:216
Fortran::evaluate
Definition
call.h:34
Fortran::evaluate::SomeType
Definition
type.h:417
Generated on
for FLANG by
1.14.0