1*9880d681SAndroid Build Coastguard Worker //===-- AVR.h - Top-level interface for AVR representation ------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // This file contains the entry points for global functions defined in the LLVM 11*9880d681SAndroid Build Coastguard Worker // AVR back-end. 12*9880d681SAndroid Build Coastguard Worker // 13*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_AVR_H 16*9880d681SAndroid Build Coastguard Worker #define LLVM_AVR_H 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetMachine.h" 19*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/SelectionDAGNodes.h" 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker namespace llvm { 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker class AVRTargetMachine; 24*9880d681SAndroid Build Coastguard Worker class FunctionPass; 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker FunctionPass *createAVRISelDag(AVRTargetMachine &TM, 27*9880d681SAndroid Build Coastguard Worker CodeGenOpt::Level OptLevel); 28*9880d681SAndroid Build Coastguard Worker FunctionPass *createAVRExpandPseudoPass(); 29*9880d681SAndroid Build Coastguard Worker FunctionPass *createAVRFrameAnalyzerPass(); 30*9880d681SAndroid Build Coastguard Worker FunctionPass *createAVRDynAllocaSRPass(); 31*9880d681SAndroid Build Coastguard Worker FunctionPass *createAVRBranchSelectionPass(); 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker /// Contains the AVR backend. 34*9880d681SAndroid Build Coastguard Worker namespace AVR { 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker enum AddressSpace { DataMemory, ProgramMemory }; 37*9880d681SAndroid Build Coastguard Worker isProgramMemoryAddress(T * V)38*9880d681SAndroid Build Coastguard Workertemplate <typename T> bool isProgramMemoryAddress(T *V) { 39*9880d681SAndroid Build Coastguard Worker return cast<PointerType>(V->getType())->getAddressSpace() == ProgramMemory; 40*9880d681SAndroid Build Coastguard Worker } 41*9880d681SAndroid Build Coastguard Worker isProgramMemoryAccess(MemSDNode const * N)42*9880d681SAndroid Build Coastguard Workerinline bool isProgramMemoryAccess(MemSDNode const *N) { 43*9880d681SAndroid Build Coastguard Worker auto V = N->getMemOperand()->getValue(); 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker return (V != nullptr) ? isProgramMemoryAddress(V) : false; 46*9880d681SAndroid Build Coastguard Worker } 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker } // end of namespace AVR 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker } // end namespace llvm 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker #endif // LLVM_AVR_H 53