Hexagon.h revision 5262abb2682a4d09cda3563a55f27caffb57466c
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
18d239ff67f210094c205be7e57332948caecf6a24Tony Linthicum#include "MCTargetDesc/HexagonMCTargetDesc.h"
19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/Target/TargetLowering.h"
20e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#include "llvm/Target/TargetMachine.h"
21b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
22b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumnamespace llvm {
23b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class FunctionPass;
24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class TargetMachine;
25e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes  class MachineInstr;
26e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes  class MCInst;
27e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes  class HexagonAsmPrinter;
28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class HexagonTargetMachine;
29b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  class raw_ostream;
30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonISelDag(HexagonTargetMachine &TM);
32b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonDelaySlotFillerPass(TargetMachine &TM);
33b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonFPMoverPass(TargetMachine &TM);
34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonRemoveExtendOps(HexagonTargetMachine &TM);
35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonCFGOptimizer(HexagonTargetMachine &TM);
36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
37e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes  FunctionPass *createHexagonSplitTFRCondSets(HexagonTargetMachine &TM);
38e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes  FunctionPass *createHexagonExpandPredSpillCode(HexagonTargetMachine &TM);
395262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon
40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonHardwareLoops();
41ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  FunctionPass *createHexagonPeephole();
42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FunctionPass *createHexagonFixupHwLoops();
4326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  FunctionPass *createHexagonPacketizer();
44b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande  FunctionPass *createHexagonNewValueJump();
45b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande
46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
47e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes/* TODO: object output.
48e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes  MCCodeEmitter *createHexagonMCCodeEmitter(const Target &,
49e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes                                            TargetMachine &TM,
50e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes                                            MCContext &Ctx);
51e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes*/
52e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes/* TODO: assembler input.
53b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande  TargetAsmBackend *createHexagonAsmBackend(const Target &,
5426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                                                  const std::string &);
55e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes*/
56e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes  void HexagonLowerToMC(const MachineInstr *MI, MCInst &MCI,
57e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes                        HexagonAsmPrinter &AP);
58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} // end namespace llvm;
59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
60b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_POINTER_SIZE 4
61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_PointerSize (Hexagon_POINTER_SIZE)
63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_PointerSize_Bits (Hexagon_POINTER_SIZE * 8)
64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_WordSize Hexagon_PointerSize
65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_WordSize_Bits Hexagon_PointerSize_Bits
66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// allocframe saves LR and FP on stack before allocating
68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// a new stack frame. This takes 8 bytes.
69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define HEXAGON_LRFP_SIZE 8
70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
71e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// Normal instruction size (in bytes).
72e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#define HEXAGON_INSTR_SIZE 4
73e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes
7426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Maximum number of words and instructions in a packet.
75e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#define HEXAGON_PACKET_SIZE 4
76e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes
77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#endif
78