XCoreTargetMachine.h revision b25baef26f03b9909b65dd5f762b38f93000445d
1b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne//===-- XCoreTargetMachine.h - Define TargetMachine for XCore ---*- C++ -*-===// 2b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 3b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// The LLVM Compiler Infrastructure 4b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 5b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// This file is distributed under the University of Illinois Open Source 6b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// License. See LICENSE.TXT for details. 7b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 8b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne//===----------------------------------------------------------------------===// 9b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 10b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// This file declares the XCore specific subclass of TargetMachine. 11b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 12b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne//===----------------------------------------------------------------------===// 13b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 14b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#ifndef XCORETARGETMACHINE_H 15b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#define XCORETARGETMACHINE_H 16b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 17b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "llvm/Target/TargetMachine.h" 18b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "llvm/Target/TargetData.h" 19b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "XCoreFrameInfo.h" 20b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "XCoreSubtarget.h" 21b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "XCoreInstrInfo.h" 22b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "XCoreISelLowering.h" 23b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 24b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornenamespace llvm { 25b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 26b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborneclass Module; 27b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 28b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborneclass XCoreTargetMachine : public LLVMTargetMachine { 29b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne XCoreSubtarget Subtarget; 30b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne const TargetData DataLayout; // Calculates type size & alignment 31b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne XCoreInstrInfo InstrInfo; 32b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne XCoreFrameInfo FrameInfo; 33b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne XCoreTargetLowering TLInfo; 34b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 35b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborneprotected: 36b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual const TargetAsmInfo *createTargetAsmInfo() const; 37b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 38b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornepublic: 39b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne XCoreTargetMachine(const Module &M, const std::string &FS); 40b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 41b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual const XCoreInstrInfo *getInstrInfo() const { return &InstrInfo; } 42b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual const XCoreFrameInfo *getFrameInfo() const { return &FrameInfo; } 43b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual const XCoreSubtarget *getSubtargetImpl() const { return &Subtarget; } 44b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual XCoreTargetLowering *getTargetLowering() const { 45b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne return const_cast<XCoreTargetLowering*>(&TLInfo); 46b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne } 47b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 48b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual const TargetRegisterInfo *getRegisterInfo() const { 49b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne return &InstrInfo.getRegisterInfo(); 50b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne } 51b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual const TargetData *getTargetData() const { return &DataLayout; } 52b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne static unsigned getModuleMatchQuality(const Module &M); 53b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 54b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne // Pass Pipeline Configuration 55b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual bool addInstSelector(PassManagerBase &PM, bool Fast); 56b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne virtual bool addAssemblyEmitter(PassManagerBase &PM, bool Fast, 57b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne raw_ostream &Out); 58b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne}; 59b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 60b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne} // end namespace llvm 61b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 62b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#endif 63