[PATCH] D44861: [C-API] Add LLVMGetHostCPU{Name,Features}.

Andres Freund via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 23 19:30:14 PDT 2018


anarazel created this revision.
anarazel added a reviewer: lhames.
Herald added a reviewer: deadalnix.

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).


Repository:
  rL LLVM

https://reviews.llvm.org/D44861

Files:
  include/llvm-c/TargetMachine.h
  lib/Target/TargetMachineC.cpp


Index: lib/Target/TargetMachineC.cpp
===================================================================
--- lib/Target/TargetMachineC.cpp
+++ lib/Target/TargetMachineC.cpp
@@ -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 @@
   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()));
Index: include/llvm-c/TargetMachine.h
===================================================================
--- include/llvm-c/TargetMachine.h
+++ include/llvm-c/TargetMachine.h
@@ -137,6 +137,14 @@
   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);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44861.139693.patch
Type: text/x-patch
Size: 1789 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180324/f8f01f21/attachment.bin>


More information about the llvm-commits mailing list