LLVM 22.0.0git
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/ModRef.h"
#include "llvm/Support/raw_ostream.h"
#include <string>

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 24 of file Mips16HardFloat.cpp.

Typedef Documentation

◆ TypeID

using TypeID = Type::TypeID

Definition at line 102 of file Mips16HardFloat.cpp.

Enumeration Type Documentation

◆ FPParamVariant

Enumerator
FSig 
FFSig 
FDSig 
DSig 
DDSig 
DFSig 
NoSig 

Definition at line 96 of file Mips16HardFloat.cpp.

◆ FPReturnVariant

Enumerator
FRet 
DRet 
CFRet 
CDRet 
NoFPRet 

Definition at line 63 of file Mips16HardFloat.cpp.

Function Documentation

◆ assureFPCallStub()

◆ createFPFnStub()

◆ emitInlineAsm()

◆ fixupFPReturnAndCall()

◆ isIntrinsicInline()

bool isIntrinsicInline ( Function * F)
static

Definition at line 370 of file Mips16HardFloat.cpp.

References llvm::binary_search(), F, and IntrinsicInline.

Referenced by fixupFPReturnAndCall().

◆ needsFPHelperFromSig()

bool needsFPHelperFromSig ( Function & F)
static

Definition at line 180 of file Mips16HardFloat.cpp.

References F, needsFPReturnHelper(), and needsFPStubFromParams().

Referenced by fixupFPReturnAndCall().

◆ needsFPReturnHelper() [1/2]

bool needsFPReturnHelper ( Function & F)
static

Definition at line 170 of file Mips16HardFloat.cpp.

References F, NoFPRet, and whichFPReturnVariant().

Referenced by fixupFPReturnAndCall(), and needsFPHelperFromSig().

◆ needsFPReturnHelper() [2/2]

bool needsFPReturnHelper ( FunctionType & FT)
static

Definition at line 175 of file Mips16HardFloat.cpp.

References NoFPRet, and whichFPReturnVariant().

◆ needsFPStubFromParams()

bool needsFPStubFromParams ( Function & F)
static

◆ removeUseSoftFloat()

void removeUseSoftFloat ( Function & F)
static

Definition at line 481 of file Mips16HardFloat.cpp.

References llvm::errs(), F, and LLVM_DEBUG.

◆ swapFPIntParams()

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

Definition at line 186 of file Mips16HardFloat.cpp.

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

Referenced by assureFPCallStub(), and createFPFnStub().

◆ whichFPParamVariantNeeded()

FPParamVariant whichFPParamVariantNeeded ( Function & F)
static

Definition at line 106 of file Mips16HardFloat.cpp.

References DDSig, DFSig, DoubleTyID, DSig, F, FDSig, FFSig, FloatTyID, FSig, llvm_unreachable, and NoSig.

Referenced by assureFPCallStub().

◆ whichFPReturnVariant()

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.i32", "llvm.powi.f64.i32",
"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 348 of file Mips16HardFloat.cpp.

Referenced by isIntrinsicInline().