16 const char *
const LibCalls[] = {
17 "__addtf3",
"__divtf3",
"__eqtf2",
"__extenddftf2",
18 "__extendsftf2",
"__fixtfdi",
"__fixtfsi",
"__fixtfti",
19 "__fixunstfdi",
"__fixunstfsi",
"__fixunstfti",
"__floatditf",
20 "__floatsitf",
"__floattitf",
"__floatunditf",
"__floatunsitf",
21 "__floatuntitf",
"__getf2",
"__gttf2",
"__letf2",
22 "__lttf2",
"__multf3",
"__netf2",
"__powitf2",
23 "__subtf3",
"__trunctfdf2",
"__trunctfsf2",
"__unordtf2",
24 "ceill",
"copysignl",
"cosl",
"exp2l",
25 "expl",
"floorl",
"fmal",
"fmaxl",
26 "fmodl",
"log10l",
"log2l",
"logl",
27 "nearbyintl",
"powl",
"rintl",
"roundl",
28 "sinl",
"sqrtl",
"truncl"};
31 auto Comp = [](
const char *
S1,
const char *S2) {
return strcmp(
S1, S2) < 0; };
33 return std::binary_search(std::begin(LibCalls), std::end(LibCalls), CallSym,
75 dyn_cast<const GlobalAddressSDNode>(Callee)) {
78 if (
F &&
F->hasFnAttribute(
"__Mips16RetHelper")) {
83 return SpecialCallingConv;
86void MipsCCState::PreAnalyzeCallResultForF128(
89 for (
unsigned i = 0; i < Ins.size(); ++i) {
98void MipsCCState::PreAnalyzeReturnForF128(
101 for (
unsigned i = 0; i < Outs.
size(); ++i) {
111void MipsCCState::PreAnalyzeCallResultForVectorFloat(
113 for (
unsigned i = 0; i <
Ins.size(); ++i) {
120void MipsCCState::PreAnalyzeReturnForVectorFloat(
122 for (
unsigned i = 0; i < Outs.
size(); ++i) {
143void MipsCCState::PreAnalyzeCallOperands(
145 std::vector<TargetLowering::ArgListEntry> &FuncArgs,
147 for (
unsigned i = 0; i < Outs.
size(); ++i) {
153 CallOperandIsFixed.
push_back(Outs[i].IsFixed);
162 if (Flags.isSRet()) {
165 OriginalArgWasFloatVector.
push_back(
false);
180void MipsCCState::PreAnalyzeFormalArgumentsForF128(
183 for (
unsigned i = 0; i < Ins.size(); ++i) {
189 if (Ins[i].Flags.isSRet()) {
192 OriginalArgWasFloatVector.
push_back(
false);
197 std::advance(FuncArg, Ins[i].getOrigArgIndex());
Module.h This file contains the declarations for the Module class.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This class represents an incoming formal argument to a Function.
MachineFunction & getMachineFunction() const
Type * getReturnType() const
Returns the type of the ret val.
Function & getFunction()
Return the LLVM function that this machine code represents.
static bool originalTypeIsVectorFloat(const Type *Ty)
Return true if the original type was vXfXX / vXfXX.
static bool isF128SoftLibCall(const char *CallSym)
This function returns true if CallSym is a long double emulation routine.
void PreAnalyzeReturnValue(EVT ArgVT)
static bool originalTypeIsF128(const Type *Ty, const char *Func)
This function returns true if Ty is fp128, {f128} or i128 which was originally a fp128.
static bool originalEVTTypeIsVectorFloat(EVT Ty)
Return true if the original type was vXfXX.
void PreAnalyzeCallOperand(const Type *ArgTy, bool IsFixed, const char *Func)
void PreAnalyzeFormalArgument(const Type *ArgTy, ISD::ArgFlagsTy Flags)
static SpecialCallingConvType getSpecialCallingConvForCallee(const SDNode *Callee, const MipsSubtarget &Subtarget)
Determine the SpecialCallingConvType for the given callee.
bool inMips16HardFloat() const
Represents one node in the SelectionDAG.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void push_back(const T &Elt)
StringRef - Represent a constant reference to a string, i.e.
The instances of the Type class are immutable: once they are created, they are never changed.
Type * getStructElementType(unsigned N) const
bool isVectorTy() const
True if this is an instance of VectorType.
unsigned getStructNumElements() const
bool isFP128Ty() const
Return true if this is 'fp128'.
bool isStructTy() const
True if this is an instance of StructType.
bool isFloatingPointTy() const
Return true if this is one of the floating-point types.
bool isIntegerTy() const
True if this is an instance of IntegerType.
bool isFPOrFPVectorTy() const
Return true if this is a FP type or a vector of FP.
Type * getType() const
All values are typed, get the type of this value.
This is an optimization pass for GlobalISel generic memory operations.
bool is_sorted(R &&Range, Compare C)
Wrapper function around std::is_sorted to check if elements in a range R are sorted with respect to a...
bool isFloatingPoint() const
Return true if this is a FP or a vector FP type.
bool isVector() const
Return true if this is a vector value type.
EVT getVectorElementType() const
Given a vector type, return the type of each element.
OutputArg - This struct carries flags and a value for a single outgoing (actual) argument or outgoing...