blob: d03a5c542bb70204b66d3f3d0d121ed6c0d7a124 [file] [log] [blame]
Dylan McKay6d8078f2016-05-06 10:12:31 +00001//===-- AVRTargetMachine.h - Define TargetMachine for AVR -------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file declares the AVR specific subclass of TargetMachine.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_AVR_TARGET_MACHINE_H
15#define LLVM_AVR_TARGET_MACHINE_H
16
17#include "AVRConfig.h"
18
19#include "llvm/IR/DataLayout.h"
20#include "llvm/Target/TargetMachine.h"
21
22#include "AVRFrameLowering.h"
23#include "AVRISelLowering.h"
24#include "AVRInstrInfo.h"
25#include "AVRSelectionDAGInfo.h"
26#include "AVRSubtarget.h"
27
28namespace llvm {
29
30/**
31 * A generic AVR implementation.
32 */
33class AVRTargetMachine : public LLVMTargetMachine {
34public:
35 AVRTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
36 StringRef FS, const TargetOptions &Options, Reloc::Model RM,
37 CodeModel::Model CM, CodeGenOpt::Level OL);
38
39 const AVRSubtarget *getSubtargetImpl() const;
40 const AVRSubtarget *getSubtargetImpl(const Function &) const override;
41
42 TargetLoweringObjectFile *getObjFileLowering() const override {
43 return this->TLOF.get();
44 }
45
46 // Pass Pipeline Configuration.
47 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
48
49private:
50 std::unique_ptr<TargetLoweringObjectFile> TLOF;
51 AVRSubtarget SubTarget;
52};
53
54} // end namespace llvm
55
56#endif // LLVM_AVR_TARGET_MACHINE_H