Hexagon.h revision ed6fe299cf411ca315bc90aa6dfc095d28689ae2
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; 24d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma class ModulePass; 25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum class TargetMachine; 26e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes class MachineInstr; 27d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma class HexagonMCInst; 28e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes class HexagonAsmPrinter; 29b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum class HexagonTargetMachine; 30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum class raw_ostream; 31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 32ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek FunctionPass *createHexagonISelDag(const HexagonTargetMachine &TM, 33f6563427c40774953d4a7a0387a000f7a6d94ee1Jyotsna Verma CodeGenOpt::Level OptLevel); 34ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek FunctionPass *createHexagonDelaySlotFillerPass(const TargetMachine &TM); 35ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek FunctionPass *createHexagonFPMoverPass(const TargetMachine &TM); 36ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek FunctionPass *createHexagonRemoveExtendArgs(const HexagonTargetMachine &TM); 37ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek FunctionPass *createHexagonCFGOptimizer(const HexagonTargetMachine &TM); 385262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon 39ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek FunctionPass *createHexagonSplitTFRCondSets(const HexagonTargetMachine &TM); 40ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek FunctionPass *createHexagonExpandPredSpillCode( 41ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek const HexagonTargetMachine &TM); 42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum FunctionPass *createHexagonHardwareLoops(); 43ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande FunctionPass *createHexagonPeephole(); 44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum FunctionPass *createHexagonFixupHwLoops(); 4526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande FunctionPass *createHexagonPacketizer(); 46b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande FunctionPass *createHexagonNewValueJump(); 47b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande 48e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes/* TODO: object output. 49e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes MCCodeEmitter *createHexagonMCCodeEmitter(const Target &, 50ed6fe299cf411ca315bc90aa6dfc095d28689ae2Krzysztof Parzyszek const TargetMachine &TM, 51e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes MCContext &Ctx); 52e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes*/ 53e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes/* TODO: assembler input. 54b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande TargetAsmBackend *createHexagonAsmBackend(const Target &, 5526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const std::string &); 56e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes*/ 57d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma void HexagonLowerToMC(const MachineInstr *MI, HexagonMCInst &MCI, 58e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes HexagonAsmPrinter &AP); 59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} // end namespace llvm; 60b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_POINTER_SIZE 4 62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_PointerSize (Hexagon_POINTER_SIZE) 64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_PointerSize_Bits (Hexagon_POINTER_SIZE * 8) 65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_WordSize Hexagon_PointerSize 66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_WordSize_Bits Hexagon_PointerSize_Bits 67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// allocframe saves LR and FP on stack before allocating 69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// a new stack frame. This takes 8 bytes. 70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define HEXAGON_LRFP_SIZE 8 71b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 72e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// Normal instruction size (in bytes). 73e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#define HEXAGON_INSTR_SIZE 4 74e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 7526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Maximum number of words and instructions in a packet. 76e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#define HEXAGON_PACKET_SIZE 4 77e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#endif 79