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
17a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "XCoreSubtarget.h"
1879aa3417eb6f58d668aadfedf075240a41d35a26Craig Topper#include "llvm/Target/TargetMachine.h"
19b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne
20b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornenamespace llvm {
21b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne
22b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborneclass XCoreTargetMachine : public LLVMTargetMachine {
23b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne  XCoreSubtarget Subtarget;
24b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornepublic:
25439661395fd2a2a832dba01c65bc88718528313cEvan Cheng  XCoreTargetMachine(const Target &T, StringRef TT,
268a8d479214745c82ef00f08d4e4f1c173b5f9ce2Nick Lewycky                     StringRef CPU, StringRef FS, const TargetOptions &Options,
27b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng                     Reloc::Model RM, CodeModel::Model CM,
28b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng                     CodeGenOpt::Level OL);
29b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne
30cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  const XCoreInstrInfo *getInstrInfo() const override {
31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return getSubtargetImpl()->getInstrInfo();
32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  }
33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const XCoreFrameLowering *getFrameLowering() const override {
34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return getSubtargetImpl()->getFrameLowering();
3516c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov  }
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const XCoreSubtarget *getSubtargetImpl() const override { return &Subtarget; }
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const XCoreTargetLowering *getTargetLowering() const override {
38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return getSubtargetImpl()->getTargetLowering();
39b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne  }
40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const XCoreSelectionDAGInfo* getSelectionDAGInfo() const override {
41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return getSubtargetImpl()->getSelectionDAGInfo();
42ff7a562751604a9fe13efc75bd59622244b54d35Dan Gohman  }
43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const TargetRegisterInfo *getRegisterInfo() const override {
44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return getSubtargetImpl()->getRegisterInfo();
45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  }
46cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  const DataLayout *getDataLayout() const override {
47cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return getSubtargetImpl()->getDataLayout();
48b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne  }
49b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne
50b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne  // Pass Pipeline Configuration
51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
52d072d1b2a36f6c6e1b4b513dc69e91b61ad8c21aRobert Lytton
53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void addAnalysisPasses(PassManagerBase &PM) override;
54b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne};
55b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne
56b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne} // end namespace llvm
57b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne
58b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#endif
59