18 const char *
const LibCalls[] = {
19 "__addtf3",
"__divtf3",
"__eqtf2",
"__extenddftf2",
20 "__extendsftf2",
"__fixtfdi",
"__fixtfsi",
"__fixtfti",
21 "__fixunstfdi",
"__fixunstfsi",
"__fixunstfti",
"__floatditf",
22 "__floatsitf",
"__floattitf",
"__floatunditf",
"__floatunsitf",
23 "__floatuntitf",
"__getf2",
"__gttf2",
"__letf2",
24 "__lttf2",
"__multf3",
"__netf2",
"__powitf2",
25 "__subtf3",
"__trunctfdf2",
"__trunctfsf2",
"__unordtf2",
26 "ceill",
"copysignl",
"cosl",
"exp2l",
27 "expl",
"floorl",
"fmal",
"fmodl",
28 "log10l",
"log2l",
"logl",
"nearbyintl",
29 "powl",
"rintl",
"sinl",
"sqrtl",
38 for (
const char *
const *
I = LibCalls;
I < End - 1; ++
I)
39 assert(Comp(*
I, *(
I + 1)));
42 return std::binary_search(LibCalls, End, CallSym, Comp);
56 dyn_cast_or_null<const ExternalSymbolSDNode>(CallNode);
69 dyn_cast<const GlobalAddressSDNode>(Callee)) {
71 Function *
F =
G->getGlobal()->getParent()->getFunction(Sym);
77 return SpecialCallingConv;
80 void MipsCCState::PreAnalyzeCallResultForF128(
83 for (
unsigned i = 0; i < Ins.
size(); ++i) {
92 void MipsCCState::PreAnalyzeReturnForF128(
95 for (
unsigned i = 0; i < Outs.
size(); ++i) {
105 void MipsCCState::PreAnalyzeCallOperands(
107 std::vector<TargetLowering::ArgListEntry> &FuncArgs,
109 for (
unsigned i = 0; i < Outs.
size(); ++i) {
113 FuncArgs[Outs[i].OrigArgIndex].Ty->isFloatingPointTy());
114 CallOperandIsFixed.
push_back(Outs[i].IsFixed);
120 void MipsCCState::PreAnalyzeFormalArgumentsForF128(
123 for (
unsigned i = 0; i < Ins.
size(); ++i) {
129 if (Ins[i].
Flags.isSRet()) {
140 OriginalArgWasFloat.
push_back(FuncArg->getType()->isFloatingPointTy());
void push_back(const T &Elt)
const char * getSymbol() const
unsigned getStructNumElements() const
Type * getReturnType() const
const Function * getFunction() const
getFunction - Return the LLVM function that this machine code represents
static bool originalTypeIsF128(const Type *Ty, const SDNode *CallNode)
This function returns true if Ty is fp128, {f128} or i128 which was originally a fp128.
static void advance(T &it, size_t Val)
bool inMips16HardFloat() const
MachineFunction & getMachineFunction() const
static SpecialCallingConvType getSpecialCallingConvForCallee(const SDNode *Callee, const MipsSubtarget &Subtarget)
Determine the SpecialCallingConvType for the given callee.
bool isFloatingPointTy() const
isFloatingPointTy - Return true if this is one of the six floating point types
static bool isF128SoftLibCall(const char *CallSym)
This function returns true if CallSym is a long double emulation routine.
LLVM_CONSTEXPR size_t array_lengthof(T(&)[N])
Find the length of an array.
SDNode * getNode() const
get the SDNode which holds the desired result
The instances of the Type class are immutable: once they are created, they are never changed...
bool isFP128Ty() const
isFP128Ty - Return true if this is 'fp128'.
This structure contains all information that is necessary for lowering calls.
Module.h This file contains the declarations for the Module class.
Represents one node in the SelectionDAG.
bool isIntegerTy() const
isIntegerTy - True if this is an instance of IntegerType.
bool isStructTy() const
isStructTy - True if this is an instance of StructType.
bool hasFnAttribute(Attribute::AttrKind Kind) const
Return true if the function has the attribute.
Type * getStructElementType(unsigned N) const
StringRef - Represent a constant reference to a string, i.e.