LCOV - code coverage report
Current view: top level - lib/Target/AMDGPU - AMDGPUTargetMachine.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 11 13 84.6 %
Date: 2018-06-17 00:07:59 Functions: 6 10 60.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- AMDGPUTargetMachine.h - AMDGPU TargetMachine Interface --*- 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             : /// \file
      11             : /// The AMDGPU TargetMachine interface definition for hw codgen targets.
      12             : //
      13             : //===----------------------------------------------------------------------===//
      14             : 
      15             : #ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUTARGETMACHINE_H
      16             : #define LLVM_LIB_TARGET_AMDGPU_AMDGPUTARGETMACHINE_H
      17             : 
      18             : #include "AMDGPUIntrinsicInfo.h"
      19             : #include "AMDGPUSubtarget.h"
      20             : #include "llvm/ADT/Optional.h"
      21             : #include "llvm/ADT/StringMap.h"
      22             : #include "llvm/ADT/StringRef.h"
      23             : #include "llvm/Analysis/TargetTransformInfo.h"
      24             : #include "llvm/Support/CodeGen.h"
      25             : #include "llvm/Target/TargetMachine.h"
      26             : #include <memory>
      27             : 
      28             : namespace llvm {
      29             : 
      30             : //===----------------------------------------------------------------------===//
      31             : // AMDGPU Target Machine (R600+)
      32             : //===----------------------------------------------------------------------===//
      33             : 
      34        5072 : class AMDGPUTargetMachine : public LLVMTargetMachine {
      35             : protected:
      36             :   std::unique_ptr<TargetLoweringObjectFile> TLOF;
      37             :   AMDGPUIntrinsicInfo IntrinsicInfo;
      38             :   AMDGPUAS AS;
      39             : 
      40             :   StringRef getGPUName(const Function &F) const;
      41             :   StringRef getFeatureString(const Function &F) const;
      42             : 
      43             : public:
      44             :   static bool EnableLateStructurizeCFG;
      45             : 
      46             :   AMDGPUTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
      47             :                       StringRef FS, TargetOptions Options,
      48             :                       Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
      49             :                       CodeGenOpt::Level OL);
      50             :   ~AMDGPUTargetMachine() override;
      51             : 
      52             :   const AMDGPUSubtarget *getSubtargetImpl() const;
      53             :   const AMDGPUSubtarget *getSubtargetImpl(const Function &) const override = 0;
      54             : 
      55       20660 :   const AMDGPUIntrinsicInfo *getIntrinsicInfo() const override {
      56       20660 :     return &IntrinsicInfo;
      57             :   }
      58             : 
      59       74729 :   TargetLoweringObjectFile *getObjFileLowering() const override {
      60       74729 :     return TLOF.get();
      61             :   }
      62             :   AMDGPUAS getAMDGPUAS() const {
      63        1784 :     return AS;
      64             :   }
      65             : 
      66             :   void adjustPassManager(PassManagerBuilder &) override;
      67             :   /// Get the integer value of a null pointer in the given address space.
      68             :   uint64_t getNullPointerValue(unsigned AddrSpace) const {
      69         156 :     if (AddrSpace == AS.LOCAL_ADDRESS || AddrSpace == AS.REGION_ADDRESS)
      70             :       return -1;
      71             :     return 0;
      72             :   }
      73             : };
      74             : 
      75             : //===----------------------------------------------------------------------===//
      76             : // R600 Target Machine (R600 -> Cayman)
      77             : //===----------------------------------------------------------------------===//
      78             : 
      79         289 : class R600TargetMachine final : public AMDGPUTargetMachine {
      80             : private:
      81             :   mutable StringMap<std::unique_ptr<R600Subtarget>> SubtargetMap;
      82             : 
      83             : public:
      84             :   R600TargetMachine(const Target &T, const Triple &TT, StringRef CPU,
      85             :                     StringRef FS, TargetOptions Options,
      86             :                     Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
      87             :                     CodeGenOpt::Level OL, bool JIT);
      88             : 
      89             :   TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
      90             : 
      91             :   const R600Subtarget *getSubtargetImpl(const Function &) const override;
      92             : 
      93             :   TargetTransformInfo getTargetTransformInfo(const Function &F) override;
      94             : 
      95           0 :   bool isMachineVerifierClean() const override {
      96           0 :     return false;
      97             :   }
      98             : };
      99             : 
     100             : //===----------------------------------------------------------------------===//
     101             : // GCN Target Machine (SI+)
     102             : //===----------------------------------------------------------------------===//
     103             : 
     104        2247 : class GCNTargetMachine final : public AMDGPUTargetMachine {
     105             : private:
     106             :   mutable StringMap<std::unique_ptr<SISubtarget>> SubtargetMap;
     107             : 
     108             : public:
     109             :   GCNTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
     110             :                    StringRef FS, TargetOptions Options,
     111             :                    Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
     112             :                    CodeGenOpt::Level OL, bool JIT);
     113             : 
     114             :   TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
     115             : 
     116             :   const SISubtarget *getSubtargetImpl(const Function &) const override;
     117             : 
     118             :   TargetTransformInfo getTargetTransformInfo(const Function &F) override;
     119             : 
     120        2137 :   bool useIPRA() const override {
     121        2137 :     return true;
     122             :   }
     123             : };
     124             : 
     125             : } // end namespace llvm
     126             : 
     127             : #endif // LLVM_LIB_TARGET_AMDGPU_AMDGPUTARGETMACHINE_H

Generated by: LCOV version 1.13