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

References

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
 2656   SDLoc dl(Node);
 2659   switch (Node->getOpcode()) {
 2661     if (TLI.expandABS(Node, Tmp1, DAG))
 2665     if (TLI.expandCTPOP(Node, Tmp1, DAG))
 2670     if (TLI.expandCTLZ(Node, Tmp1, DAG))
 2675     if (TLI.expandCTTZ(Node, Tmp1, DAG))
 2679     Results.push_back(ExpandBITREVERSE(Node->getOperand(0), dl));
 2682     Results.push_back(ExpandBSWAP(Node->getOperand(0), dl));
 2687     Results.push_back(DAG.getConstant(0, dl, Node->getValueType(0)));
 2690     SDValue CfaArg = DAG.getSExtOrTrunc(Node->getOperand(0), dl,
 2705     Results.push_back(DAG.getConstant(1, dl, Node->getValueType(0)));
 2714     Results.push_back(Node->getOperand(0));
 2719     Results.append(Node->getNumValues() - 1,
 2720                    DAG.getConstant(0, dl, Node->getValueType(0)));
 2721     Results.push_back(Node->getOperand(0));
 2727     Results.push_back(Node->getOperand(0));
 2731     SDValue Zero = DAG.getConstant(0, dl, Node->getValueType(0));
 2732     SDVTList VTs = DAG.getVTList(Node->getValueType(0), MVT::Other);
 2734         ISD::ATOMIC_CMP_SWAP, dl, cast<AtomicSDNode>(Node)->getMemoryVT(), VTs,
 2735         Node->getOperand(0), Node->getOperand(1), Zero, Zero,
 2735         Node->getOperand(0), Node->getOperand(1), Zero, Zero,
 2736         cast<AtomicSDNode>(Node)->getMemOperand());
 2744                                  cast<AtomicSDNode>(Node)->getMemoryVT(),
 2745                                  Node->getOperand(0),
 2746                                  Node->getOperand(1), Node->getOperand(2),
 2746                                  Node->getOperand(1), Node->getOperand(2),
 2747                                  cast<AtomicSDNode>(Node)->getMemOperand());
 2755     SDVTList VTs = DAG.getVTList(Node->getValueType(0), MVT::Other);
 2757         ISD::ATOMIC_CMP_SWAP, dl, cast<AtomicSDNode>(Node)->getMemoryVT(), VTs,
 2758         Node->getOperand(0), Node->getOperand(1), Node->getOperand(2),
 2758         Node->getOperand(0), Node->getOperand(1), Node->getOperand(2),
 2758         Node->getOperand(0), Node->getOperand(1), Node->getOperand(2),
 2759         Node->getOperand(3), cast<MemSDNode>(Node)->getMemOperand());
 2759         Node->getOperand(3), cast<MemSDNode>(Node)->getMemOperand());
 2763     SDValue RHS = Node->getOperand(1);
 2765     EVT AtomicType = cast<AtomicSDNode>(Node)->getMemoryVT();
 2766     EVT OuterType = Node->getValueType(0);
 2772                         Node->getOperand(2), DAG.getValueType(AtomicType));
 2778       RHS = DAG.getZeroExtendInReg(Node->getOperand(2), dl, AtomicType);
 2783       RHS = DAG.getZeroExtendInReg(Node->getOperand(2), dl, AtomicType);
 2790         DAG.getSetCC(dl, Node->getValueType(1), LHS, RHS, ISD::SETEQ);
 2798     ExpandDYNAMIC_STACKALLOC(Node, Results);
 2801     for (unsigned i = 0; i < Node->getNumValues(); i++)
 2802       Results.push_back(Node->getOperand(i));
 2805     EVT VT = Node->getValueType(0);
 2817     if (TLI.getStrictFPOperationAction(Node->getOpcode(),
 2818                                        Node->getValueType(0))
 2821     Tmp1 = EmitStackConvert(Node->getOperand(1), 
 2822                             Node->getValueType(0),
 2823                             Node->getValueType(0), dl, Node->getOperand(0));
 2823                             Node->getValueType(0), dl, Node->getOperand(0));
 2824     ReplaceNode(Node, Tmp1.getNode());
 2829     Tmp1 = EmitStackConvert(Node->getOperand(0), 
 2830                             Node->getValueType(0),
 2831                             Node->getValueType(0), dl);
 2837     if (TLI.getStrictFPOperationAction(Node->getOpcode(),
 2838                                        Node->getValueType(0))
 2841     Tmp1 = EmitStackConvert(Node->getOperand(1),
 2842                             Node->getOperand(1).getValueType(),
 2843                             Node->getValueType(0), dl, Node->getOperand(0));
 2843                             Node->getValueType(0), dl, Node->getOperand(0));
 2844     ReplaceNode(Node, Tmp1.getNode());
 2848     Tmp1 = EmitStackConvert(Node->getOperand(0),
 2849                             Node->getOperand(0).getValueType(),
 2850                             Node->getValueType(0), dl);
 2854     EVT ExtraVT = cast<VTSDNode>(Node->getOperand(1))->getVT();
 2855     EVT VT = Node->getValueType(0);
 2866       SDValue And = DAG.getNode(ISD::AND, dl, VT, Node->getOperand(0), One);
 2879     Tmp1 = DAG.getNode(ISD::SHL, dl, Node->getValueType(0),
 2880                        Node->getOperand(0), ShiftCst);
 2881     Tmp1 = DAG.getNode(ISD::SRA, dl, Node->getValueType(0), Tmp1, ShiftCst);
 2886     if (TLI.expandUINT_TO_FP(Node, Tmp1, DAG)) {
 2892     Tmp1 = ExpandLegalINT_TO_FP(Node->getOpcode() == ISD::SINT_TO_FP,
 2893                                 Node->getOperand(0), Node->getValueType(0), dl);
 2893                                 Node->getOperand(0), Node->getValueType(0), dl);
 2897     if (TLI.expandFP_TO_SINT(Node, Tmp1, DAG))
 2901     if (TLI.expandFP_TO_SINT(Node, Tmp1, DAG)) {
 2902       ReplaceNode(Node, Tmp1.getNode());
 2908     if (TLI.expandFP_TO_UINT(Node, Tmp1, Tmp2, DAG))
 2912     if (TLI.expandFP_TO_UINT(Node, Tmp1, Tmp2, DAG)) {
 2914       DAG.ReplaceAllUsesOfValueWith(SDValue(Node,1), Tmp2);
 2916       ReplaceNodeWithValue(SDValue(Node, 0), Tmp1);
 2922     Results.push_back(DAG.expandVAArg(Node));
 2926     Results.push_back(DAG.expandVACopy(Node));
 2929     if (Node->getOperand(0).getValueType().getVectorNumElements() == 1)
 2931       Tmp1 = DAG.getNode(ISD::BITCAST, dl, Node->getValueType(0),
 2932                          Node->getOperand(0));
 2934       Tmp1 = ExpandExtractFromVectorThroughStack(SDValue(Node, 0));
 2938     Results.push_back(ExpandExtractFromVectorThroughStack(SDValue(Node, 0)));
 2941     Results.push_back(ExpandInsertToVectorThroughStack(SDValue(Node, 0)));
 2944     Results.push_back(ExpandVectorBuildThroughStack(Node));
 2947     Results.push_back(ExpandSCALAR_TO_VECTOR(Node));
 2950     Results.push_back(ExpandINSERT_VECTOR_ELT(Node->getOperand(0),
 2951                                               Node->getOperand(1),
 2952                                               Node->getOperand(2), dl));
 2956     ArrayRef<int> Mask = cast<ShuffleVectorSDNode>(Node)->getMask();
 2958     EVT VT = Node->getValueType(0);
 2960     SDValue Op0 = Node->getOperand(0);
 2961     SDValue Op1 = Node->getOperand(1);
 3026     Tmp1 = DAG.getNode(ISD::BITCAST, dl, Node->getValueType(0), Tmp1);
 3031     EVT OpTy = Node->getOperand(0).getValueType();
 3032     if (cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue()) {
 3034       Tmp1 = DAG.getNode(ISD::SRL, dl, OpTy, Node->getOperand(0),
 3037                                              Node->getOperand(0).getValueType(),
 3039       Tmp1 = DAG.getNode(ISD::TRUNCATE, dl, Node->getValueType(0), Tmp1);
 3042       Tmp1 = DAG.getNode(ISD::TRUNCATE, dl, Node->getValueType(0),
 3043                          Node->getOperand(0));
 3052       Results.push_back(DAG.getCopyFromReg(Node->getOperand(0), dl, SP,
 3053                                            Node->getValueType(0)));
 3056       Results.push_back(DAG.getUNDEF(Node->getValueType(0)));
 3057       Results.push_back(Node->getOperand(0));
 3064       Results.push_back(DAG.getCopyToReg(Node->getOperand(0), dl, SP,
 3065                                          Node->getOperand(1)));
 3067       Results.push_back(Node->getOperand(0));
 3071     Results.push_back(DAG.getConstant(0, dl, Node->getValueType(0)));
 3075     Results.push_back(ExpandFCOPYSIGN(Node));
 3079     Tmp1 = DAG.getConstantFP(-0.0, dl, Node->getValueType(0));
 3081     Tmp1 = DAG.getNode(ISD::FSUB, dl, Node->getValueType(0), Tmp1,
 3082                        Node->getOperand(0));
 3086     Results.push_back(ExpandFABS(Node));
 3094     switch (Node->getOpcode()) {
 3101     Tmp1 = Node->getOperand(0);
 3102     Tmp2 = Node->getOperand(1);
 3109     if (SDValue Expanded = TLI.expandFMINNUM_FMAXNUM(Node, DAG))
 3115     EVT VT = Node->getValueType(0);
 3119          isSinCosLibcallAvailable(Node, TLI))
 3120         && useSinCos(Node)) {
 3122       Tmp1 = DAG.getNode(ISD::FSINCOS, dl, VTs, Node->getOperand(0));
 3123       if (Node->getOpcode() == ISD::FCOS)
 3133     if (Node->getValueType(0) != MVT::f32) {
 3138           DAG.getNode(ISD::FP16_TO_FP, dl, MVT::f32, Node->getOperand(0));
 3140           DAG.getNode(ISD::FP_EXTEND, dl, Node->getValueType(0), Res));
 3146       SDValue Op = Node->getOperand(0);
 3155             DAG.getNode(ISD::FP_TO_FP16, dl, Node->getValueType(0), FloatVal));
 3160     ConstantFPSDNode *CFP = cast<ConstantFPSDNode>(Node);
 3163     if (!TLI.isFPImmLegal(CFP->getValueAPF(), Node->getValueType(0),
 3169     ConstantSDNode *CP = cast<ConstantSDNode>(Node);
 3174     EVT VT = Node->getValueType(0);
 3177       const SDNodeFlags Flags = Node->getFlags();
 3178       Tmp1 = DAG.getNode(ISD::FNEG, dl, VT, Node->getOperand(1));
 3179       Tmp1 = DAG.getNode(ISD::FADD, dl, VT, Node->getOperand(0), Tmp1, Flags);
 3185     EVT VT = Node->getValueType(0);
 3189     Tmp1 = DAG.getNode(ISD::XOR, dl, VT, Node->getOperand(1),
 3193     Results.push_back(DAG.getNode(ISD::ADD, dl, VT, Node->getOperand(0), Tmp1));
 3198     EVT VT = Node->getValueType(0);
 3199     bool isSigned = Node->getOpcode() == ISD::SREM;
 3202     Tmp2 = Node->getOperand(0);
 3203     Tmp3 = Node->getOperand(1);
 3219     bool isSigned = Node->getOpcode() == ISD::SDIV;
 3221     EVT VT = Node->getValueType(0);
 3224       Tmp1 = DAG.getNode(DivRemOpc, dl, VTs, Node->getOperand(0),
 3225                          Node->getOperand(1));
 3233         Node->getOpcode() == ISD::MULHU ? ISD::UMUL_LOHI : ISD::SMUL_LOHI;
 3234     EVT VT = Node->getValueType(0);
 3237     Tmp1 = DAG.getNode(ExpandOpcode, dl, VTs, Node->getOperand(0),
 3238                        Node->getOperand(1));
 3244     SDValue LHS = Node->getOperand(0);
 3245     SDValue RHS = Node->getOperand(1);
 3248         Node->getOpcode() == ISD::UMUL_LOHI ? ISD::MULHU : ISD::MULHS;
 3259     if (TLI.expandMUL_LOHI(Node->getOpcode(), VT, Node, LHS, RHS, Halves,
 3259     if (TLI.expandMUL_LOHI(Node->getOpcode(), VT, Node, LHS, RHS, Halves,
 3276     EVT VT = Node->getValueType(0);
 3298       Results.push_back(DAG.getNode(OpToUse, dl, VTs, Node->getOperand(0),
 3299                                     Node->getOperand(1)));
 3309         TLI.expandMUL(Node, Lo, Hi, HalfType, DAG,
 3323     if (TLI.expandFunnelShift(Node, Tmp1, DAG))
 3328     if (TLI.expandROT(Node, Tmp1, DAG))
 3335     Results.push_back(TLI.expandAddSubSat(Node, DAG));
 3341     Results.push_back(TLI.expandFixedPointMul(Node, DAG));
 3345     SDValue LHS = Node->getOperand(0);
 3346     SDValue RHS = Node->getOperand(1);
 3347     SDValue Carry = Node->getOperand(2);
 3349     bool IsAdd = Node->getOpcode() == ISD::ADDCARRY;
 3357     EVT CarryType = Node->getValueType(1);
 3358     EVT SetCCType = getSetCCResultType(Node->getValueType(0));
 3388     TLI.expandSADDSUBO(Node, Result, Overflow, DAG);
 3396     TLI.expandUADDSUBO(Node, Result, Overflow, DAG);
 3404     if (TLI.expandMULO(Node, Result, Overflow, DAG)) {
 3411     EVT PairTy = Node->getValueType(0);
 3412     Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, PairTy, Node->getOperand(0));
 3413     Tmp2 = DAG.getNode(ISD::ANY_EXTEND, dl, PairTy, Node->getOperand(1));
 3422     Tmp1 = Node->getOperand(0);
 3423     Tmp2 = Node->getOperand(1);
 3424     Tmp3 = Node->getOperand(2);
 3434     Tmp1->setFlags(Node->getFlags());
 3438     SDValue Chain = Node->getOperand(0);
 3439     SDValue Table = Node->getOperand(1);
 3440     SDValue Index = Node->getOperand(2);
 3482     Tmp1 = Node->getOperand(0);
 3483     Tmp2 = Node->getOperand(1);
 3488                          Node->getOperand(2));
 3502                          Node->getOperand(2));
 3507     Tmp1 = Node->getOperand(0);
 3508     Tmp2 = Node->getOperand(1);
 3509     Tmp3 = Node->getOperand(2);
 3510     bool Legalized = LegalizeSetCCCondCode(Node->getValueType(0), Tmp1, Tmp2,
 3517         Tmp1 = DAG.getNode(ISD::SETCC, dl, Node->getValueType(0),
 3518                            Tmp1, Tmp2, Tmp3, Node->getFlags());
 3531     EVT VT = Node->getValueType(0);
 3546     Tmp1->setFlags(Node->getFlags());
 3551     Tmp1 = Node->getOperand(0);   // LHS
 3552     Tmp2 = Node->getOperand(1);   // RHS
 3553     Tmp3 = Node->getOperand(2);   // True
 3554     Tmp4 = Node->getOperand(3);   // False
 3555     EVT VT = Node->getValueType(0);
 3556     SDValue CC = Node->getOperand(4);
 3567       SDValue Cond = DAG.getNode(ISD::SETCC, dl, CCVT, Tmp1, Tmp2, CC, Node->getFlags());
 3583       Tmp1->setFlags(Node->getFlags());
 3593         Tmp1->setFlags(Node->getFlags());
 3612         Tmp1 = DAG.getNode(ISD::SELECT_CC, dl, Node->getValueType(0),
 3617         Tmp1 = DAG.getNode(ISD::SELECT_CC, dl, Node->getValueType(0), Tmp1,
 3620       Tmp1->setFlags(Node->getFlags());
 3626     Tmp1 = Node->getOperand(0);              // Chain
 3627     Tmp2 = Node->getOperand(2);              // LHS
 3628     Tmp3 = Node->getOperand(3);              // RHS
 3629     Tmp4 = Node->getOperand(1);              // CC
 3641       Tmp1 = DAG.getNode(ISD::BR_CC, dl, Node->getValueType(0), Tmp1,
 3642                          Tmp4, Tmp2, Tmp3, Node->getOperand(4));
 3646       Tmp1 = DAG.getNode(ISD::BR_CC, dl, Node->getValueType(0), Tmp1, Tmp4,
 3647                          Tmp2, Tmp3, Node->getOperand(4));
 3653     Results.push_back(ExpandBUILD_VECTOR(Node));
 3656     Results.push_back(ExpandSPLAT_VECTOR(Node));
 3662     EVT VT = Node->getValueType(0);
 3670           ISD::EXTRACT_VECTOR_ELT, dl, VT.getScalarType(), Node->getOperand(0),
 3673           ISD::EXTRACT_VECTOR_ELT, dl, VT.getScalarType(), Node->getOperand(1),
 3675       Scalars.push_back(DAG.getNode(Node->getOpcode(), dl,
 3679     SDValue Result = DAG.getBuildVector(Node->getValueType(0), dl, Scalars);
 3680     ReplaceNode(SDValue(Node, 0), Result);
 3696     Results.push_back(TLI.expandVecReduce(Node, DAG));
 3711   if (Results.empty() && Node->isStrictFPOpcode()) {
 3717     switch (Node->getOpcode()) {
 3719       if (TLI.getStrictFPOperationAction(Node->getOpcode(),
 3720                                          Node->getValueType(0))
 3730       if (TLI.getStrictFPOperationAction(Node->getOpcode(),
 3731                                          Node->getOperand(1).getValueType())
 3745   ReplaceNode(Node, Results.data());