mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-07 21:09:21 +00:00
d495533497
Summary: For now I have only added support for x86_64 Linux, but other systems can be added incrementally. This is to be used for setting the default parallelism for ThinLTO backends (instead of thread::hardware_concurrency which includes hyperthreading and is too aggressive). I'll send this as a follow-on patch, and it will fall back to hardware_concurrency when the new getHostNumPhysicalCores returns -1 (when not supported for a given host system). I also added an interface to MemoryBuffer to force reading a file as a stream - this is required for /proc/cpuinfo which is a special file that looks like a normal file but appears to have 0 size. The existing readers of this file in Host.cpp are reading the first 1024 or so bytes from it, because the necessary info is near the top. But for the new functionality we need to be able to read the entire file. I can go back and change the other readers to use the new getFileAsStream as a follow-on patch since it seems much more robust. Added a unittest. Reviewers: mehdi_amini Subscribers: beanz, mgorny, llvm-commits, modocache Differential Revision: https://reviews.llvm.org/D25564 llvm-svn: 284138
82 lines
2.7 KiB
C++
82 lines
2.7 KiB
C++
//===- llvm/Support/Host.h - Host machine characteristics --------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Methods for querying the nature of the host machine.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_SUPPORT_HOST_H
|
|
#define LLVM_SUPPORT_HOST_H
|
|
|
|
#include "llvm/ADT/StringMap.h"
|
|
|
|
#if defined(__linux__) || defined(__GNU__) || defined(__HAIKU__)
|
|
#include <endian.h>
|
|
#elif defined(_AIX)
|
|
#include <sys/machine.h>
|
|
#else
|
|
#if !defined(BYTE_ORDER) && !defined(LLVM_ON_WIN32)
|
|
#include <machine/endian.h>
|
|
#endif
|
|
#endif
|
|
|
|
#include <string>
|
|
|
|
namespace llvm {
|
|
namespace sys {
|
|
|
|
#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN
|
|
static const bool IsBigEndianHost = true;
|
|
#else
|
|
static const bool IsBigEndianHost = false;
|
|
#endif
|
|
|
|
static const bool IsLittleEndianHost = !IsBigEndianHost;
|
|
|
|
/// getDefaultTargetTriple() - Return the default target triple the compiler
|
|
/// has been configured to produce code for.
|
|
///
|
|
/// The target triple is a string in the format of:
|
|
/// CPU_TYPE-VENDOR-OPERATING_SYSTEM
|
|
/// or
|
|
/// CPU_TYPE-VENDOR-KERNEL-OPERATING_SYSTEM
|
|
std::string getDefaultTargetTriple();
|
|
|
|
/// getProcessTriple() - Return an appropriate target triple for generating
|
|
/// code to be loaded into the current process, e.g. when using the JIT.
|
|
std::string getProcessTriple();
|
|
|
|
/// getHostCPUName - Get the LLVM name for the host CPU. The particular format
|
|
/// of the name is target dependent, and suitable for passing as -mcpu to the
|
|
/// target which matches the host.
|
|
///
|
|
/// \return - The host CPU name, or empty if the CPU could not be determined.
|
|
StringRef getHostCPUName();
|
|
|
|
/// getHostCPUFeatures - Get the LLVM names for the host CPU features.
|
|
/// The particular format of the names are target dependent, and suitable for
|
|
/// passing as -mattr to the target which matches the host.
|
|
///
|
|
/// \param Features - A string mapping feature names to either
|
|
/// true (if enabled) or false (if disabled). This routine makes no guarantees
|
|
/// about exactly which features may appear in this map, except that they are
|
|
/// all valid LLVM feature names.
|
|
///
|
|
/// \return - True on success.
|
|
bool getHostCPUFeatures(StringMap<bool> &Features);
|
|
|
|
/// Get the number of physical cores (as opposed to logical cores returned
|
|
/// from thread::hardware_concurrency(), which includes hyperthreads).
|
|
/// Returns -1 if unknown for the current host system.
|
|
int getHostNumPhysicalCores();
|
|
}
|
|
}
|
|
|
|
#endif
|