Home | History | Annotate | Line # | Download | only in X86
      1 //===-- X86TargetMachine.h - Define TargetMachine for the X86 ---*- 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 // This file declares the X86 specific subclass of TargetMachine.
     10 //
     11 //===----------------------------------------------------------------------===//
     12 
     13 #ifndef LLVM_LIB_TARGET_X86_X86TARGETMACHINE_H
     14 #define LLVM_LIB_TARGET_X86_X86TARGETMACHINE_H
     15 
     16 #include "X86Subtarget.h"
     17 #include "llvm/ADT/Optional.h"
     18 #include "llvm/ADT/StringMap.h"
     19 #include "llvm/Support/CodeGen.h"
     20 #include "llvm/Target/TargetMachine.h"
     21 #include <memory>
     22 
     23 namespace llvm {
     24 
     25 class StringRef;
     26 class TargetTransformInfo;
     27 
     28 class X86TargetMachine final : public LLVMTargetMachine {
     29   std::unique_ptr<TargetLoweringObjectFile> TLOF;
     30   mutable StringMap<std::unique_ptr<X86Subtarget>> SubtargetMap;
     31   // True if this is used in JIT.
     32   bool IsJIT;
     33 
     34 public:
     35   X86TargetMachine(const Target &T, const Triple &TT, StringRef CPU,
     36                    StringRef FS, const TargetOptions &Options,
     37                    Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
     38                    CodeGenOpt::Level OL, bool JIT);
     39   ~X86TargetMachine() override;
     40 
     41   const X86Subtarget *getSubtargetImpl(const Function &F) const override;
     42   // DO NOT IMPLEMENT: There is no such thing as a valid default subtarget,
     43   // subtargets are per-function entities based on the target-specific
     44   // attributes of each function.
     45   const X86Subtarget *getSubtargetImpl() const = delete;
     46 
     47   TargetTransformInfo getTargetTransformInfo(const Function &F) override;
     48 
     49   // Set up the pass pipeline.
     50   TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
     51 
     52   TargetLoweringObjectFile *getObjFileLowering() const override {
     53     return TLOF.get();
     54   }
     55 
     56   bool isJIT() const { return IsJIT; }
     57 
     58   bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override;
     59 };
     60 
     61 } // end namespace llvm
     62 
     63 #endif // LLVM_LIB_TARGET_X86_X86TARGETMACHINE_H
     64