|  | //===-- AVR.h - Top-level interface for AVR representation ------*- C++ -*-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file contains the entry points for global functions defined in the LLVM | 
|  | // AVR back-end. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_AVR_H | 
|  | #define LLVM_AVR_H | 
|  |  | 
|  | #include "llvm/CodeGen/SelectionDAGNodes.h" | 
|  | #include "llvm/Target/TargetMachine.h" | 
|  |  | 
|  | namespace llvm { | 
|  |  | 
|  | class AVRTargetMachine; | 
|  | class FunctionPass; | 
|  |  | 
|  | FunctionPass *createAVRISelDag(AVRTargetMachine &TM, | 
|  | CodeGenOpt::Level OptLevel); | 
|  | FunctionPass *createAVRExpandPseudoPass(); | 
|  | FunctionPass *createAVRFrameAnalyzerPass(); | 
|  | FunctionPass *createAVRRelaxMemPass(); | 
|  | FunctionPass *createAVRDynAllocaSRPass(); | 
|  | FunctionPass *createAVRBranchSelectionPass(); | 
|  |  | 
|  | void initializeAVRExpandPseudoPass(PassRegistry&); | 
|  | void initializeAVRRelaxMemPass(PassRegistry&); | 
|  |  | 
|  | /// Contains the AVR backend. | 
|  | namespace AVR { | 
|  |  | 
|  | /// An integer that identifies all of the supported AVR address spaces. | 
|  | enum AddressSpace { DataMemory, ProgramMemory }; | 
|  |  | 
|  | /// Checks if a given type is a pointer to program memory. | 
|  | template <typename T> bool isProgramMemoryAddress(T *V) { | 
|  | return cast<PointerType>(V->getType())->getAddressSpace() == ProgramMemory; | 
|  | } | 
|  |  | 
|  | inline bool isProgramMemoryAccess(MemSDNode const *N) { | 
|  | auto V = N->getMemOperand()->getValue(); | 
|  |  | 
|  | return (V != nullptr) ? isProgramMemoryAddress(V) : false; | 
|  | } | 
|  |  | 
|  | } // end of namespace AVR | 
|  |  | 
|  | } // end namespace llvm | 
|  |  | 
|  | #endif // LLVM_AVR_H |