mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
308168034d
When building with LTO, builtin functions that are defined but whose calls have not been inserted yet, get internalized. The Global Dead Code Elimination phase in the new LTO implementation then removes these function definitions. Later optimizations add calls to those functions, and the linker then dies complaining that there are no definitions. This CL fixes the new LTO implementation to check if a function is builtin, and if so, to not internalize (and later DCE) the function. As part of this fix I needed to move the RuntimeLibcalls.{def,h} files from the CodeGen subidrectory to the IR subdirectory. I have updated all the files that accessed those two files to access their new location. Fixes PR34169 Patch by Caroline Tice! Differential Revision: https://reviews.llvm.org/D49434 llvm-svn: 337847
83 lines
3.0 KiB
C++
83 lines
3.0 KiB
C++
//===-- CodeGen/RuntimeLibcalls.h - Runtime Library Calls -------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the enum representing the list of runtime library calls
|
|
// the backend may emit during code generation, and also some helper functions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H
|
|
#define LLVM_CODEGEN_RUNTIMELIBCALLS_H
|
|
|
|
#include "llvm/CodeGen/ValueTypes.h"
|
|
|
|
namespace llvm {
|
|
namespace RTLIB {
|
|
/// RTLIB::Libcall enum - This enum defines all of the runtime library calls
|
|
/// the backend can emit. The various long double types cannot be merged,
|
|
/// because 80-bit library functions use "xf" and 128-bit use "tf".
|
|
///
|
|
/// When adding PPCF128 functions here, note that their names generally need
|
|
/// to be overridden for Darwin with the xxx$LDBL128 form. See
|
|
/// PPCISelLowering.cpp.
|
|
///
|
|
enum Libcall {
|
|
#define HANDLE_LIBCALL(code, name) code,
|
|
#include "llvm/IR/RuntimeLibcalls.def"
|
|
#undef HANDLE_LIBCALL
|
|
};
|
|
|
|
/// getFPEXT - Return the FPEXT_*_* value for the given types, or
|
|
/// UNKNOWN_LIBCALL if there is none.
|
|
Libcall getFPEXT(EVT OpVT, EVT RetVT);
|
|
|
|
/// getFPROUND - Return the FPROUND_*_* value for the given types, or
|
|
/// UNKNOWN_LIBCALL if there is none.
|
|
Libcall getFPROUND(EVT OpVT, EVT RetVT);
|
|
|
|
/// getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or
|
|
/// UNKNOWN_LIBCALL if there is none.
|
|
Libcall getFPTOSINT(EVT OpVT, EVT RetVT);
|
|
|
|
/// getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or
|
|
/// UNKNOWN_LIBCALL if there is none.
|
|
Libcall getFPTOUINT(EVT OpVT, EVT RetVT);
|
|
|
|
/// getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or
|
|
/// UNKNOWN_LIBCALL if there is none.
|
|
Libcall getSINTTOFP(EVT OpVT, EVT RetVT);
|
|
|
|
/// getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or
|
|
/// UNKNOWN_LIBCALL if there is none.
|
|
Libcall getUINTTOFP(EVT OpVT, EVT RetVT);
|
|
|
|
/// Return the SYNC_FETCH_AND_* value for the given opcode and type, or
|
|
/// UNKNOWN_LIBCALL if there is none.
|
|
Libcall getSYNC(unsigned Opc, MVT VT);
|
|
|
|
/// getMEMCPY_ELEMENT_UNORDERED_ATOMIC - Return
|
|
/// MEMCPY_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
|
|
/// UNKNOW_LIBCALL if there is none.
|
|
Libcall getMEMCPY_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize);
|
|
|
|
/// getMEMMOVE_ELEMENT_UNORDERED_ATOMIC - Return
|
|
/// MEMMOVE_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
|
|
/// UNKNOW_LIBCALL if there is none.
|
|
Libcall getMEMMOVE_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize);
|
|
|
|
/// getMEMSET_ELEMENT_UNORDERED_ATOMIC - Return
|
|
/// MEMSET_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or
|
|
/// UNKNOW_LIBCALL if there is none.
|
|
Libcall getMEMSET_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize);
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|