Hexagon.h revision d239ff67f210094c205be7e57332948caecf6a24
1b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//=-- Hexagon.h - Top-level interface for Hexagon representation --*- C++ -*-=//
2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//                     The LLVM Compiler Infrastructure
4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file is distributed under the University of Illinois Open Source
6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// License. See LICENSE.TXT for details.
7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===//
9b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file contains the entry points for global functions defined in the LLVM
11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Hexagon back-end.
12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===//
14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
15b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#ifndef TARGET_Hexagon_H
16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define TARGET_Hexagon_H
17b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include <cassert>
19d239ff67f210094c205be7e57332948caecf6a24Tony Linthicum#include "MCTargetDesc/HexagonMCTargetDesc.h"
20b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/Target/TargetLowering.h"
21b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
22b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumnamespace llvm {
23b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class FunctionPass;
24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class TargetMachine;
25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class HexagonTargetMachine;
26b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class raw_ostream;
27b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonISelDag(HexagonTargetMachine &TM);
29b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonDelaySlotFillerPass(TargetMachine &TM);
30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonFPMoverPass(TargetMachine &TM);
31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonRemoveExtendOps(HexagonTargetMachine &TM);
32b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonCFGOptimizer(HexagonTargetMachine &TM);
33b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass* createHexagonSplitTFRCondSets(HexagonTargetMachine &TM);
35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass* createHexagonExpandPredSpillCode(HexagonTargetMachine &TM);
36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
37b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonHardwareLoops();
38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonOptimizeSZExtends();
39b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonFixupHwLoops();
40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
41b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} // end namespace llvm;
42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
43b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_POINTER_SIZE 4
44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
45b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_PointerSize (Hexagon_POINTER_SIZE)
46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_PointerSize_Bits (Hexagon_POINTER_SIZE * 8)
47b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_WordSize Hexagon_PointerSize
48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_WordSize_Bits Hexagon_PointerSize_Bits
49b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// allocframe saves LR and FP on stack before allocating
51b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// a new stack frame. This takes 8 bytes.
52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define HEXAGON_LRFP_SIZE 8
53b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#endif
55