LCOV - code coverage report
Current view: top level - include/llvm/ExecutionEngine/Orc - JITTargetMachineBuilder.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 7 7 100.0 %
Date: 2018-10-20 13:21:21 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- JITTargetMachineBuilder.h - Build TargetMachines for JIT -*- C++ -*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : //
      10             : // A utitily for building TargetMachines for JITs.
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #ifndef LLVM_EXECUTIONENGINE_ORC_JITTARGETMACHINEBUILDER_H
      15             : #define LLVM_EXECUTIONENGINE_ORC_JITTARGETMACHINEBUILDER_H
      16             : 
      17             : #include "llvm/ADT/Optional.h"
      18             : #include "llvm/ADT/Triple.h"
      19             : #include "llvm/MC/SubtargetFeature.h"
      20             : #include "llvm/Support/CodeGen.h"
      21             : #include "llvm/Support/Error.h"
      22             : #include "llvm/Target/TargetMachine.h"
      23             : #include "llvm/Target/TargetOptions.h"
      24             : #include <memory>
      25             : #include <string>
      26             : #include <vector>
      27             : 
      28             : namespace llvm {
      29             : namespace orc {
      30             : 
      31             : /// A utility class for building TargetMachines for JITs.
      32             : class JITTargetMachineBuilder {
      33             : public:
      34             :   /// Create a JITTargetMachineBuilder based on the given triple.
      35             :   ///
      36             :   /// Note: TargetOptions is default-constructed, then EmulatedTLS and
      37             :   /// ExplicitEmulatedTLS are set to true. If EmulatedTLS is not
      38             :   /// required, these values should be reset before calling
      39             :   /// createTargetMachine.
      40             :   JITTargetMachineBuilder(Triple TT);
      41             : 
      42             :   /// Create a JITTargetMachineBuilder for the host system.
      43             :   ///
      44             :   /// Note: TargetOptions is default-constructed, then EmulatedTLS and
      45             :   /// ExplicitEmulatedTLS are set to true. If EmulatedTLS is not
      46             :   /// required, these values should be reset before calling
      47             :   /// createTargetMachine.
      48             :   static Expected<JITTargetMachineBuilder> detectHost();
      49             : 
      50             :   /// Create a TargetMachine.
      51             :   ///
      52             :   /// This operation will fail if the requested target is not registered,
      53             :   /// in which case see llvm/Support/TargetSelect.h. To JIT IR the Target and
      54             :   /// the target's AsmPrinter must both be registered. To JIT assembly
      55             :   /// (including inline and module level assembly) the target's AsmParser must
      56             :   /// also be registered.
      57             :   Expected<std::unique_ptr<TargetMachine>> createTargetMachine();
      58             : 
      59             :   /// Get the default DataLayout for the target.
      60             :   ///
      61             :   /// Note: This is reasonably expensive, as it creates a temporary
      62             :   /// TargetMachine instance under the hood. It is only suitable for use during
      63             :   /// JIT setup.
      64          13 :   Expected<DataLayout> getDefaultDataLayoutForTarget() {
      65          26 :     auto TM = createTargetMachine();
      66          13 :     if (!TM)
      67             :       return TM.takeError();
      68          13 :     return (*TM)->createDataLayout();
      69             :   }
      70             : 
      71             :   /// Set the CPU string.
      72             :   JITTargetMachineBuilder &setCPU(std::string CPU) {
      73          14 :     this->CPU = std::move(CPU);
      74             :     return *this;
      75             :   }
      76             : 
      77             :   /// Set the relocation model.
      78             :   JITTargetMachineBuilder &setRelocationModel(Optional<Reloc::Model> RM) {
      79             :     this->RM = std::move(RM);
      80             :     return *this;
      81             :   }
      82             : 
      83             :   /// Set the code model.
      84             :   JITTargetMachineBuilder &setCodeModel(Optional<CodeModel::Model> CM) {
      85             :     this->CM = std::move(CM);
      86             :     return *this;
      87             :   }
      88             : 
      89             :   /// Set the LLVM CodeGen optimization level.
      90             :   JITTargetMachineBuilder &setCodeGenOptLevel(CodeGenOpt::Level OptLevel) {
      91           1 :     this->OptLevel = OptLevel;
      92             :     return *this;
      93             :   }
      94             : 
      95             :   /// Add subtarget features.
      96             :   JITTargetMachineBuilder &
      97             :   addFeatures(const std::vector<std::string> &FeatureVec);
      98             : 
      99             :   /// Access subtarget features.
     100             :   SubtargetFeatures &getFeatures() { return Features; }
     101             : 
     102             :   /// Access subtarget features.
     103             :   const SubtargetFeatures &getFeatures() const { return Features; }
     104             : 
     105             :   /// Access TargetOptions.
     106             :   TargetOptions &getOptions() { return Options; }
     107             : 
     108             :   /// Access TargetOptions.
     109             :   const TargetOptions &getOptions() const { return Options; }
     110             : 
     111             :   /// Access Triple.
     112          13 :   Triple &getTargetTriple() { return TT; }
     113             : 
     114             :   /// Access Triple.
     115             :   const Triple &getTargetTriple() const { return TT; }
     116             : 
     117             : private:
     118             :   Triple TT;
     119             :   std::string CPU;
     120             :   SubtargetFeatures Features;
     121             :   TargetOptions Options;
     122             :   Optional<Reloc::Model> RM;
     123             :   Optional<CodeModel::Model> CM;
     124             :   CodeGenOpt::Level OptLevel = CodeGenOpt::None;
     125             : };
     126             : 
     127             : } // end namespace orc
     128             : } // end namespace llvm
     129             : 
     130             : #endif // LLVM_EXECUTIONENGINE_ORC_JITTARGETMACHINEBUILDER_H

Generated by: LCOV version 1.13