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