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

Tree @release_34 (Download .tar.gz)

X86TargetMachine.h @release_34

b4f68ed
0e0a7a4
856ba76
 
4ee451d
 
0e0a7a4
856ba76
0e0a7a4
b4f68ed
 
 
 
 
 
 
c4c6257
16c29b5
a1514e2
 
3346491
ff7a562
3346491
0b8c9a8
16c29b5
a1514e2
b4f68ed
d0fde30
8247e0d
4396613
d0fde30
1911fd4
922d314
 
 
fde1b3b
b4f68ed
8247e0d
8a8d479
34ad6db
b95fc31
34ad6db
b4f68ed
0febc46
 
 
16c29b5
 
 
0febc46
 
 
c9f5f3f
0febc46
 
98d0d7d
8247e0d
0febc46
ff7a562
c9f5f3f
0febc46
fde4b51
922d314
 
 
fde4b51
aeef83c
 
 
1911fd4
061efcf
843ee2e
b95fc31
cfe9a60
b4f68ed
25ab690
 
 
 
2d24e2a
3574eca
0febc46
 
ba836a2
0febc46
25ab690
4396613
8a8d479
b95fc31
 
3574eca
0febc46
 
 
8247e0d
0febc46
 
 
 
 
 
 
 
25ab690
 
 
 
 
2d24e2a
3574eca
0febc46
 
ba836a2
0febc46
25ab690
4396613
8a8d479
b95fc31
 
3574eca
0febc46
 
 
8247e0d
0febc46
 
 
 
 
 
 
 
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 "X86.h"
#include "X86FrameLowering.h"
#include "X86ISelLowering.h"
#include "X86InstrInfo.h"
#include "X86JITInfo.h"
#include "X86SelectionDAGInfo.h"
#include "X86Subtarget.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/Target/TargetFrameLowering.h"
#include "llvm/Target/TargetMachine.h"

namespace llvm {

class StringRef;

class X86TargetMachine : public LLVMTargetMachine {
  X86Subtarget       Subtarget;
  X86FrameLowering   FrameLowering;
  InstrItineraryData InstrItins;

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

  virtual const X86InstrInfo     *getInstrInfo() const {
    llvm_unreachable("getInstrInfo not implemented");
  }
  virtual const TargetFrameLowering  *getFrameLowering() const {
    return &FrameLowering;
  }
  virtual       X86JITInfo       *getJITInfo()         {
    llvm_unreachable("getJITInfo not implemented");
  }
  virtual const X86Subtarget     *getSubtargetImpl() const{ return &Subtarget; }
  virtual const X86TargetLowering *getTargetLowering() const {
    llvm_unreachable("getTargetLowering not implemented");
  }
  virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const {
    llvm_unreachable("getSelectionDAGInfo not implemented");
  }
  virtual const X86RegisterInfo  *getRegisterInfo() const {
    return &getInstrInfo()->getRegisterInfo();
  }
  virtual const InstrItineraryData *getInstrItineraryData() const {
    return &InstrItins;
  }

  /// \brief Register X86 analysis passes with a pass manager.
  virtual void addAnalysisPasses(PassManagerBase &PM);

  // Set up the pass pipeline.
  virtual TargetPassConfig *createPassConfig(PassManagerBase &PM);

  virtual bool addCodeEmitter(PassManagerBase &PM,
                              JITCodeEmitter &JCE);
};

/// X86_32TargetMachine - X86 32-bit target machine.
///
class X86_32TargetMachine : public X86TargetMachine {
  virtual void anchor();
  const DataLayout  DL; // Calculates type size & alignment
  X86InstrInfo      InstrInfo;
  X86TargetLowering TLInfo;
  X86SelectionDAGInfo TSInfo;
  X86JITInfo        JITInfo;
public:
  X86_32TargetMachine(const Target &T, StringRef TT,
                      StringRef CPU, StringRef FS, const TargetOptions &Options,
                      Reloc::Model RM, CodeModel::Model CM,
                      CodeGenOpt::Level OL);
  virtual const DataLayout *getDataLayout() const { return &DL; }
  virtual const X86TargetLowering *getTargetLowering() const {
    return &TLInfo;
  }
  virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const {
    return &TSInfo;
  }
  virtual const X86InstrInfo     *getInstrInfo() const {
    return &InstrInfo;
  }
  virtual       X86JITInfo       *getJITInfo()         {
    return &JITInfo;
  }
};

/// X86_64TargetMachine - X86 64-bit target machine.
///
class X86_64TargetMachine : public X86TargetMachine {
  virtual void anchor();
  const DataLayout  DL; // Calculates type size & alignment
  X86InstrInfo      InstrInfo;
  X86TargetLowering TLInfo;
  X86SelectionDAGInfo TSInfo;
  X86JITInfo        JITInfo;
public:
  X86_64TargetMachine(const Target &T, StringRef TT,
                      StringRef CPU, StringRef FS, const TargetOptions &Options,
                      Reloc::Model RM, CodeModel::Model CM,
                      CodeGenOpt::Level OL);
  virtual const DataLayout *getDataLayout() const { return &DL; }
  virtual const X86TargetLowering *getTargetLowering() const {
    return &TLInfo;
  }
  virtual const X86SelectionDAGInfo *getSelectionDAGInfo() const {
    return &TSInfo;
  }
  virtual const X86InstrInfo     *getInstrInfo() const {
    return &InstrInfo;
  }
  virtual       X86JITInfo       *getJITInfo()         {
    return &JITInfo;
  }
};

} // End llvm namespace

#endif