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