60 SP::I0, SP::I1, SP::I2, SP::I3, SP::I4, SP::I5
86 SP::I0, SP::I1, SP::I2, SP::I3, SP::I4, SP::I5
110 "Can't handle non-64 bits locations");
170 unsigned Reg = SP::I0 +
Offset/8;
220#include "SparcGenCallingConv.inc"
226 static_assert(SP::I0 + 7 == SP::I7 && SP::O0 + 7 == SP::O7,
228 if (Reg >= SP::I0 && Reg <= SP::I7)
229 return Reg - SP::I0 + SP::O0;
277 for (
unsigned i = 0, realRVLocIdx = 0;
279 ++i, ++realRVLocIdx) {
311 unsigned RetAddrOffset = 8;
362 for (
unsigned i = 0; i != RVLocs.
size(); ++i) {
391 if (i+1 < RVLocs.
size() && RVLocs[i+1].getLocReg() == VA.
getLocReg()) {
447 for (
unsigned i = 0, e = ArgLocs.size(); i != e; ++i, ++InIdx) {
450 if (Ins[InIdx].
Flags.isSRet()) {
481 &SP::IntRegsRegClass);
583 SP::I0, SP::I1, SP::I2, SP::I3, SP::I4, SP::I5
586 const MCPhysReg *CurArgReg = ArgRegs+NumAllocated, *ArgRegEnd = ArgRegs+6;
588 if (NumAllocated == 6)
592 ArgOffset = 68+4*NumAllocated;
596 FuncInfo->setVarArgsFrameOffset(ArgOffset);
598 std::vector<SDValue> OutChains;
600 for (; CurArgReg != ArgRegEnd; ++CurArgReg) {
614 if (!OutChains.empty()) {
615 OutChains.push_back(Chain);
637 const unsigned ArgArea = 128;
639 for (
unsigned i = 0, e = ArgLocs.
size(); i != e; ++i) {
716 for (; ArgOffset < 6*8; ArgOffset += 8) {
726 if (!OutChains.
empty())
743 return Call->hasFnAttr(Attribute::ReturnsTwice);
747 CalleeFn = dyn_cast<Function>(
G->getGlobal());
749 dyn_cast<ExternalSymbolSDNode>(
Callee)) {
752 const char *CalleeName =
E->getSymbol();
753 CalleeFn = M->getFunction(CalleeName);
766 auto &Outs = CLI.
Outs;
770 if (Caller.getFnAttribute(
"disable-tail-calls").getValueAsString() ==
"true")
776 unsigned StackOffsetLimit = Subtarget->
is64Bit() ? 48 : 0;
782 if (!Outs.empty() && Caller.hasStructRetAttr() != Outs[0].Flags.isSRet())
787 for (
auto &
Arg : Outs)
788 if (
Arg.Flags.isByVal())
822 ArgsSize = (ArgsSize+7) & ~7;
828 for (
unsigned i = 0, e = Outs.
size(); i != e; ++i) {
830 if (!
Flags.isByVal())
835 Align Alignment =
Flags.getNonZeroByValAlign();
842 Chain = DAG.
getMemcpy(Chain, dl, FIPtr,
Arg, SizeNode, Alignment,
855 assert(!isTailCall || ArgsSize == 0);
864 bool hasStructRetAttr =
false;
865 unsigned SRetArgSize = 0;
867 for (
unsigned i = 0, realArgIdx = 0, byvalArgIdx = 0, e = ArgLocs.
size();
876 if (
Flags.isByVal()) {
877 Arg = ByValArgs[byvalArgIdx++];
901 if (
Flags.isSRet()) {
913 hasStructRetAttr =
true;
915 assert(Outs[realArgIdx].OrigArgIndex == 0);
1010 if (!MemOpChains.
empty())
1018 for (
unsigned i = 0, e = RegsToPass.
size(); i != e; ++i) {
1019 Register Reg = RegsToPass[i].first;
1022 Chain = DAG.
getCopyToReg(Chain, dl, Reg, RegsToPass[i].second, InFlag);
1043 if (hasStructRetAttr)
1045 for (
unsigned i = 0, e = RegsToPass.
size(); i != e; ++i) {
1046 Register Reg = RegsToPass[i].first;
1056 ?
TRI->getRTCallPreservedMask(CallConv)
1058 assert(Mask &&
"Missing call preserved mask for calling convention");
1083 for (
unsigned i = 0; i != RVLocs.
size(); ++i) {
1084 assert(RVLocs[i].isRegLoc() &&
"Can only return in registers!");
1089 Chain =
Lo.getValue(1);
1090 InFlag =
Lo.getValue(2);
1095 Chain =
Hi.getValue(1);
1096 InFlag =
Hi.getValue(2);
1103 RVLocs[i].getValVT(), InFlag)
1118 .
Case(
"i0", SP::I0).
Case(
"i1", SP::I1).
Case(
"i2", SP::I2).
Case(
"i3", SP::I3)
1119 .
Case(
"i4", SP::I4).
Case(
"i5", SP::I5).
Case(
"i6", SP::I6).
Case(
"i7", SP::I7)
1120 .
Case(
"o0", SP::O0).
Case(
"o1", SP::O1).
Case(
"o2", SP::O2).
Case(
"o3", SP::O3)
1121 .
Case(
"o4", SP::O4).
Case(
"o5", SP::O5).
Case(
"o6", SP::O6).
Case(
"o7", SP::O7)
1122 .
Case(
"l0", SP::L0).
Case(
"l1", SP::L1).
Case(
"l2", SP::L2).
Case(
"l3", SP::L3)
1123 .
Case(
"l4", SP::L4).
Case(
"l5", SP::L5).
Case(
"l6", SP::L6).
Case(
"l7", SP::L7)
1124 .
Case(
"g0", SP::G0).
Case(
"g1", SP::G1).
Case(
"g2", SP::G2).
Case(
"g3", SP::G3)
1125 .
Case(
"g4", SP::G4).
Case(
"g5", SP::G5).
Case(
"g6", SP::G6).
Case(
"g7", SP::G7)
1144 for (
unsigned i = 0, e = ArgLocs.
size(); i != e; ++i) {
1158 unsigned argSize = (ValTy ==
MVT::f64) ? 8 : 16;
1160 assert(
Offset < 16*8 &&
"Offset out of range, bad register enum?");
1164 unsigned IReg = SP::I0 +
Offset/8;
1206 unsigned StackReserved = 6 * 8u;
1210 ArgsSize =
alignTo(ArgsSize, 16);
1234 for (
unsigned i = 0, e = ArgLocs.
size(); i != e; ++i) {
1290 RegsToPass.
push_back(std::make_pair(HiReg, Hi64));
1291 RegsToPass.
push_back(std::make_pair(LoReg, Lo64));
1303 if (i+1 < ArgLocs.
size() && ArgLocs[i+1].isRegLoc() &&
1304 ArgLocs[i+1].getLocReg() == VA.
getLocReg()) {
1335 if (!MemOpChains.
empty())
1343 for (
unsigned i = 0, e = RegsToPass.
size(); i != e; ++i) {
1345 RegsToPass[i].first, RegsToPass[i].second, InGlue);
1365 for (
unsigned i = 0, e = RegsToPass.
size(); i != e; ++i)
1367 RegsToPass[i].second.getValueType()));
1372 ((hasReturnsTwice) ?
TRI->getRTCallPreservedMask(CLI.
CallConv)
1375 assert(Mask &&
"Missing call preserved mask for calling convention");
1407 CLI.
Ins[0].Flags.setInReg();
1412 for (
unsigned i = 0; i != RVLocs.
size(); ++i) {
1724 if (Subtarget->
isV9())
1758 if (!Subtarget->
isV9()) {
1866 if (Subtarget->
isV9()) {
1971 return "SPISD::CMPFCC_V9";
1974 return "SPISD::BPICC";
1976 return "SPISD::BPXCC";
1979 return "SPISD::BRFCC_V9";
1984 return "SPISD::SELECT_REG";
2017 const APInt &DemandedElts,
2019 unsigned Depth)
const {
2023 switch (Op.getOpcode()) {
2050 SPCC = cast<ConstantSDNode>(
LHS.getOperand(2))->getZExtValue();
2062 GA->getValueType(0),
2063 GA->getOffset(), TF);
2067 CP->getAlign(), CP->getOffset(), TF);
2077 ES->getValueType(0), TF);
2085 unsigned HiTF,
unsigned LoTF,
2088 EVT VT = Op.getValueType();
2214 assert(Mask &&
"Missing call preserved mask for calling convention");
2279 EVT ArgVT =
Arg.getValueType();
2296 Args.push_back(Entry);
2302 const char *LibFuncName,
2303 unsigned numArgs)
const {
2316 if (
RetTy->isFP128Ty()) {
2321 Entry.Node = RetPtr;
2324 Entry.IsSRet =
true;
2325 Entry.IndirectType =
RetTy;
2327 Entry.IsReturned =
false;
2328 Args.push_back(Entry);
2332 assert(Op->getNumOperands() >= numArgs &&
"Not enough operands!");
2333 for (
unsigned i = 0, e = numArgs; i != e; ++i) {
2343 if (RetTyABI ==
RetTy)
2346 assert (
RetTy->isFP128Ty() &&
"Unexpected return type!");
2351 return DAG.
getLoad(Op.getValueType(),
SDLoc(Op), Chain, RetPtr,
2356 unsigned &SPCC,
const SDLoc &
DL,
2359 const char *
LibCall =
nullptr;
2456 if (Op.getOperand(0).getValueType() ==
MVT::f64)
2460 if (Op.getOperand(0).getValueType() ==
MVT::f32)
2472 if (Op.getOperand(0).getValueType() !=
MVT::f128)
2490 EVT VT = Op.getValueType();
2494 if (Op.getOperand(0).getValueType() ==
MVT::f128
2497 ? RTLIB::FPTOSINT_F128_I32
2498 : RTLIB::FPTOSINT_F128_I64);
2519 EVT OpVT = Op.getOperand(0).getValueType();
2528 ? RTLIB::SINTTOFP_I32_F128
2529 : RTLIB::SINTTOFP_I64_F128);
2540 return DAG.
getNode(opcode, dl, Op.getValueType(), Tmp);
2547 EVT VT = Op.getValueType();
2551 if (Op.getOperand(0).getValueType() !=
MVT::f128 ||
2559 ? RTLIB::FPTOUINT_F128_I32
2560 : RTLIB::FPTOUINT_F128_I64),
2568 EVT OpVT = Op.getOperand(0).getValueType();
2578 ? RTLIB::UINTTOFP_I32_F128
2579 : RTLIB::UINTTOFP_I64_F128),
2586 SDValue Chain = Op.getOperand(0);
2590 SDValue Dest = Op.getOperand(4);
2592 unsigned Opc, SPCC = ~0U;
2601 if (
LHS.getValueType().isInteger()) {
2632 SDValue TrueVal = Op.getOperand(2);
2633 SDValue FalseVal = Op.getOperand(3);
2635 unsigned Opc, SPCC = ~0U;
2643 if (
LHS.getValueType().isInteger()) {
2650 EVT ValType = TrueVal.getValueType();
2651 bool IsEligibleType = ValType.isScalarInteger() || ValType ==
MVT::f32 ||
2676 return DAG.
getNode(Opc, dl, TrueVal.getValueType(), TrueVal, FalseVal,
2695 const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
2702 EVT VT =
Node->getValueType(0);
2706 const Value *SV = cast<SrcValueSDNode>(
Node->getOperand(2))->getValue();
2726 SDValue Chain = Op.getOperand(0);
2729 cast<ConstantSDNode>(Op.getOperand(2))->getMaybeAlignValue();
2731 EVT VT =
Size->getValueType(0);
2737 if (Alignment && *Alignment > StackAlign) {
2740 "over-aligned dynamic alloca not supported.");
2745 unsigned regSpillArea;
2775 unsigned SPReg = SP::O6;
2784 SDValue Ops[2] = { NewVal, Chain };
2798 bool AlwaysFlush =
false) {
2802 EVT VT = Op.getValueType();
2804 unsigned FrameReg = SP::I6;
2815 unsigned Offset = (Subtarget->
is64Bit()) ? (stackBias + 112) : 56;
2832 uint64_t depth = Op.getConstantOperandVal(0);
2848 EVT VT = Op.getValueType();
2850 uint64_t depth = Op.getConstantOperandVal(0);
2910 LoadSDNode *LdNode = cast<LoadSDNode>(Op.getNode());
2950 LoadSDNode *LdNode = cast<LoadSDNode>(Op.getNode());
2962 StoreSDNode *StNode = cast<StoreSDNode>(Op.getNode());
2999 StoreSDNode *St = cast<StoreSDNode>(Op.getNode());
3021 &&
"invalid opcode");
3026 return LowerF64Op(Op.getOperand(0), dl, DAG, Op.getOpcode());
3035 SDValue SrcReg128 = Op.getOperand(0);
3045 Lo64 =
LowerF64Op(Lo64, dl, DAG, Op.getOpcode());
3050 Hi64 =
LowerF64Op(Hi64, dl, DAG, Op.getOpcode());
3068 SDValue Src1 = Op.getOperand(0);
3074 SDValue Src2 = Op.getOperand(1);
3081 bool hasChain =
false;
3082 unsigned hiOpc = Op.getOpcode();
3083 switch (Op.getOpcode()) {
3093 Lo = DAG.
getNode(Op.getOpcode(), dl, VTs, Src1Lo, Src2Lo,
3096 Lo = DAG.
getNode(Op.getOpcode(), dl, VTs, Src1Lo, Src2Lo);
3107 SDValue Ops[2] = { Dst, Carry };
3116 unsigned opcode = Op.getOpcode();
3125 if (
LHS.getValueType() != VT)
3145 RTLIB::MUL_I128, WideVT,
3146 Args, CallOptions, dl).first;
3148 std::tie(BottomHalf, TopHalf) = DAG.
SplitScalar(MulResult, dl, VT, VT);
3160 assert(MulResult->
use_empty() &&
"Illegally typed node still in use!");
3162 SDValue Ops[2] = { BottomHalf, TopHalf } ;
3178 unsigned IntNo = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue();
3182 case Intrinsic::thread_pointer: {
3193 bool isV9 = Subtarget->
isV9();
3196 switch (Op.getOpcode()) {
3216 return LowerBR_CC(Op, DAG, *
this, hasHardQuad, isV9);
3255 APInt V =
C->getValueAPF().bitcastToAPInt();
3268 if (isa<ConstantFPSDNode>(Src) &&
N->getSimpleValueType(0) ==
MVT::v2i32 &&
3269 Src.getSimpleValueType() ==
MVT::f64)
3277 switch (
N->getOpcode()) {
3289 switch (
MI.getOpcode()) {
3291 case SP::SELECT_CC_Int_ICC:
3292 case SP::SELECT_CC_FP_ICC:
3293 case SP::SELECT_CC_DFP_ICC:
3294 case SP::SELECT_CC_QFP_ICC:
3295 if (Subtarget->
isV9())
3298 case SP::SELECT_CC_Int_XCC:
3299 case SP::SELECT_CC_FP_XCC:
3300 case SP::SELECT_CC_DFP_XCC:
3301 case SP::SELECT_CC_QFP_XCC:
3303 case SP::SELECT_CC_Int_FCC:
3304 case SP::SELECT_CC_FP_FCC:
3305 case SP::SELECT_CC_DFP_FCC:
3306 case SP::SELECT_CC_QFP_FCC:
3307 if (Subtarget->
isV9())
3315 unsigned BROpcode)
const {
3338 F->insert(It, IfFalseMBB);
3339 F->insert(It, SinkMBB);
3359 MI.getOperand(0).getReg())
3365 MI.eraseFromParent();
3377 if (Constraint.
size() == 1) {
3378 switch (Constraint[0]) {
3394 const char *constraint)
const {
3396 Value *CallOperandVal =
info.CallOperandVal;
3399 if (!CallOperandVal)
3403 switch (*constraint) {
3409 if (isInt<13>(
C->getSExtValue()))
3421 std::string &Constraint,
3422 std::vector<SDValue> &Ops,
3427 if (Constraint.length() > 1)
3430 char ConstraintLetter = Constraint[0];
3431 switch (ConstraintLetter) {
3435 if (isInt<13>(
C->getSExtValue())) {
3444 if (Result.getNode()) {
3445 Ops.push_back(Result);
3451std::pair<unsigned, const TargetRegisterClass *>
3455 if (Constraint.
empty())
3456 return std::make_pair(0U,
nullptr);
3458 if (Constraint.
size() == 1) {
3459 switch (Constraint[0]) {
3462 return std::make_pair(0U, &SP::IntPairRegClass);
3463 else if (Subtarget->
is64Bit())
3464 return std::make_pair(0U, &SP::I64RegsRegClass);
3466 return std::make_pair(0U, &SP::IntRegsRegClass);
3469 return std::make_pair(0U, &SP::FPRegsRegClass);
3471 return std::make_pair(0U, &SP::LowDFPRegsRegClass);
3473 return std::make_pair(0U, &SP::LowQFPRegsRegClass);
3475 return std::make_pair(0U,
nullptr);
3478 return std::make_pair(0U, &SP::FPRegsRegClass);
3480 return std::make_pair(0U, &SP::DFPRegsRegClass);
3482 return std::make_pair(0U, &SP::QFPRegsRegClass);
3484 return std::make_pair(0U,
nullptr);
3488 if (Constraint.
front() !=
'{')
3489 return std::make_pair(0U,
nullptr);
3491 assert(Constraint.
back() ==
'}' &&
"Not a brace enclosed constraint?");
3494 return std::make_pair(0U,
nullptr);
3496 unsigned long long RegNo;
3505 return std::make_pair(0U,
nullptr);
3506 const char RegTypes[] = {
'g',
'o',
'l',
'i'};
3507 char RegType = RegTypes[RegNo / 8];
3508 char RegIndex =
'0' + (RegNo % 8);
3509 char Tmp[] = {
'{', RegType, RegIndex,
'}', 0};
3516 if (VT ==
MVT::f64 && (RegNo % 2 == 0)) {
3519 }
else if (VT ==
MVT::f128 && (RegNo % 4 == 0)) {
3523 return std::make_pair(0U,
nullptr);
3529 if (!ResultPair.second)
3530 return std::make_pair(0U,
nullptr);
3534 assert(ResultPair.second == &SP::IntRegsRegClass &&
3535 "Unexpected register class");
3536 return std::make_pair(ResultPair.first, &SP::I64RegsRegClass);
3556 switch (
N->getOpcode()) {
3558 llvm_unreachable(
"Do not know how to custom type legalize this operation!");
3563 if (
N->getOperand(0).getValueType() !=
MVT::f128
3567 ? RTLIB::FPTOSINT_F128_I64
3568 : RTLIB::FPTOUINT_F128_I64);
3582 Results.push_back(
N->getOperand(0));
3589 ||
N->getOperand(0).getValueType() !=
MVT::i64)
3593 ? RTLIB::SINTTOFP_I64_F128
3594 : RTLIB::UINTTOFP_I64_F128);
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
amdgpu Simplify well known AMD library false FunctionCallee Callee
amdgpu Simplify well known AMD library false FunctionCallee Value * Arg
static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG)
static SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG, const ARMSubtarget *Subtarget)
Function Alias Analysis Results
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
static bool isSigned(unsigned int Opcode)
const HexagonInstrInfo * TII
static LPCC::CondCode IntCondCCodeToICC(SDValue CC, const SDLoc &DL, SDValue &RHS, SelectionDAG &DAG)
unsigned const TargetRegisterInfo * TRI
typename CallsiteContextGraph< DerivedCCG, FuncTy, CallTy >::FuncInfo FuncInfo
Module.h This file contains the declarations for the Module class.
const char LLVMTargetMachineRef TM
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
static SDValue LowerFP_TO_UINT(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI, bool hasHardQuad)
static bool CC_Sparc_Assign_Ret_Split_64(unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI, bool hasHardQuad)
static bool CC_Sparc_Assign_Split_64(unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static SDValue getFRAMEADDR(uint64_t depth, SDValue Op, SelectionDAG &DAG, const SparcSubtarget *Subtarget, bool AlwaysFlush=false)
static unsigned toCallerWindow(unsigned Reg)
static SDValue LowerF128Store(SDValue Op, SelectionDAG &DAG)
static SPCC::CondCodes intCondCCodeToRcond(ISD::CondCode CC)
intCondCCodeToRcond - Convert a DAG integer condition code to a SPARC rcond condition.
static SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG)
static void fixupVariableFloatArgs(SmallVectorImpl< CCValAssign > &ArgLocs, ArrayRef< ISD::OutputArg > Outs)
static SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI, bool hasHardQuad)
static SPCC::CondCodes FPCondCCodeToFCC(ISD::CondCode CC)
FPCondCCodeToFCC - Convert a DAG floatingp oint condition code to a SPARC FCC condition.
static SDValue getFLUSHW(SDValue Op, SelectionDAG &DAG)
static bool hasReturnsTwiceAttr(SelectionDAG &DAG, SDValue Callee, const CallBase *Call)
static SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG, const SparcSubtarget *Subtarget)
static SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG, const SparcSubtarget *Subtarget)
static SDValue LowerUMULO_SMULO(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI)
static SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI, bool hasHardQuad, bool isV9)
static SDValue LowerF128_FPROUND(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI)
static SDValue LowerF64Op(SDValue SrcReg64, const SDLoc &dl, SelectionDAG &DAG, unsigned opcode)
static bool RetCC_Sparc64_Full(unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static SDValue LowerATOMIC_LOAD_STORE(SDValue Op, SelectionDAG &DAG)
static SDValue LowerADDC_ADDE_SUBC_SUBE(SDValue Op, SelectionDAG &DAG)
static bool RetCC_Sparc64_Half(unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI, bool hasHardQuad, bool isV9, bool is64Bit)
static SDValue LowerF128_FPEXTEND(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI)
static SDValue LowerFNEGorFABS(SDValue Op, SelectionDAG &DAG, bool isV9)
static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG)
static bool CC_Sparc64_Half(unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static bool CC_Sparc64_Full(unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static bool CC_Sparc_Assign_SRet(unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static bool Analyze_CC_Sparc64_Half(bool IsReturn, unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static SDValue LowerF128Load(SDValue Op, SelectionDAG &DAG)
static SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI, const SparcSubtarget *Subtarget)
static void LookThroughSetCC(SDValue &LHS, SDValue &RHS, ISD::CondCode CC, unsigned &SPCC)
static bool Analyze_CC_Sparc64_Full(bool IsReturn, unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State)
static SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG, const SparcTargetLowering &TLI, bool hasHardQuad)
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
static bool is64Bit(const char *name)
Class for arbitrary precision integers.
This class represents an incoming formal argument to a Function.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
an instruction that atomically reads a memory location, combines it with another value,...
BinOp getOperation() const
LLVM Basic Block Representation.
CCState - This class holds information needed while lowering arguments and return values.