Lines Matching refs:Op
54 SDValue LegalizeOp(SDValue Op);
56 SDValue TranslateLegalizeResults(SDValue Op, SDValue Result);
58 SDValue UnrollVSETCC(SDValue Op);
63 SDValue ExpandUINT_TO_FLOAT(SDValue Op);
65 SDValue ExpandSEXTINREG(SDValue Op);
68 SDValue ExpandVSELECT(SDValue Op);
69 SDValue ExpandSELECT(SDValue Op);
70 SDValue ExpandLoad(SDValue Op);
71 SDValue ExpandStore(SDValue Op);
72 SDValue ExpandFNEG(SDValue Op);
76 SDValue PromoteVectorOp(SDValue Op);
79 SDValue PromoteVectorOpINT_TO_FP(SDValue Op);
131 SDValue VectorLegalizer::TranslateLegalizeResults(SDValue Op, SDValue Result) { in TranslateLegalizeResults() argument
133 for (unsigned i = 0, e = Op.getNode()->getNumValues(); i != e; ++i) in TranslateLegalizeResults()
134 AddLegalizedOperand(Op.getValue(i), Result.getValue(i)); in TranslateLegalizeResults()
135 return Result.getValue(Op.getResNo()); in TranslateLegalizeResults()
138 SDValue VectorLegalizer::LegalizeOp(SDValue Op) { in LegalizeOp() argument
141 DenseMap<SDValue, SDValue>::iterator I = LegalizedNodes.find(Op); in LegalizeOp()
144 SDNode* Node = Op.getNode(); in LegalizeOp()
152 SDValue(DAG.UpdateNodeOperands(Op.getNode(), Ops.data(), Ops.size()), 0); in LegalizeOp()
154 if (Op.getOpcode() == ISD::LOAD) { in LegalizeOp()
155 LoadSDNode *LD = cast<LoadSDNode>(Op.getNode()); in LegalizeOp()
159 return TranslateLegalizeResults(Op, Result); in LegalizeOp()
161 return LegalizeOp(ExpandLoad(Op)); in LegalizeOp()
163 } else if (Op.getOpcode() == ISD::STORE) { in LegalizeOp()
164 StoreSDNode *ST = cast<StoreSDNode>(Op.getNode()); in LegalizeOp()
171 return TranslateLegalizeResults(Op, Result); in LegalizeOp()
177 return LegalizeOp(ExpandStore(Op)); in LegalizeOp()
187 return TranslateLegalizeResults(Op, Result); in LegalizeOp()
190 switch (Op.getOpcode()) { in LegalizeOp()
192 return TranslateLegalizeResults(Op, Result); in LegalizeOp()
262 switch (Op.getOpcode()) { in LegalizeOp()
265 Result = PromoteVectorOp(Op); in LegalizeOp()
271 Result = PromoteVectorOpINT_TO_FP(Op); in LegalizeOp()
278 SDValue Tmp1 = TLI.LowerOperation(Op, DAG); in LegalizeOp()
287 Result = ExpandSEXTINREG(Op); in LegalizeOp()
289 Result = ExpandVSELECT(Op); in LegalizeOp()
291 Result = ExpandSELECT(Op); in LegalizeOp()
293 Result = ExpandUINT_TO_FLOAT(Op); in LegalizeOp()
295 Result = ExpandFNEG(Op); in LegalizeOp()
297 Result = UnrollVSETCC(Op); in LegalizeOp()
299 Result = DAG.UnrollVectorOp(Op.getNode()); in LegalizeOp()
304 if (Result != Op) { in LegalizeOp()
311 AddLegalizedOperand(Op, Result); in LegalizeOp()
315 SDValue VectorLegalizer::PromoteVectorOp(SDValue Op) { in PromoteVectorOp() argument
319 MVT VT = Op.getSimpleValueType(); in PromoteVectorOp()
320 assert(Op.getNode()->getNumValues() == 1 && in PromoteVectorOp()
322 MVT NVT = TLI.getTypeToPromoteTo(Op.getOpcode(), VT); in PromoteVectorOp()
323 DebugLoc dl = Op.getDebugLoc(); in PromoteVectorOp()
324 SmallVector<SDValue, 4> Operands(Op.getNumOperands()); in PromoteVectorOp()
326 for (unsigned j = 0; j != Op.getNumOperands(); ++j) { in PromoteVectorOp()
327 if (Op.getOperand(j).getValueType().isVector()) in PromoteVectorOp()
328 Operands[j] = DAG.getNode(ISD::BITCAST, dl, NVT, Op.getOperand(j)); in PromoteVectorOp()
330 Operands[j] = Op.getOperand(j); in PromoteVectorOp()
333 Op = DAG.getNode(Op.getOpcode(), dl, NVT, &Operands[0], Operands.size()); in PromoteVectorOp()
335 return DAG.getNode(ISD::BITCAST, dl, VT, Op); in PromoteVectorOp()
338 SDValue VectorLegalizer::PromoteVectorOpINT_TO_FP(SDValue Op) { in PromoteVectorOpINT_TO_FP() argument
341 EVT VT = Op.getOperand(0).getValueType(); in PromoteVectorOpINT_TO_FP()
342 assert(Op.getNode()->getNumValues() == 1 && in PromoteVectorOpINT_TO_FP()
360 DebugLoc dl = Op.getDebugLoc(); in PromoteVectorOpINT_TO_FP()
361 SmallVector<SDValue, 4> Operands(Op.getNumOperands()); in PromoteVectorOpINT_TO_FP()
363 unsigned Opc = Op.getOpcode() == ISD::UINT_TO_FP ? ISD::ZERO_EXTEND : in PromoteVectorOpINT_TO_FP()
365 for (unsigned j = 0; j != Op.getNumOperands(); ++j) { in PromoteVectorOpINT_TO_FP()
366 if (Op.getOperand(j).getValueType().isVector()) in PromoteVectorOpINT_TO_FP()
367 Operands[j] = DAG.getNode(Opc, dl, NVT, Op.getOperand(j)); in PromoteVectorOpINT_TO_FP()
369 Operands[j] = Op.getOperand(j); in PromoteVectorOpINT_TO_FP()
372 return DAG.getNode(Op.getOpcode(), dl, Op.getValueType(), &Operands[0], in PromoteVectorOpINT_TO_FP()
377 SDValue VectorLegalizer::ExpandLoad(SDValue Op) { in ExpandLoad() argument
378 DebugLoc dl = Op.getDebugLoc(); in ExpandLoad()
379 LoadSDNode *LD = cast<LoadSDNode>(Op.getNode()); in ExpandLoad()
390 EVT DstEltVT = Op.getNode()->getValueType(0).getScalarType(); in ExpandLoad()
496 Op.getNode()->getValueType(0).getScalarType(), in ExpandLoad()
513 Op.getNode()->getValueType(0), &Vals[0], Vals.size()); in ExpandLoad()
515 AddLegalizedOperand(Op.getValue(0), Value); in ExpandLoad()
516 AddLegalizedOperand(Op.getValue(1), NewChain); in ExpandLoad()
518 return (Op.getResNo() ? NewChain : Value); in ExpandLoad()
521 SDValue VectorLegalizer::ExpandStore(SDValue Op) { in ExpandStore() argument
522 DebugLoc dl = Op.getDebugLoc(); in ExpandStore()
523 StoreSDNode *ST = cast<StoreSDNode>(Op.getNode()); in ExpandStore()
568 AddLegalizedOperand(Op, TF); in ExpandStore()
572 SDValue VectorLegalizer::ExpandSELECT(SDValue Op) { in ExpandSELECT() argument
576 EVT VT = Op.getValueType(); in ExpandSELECT()
577 DebugLoc DL = Op.getDebugLoc(); in ExpandSELECT()
579 SDValue Mask = Op.getOperand(0); in ExpandSELECT()
580 SDValue Op1 = Op.getOperand(1); in ExpandSELECT()
581 SDValue Op2 = Op.getOperand(2); in ExpandSELECT()
597 return DAG.UnrollVectorOp(Op.getNode()); in ExpandSELECT()
629 return DAG.getNode(ISD::BITCAST, DL, Op.getValueType(), Val); in ExpandSELECT()
632 SDValue VectorLegalizer::ExpandSEXTINREG(SDValue Op) { in ExpandSEXTINREG() argument
633 EVT VT = Op.getValueType(); in ExpandSEXTINREG()
638 return DAG.UnrollVectorOp(Op.getNode()); in ExpandSEXTINREG()
640 DebugLoc DL = Op.getDebugLoc(); in ExpandSEXTINREG()
641 EVT OrigTy = cast<VTSDNode>(Op->getOperand(1))->getVT(); in ExpandSEXTINREG()
647 Op = Op.getOperand(0); in ExpandSEXTINREG()
648 Op = DAG.getNode(ISD::SHL, DL, VT, Op, ShiftSz); in ExpandSEXTINREG()
649 return DAG.getNode(ISD::SRA, DL, VT, Op, ShiftSz); in ExpandSEXTINREG()
652 SDValue VectorLegalizer::ExpandVSELECT(SDValue Op) { in ExpandVSELECT() argument
655 EVT VT = Op.getOperand(0).getValueType(); in ExpandVSELECT()
656 DebugLoc DL = Op.getDebugLoc(); in ExpandVSELECT()
658 SDValue Mask = Op.getOperand(0); in ExpandVSELECT()
659 SDValue Op1 = Op.getOperand(1); in ExpandVSELECT()
660 SDValue Op2 = Op.getOperand(2); in ExpandVSELECT()
674 return DAG.UnrollVectorOp(Op.getNode()); in ExpandVSELECT()
691 return DAG.getNode(ISD::BITCAST, DL, Op.getValueType(), Val); in ExpandVSELECT()
694 SDValue VectorLegalizer::ExpandUINT_TO_FLOAT(SDValue Op) { in ExpandUINT_TO_FLOAT() argument
695 EVT VT = Op.getOperand(0).getValueType(); in ExpandUINT_TO_FLOAT()
696 DebugLoc DL = Op.getDebugLoc(); in ExpandUINT_TO_FLOAT()
701 return DAG.UnrollVectorOp(Op.getNode()); in ExpandUINT_TO_FLOAT()
717 SDValue TWOHW = DAG.getConstantFP((1<<(BW/2)), Op.getValueType()); in ExpandUINT_TO_FLOAT()
720 SDValue HI = DAG.getNode(ISD::SRL, DL, VT, Op.getOperand(0), HalfWord); in ExpandUINT_TO_FLOAT()
721 SDValue LO = DAG.getNode(ISD::AND, DL, VT, Op.getOperand(0), HalfWordMask); in ExpandUINT_TO_FLOAT()
725 SDValue fHI = DAG.getNode(ISD::SINT_TO_FP, DL, Op.getValueType(), HI); in ExpandUINT_TO_FLOAT()
726 fHI = DAG.getNode(ISD::FMUL, DL, Op.getValueType(), fHI, TWOHW); in ExpandUINT_TO_FLOAT()
727 SDValue fLO = DAG.getNode(ISD::SINT_TO_FP, DL, Op.getValueType(), LO); in ExpandUINT_TO_FLOAT()
730 return DAG.getNode(ISD::FADD, DL, Op.getValueType(), fHI, fLO); in ExpandUINT_TO_FLOAT()
734 SDValue VectorLegalizer::ExpandFNEG(SDValue Op) { in ExpandFNEG() argument
735 if (TLI.isOperationLegalOrCustom(ISD::FSUB, Op.getValueType())) { in ExpandFNEG()
736 SDValue Zero = DAG.getConstantFP(-0.0, Op.getValueType()); in ExpandFNEG()
737 return DAG.getNode(ISD::FSUB, Op.getDebugLoc(), Op.getValueType(), in ExpandFNEG()
738 Zero, Op.getOperand(0)); in ExpandFNEG()
740 return DAG.UnrollVectorOp(Op.getNode()); in ExpandFNEG()
743 SDValue VectorLegalizer::UnrollVSETCC(SDValue Op) { in UnrollVSETCC() argument
744 EVT VT = Op.getValueType(); in UnrollVSETCC()
747 SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1), CC = Op.getOperand(2); in UnrollVSETCC()
749 DebugLoc dl = Op.getDebugLoc(); in UnrollVSETCC()