LLVM 22.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
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Utilities for creating function call frames.
Utilities related to the AVR instruction set.
Utilities relating to AVR registers.
Holds information about the AVR instruction selection DAG.
Register getTmpRegister() const
uint8_t getIORegisterOffset() const
unsigned getELFArch() const
Gets the ELF architecture for the e_flags field of an ELF object file.
const TargetFrameLowering * getFrameLowering() const override
int getIORegRAMPZ() const
Get I/O register addresses.
Register getZeroRegister() const
int getIORegSPL() const
int getRegTmpIndex() const
Get GPR aliases.
const AVRInstrInfo * getInstrInfo() const override
int getIORegSREG() const
int getIORegEIND() const
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
Parses a subtarget feature string, setting appropriate options.
const AVRSelectionDAGInfo * getSelectionDAGInfo() const override
bool enableSubRegLiveness() const override
int getRegZeroIndex() const
const AVRTargetLowering * getTargetLowering() const override
AVRSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const AVRTargetMachine &TM)
Creates an AVR subtarget.
AVRSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS, const TargetMachine &TM)
int getIORegSPH() const
const AVRRegisterInfo * getRegisterInfo() const override
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:55
Information about stack frame layout on the target.
Primary interface to the complete machine description for the target machine.
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:47
This is an optimization pass for GlobalISel generic memory operations.