blob: a822dff33b5b1a1f1d50371864da02da6d07701e [file] [log] [blame]
Nikolai Bozhenovebbde142017-09-19 11:54:29 +00001//===-- Nios2Subtarget.h - Define Subtarget for the Nios2 -------*- 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 Nios2 specific subclass of TargetSubtargetInfo.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_NIOS2_NIOS2SUBTARGET_H
15#define LLVM_LIB_TARGET_NIOS2_NIOS2SUBTARGET_H
16
17#include "Nios2FrameLowering.h"
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000018#include "Nios2ISelLowering.h"
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000019#include "Nios2InstrInfo.h"
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000020#include "llvm/CodeGen/SelectionDAGTargetInfo.h"
21#include "llvm/CodeGen/TargetFrameLowering.h"
David Blaikieb3bde2e2017-11-17 01:07:10 +000022#include "llvm/CodeGen/TargetSubtargetInfo.h"
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000023
24#define GET_SUBTARGETINFO_HEADER
25#include "Nios2GenSubtargetInfo.inc"
26
27namespace llvm {
28class StringRef;
29
30class Nios2TargetMachine;
31
32class Nios2Subtarget : public Nios2GenSubtargetInfo {
33 virtual void anchor();
34
35public:
36 // Nios2 R2 features
37 // Bit manipulation instructions extension
38 bool HasBMX;
39 // Code Density instructions extension
40 bool HasCDX;
41 // Multi-Processor instructions extension
42 bool HasMPX;
43 // New mandatory instructions
44 bool HasR2Mandatory;
45
46protected:
47 enum Nios2ArchEnum {
48 // Nios2 R1 ISA
49 Nios2r1,
50 // Nios2 R2 ISA
51 Nios2r2
52 };
53
54 // Nios2 architecture version
55 Nios2ArchEnum Nios2ArchVersion;
56
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000057 Triple TargetTriple;
58
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000059 Nios2InstrInfo InstrInfo;
60 Nios2TargetLowering TLInfo;
61 SelectionDAGTargetInfo TSInfo;
62 Nios2FrameLowering FrameLowering;
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000063
64public:
65 /// This constructor initializes the data members to match that
66 /// of the specified triple.
67 Nios2Subtarget(const Triple &TT, const std::string &CPU,
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000068 const std::string &FS, const TargetMachine &TM);
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000069
70 /// ParseSubtargetFeatures - Parses features string setting specified
71 /// subtarget options. Definition of function is auto generated by tblgen.
72 void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
73
74 bool hasNios2r1() const { return Nios2ArchVersion >= Nios2r1; }
75 bool isNios2r1() const { return Nios2ArchVersion == Nios2r1; }
76 bool hasNios2r2() const { return Nios2ArchVersion >= Nios2r2; }
77 bool isNios2r2() const { return Nios2ArchVersion == Nios2r2; }
78
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000079 Nios2Subtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000080
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000081 const Nios2InstrInfo *getInstrInfo() const override { return &InstrInfo; }
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000082 const TargetFrameLowering *getFrameLowering() const override {
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000083 return &FrameLowering;
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000084 }
85 const Nios2RegisterInfo *getRegisterInfo() const override {
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000086 return &InstrInfo.getRegisterInfo();
87 }
88 const Nios2TargetLowering *getTargetLowering() const override {
89 return &TLInfo;
90 }
91 const SelectionDAGTargetInfo *getSelectionDAGInfo() const override {
92 return &TSInfo;
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000093 }
94};
95} // namespace llvm
96
97#endif