1//===-- AVR.h - Top-level interface for AVR representation ------*- 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 contains the entry points for global functions defined in the LLVM 10// AVR back-end. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_AVR_H 15#define LLVM_AVR_H 16 17#include "llvm/CodeGen/SelectionDAGNodes.h" 18#include "llvm/Target/TargetMachine.h" 19 20namespace llvm { 21 22class AVRTargetMachine; 23class FunctionPass; 24 25FunctionPass *createAVRISelDag(AVRTargetMachine &TM, 26 CodeGenOpt::Level OptLevel); 27FunctionPass *createAVRExpandPseudoPass(); 28FunctionPass *createAVRFrameAnalyzerPass(); 29FunctionPass *createAVRRelaxMemPass(); 30FunctionPass *createAVRDynAllocaSRPass(); 31FunctionPass *createAVRBranchSelectionPass(); 32 33void initializeAVRExpandPseudoPass(PassRegistry&); 34void initializeAVRRelaxMemPass(PassRegistry&); 35 36/// Contains the AVR backend. 37namespace AVR { 38 39/// An integer that identifies all of the supported AVR address spaces. 40enum AddressSpace { DataMemory, ProgramMemory }; 41 42/// Checks if a given type is a pointer to program memory. 43template <typename T> bool isProgramMemoryAddress(T *V) { 44 return cast<PointerType>(V->getType())->getAddressSpace() == ProgramMemory; 45} 46 47inline bool isProgramMemoryAccess(MemSDNode const *N) { 48 auto V = N->getMemOperand()->getValue(); 49 50 return (V != nullptr) ? isProgramMemoryAddress(V) : false; 51} 52 53} // end of namespace AVR 54 55} // end namespace llvm 56 57#endif // LLVM_AVR_H 58