Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 1 | //===- llvm/Support/Host.h - Host machine characteristics --------*- C++ -*-===// |
| 2 | // |
Andrew Walbran | 16937d0 | 2019-10-22 13:54:20 +0100 | [diff] [blame] | 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 |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | // |
| 9 | // Methods for querying the nature of the host machine. |
| 10 | // |
| 11 | //===----------------------------------------------------------------------===// |
| 12 | |
| 13 | #ifndef LLVM_SUPPORT_HOST_H |
| 14 | #define LLVM_SUPPORT_HOST_H |
| 15 | |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 16 | #include <string> |
| 17 | |
| 18 | namespace llvm { |
Olivier Deprez | f4ef2d0 | 2021-04-20 13:36:24 +0200 | [diff] [blame] | 19 | class MallocAllocator; |
| 20 | class StringRef; |
| 21 | template <typename ValueTy, typename AllocatorTy> class StringMap; |
| 22 | |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 23 | namespace sys { |
| 24 | |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 25 | /// getDefaultTargetTriple() - Return the default target triple the compiler |
| 26 | /// has been configured to produce code for. |
| 27 | /// |
| 28 | /// The target triple is a string in the format of: |
| 29 | /// CPU_TYPE-VENDOR-OPERATING_SYSTEM |
| 30 | /// or |
| 31 | /// CPU_TYPE-VENDOR-KERNEL-OPERATING_SYSTEM |
| 32 | std::string getDefaultTargetTriple(); |
| 33 | |
| 34 | /// getProcessTriple() - Return an appropriate target triple for generating |
| 35 | /// code to be loaded into the current process, e.g. when using the JIT. |
| 36 | std::string getProcessTriple(); |
| 37 | |
| 38 | /// getHostCPUName - Get the LLVM name for the host CPU. The particular format |
| 39 | /// of the name is target dependent, and suitable for passing as -mcpu to the |
| 40 | /// target which matches the host. |
| 41 | /// |
| 42 | /// \return - The host CPU name, or empty if the CPU could not be determined. |
| 43 | StringRef getHostCPUName(); |
| 44 | |
| 45 | /// getHostCPUFeatures - Get the LLVM names for the host CPU features. |
| 46 | /// The particular format of the names are target dependent, and suitable for |
| 47 | /// passing as -mattr to the target which matches the host. |
| 48 | /// |
| 49 | /// \param Features - A string mapping feature names to either |
| 50 | /// true (if enabled) or false (if disabled). This routine makes no guarantees |
| 51 | /// about exactly which features may appear in this map, except that they are |
| 52 | /// all valid LLVM feature names. |
| 53 | /// |
| 54 | /// \return - True on success. |
Olivier Deprez | f4ef2d0 | 2021-04-20 13:36:24 +0200 | [diff] [blame] | 55 | bool getHostCPUFeatures(StringMap<bool, MallocAllocator> &Features); |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 56 | |
| 57 | /// Get the number of physical cores (as opposed to logical cores returned |
| 58 | /// from thread::hardware_concurrency(), which includes hyperthreads). |
| 59 | /// Returns -1 if unknown for the current host system. |
| 60 | int getHostNumPhysicalCores(); |
| 61 | |
| 62 | namespace detail { |
| 63 | /// Helper functions to extract HostCPUName from /proc/cpuinfo on linux. |
| 64 | StringRef getHostCPUNameForPowerPC(StringRef ProcCpuinfoContent); |
| 65 | StringRef getHostCPUNameForARM(StringRef ProcCpuinfoContent); |
| 66 | StringRef getHostCPUNameForS390x(StringRef ProcCpuinfoContent); |
| 67 | StringRef getHostCPUNameForBPF(); |
| 68 | } |
| 69 | } |
| 70 | } |
| 71 | |
| 72 | #endif |