|
reference, declaration → definition
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);