1910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner//===-- XCoreSubtarget.h - Define Subtarget for the XCore -------*- C++ -*-===// 2910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// 3910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// 5910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// This file is distributed under the University of Illinois Open Source 6910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// License. See LICENSE.TXT for details. 7910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// 8910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// 10910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// This file declares the XCore specific subclass of TargetSubtargetInfo. 11910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner// 12910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner//===----------------------------------------------------------------------===// 13910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 14910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#ifndef XCORESUBTARGET_H 15910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#define XCORESUBTARGET_H 16910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 17910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "XCoreFrameLowering.h" 18910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "XCoreISelLowering.h" 19910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "XCoreInstrInfo.h" 20910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "XCoreSelectionDAGInfo.h" 21910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "llvm/IR/DataLayout.h" 22910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "llvm/Target/TargetMachine.h" 23910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "llvm/Target/TargetSubtargetInfo.h" 24910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include <string> 25910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 26910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#define GET_SUBTARGETINFO_HEADER 27910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#include "XCoreGenSubtargetInfo.inc" 28910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 29910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turnernamespace llvm { 30910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turnerclass StringRef; 31910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 32910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turnerclass XCoreSubtarget : public XCoreGenSubtargetInfo { 33910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner virtual void anchor(); 34910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const DataLayout DL; // Calculates type size & alignment 35910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner XCoreInstrInfo InstrInfo; 36910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner XCoreFrameLowering FrameLowering; 37910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner XCoreTargetLowering TLInfo; 38910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner XCoreSelectionDAGInfo TSInfo; 39910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 40910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turnerpublic: 41910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner /// This constructor initializes the data members to match that 42910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner /// of the specified triple. 43910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner /// 44910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner XCoreSubtarget(const std::string &TT, const std::string &CPU, 45910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const std::string &FS, const TargetMachine &TM); 46910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 47910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner /// ParseSubtargetFeatures - Parses features string setting specified 48910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner /// subtarget options. Definition of function is auto generated by tblgen. 49910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 50910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 51910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const XCoreInstrInfo *getInstrInfo() const { return &InstrInfo; } 52910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const XCoreFrameLowering *getFrameLowering() const { return &FrameLowering; } 53910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const XCoreTargetLowering *getTargetLowering() const { return &TLInfo; } 54910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const XCoreSelectionDAGInfo *getSelectionDAGInfo() const { return &TSInfo; } 55910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const TargetRegisterInfo *getRegisterInfo() const { 56910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner return &InstrInfo.getRegisterInfo(); 57910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner } 58910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner const DataLayout *getDataLayout() const { return &DL; } 59910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner}; 60910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner} // End llvm namespace 61910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner 62910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner#endif 63910aea96b67d7f0357f586c47f20848ec435aa1bDavid 'Digit' Turner