1 //===---- Mips16HardFloat.h for Mips16 Hard Float --------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines a phase which implements part of the floating point 11 // interoperability between Mips16 and Mips32 code. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "MCTargetDesc/MipsMCTargetDesc.h" 16 #include "MipsTargetMachine.h" 17 #include "llvm/Pass.h" 18 #include "llvm/Target/TargetMachine.h" 19 20 21 #ifndef MIPS16HARDFLOAT_H 22 #define MIPS16HARDFLOAT_H 23 24 using namespace llvm; 25 26 namespace llvm { 27 28 class Mips16HardFloat : public ModulePass { 29 30 public: 31 static char ID; 32 Mips16HardFloat(MipsTargetMachine & TM_)33 Mips16HardFloat(MipsTargetMachine &TM_) : ModulePass(ID), 34 TM(TM_), Subtarget(TM.getSubtarget<MipsSubtarget>()) { 35 } 36 getPassName()37 const char *getPassName() const override { 38 return "MIPS16 Hard Float Pass"; 39 } 40 41 bool runOnModule(Module &M) override; 42 43 protected: 44 /// Keep a pointer to the MipsSubtarget around so that we can make the right 45 /// decision when generating code for different targets. 46 const TargetMachine &TM; 47 const MipsSubtarget &Subtarget; 48 49 }; 50 51 ModulePass *createMips16HardFloat(MipsTargetMachine &TM); 52 53 } 54 #endif 55