reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
  181   for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
  182        E = std::prev(DAG.allnodes_end()); I != std::next(E); ++I) {
  204   DAG.AssignTopologicalOrder();
  205   for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
  206        E = std::prev(DAG.allnodes_end()); I != std::next(E); ++I)
  210   SDValue OldRoot = DAG.getRoot();
  212   DAG.setRoot(LegalizedNodes[OldRoot]);
  217   DAG.RemoveDeadNodes();
  242   SDValue Result = SDValue(DAG.UpdateNodeOperands(Op.getNode(), Ops),
  250                  Node->dump(&DAG));
  257         if (SDValue Lowered = TLI.LowerOperation(Result, DAG)) {
  279                  Node->dump(&DAG));
  285         SDValue Lowered = TLI.LowerOperation(Result, DAG);
  483   LLVM_DEBUG(dbgs() << "\nLegalizing vector op: "; Node->dump(&DAG));
  496     if (SDValue Tmp1 = TLI.LowerOperation(Op, DAG)) {
  553         Operands[j] = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Op.getOperand(j));
  555         Operands[j] = DAG.getNode(ISD::BITCAST, dl, NVT, Op.getOperand(j));
  560   Op = DAG.getNode(Op.getOpcode(), dl, NVT, Operands, Op.getNode()->getFlags());
  564     return DAG.getNode(ISD::FP_ROUND, dl, VT, Op, DAG.getIntPtrConstant(0, dl));
  564     return DAG.getNode(ISD::FP_ROUND, dl, VT, Op, DAG.getIntPtrConstant(0, dl));
  566     return DAG.getNode(ISD::BITCAST, dl, VT, Op);
  584       Operands[j] = DAG.getNode(Opc, dl, NVT, Op.getOperand(j));
  589   return DAG.getNode(Op.getOpcode(), dl, Op.getValueType(), Operands);
  610   SDValue Promoted  = DAG.getNode(NewOpc, dl, NVT, Op.getOperand(0));
  615   Promoted = DAG.getNode(Op->getOpcode() == ISD::FP_TO_UINT ? ISD::AssertZext
  618                          DAG.getValueType(VT.getScalarType()));
  619   return DAG.getNode(ISD::TRUNCATE, dl, VT, Promoted);
  647     EVT WideVT = TLI.getPointerTy(DAG.getDataLayout());
  665             DAG.getLoad(WideVT, dl, Chain, BasePTR,
  673           LoadVT = EVT::getIntegerVT(*DAG.getContext(), LoadBytes << 3);
  676             DAG.getExtLoad(ISD::EXTLOAD, dl, WideVT, Chain, BasePTR,
  685       BasePTR = DAG.getObjectPtrOffset(dl, BasePTR, LoadBytes);
  697     SDValue SrcEltBitMask = DAG.getConstant(
  703       SDValue ShAmt = DAG.getConstant(
  704           BitOffset, dl, TLI.getShiftAmountTy(WideVT, DAG.getDataLayout()));
  705       SDValue Lo = DAG.getNode(ISD::SRL, dl, WideVT, LoadVals[WideIdx], ShAmt);
  712           ShAmt = DAG.getConstant(
  714               TLI.getShiftAmountTy(WideVT, DAG.getDataLayout()));
  716               DAG.getNode(ISD::SHL, dl, WideVT, LoadVals[WideIdx], ShAmt);
  717           Lo = DAG.getNode(ISD::OR, dl, WideVT, Lo, Hi);
  721       Lo = DAG.getNode(ISD::AND, dl, WideVT, Lo, SrcEltBitMask);
  726         Lo = DAG.getAnyExtOrTrunc(Lo, dl, DstEltVT);
  729         Lo = DAG.getZExtOrTrunc(Lo, dl, DstEltVT);
  733             DAG.getConstant(WideBits - SrcEltBits, dl,
  734                             TLI.getShiftAmountTy(WideVT, DAG.getDataLayout()));
  735         Lo = DAG.getNode(ISD::SHL, dl, WideVT, Lo, ShAmt);
  736         Lo = DAG.getNode(ISD::SRA, dl, WideVT, Lo, ShAmt);
  737         Lo = DAG.getSExtOrTrunc(Lo, dl, DstEltVT);
  743     NewChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains);
  744     Value = DAG.getBuildVector(Op.getNode()->getValueType(0), dl, Vals);
  746     SDValue Scalarized = TLI.scalarizeVectorLoad(LD, DAG);
  765   SDValue TF = TLI.scalarizeVectorStore(ST, DAG);
  840     return DAG.UnrollVectorOp(Op.getNode());
  881     return TLI.expandVecReduce(Op.getNode(), DAG);
  883     return DAG.UnrollVectorOp(Op.getNode());
  910     return DAG.UnrollVectorOp(Op.getNode());
  918   Mask = DAG.getSelect(DL, BitTy, Mask,
  919           DAG.getConstant(APInt::getAllOnesValue(BitTy.getSizeInBits()), DL,
  921           DAG.getConstant(0, DL, BitTy));
  924   Mask = DAG.getSplatBuildVector(MaskTy, DL, Mask);
  929   Op1 = DAG.getNode(ISD::BITCAST, DL, MaskTy, Op1);
  930   Op2 = DAG.getNode(ISD::BITCAST, DL, MaskTy, Op2);
  932   SDValue AllOnes = DAG.getConstant(
  934   SDValue NotMask = DAG.getNode(ISD::XOR, DL, MaskTy, Mask, AllOnes);
  936   Op1 = DAG.getNode(ISD::AND, DL, MaskTy, Op1, Mask);
  937   Op2 = DAG.getNode(ISD::AND, DL, MaskTy, Op2, NotMask);
  938   SDValue Val = DAG.getNode(ISD::OR, DL, MaskTy, Op1, Op2);
  939   return DAG.getNode(ISD::BITCAST, DL, Op.getValueType(), Val);
  948     return DAG.UnrollVectorOp(Op.getNode());
  955   SDValue ShiftSz = DAG.getConstant(BW - OrigBW, DL, VT);
  958   Op =   DAG.getNode(ISD::SHL, DL, VT, Op, ShiftSz);
  959   return DAG.getNode(ISD::SRA, DL, VT, Op, ShiftSz);
  978     SrcVT = EVT::getVectorVT(*DAG.getContext(), SrcVT.getScalarType(),
  980     Src = DAG.getNode(
  981         ISD::INSERT_SUBVECTOR, DL, SrcVT, DAG.getUNDEF(SrcVT), Src,
  982         DAG.getConstant(0, DL, TLI.getVectorIdxTy(DAG.getDataLayout())));
  982         DAG.getConstant(0, DL, TLI.getVectorIdxTy(DAG.getDataLayout())));
  991   int EndianOffset = DAG.getDataLayout().isBigEndian() ? ExtLaneScale - 1 : 0;
  995   return DAG.getNode(
  997       DAG.getVectorShuffle(SrcVT, DL, Src, DAG.getUNDEF(SrcVT), ShuffleMask));
  997       DAG.getVectorShuffle(SrcVT, DL, Src, DAG.getUNDEF(SrcVT), ShuffleMask));
 1008   Op = DAG.getNode(ISD::ANY_EXTEND_VECTOR_INREG, DL, VT, Src);
 1015   SDValue ShiftAmount = DAG.getConstant(EltWidth - SrcEltWidth, DL, VT);
 1016   return DAG.getNode(ISD::SRA, DL, VT,
 1017                      DAG.getNode(ISD::SHL, DL, VT, Op, ShiftAmount),
 1038     SrcVT = EVT::getVectorVT(*DAG.getContext(), SrcVT.getScalarType(),
 1040     Src = DAG.getNode(
 1041         ISD::INSERT_SUBVECTOR, DL, SrcVT, DAG.getUNDEF(SrcVT), Src,
 1042         DAG.getConstant(0, DL, TLI.getVectorIdxTy(DAG.getDataLayout())));
 1042         DAG.getConstant(0, DL, TLI.getVectorIdxTy(DAG.getDataLayout())));
 1046   SDValue Zero = DAG.getConstant(0, DL, SrcVT);
 1056   int EndianOffset = DAG.getDataLayout().isBigEndian() ? ExtLaneScale - 1 : 0;
 1060   return DAG.getNode(ISD::BITCAST, DL, VT,
 1061                      DAG.getVectorShuffle(SrcVT, DL, Zero, Src, ShuffleMask));
 1077   EVT ByteVT = EVT::getVectorVT(*DAG.getContext(), MVT::i8, ShuffleMask.size());
 1081     return DAG.UnrollVectorOp(Op.getNode());
 1084   Op = DAG.getNode(ISD::BITCAST, DL, ByteVT, Op.getOperand(0));
 1085   Op = DAG.getVectorShuffle(ByteVT, DL, Op, DAG.getUNDEF(ByteVT), ShuffleMask);
 1085   Op = DAG.getVectorShuffle(ByteVT, DL, Op, DAG.getUNDEF(ByteVT), ShuffleMask);
 1086   return DAG.getNode(ISD::BITCAST, DL, VT, Op);
 1094     return DAG.UnrollVectorOp(Op.getNode());
 1104     EVT ByteVT = EVT::getVectorVT(*DAG.getContext(), MVT::i8, BSWAPMask.size());
 1112       Op = DAG.getNode(ISD::BITCAST, DL, ByteVT, Op.getOperand(0));
 1113       Op = DAG.getVectorShuffle(ByteVT, DL, Op, DAG.getUNDEF(ByteVT),
 1113       Op = DAG.getVectorShuffle(ByteVT, DL, Op, DAG.getUNDEF(ByteVT),
 1115       Op = DAG.getNode(ISD::BITREVERSE, DL, ByteVT, Op);
 1116       return DAG.getNode(ISD::BITCAST, DL, VT, Op);
 1126     return DAG.UnrollVectorOp(Op.getNode());
 1155     return DAG.UnrollVectorOp(Op.getNode());
 1161     return DAG.UnrollVectorOp(Op.getNode());
 1166   Op1 = DAG.getNode(ISD::BITCAST, DL, VT, Op1);
 1167   Op2 = DAG.getNode(ISD::BITCAST, DL, VT, Op2);
 1169   SDValue AllOnes = DAG.getConstant(
 1171   SDValue NotMask = DAG.getNode(ISD::XOR, DL, VT, Mask, AllOnes);
 1173   Op1 = DAG.getNode(ISD::AND, DL, VT, Op1, Mask);
 1174   Op2 = DAG.getNode(ISD::AND, DL, VT, Op2, NotMask);
 1175   SDValue Val = DAG.getNode(ISD::OR, DL, VT, Op1, Op2);
 1176   return DAG.getNode(ISD::BITCAST, DL, Op.getValueType(), Val);
 1182   if (TLI.expandABS(Op.getNode(), Result, DAG))
 1186   return DAG.UnrollVectorOp(Op.getNode());
 1192   if (TLI.expandFP_TO_UINT(Op.getNode(), Result, Chain, DAG)) {
 1195       DAG.ReplaceAllUsesOfValueWith(Op.getValue(1), Chain);
 1200   return DAG.UnrollVectorOp(Op.getNode());
 1209   if (TLI.expandUINT_TO_FP(Op.getNode(), Result, DAG))
 1215     return DAG.UnrollVectorOp(Op.getNode());
 1221   SDValue HalfWord = DAG.getConstant(BW / 2, DL, VT);
 1227   SDValue HalfWordMask = DAG.getConstant(HWMask, DL, VT);
 1230   SDValue TWOHW = DAG.getConstantFP(1ULL << (BW / 2), DL, Op.getValueType());
 1233   SDValue HI = DAG.getNode(ISD::SRL, DL, VT, Op.getOperand(0), HalfWord);
 1234   SDValue LO = DAG.getNode(ISD::AND, DL, VT, Op.getOperand(0), HalfWordMask);
 1239   SDValue fHI = DAG.getNode(ISD::SINT_TO_FP, DL, Op.getValueType(), HI);
 1240           fHI = DAG.getNode(ISD::FMUL, DL, Op.getValueType(), fHI, TWOHW);
 1241   SDValue fLO = DAG.getNode(ISD::SINT_TO_FP, DL, Op.getValueType(), LO);
 1244   return DAG.getNode(ISD::FADD, DL, Op.getValueType(), fHI, fLO);
 1250     SDValue Zero = DAG.getConstantFP(-0.0, DL, Op.getValueType());
 1252     return DAG.getNode(ISD::FSUB, DL, Op.getValueType(),
 1255   return DAG.UnrollVectorOp(Op.getNode());
 1267   return DAG.UnrollVectorOp(Op.getNode());
 1272   if (TLI.expandCTPOP(Op.getNode(), Result, DAG))
 1275   return DAG.UnrollVectorOp(Op.getNode());
 1280   if (TLI.expandCTLZ(Op.getNode(), Result, DAG))
 1283   return DAG.UnrollVectorOp(Op.getNode());
 1288   if (TLI.expandCTTZ(Op.getNode(), Result, DAG))
 1291   return DAG.UnrollVectorOp(Op.getNode());
 1296   if (TLI.expandFunnelShift(Op.getNode(), Result, DAG))
 1299   return DAG.UnrollVectorOp(Op.getNode());
 1304   if (TLI.expandROT(Op.getNode(), Result, DAG))
 1307   return DAG.UnrollVectorOp(Op.getNode());
 1311   if (SDValue Expanded = TLI.expandFMINNUM_FMAXNUM(Op.getNode(), DAG))
 1313   return DAG.UnrollVectorOp(Op.getNode());
 1318   TLI.expandUADDSUBO(Op.getNode(), Result, Overflow, DAG);
 1331   TLI.expandSADDSUBO(Op.getNode(), Result, Overflow, DAG);
 1344   if (!TLI.expandMULO(Op.getNode(), Result, Overflow, DAG))
 1345     std::tie(Result, Overflow) = DAG.UnrollVectorOverflowOp(Op.getNode());
 1357   if (SDValue Expanded = TLI.expandAddSubSat(Op.getNode(), DAG))
 1359   return DAG.UnrollVectorOp(Op.getNode());
 1363   if (SDValue Expanded = TLI.expandFixedPointMul(Op.getNode(), DAG))
 1365   return DAG.UnrollVectorOp(Op.getNode());
 1373   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
 1382     SDValue Idx = DAG.getConstant(i, dl,
 1383                                   TLI.getVectorIdxTy(DAG.getDataLayout()));
 1394         Oper = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl,
 1400     SDValue ScalarOp = DAG.getNode(Op->getOpcode(), dl, ValueVTs, Opers);
 1406   SDValue Result = DAG.getBuildVector(VT, dl, OpValues);
 1407   SDValue NewChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OpChains);
 1424     SDValue LHSElem = DAG.getNode(
 1426         DAG.getConstant(i, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
 1426         DAG.getConstant(i, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
 1427     SDValue RHSElem = DAG.getNode(
 1429         DAG.getConstant(i, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
 1429         DAG.getConstant(i, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
 1430     Ops[i] = DAG.getNode(ISD::SETCC, dl,
 1431                          TLI.getSetCCResultType(DAG.getDataLayout(),
 1432                                                 *DAG.getContext(), TmpEltVT),
 1434     Ops[i] = DAG.getSelect(dl, EltVT, Ops[i],
 1435                            DAG.getConstant(APInt::getAllOnesValue
 1437                            DAG.getConstant(0, dl, EltVT));
 1439   return DAG.getBuildVector(VT, dl, Ops);