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