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