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