• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/llvm-project/llvm/lib/Target/Sparc/

Lines Matching refs:SDValue

194 SDValue
195 SparcTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CallConv,
198 const SmallVectorImpl<SDValue> &OutVals,
205 SDValue
206 SparcTargetLowering::LowerReturn_32(SDValue Chain, CallingConv::ID CallConv,
209 const SmallVectorImpl<SDValue> &OutVals,
223 SDValue Flag;
224 SmallVector<SDValue, 4> RetOps(1, Chain);
226 RetOps.push_back(SDValue());
235 SDValue Arg = OutVals[realRVLocIdx];
242 SDValue Part0 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i32,
245 SDValue Part1 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i32,
271 SDValue Val = DAG.getCopyFromReg(Chain, DL, Reg, PtrVT);
290 SDValue
291 SparcTargetLowering::LowerReturn_64(SDValue Chain, CallingConv::ID CallConv,
294 const SmallVectorImpl<SDValue> &OutVals,
306 SDValue Flag;
307 SmallVector<SDValue, 4> RetOps(1, Chain);
317 SDValue OutVal = OutVals[i];
344 SDValue NV = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i64, OutVals[i+1]);
367 SDValue SparcTargetLowering::LowerFormalArguments(
368 SDValue Chain, CallingConv::ID CallConv, bool IsVarArg,
370 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
381 SDValue SparcTargetLowering::LowerFormalArguments_32(
382 SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
384 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
407 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
408 SDValue Arg =
420 SDValue HiVal = DAG.getCopyFromReg(Chain, dl, VRegHi, MVT::i32);
425 SDValue LoVal;
429 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
440 SDValue WholeValue =
448 SDValue Arg = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32);
472 SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT);
473 SDValue Load =
482 SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT);
483 SDValue HiVal =
488 SDValue FIPtr2 = DAG.getFrameIndex(FI2, PtrVT);
490 SDValue LoVal =
496 SDValue WholeValue =
506 SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT);
507 SDValue Load ;
528 SDValue Copy = DAG.getCopyToReg(DAG.getEntryNode(), dl, Reg, InVals[0]);
550 std::vector<SDValue> OutChains;
555 SDValue Arg = DAG.getCopyFromReg(DAG.getRoot(), dl, VReg, MVT::i32);
559 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
576 SDValue SparcTargetLowering::LowerFormalArguments_64(
577 SDValue Chain, CallingConv::ID CallConv, bool IsVarArg,
579 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
600 SDValue Arg = DAG.getCopyFromReg(Chain, DL, VReg, VA.getLocVT());
667 SmallVector<SDValue, 8> OutChains;
670 SDValue VArg = DAG.getCopyFromReg(Chain, DL, VReg, MVT::i64);
684 SDValue
686 SmallVectorImpl<SDValue> &InVals) const {
692 static bool hasReturnsTwiceAttr(SelectionDAG &DAG, SDValue Callee,
714 SDValue
716 SmallVectorImpl<SDValue> &InVals) const {
720 SmallVectorImpl<SDValue> &OutVals = CLI.OutVals;
722 SDValue Chain = CLI.Chain;
723 SDValue Callee = CLI.Callee;
746 SmallVector<SDValue, 8> ByValArgs;
752 SDValue Arg = OutVals[i];
758 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
759 SDValue SizeNode = DAG.getConstant(Size, dl, MVT::i32);
769 SDValue nullVal;
776 SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass;
777 SmallVector<SDValue, 8> MemOpChains;
787 SDValue Arg = OutVals[realArgIdx];
820 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
821 SDValue PtrOff = DAG.getIntPtrConstant(64, dl);
841 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
842 SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl);
859 SDValue Part0 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i32,
862 SDValue Part1 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i32,
875 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
876 SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl);
884 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
885 SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl);
913 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
914 SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset() + StackOffset,
930 SDValue InFlag;
950 SmallVector<SDValue, 8> Ops;
988 SDValue Vec = DAG.getNode(ISD::UNDEF, dl, MVT::v2i32);
989 SDValue Lo = DAG.getCopyFromReg(
995 SDValue Hi = DAG.getCopyFromReg(
1090 SDValue
1092 SmallVectorImpl<SDValue> &InVals) const {
1095 SDValue Chain = CLI.Chain;
1128 SmallVector<std::pair<Register, SDValue>, 8> RegsToPass;
1133 SmallVector<SDValue, 8> MemOpChains;
1137 SDValue Arg = CLI.OutVals[i];
1169 SDValue StackPtr = DAG.getRegister(SP::O6, PtrVT);
1170 SDValue HiPtrOff = DAG.getIntPtrConstant(StackOffset, DL);
1172 SDValue LoPtrOff = DAG.getIntPtrConstant(StackOffset + 8, DL);
1176 SDValue Store =
1179 SDValue Hi64 =
1181 SDValue Lo64 =
1200 SDValue NV = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i64,
1214 SDValue StackPtr = DAG.getRegister(SP::O6, PtrVT);
1217 SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset() +
1233 SDValue InGlue;
1243 SDValue Callee = CLI.Callee;
1252 SmallVector<SDValue, 8> Ops;
1306 SDValue RV;
1863 (const SDValue Op,
1888 static void LookThroughSetCC(SDValue &LHS, SDValue &RHS,
1899 SDValue CMPCC = LHS.getOperand(3);
1907 SDValue SparcTargetLowering::withTargetFlags(SDValue Op, unsigned TF,
1934 SDValue SparcTargetLowering::makeHiLoPair(SDValue Op,
1939 SDValue Hi = DAG.getNode(SPISD::Hi, DL, VT, withTargetFlags(Op, HiTF, DAG));
1940 SDValue Lo = DAG.getNode(SPISD::Lo, DL, VT, withTargetFlags(Op, LoTF, DAG));
1946 SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const {
1954 SDValue Idx;
1966 SDValue GlobalBase = DAG.getNode(SPISD::GLOBAL_BASE_REG, DL, VT);
1967 SDValue AbsAddr = DAG.getNode(ISD::ADD, DL, VT, GlobalBase, Idx);
1986 SDValue H44 = makeHiLoPair(Op, SparcMCExpr::VK_Sparc_H44,
1989 SDValue L44 = withTargetFlags(Op, SparcMCExpr::VK_Sparc_L44, DAG);
1995 SDValue Hi = makeHiLoPair(Op, SparcMCExpr::VK_Sparc_HH,
1998 SDValue Lo = makeHiLoPair(Op, SparcMCExpr::VK_Sparc_HI,
2005 SDValue SparcTargetLowering::LowerGlobalAddress(SDValue Op,
2010 SDValue SparcTargetLowering::LowerConstantPool(SDValue Op,
2015 SDValue SparcTargetLowering::LowerBlockAddress(SDValue Op,
2020 SDValue SparcTargetLowering::LowerGlobalTLSAddress(SDValue Op,
2047 SDValue HiLo = makeHiLoPair(Op, HiTF, LoTF, DAG);
2048 SDValue Base = DAG.getNode(SPISD::GLOBAL_BASE_REG, DL, PtrVT);
2049 SDValue Argument = DAG.getNode(SPISD::TLS_ADD, DL, PtrVT, Base, HiLo,
2052 SDValue Chain = DAG.getEntryNode();
2053 SDValue InFlag;
2058 SDValue Callee = DAG.getTargetExternalSymbol("__tls_get_addr", PtrVT);
2059 SDValue Symbol = withTargetFlags(Op, callTF, DAG);
2065 SDValue Ops[] = {Chain,
2076 SDValue Ret = DAG.getCopyFromReg(Chain, DL, SP::O0, PtrVT, InFlag);
2081 SDValue Hi = DAG.getNode(SPISD::Hi, DL, PtrVT,
2083 SDValue Lo = DAG.getNode(SPISD::Lo, DL, PtrVT,
2094 SDValue Base = DAG.getNode(SPISD::GLOBAL_BASE_REG, DL, PtrVT);
2101 SDValue TGA = makeHiLoPair(Op,
2104 SDValue Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Base, TGA);
2105 SDValue Offset = DAG.getNode(SPISD::TLS_LD,
2115 SDValue Hi = DAG.getNode(SPISD::Hi, DL, PtrVT,
2117 SDValue Lo = DAG.getNode(SPISD::Lo, DL, PtrVT,
2119 SDValue Offset = DAG.getNode(ISD::XOR, DL, PtrVT, Hi, Lo);
2125 SDValue SparcTargetLowering::LowerF128_LibCallArg(SDValue Chain,
2126 ArgListTy &Args, SDValue Arg,
2140 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
2151 SDValue
2152 SparcTargetLowering::LowerF128Op(SDValue Op, SelectionDAG &DAG,
2161 SDValue Callee = DAG.getExternalSymbol(LibFuncName, PtrVT);
2164 SDValue Chain = DAG.getEntryNode();
2165 SDValue RetPtr;
2189 std::pair<SDValue, SDValue> CallInfo = LowerCallTo(CLI);
2204 SDValue SparcTargetLowering::LowerF128Compare(SDValue LHS, SDValue RHS,
2229 SDValue Callee = DAG.getExternalSymbol(LibCall, PtrVT);
2232 SDValue Chain = DAG.getEntryNode();
2240 std::pair<SDValue, SDValue> CallInfo = LowerCallTo(CLI);
2243 SDValue Result = CallInfo.first;
2247 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType());
2252 SDValue Mask = DAG.getConstant(1, DL, Result.getValueType());
2254 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType());
2259 SDValue RHS = DAG.getConstant(2, DL, Result.getValueType());
2264 SDValue RHS = DAG.getConstant(1, DL, Result.getValueType());
2269 SDValue RHS = DAG.getConstant(1, DL, Result.getValueType());
2275 SDValue RHS = DAG.getConstant(3, DL, Result.getValueType());
2280 SDValue RHS = DAG.getConstant(3, DL, Result.getValueType());
2285 SDValue Mask = DAG.getConstant(3, DL, Result.getValueType());
2287 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType());
2292 SDValue Mask = DAG.getConstant(3, DL, Result.getValueType());
2294 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType());
2301 static SDValue
2302 LowerF128_FPEXTEND(SDValue Op, SelectionDAG &DAG,
2314 return SDValue();
2317 static SDValue
2318 LowerF128_FPROUND(SDValue Op, SelectionDAG &DAG,
2332 return SDValue();
2335 static SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG,
2353 return SDValue();
2364 static SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG,
2384 return SDValue();
2387 SDValue Tmp = DAG.getNode(ISD::BITCAST, dl, floatVT, Op.getOperand(0));
2392 static SDValue LowerFP_TO_UINT(SDValue Op, SelectionDAG &DAG,
2402 return SDValue();
2413 static SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG,
2423 return SDValue();
2432 static SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG,
2435 SDValue Chain = Op.getOperand(0);
2437 SDValue LHS = Op.getOperand(2);
2438 SDValue RHS = Op.getOperand(3);
2439 SDValue Dest = Op.getOperand(4);
2448 SDValue CompareFlag;
2469 static SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG,
2472 SDValue LHS = Op.getOperand(0);
2473 SDValue RHS = Op.getOperand(1);
2475 SDValue TrueVal = Op.getOperand(2);
2476 SDValue FalseVal = Op.getOperand(3);
2484 SDValue CompareFlag;
2505 static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG,
2517 SDValue Offset =
2525 static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) {
2528 SDValue InChain = Node->getOperand(0);
2529 SDValue VAListPtr = Node->getOperand(1);
2533 SDValue VAList =
2536 SDValue NextPtr = DAG.getNode(ISD::ADD, DL, PtrVT, VAList,
2548 static SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG,
2550 SDValue Chain = Op.getOperand(0); // Legalize the chain.
2551 SDValue Size = Op.getOperand(1); // Legalize the size.
2600 SDValue SP = DAG.getCopyFromReg(Chain, dl, SPReg, VT);
2601 SDValue NewSP = DAG.getNode(ISD::SUB, dl, VT, SP, Size); // Value
2606 SDValue NewVal = DAG.getNode(ISD::ADD, dl, VT, NewSP,
2608 SDValue Ops[2] = { NewVal, Chain };
2613 static SDValue getFLUSHW(SDValue Op, SelectionDAG &DAG) {
2615 SDValue Chain = DAG.getNode(SPISD::FLUSHW,
2620 static SDValue getFRAMEADDR(uint64_t depth, SDValue Op, SelectionDAG &DAG,
2631 SDValue FrameAddr;
2632 SDValue Chain;
2642 SDValue Ptr = DAG.getNode(ISD::ADD, dl, VT, FrameAddr,
2653 static SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG,
2662 static SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG,
2670 return SDValue();
2676 SDValue RetAddr;
2685 SDValue FrameAddr = getFRAMEADDR(depth - 1, Op, DAG, Subtarget, true);
2688 SDValue Ptr = DAG.getNode(ISD::ADD,
2697 static SDValue LowerF64Op(SDValue SrcReg64, const SDLoc &dl, SelectionDAG &DAG,
2711 SDValue Hi32 = DAG.getTargetExtractSubreg(SP::sub_even, dl, MVT::f32,
2713 SDValue Lo32 = DAG.getTargetExtractSubreg(SP::sub_odd, dl, MVT::f32,
2721 SDValue DstReg64 = SDValue(DAG.getMachineNode(TargetOpcode::IMPLICIT_DEF,
2731 static SDValue LowerF128Load(SDValue Op, SelectionDAG &DAG)
2742 SDValue Hi64 =
2746 SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT,
2749 SDValue Lo64 = DAG.getLoad(MVT::f64, dl, LdNode->getChain(), LoPtr,
2752 SDValue SubRegEven = DAG.getTargetConstant(SP::sub_even64, dl, MVT::i32);
2753 SDValue SubRegOdd = DAG.getTargetConstant(SP::sub_odd64, dl, MVT::i32);
2759 SDValue(InFP128, 0),
2764 SDValue(InFP128, 0),
2767 SDValue OutChains[2] = { SDValue(Hi64.getNode(), 1),
2768 SDValue(Lo64.getNode(), 1) };
2769 SDValue OutChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
2770 SDValue Ops[2] = {SDValue(InFP128,0), OutChain};
2774 static SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG)
2786 static SDValue LowerF128Store(SDValue Op, SelectionDAG &DAG) {
2791 SDValue SubRegEven = DAG.getTargetConstant(SP::sub_even64, dl, MVT::i32);
2792 SDValue SubRegOdd = DAG.getTargetConstant(SP::sub_odd64, dl, MVT::i32);
2809 SDValue OutChains[2];
2811 DAG.getStore(StNode->getChain(), dl, SDValue(Hi64, 0),
2814 SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT,
2817 OutChains[1] = DAG.getStore(StNode->getChain(), dl, SDValue(Lo64, 0), LoPtr,
2822 static SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG)
2834 SDValue Val = DAG.getNode(ISD::BITCAST, dl, MVT::v2i32, St->getValue());
2835 SDValue Chain = DAG.getStore(
2841 return SDValue();
2844 static SDValue LowerFNEGorFABS(SDValue Op, SelectionDAG &DAG, bool isV9) {
2860 SDValue SrcReg128 = Op.getOperand(0);
2861 SDValue Hi64 = DAG.getTargetExtractSubreg(SP::sub_even64, dl, MVT::f64,
2863 SDValue Lo64 = DAG.getTargetExtractSubreg(SP::sub_odd64, dl, MVT::f64,
2878 SDValue DstReg128 = SDValue(DAG.getMachineNode(TargetOpcode::IMPLICIT_DEF,
2887 static SDValue LowerADDC_ADDE_SUBC_SUBE(SDValue Op, SelectionDAG &DAG) {
2893 SDValue Src1 = Op.getOperand(0);
2894 SDValue Src1Lo = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src1);
2895 SDValue Src1Hi = DAG.getNode(ISD::SRL, dl, MVT::i64, Src1,
2899 SDValue Src2 = Op.getOperand(1);
2900 SDValue Src2Lo = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src2);
2901 SDValue Src2Hi = DAG.getNode(ISD::SRL, dl, MVT::i64, Src2,
2915 SDValue Lo;
2923 SDValue Hi = DAG.getNode(hiOpc, dl, VTs, Src1Hi, Src2Hi, Lo.getValue(1));
2924 SDValue Carry = Hi.getValue(1);
2931 SDValue Dst = DAG.getNode(ISD::OR, dl, MVT::i64, Hi, Lo);
2932 SDValue Ops[2] = { Dst, Carry };
2938 static SDValue LowerUMULO_SMULO(SDValue Op, SelectionDAG &DAG,
2948 SDValue LHS = Op.getOperand(0);
2953 SDValue ShiftAmt = DAG.getConstant(63, dl, VT);
2955 SDValue RHS = Op.getOperand(1);
2956 SDValue HiLHS = DAG.getNode(ISD::SRA, dl, VT, LHS, ShiftAmt);
2957 SDValue HiRHS = DAG.getNode(ISD::SRA, dl, MVT::i64, RHS, ShiftAmt);
2958 SDValue Args[] = { HiLHS, LHS, HiRHS, RHS };
2962 SDValue MulResult = TLI.makeLibCall(DAG,
2965 SDValue BottomHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT,
2967 SDValue TopHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT,
2970 SDValue Tmp1 = DAG.getNode(ISD::SRA, dl, VT, BottomHalf, ShiftAmt);
2982 SDValue Ops[2] = { BottomHalf, TopHalf } ;
2986 static SDValue LowerATOMIC_LOAD_STORE(SDValue Op, SelectionDAG &DAG) {
2989 return SDValue();
2995 SDValue SparcTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
3000 default: return SDValue(); // Don't custom lower most intrinsics.
3008 SDValue SparcTargetLowering::
3009 LowerOperation(SDValue Op, SelectionDAG &DAG) const {
3070 SDValue SparcTargetLowering::bitcastConstantFPToInt(ConstantFPSDNode *C,
3074 SDValue Lo = DAG.getConstant(V.zextOrTrunc(32), DL, MVT::i32);
3075 SDValue Hi = DAG.getConstant(V.lshr(32).zextOrTrunc(32), DL, MVT::i32);
3081 SDValue SparcTargetLowering::PerformBITCASTCombine(SDNode *N,
3084 SDValue Src = N->getOperand(0);
3090 return SDValue();
3093 SDValue SparcTargetLowering::PerformDAGCombine(SDNode *N,
3101 return SDValue();
3229 LowerAsmOperandForConstraint(SDValue Op,
3231 std::vector<SDValue> &Ops,
3233 SDValue Result(nullptr, 0);
3341 SmallVectorImpl<SDValue>& Results,
3362 Results.push_back(LowerF128Op(SDValue(N, 0),
3369 SDValue Lo = DAG.getCopyFromReg(N->getOperand(0), dl, SP::ASR23, MVT::i32);
3370 SDValue Hi = DAG.getCopyFromReg(Lo, dl, SP::G0, MVT::i32);
3371 SDValue Ops[] = { Lo, Hi };
3372 SDValue Pair = DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, Ops);
3388 Results.push_back(LowerF128Op(SDValue(N, 0),
3401 SDValue LoadRes = DAG.getExtLoad(
3406 SDValue Res = DAG.getNode(ISD::BITCAST, dl, MVT::i64, LoadRes);