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

Lines Matching refs:SDValue

180 bool XCoreTargetLowering::isZExtFree(SDValue Val, EVT VT2) const {
198 SDValue XCoreTargetLowering::
199 LowerOperation(SDValue Op, SelectionDAG &DAG) const {
233 SmallVectorImpl<SDValue>&Results,
249 SDValue XCoreTargetLowering::getGlobalAddressWrapper(SDValue GA,
279 SDValue XCoreTargetLowering::
280 LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const
289 SDValue GA = DAG.getTargetGlobalAddress(GV, DL, MVT::i32, FoldedOffset);
293 SDValue Remaining = DAG.getConstant(Offset - FoldedOffset, DL, MVT::i32);
305 SDValue CP = DAG.getConstantPool(GAI, MVT::i32);
311 SDValue XCoreTargetLowering::
312 LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const
317 SDValue Result = DAG.getTargetBlockAddress(BA, PtrVT);
322 SDValue XCoreTargetLowering::
323 LowerConstantPool(SDValue Op, SelectionDAG &DAG) const
329 SDValue Res;
344 SDValue XCoreTargetLowering::
345 LowerBR_JT(SDValue Op, SelectionDAG &DAG) const
347 SDValue Chain = Op.getOperand(0);
348 SDValue Table = Op.getOperand(1);
349 SDValue Index = Op.getOperand(2);
355 SDValue TargetJT = DAG.getTargetJumpTable(JT->getIndex(), MVT::i32);
362 SDValue ScaledIndex = DAG.getNode(ISD::SHL, dl, MVT::i32, Index,
368 SDValue XCoreTargetLowering::lowerLoadWordFromAlignedBasePlusOffset(
369 const SDLoc &DL, SDValue Chain, SDValue Base, int64_t Offset,
378 SDValue LowAddr, HighAddr;
391 SDValue LowShift = DAG.getConstant((Offset - LowOffset) * 8, DL, MVT::i32);
392 SDValue HighShift = DAG.getConstant((HighOffset - Offset) * 8, DL, MVT::i32);
394 SDValue Low = DAG.getLoad(PtrVT, DL, Chain, LowAddr, MachinePointerInfo());
395 SDValue High = DAG.getLoad(PtrVT, DL, Chain, HighAddr, MachinePointerInfo());
396 SDValue LowShifted = DAG.getNode(ISD::SRL, DL, MVT::i32, Low, LowShift);
397 SDValue HighShifted = DAG.getNode(ISD::SHL, DL, MVT::i32, High, HighShift);
398 SDValue Result = DAG.getNode(ISD::OR, DL, MVT::i32, LowShifted, HighShifted);
401 SDValue Ops[] = { Result, Chain };
405 static bool isWordAligned(SDValue Value, SelectionDAG &DAG)
411 SDValue XCoreTargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
421 return SDValue();
423 SDValue Chain = LD->getChain();
424 SDValue BasePtr = LD->getBasePtr();
432 SDValue NewBasePtr = BasePtr->getOperand(0);
439 SDValue NewBasePtr = DAG.getGlobalAddress(GV, DL,
447 SDValue Low =
451 SDValue HighAddr = DAG.getNode(ISD::ADD, DL, MVT::i32, BasePtr,
453 SDValue High =
457 SDValue HighShifted = DAG.getNode(ISD::SHL, DL, MVT::i32, High,
459 SDValue Result = DAG.getNode(ISD::OR, DL, MVT::i32, Low, HighShifted);
462 SDValue Ops[] = { Result, Chain };
482 std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);
483 SDValue Ops[] = { CallResult.first, CallResult.second };
487 SDValue XCoreTargetLowering::LowerSTORE(SDValue Op, SelectionDAG &DAG) const {
495 return SDValue();
497 SDValue Chain = ST->getChain();
498 SDValue BasePtr = ST->getBasePtr();
499 SDValue Value = ST->getValue();
503 SDValue Low = Value;
504 SDValue High = DAG.getNode(ISD::SRL, dl, MVT::i32, Value,
506 SDValue StoreLow = DAG.getTruncStore(
509 SDValue HighAddr = DAG.getNode(ISD::ADD, dl, MVT::i32, BasePtr,
511 SDValue StoreHigh = DAG.getTruncStore(
536 std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);
540 SDValue XCoreTargetLowering::
541 LowerSMUL_LOHI(SDValue Op, SelectionDAG &DAG) const
546 SDValue LHS = Op.getOperand(0);
547 SDValue RHS = Op.getOperand(1);
548 SDValue Zero = DAG.getConstant(0, dl, MVT::i32);
549 SDValue Hi = DAG.getNode(XCoreISD::MACCS, dl,
552 SDValue Lo(Hi.getNode(), 1);
553 SDValue Ops[] = { Lo, Hi };
557 SDValue XCoreTargetLowering::
558 LowerUMUL_LOHI(SDValue Op, SelectionDAG &DAG) const
563 SDValue LHS = Op.getOperand(0);
564 SDValue RHS = Op.getOperand(1);
565 SDValue Zero = DAG.getConstant(0, dl, MVT::i32);
566 SDValue Hi = DAG.getNode(XCoreISD::LMUL, dl,
569 SDValue Lo(Hi.getNode(), 1);
570 SDValue Ops[] = { Lo, Hi };
580 isADDADDMUL(SDValue Op, SDValue &Mul0, SDValue &Mul1, SDValue &Addend0,
581 SDValue &Addend1, bool requireIntermediatesHaveOneUse)
585 SDValue N0 = Op.getOperand(0);
586 SDValue N1 = Op.getOperand(1);
587 SDValue AddOp;
588 SDValue OtherOp;
633 SDValue XCoreTargetLowering::
636 SDValue Mul;
637 SDValue Other;
645 return SDValue();
648 SDValue LL, RL, AddendL, AddendH;
663 SDValue Hi = DAG.getNode(XCoreISD::MACCU, dl,
666 SDValue Lo(Hi.getNode(), 1);
671 SDValue Hi = DAG.getNode(XCoreISD::MACCS, dl,
674 SDValue Lo(Hi.getNode(), 1);
677 SDValue LH, RH;
682 SDValue Hi = DAG.getNode(XCoreISD::MACCU, dl,
685 SDValue Lo(Hi.getNode(), 1);
693 SDValue XCoreTargetLowering::
701 if (SDValue Result = TryExpandADDWithMul(N, DAG))
707 SDValue LHSL = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
710 SDValue LHSH = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
713 SDValue RHSL = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
716 SDValue RHSH = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
723 SDValue Zero = DAG.getConstant(0, dl, MVT::i32);
724 SDValue Lo = DAG.getNode(Opcode, dl, DAG.getVTList(MVT::i32, MVT::i32),
726 SDValue Carry(Lo.getNode(), 1);
728 SDValue Hi = DAG.getNode(Opcode, dl, DAG.getVTList(MVT::i32, MVT::i32),
730 SDValue Ignored(Hi.getNode(), 1);
735 SDValue XCoreTargetLowering::
736 LowerVAARG(SDValue Op, SelectionDAG &DAG) const
742 SDValue InChain = Node->getOperand(0);
743 SDValue VAListPtr = Node->getOperand(1);
747 SDValue VAList =
750 SDValue nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAList,
760 SDValue XCoreTargetLowering::
761 LowerVASTART(SDValue Op, SelectionDAG &DAG) const
768 SDValue Addr = DAG.getFrameIndex(XFI->getVarArgsFrameIndex(), MVT::i32);
773 SDValue XCoreTargetLowering::LowerFRAMEADDR(SDValue Op,
781 return SDValue();
789 SDValue XCoreTargetLowering::
790 LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const {
797 return SDValue();
802 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
808 SDValue XCoreTargetLowering::
809 LowerFRAME_TO_ARGS_OFFSET(SDValue Op, SelectionDAG &DAG) const {
817 SDValue XCoreTargetLowering::
818 LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const {
824 SDValue Chain = Op.getOperand(0);
825 SDValue Offset = Op.getOperand(1);
826 SDValue Handler = Op.getOperand(2);
831 SDValue Stack = DAG.getCopyFromReg(DAG.getEntryNode(), dl,
833 SDValue FrameToArgs = DAG.getNode(XCoreISD::FRAME_TO_ARGS_OFFSET, dl,
843 SDValue OutChains[] = {
856 SDValue XCoreTargetLowering::
857 LowerADJUST_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const {
861 SDValue XCoreTargetLowering::
862 LowerINIT_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const {
863 SDValue Chain = Op.getOperand(0);
864 SDValue Trmp = Op.getOperand(1); // trampoline
865 SDValue FPtr = Op.getOperand(2); // nested function
866 SDValue Nest = Op.getOperand(3); // 'nest' parameter value
881 SDValue OutChains[5];
883 SDValue Addr = Trmp;
915 SDValue XCoreTargetLowering::
916 LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const {
922 SDValue Data =
925 SDValue Crc(Data.getNode(), 1);
926 SDValue Results[] = { Crc, Data };
929 return SDValue();
932 SDValue XCoreTargetLowering::
933 LowerATOMIC_FENCE(SDValue Op, SelectionDAG &DAG) const {
938 SDValue XCoreTargetLowering::
939 LowerATOMIC_LOAD(SDValue Op, SelectionDAG &DAG) const {
966 return SDValue();
969 SDValue XCoreTargetLowering::
970 LowerATOMIC_STORE(SDValue Op, SelectionDAG &DAG) const {
996 return SDValue();
1031 SDValue
1033 SmallVectorImpl<SDValue> &InVals) const {
1037 SmallVectorImpl<SDValue> &OutVals = CLI.OutVals;
1039 SDValue Chain = CLI.Chain;
1040 SDValue Callee = CLI.Callee;
1062 static SDValue LowerCallResult(SDValue Chain, SDValue InFlag,
1065 SmallVectorImpl<SDValue> &InVals) {
1080 InVals.push_back(SDValue());
1085 SmallVector<SDValue, 4> MemOpChains;
1090 SDValue Ops[] = { Chain, DAG.getConstant(offset / 4, dl, MVT::i32) };
1091 SDValue load = DAG.getNode(XCoreISD::LDWSP, dl, VTs, Ops);
1108 SDValue XCoreTargetLowering::LowerCCCCallTo(
1109 SDValue Chain, SDValue Callee, CallingConv::ID CallConv, bool isVarArg,
1111 const SmallVectorImpl<SDValue> &OutVals,
1113 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
1139 SmallVector<std::pair<unsigned, SDValue>, 4> RegsToPass;
1140 SmallVector<SDValue, 12> MemOpChains;
1145 SDValue Arg = OutVals[i];
1187 SDValue InFlag;
1207 SmallVector<SDValue, 8> Ops;
1238 struct ArgDataPair { SDValue SDV; ISD::ArgFlagsTy Flags; };
1242 SDValue XCoreTargetLowering::LowerFormalArguments(
1243 SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1245 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
1261 SDValue XCoreTargetLowering::LowerCCCArguments(
1262 SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1264 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
1291 SmallVector<SDValue, 4> CFRegNode;
1293 SmallVector<SDValue, 4> MemOps;
1299 SDValue ArgIn;
1336 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
1363 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
1367 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32);
1370 SDValue Store =
1399 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
1437 SDValue
1438 XCoreTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CallConv,
1441 const SmallVectorImpl<SDValue> &OutVals,
1462 SDValue Flag;
1463 SmallVector<SDValue, 4> RetOps(1, Chain);
1468 SmallVector<SDValue, 4> MemOpChains;
1486 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
1591 SDValue XCoreTargetLowering::PerformDAGCombine(SDNode *N,
1602 SDValue OutVal = N->getOperand(3);
1618 SDValue Time = N->getOperand(3);
1636 SDValue N0 = N->getOperand(0);
1637 SDValue N1 = N->getOperand(1);
1638 SDValue N2 = N->getOperand(2);
1649 SDValue Carry = DAG.getConstant(0, dl, VT);
1650 SDValue Result = DAG.getNode(ISD::AND, dl, VT, N2,
1652 SDValue Ops[] = { Result, Carry };
1663 SDValue Carry = DAG.getConstant(0, dl, VT);
1664 SDValue Result = DAG.getNode(ISD::ADD, dl, VT, N0, N2);
1665 SDValue Ops[] = { Result, Carry };
1672 SDValue N0 = N->getOperand(0);
1673 SDValue N1 = N->getOperand(1);
1674 SDValue N2 = N->getOperand(2);
1685 SDValue Borrow = N2;
1686 SDValue Result = DAG.getNode(ISD::SUB, dl, VT,
1688 SDValue Ops[] = { Result, Borrow };
1700 SDValue Borrow = DAG.getConstant(0, dl, VT);
1701 SDValue Result = DAG.getNode(ISD::SUB, dl, VT, N0, N2);
1702 SDValue Ops[] = { Result, Borrow };
1709 SDValue N0 = N->getOperand(0);
1710 SDValue N1 = N->getOperand(1);
1711 SDValue N2 = N->getOperand(2);
1712 SDValue N3 = N->getOperand(3);
1727 SDValue Lo = DAG.getNode(ISD::ADD, dl, VT, N2, N3);
1728 SDValue Ops[] = { Lo, Lo };
1732 SDValue Result =
1734 SDValue Carry(Result.getNode(), 1);
1735 SDValue Ops[] = { Carry, Result };
1745 SDValue Mul0, Mul1, Addend0, Addend1;
1747 isADDADDMUL(SDValue(N, 0), Mul0, Mul1, Addend0, Addend1, true)) {
1748 SDValue Ignored = DAG.getNode(XCoreISD::LMUL, dl,
1751 SDValue Result(Ignored.getNode(), 1);
1760 isADDADDMUL(SDValue(N, 0), Mul0, Mul1, Addend0, Addend1, false) &&
1765 SDValue Mul0L = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
1767 SDValue Mul1L = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
1769 SDValue Addend0L = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
1771 SDValue Addend1L = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
1773 SDValue Hi = DAG.getNode(XCoreISD::LMUL, dl,
1776 SDValue Lo(Hi.getNode(), 1);
1791 SDValue Chain = ST->getChain();
1802 Chain.reachesChainWithoutSideEffects(SDValue(LD, 1))) {
1813 return SDValue();
1816 void XCoreTargetLowering::computeKnownBitsForTargetNode(const SDValue Op,