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