1259698Sdim//===---- Mips16HardFloat.h for Mips16 Hard Float                  --------===//
2259698Sdim//
3259698Sdim//                     The LLVM Compiler Infrastructure
4259698Sdim//
5259698Sdim// This file is distributed under the University of Illinois Open Source
6259698Sdim// License. See LICENSE.TXT for details.
7259698Sdim//
8259698Sdim//===----------------------------------------------------------------------===//
9259698Sdim//
10259698Sdim// This file defines a phase which implements part of the floating point
11259698Sdim// interoperability between Mips16 and Mips32 code.
12259698Sdim//
13259698Sdim//===----------------------------------------------------------------------===//
14259698Sdim
15259698Sdim#include "MCTargetDesc/MipsMCTargetDesc.h"
16259698Sdim#include "MipsTargetMachine.h"
17259698Sdim#include "llvm/Pass.h"
18259698Sdim#include "llvm/Target/TargetMachine.h"
19259698Sdim
20259698Sdim
21259698Sdim#ifndef MIPS16HARDFLOAT_H
22259698Sdim#define MIPS16HARDFLOAT_H
23259698Sdim
24259698Sdimusing namespace llvm;
25259698Sdim
26259698Sdimnamespace llvm {
27259698Sdim
28259698Sdimclass Mips16HardFloat : public ModulePass {
29259698Sdim
30259698Sdimpublic:
31259698Sdim  static char ID;
32259698Sdim
33259698Sdim  Mips16HardFloat(MipsTargetMachine &TM_) : ModulePass(ID),
34259698Sdim    TM(TM_), Subtarget(TM.getSubtarget<MipsSubtarget>()) {
35259698Sdim  }
36259698Sdim
37259698Sdim  virtual const char *getPassName() const {
38259698Sdim    return "MIPS16 Hard Float Pass";
39259698Sdim  }
40259698Sdim
41259698Sdim  virtual bool runOnModule(Module &M);
42259698Sdim
43259698Sdimprotected:
44259698Sdim  /// Keep a pointer to the MipsSubtarget around so that we can make the right
45259698Sdim  /// decision when generating code for different targets.
46259698Sdim  const TargetMachine &TM;
47259698Sdim  const MipsSubtarget &Subtarget;
48259698Sdim
49259698Sdim};
50259698Sdim
51259698SdimModulePass *createMips16HardFloat(MipsTargetMachine &TM);
52259698Sdim
53259698Sdim}
54259698Sdim#endif
55