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 20 namespace llvm { 21 22 class AVRTargetMachine; 23 class FunctionPass; 24 25 FunctionPass *createAVRISelDag(AVRTargetMachine &TM, 26 CodeGenOpt::Level OptLevel); 27 FunctionPass *createAVRExpandPseudoPass(); 28 FunctionPass *createAVRFrameAnalyzerPass(); 29 FunctionPass *createAVRRelaxMemPass(); 30 FunctionPass *createAVRDynAllocaSRPass(); 31 FunctionPass *createAVRBranchSelectionPass(); 32 33 void initializeAVRExpandPseudoPass(PassRegistry&); 34 void initializeAVRRelaxMemPass(PassRegistry&); 35 36 /// Contains the AVR backend. 37 namespace AVR { 38 39 /// An integer that identifies all of the supported AVR address spaces. 40 enum AddressSpace { DataMemory, ProgramMemory }; 41 42 /// Checks if a given type is a pointer to program memory. 43 template <typename T> bool isProgramMemoryAddress(T *V) { 44 return cast<PointerType>(V->getType())->getAddressSpace() == ProgramMemory; 45 } 46 47 inline 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