LLVM  8.0.1
AVRSubtarget.h
Go to the documentation of this file.
1 //===-- AVRSubtarget.h - Define Subtarget for the 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 TargetSubtargetInfo.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_AVR_SUBTARGET_H
15 #define LLVM_AVR_SUBTARGET_H
16 
18 #include "llvm/IR/DataLayout.h"
20 
21 #include "AVRFrameLowering.h"
22 #include "AVRISelLowering.h"
23 #include "AVRInstrInfo.h"
24 #include "AVRSelectionDAGInfo.h"
25 
26 #define GET_SUBTARGETINFO_HEADER
27 #include "AVRGenSubtargetInfo.inc"
28 
29 namespace llvm {
30 
31 /// A specific AVR target MCU.
33 public:
34  //! Creates an AVR subtarget.
35  //! \param TT The target triple.
36  //! \param CPU The CPU to target.
37  //! \param FS The feature string.
38  //! \param TM The target machine.
39  AVRSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
40  const AVRTargetMachine &TM);
41 
42  const AVRInstrInfo *getInstrInfo() const override { return &InstrInfo; }
43  const TargetFrameLowering *getFrameLowering() const override { return &FrameLowering; }
44  const AVRTargetLowering *getTargetLowering() const override { return &TLInfo; }
45  const AVRSelectionDAGInfo *getSelectionDAGInfo() const override { return &TSInfo; }
46  const AVRRegisterInfo *getRegisterInfo() const override { return &InstrInfo.getRegisterInfo(); }
47 
48  /// Parses a subtarget feature string, setting appropriate options.
49  /// \note Definition of function is auto generated by `tblgen`.
51 
53  const TargetMachine &TM);
54 
55  // Subtarget feature getters.
56  // See AVR.td for details.
57  bool hasSRAM() const { return m_hasSRAM; }
58  bool hasJMPCALL() const { return m_hasJMPCALL; }
59  bool hasIJMPCALL() const { return m_hasIJMPCALL; }
60  bool hasEIJMPCALL() const { return m_hasEIJMPCALL; }
61  bool hasADDSUBIW() const { return m_hasADDSUBIW; }
62  bool hasSmallStack() const { return m_hasSmallStack; }
63  bool hasMOVW() const { return m_hasMOVW; }
64  bool hasLPM() const { return m_hasLPM; }
65  bool hasLPMX() const { return m_hasLPMX; }
66  bool hasELPM() const { return m_hasELPM; }
67  bool hasELPMX() const { return m_hasELPMX; }
68  bool hasSPM() const { return m_hasSPM; }
69  bool hasSPMX() const { return m_hasSPMX; }
70  bool hasDES() const { return m_hasDES; }
71  bool supportsRMW() const { return m_supportsRMW; }
72  bool supportsMultiplication() const { return m_supportsMultiplication; }
73  bool hasBREAK() const { return m_hasBREAK; }
74  bool hasTinyEncoding() const { return m_hasTinyEncoding; }
75 
76  /// Gets the ELF architecture for the e_flags field
77  /// of an ELF object file.
78  unsigned getELFArch() const {
79  assert(ELFArch != 0 &&
80  "every device must have an associate ELF architecture");
81  return ELFArch;
82  }
83 
84 private:
85  AVRInstrInfo InstrInfo;
86  AVRFrameLowering FrameLowering;
87  AVRTargetLowering TLInfo;
88  AVRSelectionDAGInfo TSInfo;
89 
90  // Subtarget feature settings
91  // See AVR.td for details.
92  bool m_hasSRAM;
93  bool m_hasJMPCALL;
94  bool m_hasIJMPCALL;
95  bool m_hasEIJMPCALL;
96  bool m_hasADDSUBIW;
97  bool m_hasSmallStack;
98  bool m_hasMOVW;
99  bool m_hasLPM;
100  bool m_hasLPMX;
101  bool m_hasELPM;
102  bool m_hasELPMX;
103  bool m_hasSPM;
104  bool m_hasSPMX;
105  bool m_hasDES;
106  bool m_supportsRMW;
107  bool m_supportsMultiplication;
108  bool m_hasBREAK;
109  bool m_hasTinyEncoding;
110 
111  /// The ELF e_flags architecture.
112  unsigned ELFArch;
113 
114  // Dummy member, used by FeatureSet's. We cannot have a SubtargetFeature with
115  // no variable, so we instead bind pseudo features to this variable.
116  bool m_FeatureSetDummy;
117 };
118 
119 } // end namespace llvm
120 
121 #endif // LLVM_AVR_SUBTARGET_H
const AVRInstrInfo * getInstrInfo() const override
Definition: AVRSubtarget.h:42
unsigned getELFArch() const
Gets the ELF architecture for the e_flags field of an ELF object file.
Definition: AVRSubtarget.h:78
bool hasELPMX() const
Definition: AVRSubtarget.h:67
bool hasSPMX() const
Definition: AVRSubtarget.h:69
This class represents lattice values for constants.
Definition: AllocatorList.h:24
bool hasLPMX() const
Definition: AVRSubtarget.h:65
const AVRSelectionDAGInfo * getSelectionDAGInfo() const override
Definition: AVRSubtarget.h:45
bool hasDES() const
Definition: AVRSubtarget.h:70
Utilities relating to AVR registers.
const AVRTargetLowering * getTargetLowering() const override
Definition: AVRSubtarget.h:44
bool hasSPM() const
Definition: AVRSubtarget.h:68
A generic AVR implementation.
Utilities related to the AVR instruction set.
Definition: AVRInstrInfo.h:65
void ParseSubtargetFeatures(StringRef CPU, StringRef FS)
Parses a subtarget feature string, setting appropriate options.
bool hasMOVW() const
Definition: AVRSubtarget.h:63
bool hasADDSUBIW() const
Definition: AVRSubtarget.h:61
bool hasTinyEncoding() const
Definition: AVRSubtarget.h:74
bool hasJMPCALL() const
Definition: AVRSubtarget.h:58
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
Holds information about the AVR instruction selection DAG.
bool hasBREAK() const
Definition: AVRSubtarget.h:73
bool hasSmallStack() const
Definition: AVRSubtarget.h:62
Performs target lowering for the AVR.
Information about stack frame layout on the target.
bool hasLPM() const
Definition: AVRSubtarget.h:64
A specific AVR target MCU.
Definition: AVRSubtarget.h:32
AVRSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS, const TargetMachine &TM)
Utilities for creating function call frames.
bool hasSRAM() const
Definition: AVRSubtarget.h:57
AVRSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const AVRTargetMachine &TM)
Creates an AVR subtarget.
bool supportsRMW() const
Definition: AVRSubtarget.h:71
const AVRRegisterInfo & getRegisterInfo() const
Definition: AVRInstrInfo.h:69
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
const TargetFrameLowering * getFrameLowering() const override
Definition: AVRSubtarget.h:43
const AVRRegisterInfo * getRegisterInfo() const override
Definition: AVRSubtarget.h:46
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:59
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
bool hasIJMPCALL() const
Definition: AVRSubtarget.h:59
bool supportsMultiplication() const
Definition: AVRSubtarget.h:72
bool hasEIJMPCALL() const
Definition: AVRSubtarget.h:60
bool hasELPM() const
Definition: AVRSubtarget.h:66