1//===-- CodeGen/RuntimeLibcalls.h - Runtime Library Calls -------*- 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// This file defines the enum representing the list of runtime library calls
10// the backend may emit during code generation, and also some helper functions.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H
15#define LLVM_CODEGEN_RUNTIMELIBCALLS_H
16
17#include "llvm/CodeGen/ValueTypes.h"
18#include "llvm/Support/AtomicOrdering.h"
19
20namespace llvm {
21namespace RTLIB {
22 /// RTLIB::Libcall enum - This enum defines all of the runtime library calls
23 /// the backend can emit. The various long double types cannot be merged,
24 /// because 80-bit library functions use "xf" and 128-bit use "tf".
25 ///
26 /// When adding PPCF128 functions here, note that their names generally need
27 /// to be overridden for Darwin with the xxx$LDBL128 form. See
28 /// PPCISelLowering.cpp.
29 ///
30 enum Libcall {
31#define HANDLE_LIBCALL(code, name) code,
32 #include "llvm/IR/RuntimeLibcalls.def"
33#undef HANDLE_LIBCALL
34 };
35
36 /// GetFPLibCall - Helper to return the right libcall for the given floating
37 /// point type, or UNKNOWN_LIBCALL if there is none.
38 Libcall getFPLibCall(EVT VT,
39 Libcall Call_F32,
40 Libcall Call_F64,
41 Libcall Call_F80,
42 Libcall Call_F128,
43 Libcall Call_PPCF128);
44
45 /// getFPEXT - Return the FPEXT_*_* value for the given types, or
46 /// UNKNOWN_LIBCALL if there is none.
47 Libcall getFPEXT(EVT OpVT, EVT RetVT);
48
49 /// getFPROUND - Return the FPROUND_*_* value for the given types, or
50 /// UNKNOWN_LIBCALL if there is none.
51 Libcall getFPROUND(EVT OpVT, EVT RetVT);
52
53 /// getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or
54 /// UNKNOWN_LIBCALL if there is none.
55 Libcall getFPTOSINT(EVT OpVT, EVT RetVT);
56
57 /// getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or
58 /// UNKNOWN_LIBCALL if there is none.
59 Libcall getFPTOUINT(EVT OpVT, EVT RetVT);
60
61 /// getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or
62 /// UNKNOWN_LIBCALL if there is none.
63 Libcall getSINTTOFP(EVT OpVT, EVT RetVT);
64
65 /// getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or
66 /// UNKNOWN_LIBCALL if there is none.
67 Libcall getUINTTOFP(EVT OpVT, EVT RetVT);
68
69 /// getPOWI - Return the POWI_* value for the given types, or
70 /// UNKNOWN_LIBCALL if there is none.
71 Libcall getPOWI(EVT RetVT);
72
73 /// Return the SYNC_FETCH_AND_* value for the given opcode and type, or
74 /// UNKNOWN_LIBCALL if there is none.
75 Libcall getSYNC(unsigned Opc, MVT VT);
76
77 /// Return the outline atomics value for the given opcode, atomic ordering
78 /// and type, or UNKNOWN_LIBCALL if there is none.
79 Libcall getOUTLINE_ATOMIC(unsigned Opc, AtomicOrdering Order, MVT VT);
80
81 /// getMEMCPY_ELEMENT_UNORDERED_ATOMIC - Return
82 /// MEMCPY_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
83 /// UNKNOW_LIBCALL if there is none.
84 Libcall getMEMCPY_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize);
85
86 /// getMEMMOVE_ELEMENT_UNORDERED_ATOMIC - Return
87 /// MEMMOVE_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
88 /// UNKNOW_LIBCALL if there is none.
89 Libcall getMEMMOVE_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize);
90
91 /// getMEMSET_ELEMENT_UNORDERED_ATOMIC - Return
92 /// MEMSET_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
93 /// UNKNOW_LIBCALL if there is none.
94 Libcall getMEMSET_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize);
95
96}
97}
98
99#endif
100

source code of llvm/include/llvm/CodeGen/RuntimeLibcalls.h