XCoreTargetMachine.h revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//===-- XCoreTargetMachine.h - Define TargetMachine for XCore ---*- C++ -*-===//
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//                     The LLVM Compiler Infrastructure
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// This file is distributed under the University of Illinois Open Source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// License. See LICENSE.TXT for details.
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//===----------------------------------------------------------------------===//
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// This file declares the XCore specific subclass of TargetMachine.
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//===----------------------------------------------------------------------===//
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef XCORETARGETMACHINE_H
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define XCORETARGETMACHINE_H
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "XCoreSubtarget.h"
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "llvm/Target/TargetMachine.h"
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace llvm {
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass XCoreTargetMachine : public LLVMTargetMachine {
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  XCoreSubtarget Subtarget;
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  XCoreTargetMachine(const Target &T, StringRef TT,
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                     StringRef CPU, StringRef FS, const TargetOptions &Options,
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                     Reloc::Model RM, CodeModel::Model CM,
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                     CodeGenOpt::Level OL);
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  const XCoreInstrInfo *getInstrInfo() const override {
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return getSubtargetImpl()->getInstrInfo();
32fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  }
33fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  const XCoreFrameLowering *getFrameLowering() const override {
34fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org    return getSubtargetImpl()->getFrameLowering();
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
36fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  const XCoreSubtarget *getSubtargetImpl() const override { return &Subtarget; }
37fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  const XCoreTargetLowering *getTargetLowering() const override {
38fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org    return getSubtargetImpl()->getTargetLowering();
39fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  }
40fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  const XCoreSelectionDAGInfo* getSelectionDAGInfo() const override {
41fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org    return getSubtargetImpl()->getSelectionDAGInfo();
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  const TargetRegisterInfo *getRegisterInfo() const override {
44fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org    return getSubtargetImpl()->getRegisterInfo();
45fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  }
46fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  const DataLayout *getDataLayout() const override {
47fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org    return getSubtargetImpl()->getDataLayout();
48fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  }
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Pass Pipeline Configuration
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  void addAnalysisPasses(PassManagerBase &PM) override;
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // end namespace llvm
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org