1b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//=-- HexagonTargetMachine.h - Define TargetMachine for Hexagon ---*- 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 declares the Hexagon specific subclass of TargetMachine. 11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#ifndef HexagonTARGETMACHINE_H 15b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define HexagonTARGETMACHINE_H 16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 17a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "HexagonFrameLowering.h" 18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonISelLowering.h" 19a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "HexagonInstrInfo.h" 20b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonSelectionDAGInfo.h" 21a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "HexagonSubtarget.h" 220b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/DataLayout.h" 23a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "llvm/Target/TargetMachine.h" 24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumnamespace llvm { 26b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 27b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass Module; 28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 29b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass HexagonTargetMachine : public LLVMTargetMachine { 303574eca1b02600bac4e625297f4ecf745f4c4f32Micah Villmow const DataLayout DL; // Calculates type size & alignment. 31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonSubtarget Subtarget; 32b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonInstrInfo InstrInfo; 33903456245bda41adc90dcab67623169ee3aaff8bBenjamin Kramer HexagonTargetLowering TLInfo; 34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonSelectionDAGInfo TSInfo; 35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonFrameLowering FrameLowering; 36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const InstrItineraryData* InstrItins; 37b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 39b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonTargetMachine(const Target &T, StringRef TT,StringRef CPU, 401e0c9ab0d13c32e387dde95f78cf78e301ac49a7Craig Topper StringRef FS, const TargetOptions &Options, 411e0c9ab0d13c32e387dde95f78cf78e301ac49a7Craig Topper Reloc::Model RM, CodeModel::Model CM, 421e0c9ab0d13c32e387dde95f78cf78e301ac49a7Craig Topper CodeGenOpt::Level OL); 43b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual const HexagonInstrInfo *getInstrInfo() const { 45b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return &InstrInfo; 46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 47b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual const HexagonSubtarget *getSubtargetImpl() const { 48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return &Subtarget; 49b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual const HexagonRegisterInfo *getRegisterInfo() const { 51b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return &InstrInfo.getRegisterInfo(); 52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 53b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual const InstrItineraryData* getInstrItineraryData() const { 55b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return InstrItins; 56b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 57b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual const HexagonTargetLowering* getTargetLowering() const { 60b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return &TLInfo; 61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual const HexagonFrameLowering* getFrameLowering() const { 64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return &FrameLowering; 65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual const HexagonSelectionDAGInfo* getSelectionDAGInfo() const { 68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return &TSInfo; 69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 713574eca1b02600bac4e625297f4ecf745f4c4f32Micah Villmow virtual const DataLayout *getDataLayout() const { return &DL; } 72b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum static unsigned getModuleMatchQuality(const Module &M); 73b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 74b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Pass Pipeline Configuration. 75b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual bool addPassesForOptimizations(PassManagerBase &PM); 76061efcfb3e79899493d857f49e50d09f29037e0aAndrew Trick virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 79b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumextern bool flag_aligned_memcpy; 80b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 81b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} // end namespace llvm 82b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 83b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#endif 84