SparcTargetMachine.h revision 6f0d024a534af18d9e60b3ea757376cd8a3a980e
1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===-- SparcTargetMachine.h - Define TargetMachine for Sparc ---*- C++ -*-===//
2dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt//
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//                     The LLVM Compiler Infrastructure
47967c95891c5f65f6312fbbcb999ac257d776914Warren Hunt//
5dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// This file is distributed under the University of Illinois Open Source
6dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// License. See LICENSE.TXT for details.
7dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt//
8dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt//===----------------------------------------------------------------------===//
9dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt//
10dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt// This file declares the Sparc specific subclass of TargetMachine.
11dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt//
12dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt//===----------------------------------------------------------------------===//
13dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
14dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt#ifndef SPARCTARGETMACHINE_H
15dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt#define SPARCTARGETMACHINE_H
16dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
17dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt#include "llvm/Target/TargetMachine.h"
18dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt#include "llvm/Target/TargetData.h"
19dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt#include "llvm/Target/TargetFrameInfo.h"
20dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt#include "SparcInstrInfo.h"
21dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt#include "SparcSubtarget.h"
22dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
23dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntnamespace llvm {
24dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
25dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntclass Module;
26dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
27dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntclass SparcTargetMachine : public LLVMTargetMachine {
28dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  const TargetData DataLayout;       // Calculates type size & alignment
29dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  SparcSubtarget Subtarget;
30dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  SparcInstrInfo InstrInfo;
31dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  TargetFrameInfo FrameInfo;
32dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
33dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntprotected:
34dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  virtual const TargetAsmInfo *createTargetAsmInfo() const;
35dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
36dc58180432868cfa9c060d5c41114634e4b841c7Warren Huntpublic:
37dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  SparcTargetMachine(const Module &M, const std::string &FS);
38dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt
39dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  virtual const SparcInstrInfo *getInstrInfo() const { return &InstrInfo; }
40dc58180432868cfa9c060d5c41114634e4b841c7Warren Hunt  virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  virtual const TargetSubtarget  *getSubtargetImpl() const{ return &Subtarget; }
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  virtual const TargetRegisterInfo *getRegisterInfo() const {
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    return &InstrInfo.getRegisterInfo();
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  }
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  virtual const TargetData       *getTargetData() const { return &DataLayout; }
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  static unsigned getModuleMatchQuality(const Module &M);
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // Pass Pipeline Configuration
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  virtual bool addInstSelector(FunctionPassManager &PM, bool Fast);
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  virtual bool addPreEmitPass(FunctionPassManager &PM, bool Fast);
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast,
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                                  std::ostream &Out);
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace llvm
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#endif
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines