Home | History | Annotate | Line # | Download | only in AVR
      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