1//=-- Hexagon.h - Top-level interface for Hexagon 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// Hexagon back-end.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGON_H
15#define LLVM_LIB_TARGET_HEXAGON_HEXAGON_H
16
17#include "llvm/Support/CodeGen.h"
18
19namespace llvm {
20class HexagonTargetMachine;
21class ImmutablePass;
22class PassRegistry;
23class FunctionPass;
24class Pass;
25
26extern char &HexagonCopyHoistingID;
27extern char &HexagonExpandCondsetsID;
28extern char &HexagonTfrCleanupID;
29extern char &HexagonLiveVariablesID;
30void initializeHexagonAsmPrinterPass(PassRegistry &);
31void initializeHexagonBitSimplifyPass(PassRegistry &);
32void initializeHexagonBranchRelaxationPass(PassRegistry &);
33void initializeHexagonCFGOptimizerPass(PassRegistry &);
34void initializeHexagonCommonGEPPass(PassRegistry &);
35void initializeHexagonCopyHoistingPass(PassRegistry &);
36void initializeHexagonConstExtendersPass(PassRegistry &);
37void initializeHexagonConstPropagationPass(PassRegistry &);
38void initializeHexagonCopyToCombinePass(PassRegistry &);
39void initializeHexagonDAGToDAGISelLegacyPass(PassRegistry &);
40void initializeHexagonEarlyIfConversionPass(PassRegistry &);
41void initializeHexagonExpandCondsetsPass(PassRegistry &);
42void initializeHexagonGenMemAbsolutePass(PassRegistry &);
43void initializeHexagonGenMuxPass(PassRegistry &);
44void initializeHexagonGlobalSchedulerPass(PassRegistry &);
45void initializeHexagonHardwareLoopsPass(PassRegistry &);
46void initializeHexagonHVXSaveRemarkPass(PassRegistry &);
47void initializeHexagonLiveVariablesPass(PassRegistry &);
48void initializeHexagonLoopIdiomRecognizeLegacyPassPass(PassRegistry &);
49void initializeHexagonLoopAlignPass(PassRegistry &);
50void initializeHexagonLoopReschedulingPass(PassRegistry &);
51void initializeHexagonMaskPass(PassRegistry &);
52void initializeHexagonMergeActivateWeightPass(PassRegistry &);
53void initializeHexagonNewValueJumpPass(PassRegistry &);
54void initializeHexagonOptAddrModePass(PassRegistry &);
55void initializeHexagonPacketizerPass(PassRegistry &);
56void initializeHexagonRDFOptPass(PassRegistry &);
57void initializeHexagonSplitDoubleRegsPass(PassRegistry &);
58void initializeHexagonTfrCleanupPass(PassRegistry &);
59void initializeHexagonVExtractPass(PassRegistry &);
60void initializeHexagonVectorCombineLegacyPass(PassRegistry &);
61void initializeHexagonVectorLoopCarriedReuseLegacyPassPass(PassRegistry &);
62void initializeHexagonFixupHwLoopsPass(PassRegistry &);
63void initializeHexagonCallFrameInformationPass(PassRegistry &);
64void initializeHexagonGenExtractPass(PassRegistry &);
65void initializeHexagonGenInsertPass(PassRegistry &);
66void initializeHexagonGenPredicatePass(PassRegistry &);
67void initializeHexagonLoadWideningPass(PassRegistry &);
68void initializeHexagonStoreWideningPass(PassRegistry &);
69void initializeHexagonOptimizeSZextendsPass(PassRegistry &);
70void initializeHexagonPeepholePass(PassRegistry &);
71void initializeHexagonSplitConst32AndConst64Pass(PassRegistry &);
72void initializeHexagonVectorPrintPass(PassRegistry &);
73void initializeHexagonQFPOptimizerPass(PassRegistry &);
74void initializeHexagonPostRAHandleQFPPass(PassRegistry &);
75void initializeHexagonXQFloatGeneratorPass(PassRegistry &);
76
77Pass *createHexagonLoopIdiomPass();
78Pass *createHexagonVectorLoopCarriedReuseLegacyPass();
79
80/// Creates a Hexagon-specific Target Transformation Info pass.
81ImmutablePass *
82createHexagonTargetTransformInfoPass(const HexagonTargetMachine *TM);
83
84FunctionPass *createHexagonBitSimplify();
85FunctionPass *createHexagonBranchRelaxation();
86FunctionPass *createHexagonCallFrameInformation();
87FunctionPass *createHexagonCFGOptimizer();
88FunctionPass *createHexagonCommonGEP();
89FunctionPass *createHexagonConstExtenders();
90FunctionPass *createHexagonConstPropagationPass();
91FunctionPass *createHexagonCopyHoisting();
92FunctionPass *createHexagonCopyToCombine();
93FunctionPass *createHexagonEarlyIfConversion();
94FunctionPass *createHexagonFixupHwLoops();
95FunctionPass *createHexagonGenExtract();
96FunctionPass *createHexagonGenInsert();
97FunctionPass *createHexagonGenMemAbsolute();
98FunctionPass *createHexagonGenMux();
99FunctionPass *createHexagonGenPredicate();
100FunctionPass *createHexagonGlobalScheduler();
101FunctionPass *createHexagonHardwareLoops();
102FunctionPass *createHexagonHVXSaveRemark();
103FunctionPass *createHexagonISelDag(HexagonTargetMachine &TM,
104 CodeGenOptLevel OptLevel);
105FunctionPass *createHexagonLoopAlign();
106FunctionPass *createHexagonLoopRescheduling();
107FunctionPass *createHexagonMask();
108FunctionPass *createHexagonMergeActivateWeight();
109FunctionPass *createHexagonNewValueJump();
110FunctionPass *createHexagonOptAddrMode();
111FunctionPass *createHexagonOptimizeSZextends();
112FunctionPass *createHexagonPacketizer(bool Minimal);
113FunctionPass *createHexagonPeephole();
114FunctionPass *createHexagonRDFOpt();
115FunctionPass *createHexagonSplitConst32AndConst64();
116FunctionPass *createHexagonSplitDoubleRegs();
117FunctionPass *createHexagonStoreWidening();
118FunctionPass *createHexagonLoadWidening();
119FunctionPass *createHexagonTfrCleanup();
120FunctionPass *createHexagonVectorCombineLegacyPass();
121FunctionPass *createHexagonVectorPrint();
122FunctionPass *createHexagonVExtract();
123FunctionPass *createHexagonExpandCondsets();
124FunctionPass *createHexagonQFPOptimizer();
125FunctionPass *createHexagonPostRAHandleQFP();
126FunctionPass *createHexagonXQFloatGenerator();
127
128} // end namespace llvm;
129
130#endif
131