mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-07 01:57:16 +00:00
[LLVM-C] Add LLVMGetHostCPU{Name,Features}.
Without these functions it's hard to create a TargetMachine for Orc JIT that creates efficient native code. It's not sufficient to just expose LLVMGetHostCPUName(), because for some CPUs there's fewer features actually available than the CPU name indicates (e.g. AVX might be missing on some CPUs identified as Skylake). Differential Revision: https://reviews.llvm.org/D44861 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@329856 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e03c814e57
commit
c7568e5deb
@ -137,6 +137,14 @@ LLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T, LLVMModuleR
|
||||
disposed with LLVMDisposeMessage. */
|
||||
char* LLVMGetDefaultTargetTriple(void);
|
||||
|
||||
/** Get the host CPU as a string. The result needs to be disposed with
|
||||
LLVMDisposeMessage. */
|
||||
char* LLVMGetHostCPUName(void);
|
||||
|
||||
/** Get the host CPU's features as a string. The result needs to be disposed
|
||||
with LLVMDisposeMessage. */
|
||||
char* LLVMGetHostCPUFeatures(void);
|
||||
|
||||
/** Adds the target-specific analysis passes to the pass manager. */
|
||||
void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM);
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/LegacyPassManager.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/MC/SubtargetFeature.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include "llvm/Support/Host.h"
|
||||
@ -237,6 +238,21 @@ char *LLVMGetDefaultTargetTriple(void) {
|
||||
return strdup(sys::getDefaultTargetTriple().c_str());
|
||||
}
|
||||
|
||||
char *LLVMGetHostCPUName(void) {
|
||||
return strdup(sys::getHostCPUName().data());
|
||||
}
|
||||
|
||||
char *LLVMGetHostCPUFeatures(void) {
|
||||
SubtargetFeatures Features;
|
||||
StringMap<bool> HostFeatures;
|
||||
|
||||
if (sys::getHostCPUFeatures(HostFeatures))
|
||||
for (auto &F : HostFeatures)
|
||||
Features.AddFeature(F.first(), F.second);
|
||||
|
||||
return strdup(Features.getString().c_str());
|
||||
}
|
||||
|
||||
void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM) {
|
||||
unwrap(PM)->add(
|
||||
createTargetTransformInfoWrapperPass(unwrap(T)->getTargetIRAnalysis()));
|
||||
|
Loading…
x
Reference in New Issue
Block a user