LLVM 20.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"
25
26#define GET_SUBTARGETINFO_HEADER
27#include "AVRGenSubtargetInfo.inc"
28
29namespace llvm {
30
31/// A specific AVR target MCU.
33public:
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 {
44 return &FrameLowering;
45 }
46 const AVRTargetLowering *getTargetLowering() const override {
47 return &TLInfo;
48 }
49 const AVRSelectionDAGInfo *getSelectionDAGInfo() const override {
50 return &TSInfo;
51 }
52 const AVRRegisterInfo *getRegisterInfo() const override {
53 return &InstrInfo.getRegisterInfo();
54 }
55
56 /// Parses a subtarget feature string, setting appropriate options.
57 /// \note Definition of function is auto generated by `tblgen`.
59
61 const TargetMachine &TM);
62
63 // Subtarget feature getters.
64#define GET_SUBTARGETINFO_MACRO(ATTRIBUTE, DEFAULT, GETTER) \
65 bool GETTER() const { return ATTRIBUTE; }
66#include "AVRGenSubtargetInfo.inc"
67
68 uint8_t getIORegisterOffset() const { return hasMemMappedGPR() ? 0x20 : 0x0; }
69
70 bool enableSubRegLiveness() const override { return true; }
71
72 /// Gets the ELF architecture for the e_flags field
73 /// of an ELF object file.
74 unsigned getELFArch() const {
75 assert(ELFArch != 0 &&
76 "every device must have an associate ELF architecture");
77 return ELFArch;
78 }
79
80 /// Get I/O register addresses.
81 int getIORegRAMPZ() const { return hasELPM() ? 0x3b : -1; }
82 int getIORegEIND() const { return hasEIJMPCALL() ? 0x3c : -1; }
83 int getIORegSPL() const { return 0x3d; }
84 int getIORegSPH() const { return hasSmallStack() ? -1 : 0x3e; }
85 int getIORegSREG() const { return 0x3f; }
86
87 /// Get GPR aliases.
88 int getRegTmpIndex() const { return hasTinyEncoding() ? 16 : 0; }
89 int getRegZeroIndex() const { return hasTinyEncoding() ? 17 : 1; }
90
92 return hasTinyEncoding() ? AVR::R16 : AVR::R0;
93 }
95 return hasTinyEncoding() ? AVR::R17 : AVR::R1;
96 }
97
98private:
99 /// The ELF e_flags architecture.
100 unsigned ELFArch = 0;
101
102 // Subtarget feature settings
103#define GET_SUBTARGETINFO_MACRO(ATTRIBUTE, DEFAULT, GETTER) \
104 bool ATTRIBUTE = DEFAULT;
105#include "AVRGenSubtargetInfo.inc"
106
107 AVRInstrInfo InstrInfo;
108 AVRFrameLowering FrameLowering;
109 AVRTargetLowering TLInfo;
110 AVRSelectionDAGInfo TSInfo;
111};
112
113} // end namespace llvm
114
115#endif // LLVM_AVR_SUBTARGET_H
const char LLVMTargetMachineRef TM
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Utilities related to the AVR instruction set.
Definition: AVRInstrInfo.h:66
const AVRRegisterInfo & getRegisterInfo() const
Definition: AVRInstrInfo.h:70
Utilities relating to AVR registers.
Holds information about the AVR instruction selection DAG.
A specific AVR target MCU.
Definition: AVRSubtarget.h:32
Register getTmpRegister() const
Definition: AVRSubtarget.h:91
uint8_t getIORegisterOffset() const
Definition: AVRSubtarget.h:68
unsigned getELFArch() const
Gets the ELF architecture for the e_flags field of an ELF object file.
Definition: AVRSubtarget.h:74
const TargetFrameLowering * getFrameLowering() const override
Definition: AVRSubtarget.h:43
int getIORegRAMPZ() const
Get I/O register addresses.
Definition: AVRSubtarget.h:81
Register getZeroRegister() const
Definition: AVRSubtarget.h:94
int getIORegSPL() const
Definition: AVRSubtarget.h:83
int getRegTmpIndex() const
Get GPR aliases.
Definition: AVRSubtarget.h:88
const AVRInstrInfo * getInstrInfo() const override
Definition: AVRSubtarget.h:42
int getIORegSREG() const
Definition: AVRSubtarget.h:85
int getIORegEIND() const
Definition: AVRSubtarget.h:82
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
Parses a subtarget feature string, setting appropriate options.
const AVRSelectionDAGInfo * getSelectionDAGInfo() const override
Definition: AVRSubtarget.h:49
bool enableSubRegLiveness() const override
Definition: AVRSubtarget.h:70
int getRegZeroIndex() const
Definition: AVRSubtarget.h:89
const AVRTargetLowering * getTargetLowering() const override
Definition: AVRSubtarget.h:46
AVRSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS, const TargetMachine &TM)
int getIORegSPH() const
Definition: AVRSubtarget.h:84
const AVRRegisterInfo * getRegisterInfo() const override
Definition: AVRSubtarget.h:52
Performs target lowering for the AVR.
A generic AVR implementation.
Wrapper class representing virtual and physical registers.
Definition: Register.h:19
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
Information about stack frame layout on the target.
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:77
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18