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/CodeGen/SelectionDAGNodes.h"
     19 #include "llvm/Target/TargetMachine.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 *createAVRRelaxMemPass();
     31 FunctionPass *createAVRDynAllocaSRPass();
     32 FunctionPass *createAVRBranchSelectionPass();
     33 
     34 void initializeAVRExpandPseudoPass(PassRegistry&);
     35 void initializeAVRRelaxMemPass(PassRegistry&);
     36 
     37 /// Contains the AVR backend.
     38 namespace AVR {
     39 
     40 /// An integer that identifies all of the supported AVR address spaces.
     41 enum AddressSpace { DataMemory, ProgramMemory };
     42 
     43 /// Checks if a given type is a pointer to program memory.
     44 template <typename T> bool isProgramMemoryAddress(T *V) {
     45   return cast<PointerType>(V->getType())->getAddressSpace() == ProgramMemory;
     46 }
     47 
     48 inline bool isProgramMemoryAccess(MemSDNode const *N) {
     49   auto V = N->getMemOperand()->getValue();
     50 
     51   return (V != nullptr) ? isProgramMemoryAddress(V) : false;
     52 }
     53 
     54 } // end of namespace AVR
     55 
     56 } // end namespace llvm
     57 
     58 #endif // LLVM_AVR_H
     59