1 //===-- AVR.h - Top-level interface for AVR representation ------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 // This file contains the entry points for global functions defined in the LLVM
12 //===----------------------------------------------------------------------===//
17 #include "llvm/CodeGen/SelectionDAGNodes.h"
18 #include "llvm/Target/TargetMachine.h"
22 class AVRTargetMachine
;
25 FunctionPass
*createAVRISelDag(AVRTargetMachine
&TM
,
26 CodeGenOpt::Level OptLevel
);
27 FunctionPass
*createAVRExpandPseudoPass();
28 FunctionPass
*createAVRFrameAnalyzerPass();
29 FunctionPass
*createAVRRelaxMemPass();
30 FunctionPass
*createAVRDynAllocaSRPass();
31 FunctionPass
*createAVRBranchSelectionPass();
33 void initializeAVRExpandPseudoPass(PassRegistry
&);
34 void initializeAVRRelaxMemPass(PassRegistry
&);
36 /// Contains the AVR backend.
39 /// An integer that identifies all of the supported AVR address spaces.
40 enum AddressSpace
{ DataMemory
, ProgramMemory
};
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
;
47 inline bool isProgramMemoryAccess(MemSDNode
const *N
) {
48 auto V
= N
->getMemOperand()->getValue();
50 return (V
!= nullptr) ? isProgramMemoryAddress(V
) : false;
53 } // end of namespace AVR
55 } // end namespace llvm