Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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
 
20
namespace llvm {
21
namespace 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