llvm.org GIT mirror llvm / release_27 lib / Target / X86 / X86TargetMachine.h
release_27

Tree @release_27 (Download .tar.gz)

X86TargetMachine.h @release_27

b4f68ed
0e0a7a4
856ba76
 
4ee451d
 
0e0a7a4
856ba76
0e0a7a4
b4f68ed
 
 
 
 
 
 
 
07000c6
8bd66e6
c4c6257
fcdea7b
b4f68ed
1e60a91
fb5792f
c4c6257
b4f68ed
d0fde30
cb37188
7184781
d0fde30
1911fd4
c4c6257
fcdea7b
c4c6257
aa3c141
c4c6257
 
fcdea7b
aabe38b
fde1b3b
f4f43cb
 
 
 
 
b4f68ed
e28039c
 
b4f68ed
d029cd2
 
c9f5f3f
 
98d0d7d
 
 
c9f5f3f
fde4b51
 
a69571c
fcdea7b
eb1ac33
fcdea7b
fde4b51
1911fd4
98a366d
 
 
 
cfe9a60
b4f68ed
25ab690
 
 
 
 
e28039c
 
25ab690
 
 
 
 
 
e28039c
 
25ab690
 
d0fde30
 
b4f68ed
//===-- X86TargetMachine.h - Define TargetMachine for the X86 ---*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file declares the X86 specific subclass of TargetMachine.
//
//===----------------------------------------------------------------------===//

#ifndef X86TARGETMACHINE_H
#define X86TARGETMACHINE_H

#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetData.h"
#include "llvm/Target/TargetFrameInfo.h"
#include "X86.h"
#include "X86ELFWriterInfo.h"
#include "X86InstrInfo.h"
#include "X86JITInfo.h"
#include "X86Subtarget.h"
#include "X86ISelLowering.h"

namespace llvm {
  
class formatted_raw_ostream;

class X86TargetMachine : public LLVMTargetMachine {
  X86Subtarget      Subtarget;
  const TargetData  DataLayout; // Calculates type size & alignment
  TargetFrameInfo   FrameInfo;
  X86InstrInfo      InstrInfo;
  X86JITInfo        JITInfo;
  X86TargetLowering TLInfo;
  X86ELFWriterInfo  ELFWriterInfo;
  Reloc::Model      DefRelocModel; // Reloc model before it's overridden.

private:
  // We have specific defaults for X86.
  virtual void setCodeModelForJIT();
  virtual void setCodeModelForStatic();
  
public:
  X86TargetMachine(const Target &T, const std::string &TT, 
                   const std::string &FS, bool is64Bit);

  virtual const X86InstrInfo     *getInstrInfo() const { return &InstrInfo; }
  virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
  virtual       X86JITInfo       *getJITInfo()         { return &JITInfo; }
  virtual const X86Subtarget     *getSubtargetImpl() const{ return &Subtarget; }
  virtual       X86TargetLowering *getTargetLowering() const { 
    return const_cast<X86TargetLowering*>(&TLInfo); 
  }
  virtual const X86RegisterInfo  *getRegisterInfo() const {
    return &InstrInfo.getRegisterInfo();
  }
  virtual const TargetData       *getTargetData() const { return &DataLayout; }
  virtual const X86ELFWriterInfo *getELFWriterInfo() const {
    return Subtarget.isTargetELF() ? &ELFWriterInfo : 0;
  }

  // Set up the pass pipeline.
  virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
  virtual bool addPreRegAlloc(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
  virtual bool addPostRegAlloc(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
  virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel,
                              JITCodeEmitter &JCE);
};

/// X86_32TargetMachine - X86 32-bit target machine.
///
class X86_32TargetMachine : public X86TargetMachine {
public:
  X86_32TargetMachine(const Target &T, const std::string &M,
                      const std::string &FS);
};

/// X86_64TargetMachine - X86 64-bit target machine.
///
class X86_64TargetMachine : public X86TargetMachine {
public:
  X86_64TargetMachine(const Target &T, const std::string &TT,
                      const std::string &FS);
};

} // End llvm namespace

#endif