LLVM 19.0.0git
RuntimeLibcalls.h
Go to the documentation of this file.
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
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 /// getLDEXP - Return the LDEXP_* value for the given types, or
74 /// UNKNOWN_LIBCALL if there is none.
75 Libcall getLDEXP(EVT RetVT);
76
77 /// getFREXP - Return the FREXP_* value for the given types, or
78 /// UNKNOWN_LIBCALL if there is none.
79 Libcall getFREXP(EVT RetVT);
80
81 /// Return the SYNC_FETCH_AND_* value for the given opcode and type, or
82 /// UNKNOWN_LIBCALL if there is none.
83 Libcall getSYNC(unsigned Opc, MVT VT);
84
85 /// Return the outline atomics value for the given atomic ordering, access
86 /// size and set of libcalls for a given atomic, or UNKNOWN_LIBCALL if there
87 /// is none.
88 Libcall getOutlineAtomicHelper(const Libcall (&LC)[5][4],
89 AtomicOrdering Order, uint64_t MemSize);
90
91 /// Return the outline atomics value for the given opcode, atomic ordering
92 /// and type, or UNKNOWN_LIBCALL if there is none.
93 Libcall getOUTLINE_ATOMIC(unsigned Opc, AtomicOrdering Order, MVT VT);
94
95 /// getMEMCPY_ELEMENT_UNORDERED_ATOMIC - Return
96 /// MEMCPY_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
97 /// UNKNOW_LIBCALL if there is none.
99
100 /// getMEMMOVE_ELEMENT_UNORDERED_ATOMIC - Return
101 /// MEMMOVE_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
102 /// UNKNOW_LIBCALL if there is none.
104
105 /// getMEMSET_ELEMENT_UNORDERED_ATOMIC - Return
106 /// MEMSET_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
107 /// UNKNOW_LIBCALL if there is none.
109
110}
111}
112
113#endif
Atomic ordering constants.
Libcall getPOWI(EVT RetVT)
getPOWI - Return the POWI_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getSINTTOFP(EVT OpVT, EVT RetVT)
getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getSYNC(unsigned Opc, MVT VT)
Return the SYNC_FETCH_AND_* value for the given opcode and type, or UNKNOWN_LIBCALL if there is none.
Libcall getLDEXP(EVT RetVT)
getLDEXP - Return the LDEXP_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getUINTTOFP(EVT OpVT, EVT RetVT)
getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getFREXP(EVT RetVT)
getFREXP - Return the FREXP_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall
RTLIB::Libcall enum - This enum defines all of the runtime library calls the backend can emit.
Libcall getMEMCPY_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize)
getMEMCPY_ELEMENT_UNORDERED_ATOMIC - Return MEMCPY_ELEMENT_UNORDERED_ATOMIC_* value for the given ele...
Libcall getFPTOUINT(EVT OpVT, EVT RetVT)
getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getFPTOSINT(EVT OpVT, EVT RetVT)
getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getOUTLINE_ATOMIC(unsigned Opc, AtomicOrdering Order, MVT VT)
Return the outline atomics value for the given opcode, atomic ordering and type, or UNKNOWN_LIBCALL i...
Libcall getFPEXT(EVT OpVT, EVT RetVT)
getFPEXT - Return the FPEXT_*_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getFPROUND(EVT OpVT, EVT RetVT)
getFPROUND - Return the FPROUND_*_* value for the given types, or UNKNOWN_LIBCALL if there is none.
Libcall getMEMSET_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize)
getMEMSET_ELEMENT_UNORDERED_ATOMIC - Return MEMSET_ELEMENT_UNORDERED_ATOMIC_* value for the given ele...
Libcall getOutlineAtomicHelper(const Libcall(&LC)[5][4], AtomicOrdering Order, uint64_t MemSize)
Return the outline atomics value for the given atomic ordering, access size and set of libcalls for a...
Libcall getFPLibCall(EVT VT, Libcall Call_F32, Libcall Call_F64, Libcall Call_F80, Libcall Call_F128, Libcall Call_PPCF128)
GetFPLibCall - Helper to return the right libcall for the given floating point type,...
Libcall getMEMMOVE_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize)
getMEMMOVE_ELEMENT_UNORDERED_ATOMIC - Return MEMMOVE_ELEMENT_UNORDERED_ATOMIC_* value for the given e...
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
AtomicOrdering
Atomic ordering for LLVM's memory model.