Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | pmbaty | 1 | //===- llvm/TargetParser/Host.h - Host machine detection -------*- 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 | // Methods for querying the nature of the host machine. |
||
10 | // |
||
11 | //===----------------------------------------------------------------------===// |
||
12 | |||
13 | #ifndef LLVM_TARGETPARSER_HOST_H |
||
14 | #define LLVM_TARGETPARSER_HOST_H |
||
15 | |||
16 | #include <string> |
||
17 | |||
18 | namespace llvm { |
||
19 | class MallocAllocator; |
||
20 | class StringRef; |
||
21 | template <typename ValueTy, typename AllocatorTy> class StringMap; |
||
22 | class raw_ostream; |
||
23 | |||
24 | namespace sys { |
||
25 | |||
26 | /// getDefaultTargetTriple() - Return the default target triple the compiler |
||
27 | /// has been configured to produce code for. |
||
28 | /// |
||
29 | /// The target triple is a string in the format of: |
||
30 | /// CPU_TYPE-VENDOR-OPERATING_SYSTEM |
||
31 | /// or |
||
32 | /// CPU_TYPE-VENDOR-KERNEL-OPERATING_SYSTEM |
||
33 | std::string getDefaultTargetTriple(); |
||
34 | |||
35 | /// getProcessTriple() - Return an appropriate target triple for generating |
||
36 | /// code to be loaded into the current process, e.g. when using the JIT. |
||
37 | std::string getProcessTriple(); |
||
38 | |||
39 | /// getHostCPUName - Get the LLVM name for the host CPU. The particular format |
||
40 | /// of the name is target dependent, and suitable for passing as -mcpu to the |
||
41 | /// target which matches the host. |
||
42 | /// |
||
43 | /// \return - The host CPU name, or empty if the CPU could not be determined. |
||
44 | StringRef getHostCPUName(); |
||
45 | |||
46 | /// getHostCPUFeatures - Get the LLVM names for the host CPU features. |
||
47 | /// The particular format of the names are target dependent, and suitable for |
||
48 | /// passing as -mattr to the target which matches the host. |
||
49 | /// |
||
50 | /// \param Features - A string mapping feature names to either |
||
51 | /// true (if enabled) or false (if disabled). This routine makes no guarantees |
||
52 | /// about exactly which features may appear in this map, except that they are |
||
53 | /// all valid LLVM feature names. |
||
54 | /// |
||
55 | /// \return - True on success. |
||
56 | bool getHostCPUFeatures(StringMap<bool, MallocAllocator> &Features); |
||
57 | |||
58 | /// This is a function compatible with cl::AddExtraVersionPrinter, which adds |
||
59 | /// info about the current target triple and detected CPU. |
||
60 | void printDefaultTargetAndDetectedCPU(raw_ostream &OS); |
||
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 getHostCPUNameForRISCV(StringRef ProcCpuinfoContent); |
||
68 | StringRef getHostCPUNameForSPARC(StringRef ProcCpuinfoContent); |
||
69 | StringRef getHostCPUNameForBPF(); |
||
70 | |||
71 | /// Helper functions to extract CPU details from CPUID on x86. |
||
72 | namespace x86 { |
||
73 | enum class VendorSignatures { |
||
74 | UNKNOWN, |
||
75 | GENUINE_INTEL, |
||
76 | AUTHENTIC_AMD, |
||
77 | }; |
||
78 | |||
79 | /// Returns the host CPU's vendor. |
||
80 | /// MaxLeaf: if a non-nullptr pointer is specified, the EAX value will be |
||
81 | /// assigned to its pointee. |
||
82 | VendorSignatures getVendorSignature(unsigned *MaxLeaf = nullptr); |
||
83 | } // namespace x86 |
||
84 | } |
||
85 | } |
||
86 | } |
||
87 | |||
88 | #endif |