Line data Source code
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 112 : return cast<PointerType>(V->getType())->getAddressSpace() == ProgramMemory;
46 : }
47 :
48 : inline bool isProgramMemoryAccess(MemSDNode const *N) {
49 193 : auto V = N->getMemOperand()->getValue();
50 :
51 124 : return (V != nullptr) ? isProgramMemoryAddress(V) : false;
52 : }
53 :
54 : } // end of namespace AVR
55 :
56 : } // end namespace llvm
57 :
58 : #endif // LLVM_AVR_H
|