LLVM  6.0.0svn
Macros | Typedefs | Enumerations | Functions | Variables
Mips16HardFloat.cpp File Reference
#include "MipsTargetMachine.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <string>
Include dependency graph for Mips16HardFloat.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "mips16-hard-float"
 

Typedefs

using TypeID = Type::TypeID
 

Enumerations

enum  FPReturnVariant {
  FRet, DRet, CFRet, CDRet,
  NoFPRet
}
 
enum  FPParamVariant {
  FSig, FFSig, FDSig, DSig,
  DDSig, DFSig, NoSig
}
 

Functions

static void EmitInlineAsm (LLVMContext &C, BasicBlock *BB, StringRef AsmText)
 
static FPReturnVariant whichFPReturnVariant (Type *T)
 
static FPParamVariant whichFPParamVariantNeeded (Function &F)
 
static bool needsFPStubFromParams (Function &F)
 
static bool needsFPReturnHelper (Function &F)
 
static bool needsFPReturnHelper (FunctionType &FT)
 
static bool needsFPHelperFromSig (Function &F)
 
static std::string swapFPIntParams (FPParamVariant PV, Module *M, bool LE, bool ToFP)
 
static void assureFPCallStub (Function &F, Module *M, const MipsTargetMachine &TM)
 
static bool isIntrinsicInline (Function *F)
 
static bool fixupFPReturnAndCall (Function &F, Module *M, const MipsTargetMachine &TM)
 
static void createFPFnStub (Function *F, Module *M, FPParamVariant PV, const MipsTargetMachine &TM)
 
static void removeUseSoftFloat (Function &F)
 

Variables

const Type::TypeID FloatTyID = Type::FloatTyID
 
const Type::TypeID DoubleTyID = Type::DoubleTyID
 
static const char *const IntrinsicInline []
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "mips16-hard-float"

Definition at line 25 of file Mips16HardFloat.cpp.

Typedef Documentation

◆ TypeID

Definition at line 101 of file Mips16HardFloat.cpp.

Enumeration Type Documentation

◆ FPParamVariant

Enumerator
FSig 
FFSig 
FDSig 
DSig 
DDSig 
DFSig 
NoSig 

Definition at line 95 of file Mips16HardFloat.cpp.

◆ FPReturnVariant

Enumerator
FRet 
DRet 
CFRet 
CDRet 
NoFPRet 

Definition at line 64 of file Mips16HardFloat.cpp.

Function Documentation

◆ assureFPCallStub()

static void assureFPCallStub ( Function F,
Module M,
const MipsTargetMachine TM 
)
static

◆ createFPFnStub()

static void createFPFnStub ( Function F,
Module M,
FPParamVariant  PV,
const MipsTargetMachine TM 
)
static

◆ EmitInlineAsm()

static void EmitInlineAsm ( LLVMContext C,
BasicBlock BB,
StringRef  AsmText 
)
static

◆ fixupFPReturnAndCall()

static bool fixupFPReturnAndCall ( Function F,
Module M,
const MipsTargetMachine TM 
)
static

◆ isIntrinsicInline()

static bool isIntrinsicInline ( Function F)
static

◆ needsFPHelperFromSig()

static bool needsFPHelperFromSig ( Function F)
static

Definition at line 179 of file Mips16HardFloat.cpp.

References needsFPReturnHelper(), and needsFPStubFromParams().

Referenced by fixupFPReturnAndCall().

◆ needsFPReturnHelper() [1/2]

static bool needsFPReturnHelper ( Function F)
static

◆ needsFPReturnHelper() [2/2]

static bool needsFPReturnHelper ( FunctionType FT)
static

◆ needsFPStubFromParams()

static bool needsFPStubFromParams ( Function F)
static

◆ removeUseSoftFloat()

static void removeUseSoftFloat ( Function F)
static

◆ swapFPIntParams()

static std::string swapFPIntParams ( FPParamVariant  PV,
Module M,
bool  LE,
bool  ToFP 
)
static

Definition at line 185 of file Mips16HardFloat.cpp.

References DDSig, DFSig, DSig, FDSig, FFSig, FSig, MI, and NoSig.

Referenced by assureFPCallStub(), and createFPFnStub().

◆ whichFPParamVariantNeeded()

static FPParamVariant whichFPParamVariantNeeded ( Function F)
static

◆ whichFPReturnVariant()

static FPReturnVariant whichFPReturnVariant ( Type T)
static

Variable Documentation

◆ DoubleTyID

const Type::TypeID DoubleTyID = Type::DoubleTyID

◆ FloatTyID

const Type::TypeID FloatTyID = Type::FloatTyID

◆ IntrinsicInline

const char* const IntrinsicInline[]
static
Initial value:
= {
"fabs", "fabsf",
"llvm.ceil.f32", "llvm.ceil.f64",
"llvm.copysign.f32", "llvm.copysign.f64",
"llvm.cos.f32", "llvm.cos.f64",
"llvm.exp.f32", "llvm.exp.f64",
"llvm.exp2.f32", "llvm.exp2.f64",
"llvm.fabs.f32", "llvm.fabs.f64",
"llvm.floor.f32", "llvm.floor.f64",
"llvm.fma.f32", "llvm.fma.f64",
"llvm.log.f32", "llvm.log.f64",
"llvm.log10.f32", "llvm.log10.f64",
"llvm.nearbyint.f32", "llvm.nearbyint.f64",
"llvm.pow.f32", "llvm.pow.f64",
"llvm.powi.f32", "llvm.powi.f64",
"llvm.rint.f32", "llvm.rint.f64",
"llvm.round.f32", "llvm.round.f64",
"llvm.sin.f32", "llvm.sin.f64",
"llvm.sqrt.f32", "llvm.sqrt.f64",
"llvm.trunc.f32", "llvm.trunc.f64",
}

Definition at line 347 of file Mips16HardFloat.cpp.