llvm.org GIT mirror llvm / release_37 lib / Target / AMDGPU / AMDGPUTargetMachine.h
release_37

Tree @release_37 (Download .tar.gz)

AMDGPUTargetMachine.h @release_37

f98f2ce
 
 
 
 
 
 
 
 
 
 
 
 
 
00e08fc
 
f98f2ce
c0b0c67
f98f2ce
b170a80
f98f2ce
 
0b8c9a8
f98f2ce
 
 
1f996fa
 
 
 
f98f2ce
ff340f9
 
1f996fa
847729d
f98f2ce
b88bbc0
f98f2ce
 
4ddb0ce
23e24bd
 
 
ceb9150
4638c99
 
c279ae9
 
a80ff26
 
 
6e89e13
1937233
847729d
 
 
f98f2ce
 
1f996fa
5b98db6
 
 
 
 
 
4ddb0ce
5b98db6
 
28f550e
 
5b98db6
 
 
1f996fa
 
 
 
 
 
4ddb0ce
 
 
28f550e
 
1f996fa
 
f98f2ce
 
00e08fc
//===-- AMDGPUTargetMachine.h - AMDGPU TargetMachine Interface --*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
/// \file
/// \brief The AMDGPU TargetMachine interface definition for hw codgen targets.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIB_TARGET_R600_AMDGPUTARGETMACHINE_H
#define LLVM_LIB_TARGET_R600_AMDGPUTARGETMACHINE_H

#include "AMDGPUFrameLowering.h"
#include "AMDGPUInstrInfo.h"
#include "AMDGPUIntrinsicInfo.h"
#include "AMDGPUSubtarget.h"
#include "R600ISelLowering.h"
#include "llvm/IR/DataLayout.h"

namespace llvm {

//===----------------------------------------------------------------------===//
// AMDGPU Target Machine (R600+)
//===----------------------------------------------------------------------===//

class AMDGPUTargetMachine : public LLVMTargetMachine {
private:

protected:
  TargetLoweringObjectFile *TLOF;
  AMDGPUSubtarget Subtarget;
  AMDGPUIntrinsicInfo IntrinsicInfo;

public:
  AMDGPUTargetMachine(const Target &T, const Triple &TT, StringRef FS,
                      StringRef CPU, TargetOptions Options, Reloc::Model RM,
                      CodeModel::Model CM, CodeGenOpt::Level OL);
  ~AMDGPUTargetMachine();

  const AMDGPUSubtarget *getSubtargetImpl() const { return &Subtarget; }
  const AMDGPUSubtarget *getSubtargetImpl(const Function &) const override {
    return &Subtarget;
  }
  const AMDGPUIntrinsicInfo *getIntrinsicInfo() const override {
    return &IntrinsicInfo;
  }
  TargetIRAnalysis getTargetIRAnalysis() override;

  TargetLoweringObjectFile *getObjFileLowering() const override {
    return TLOF;
  }
};

//===----------------------------------------------------------------------===//
// R600 Target Machine (R600 -> Cayman)
//===----------------------------------------------------------------------===//

class R600TargetMachine : public AMDGPUTargetMachine {

public:
  R600TargetMachine(const Target &T, const Triple &TT, StringRef FS,
                    StringRef CPU, TargetOptions Options, Reloc::Model RM,
                    CodeModel::Model CM, CodeGenOpt::Level OL);

  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
};

//===----------------------------------------------------------------------===//
// GCN Target Machine (SI+)
//===----------------------------------------------------------------------===//

class GCNTargetMachine : public AMDGPUTargetMachine {

public:
  GCNTargetMachine(const Target &T, const Triple &TT, StringRef FS,
                   StringRef CPU, TargetOptions Options, Reloc::Model RM,
                   CodeModel::Model CM, CodeGenOpt::Level OL);

  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
};

} // End namespace llvm

#endif