Home | History | Annotate | Download | only in SelectionDAG

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);
66 SDValue ExpandVSELECT(SDValue Op);
67 SDValue ExpandLoad(SDValue Op);
68 SDValue ExpandStore(SDValue Op);
69 SDValue ExpandFNEG(SDValue Op);
73 SDValue PromoteVectorOp(SDValue Op);
106 SDValue VectorLegalizer::TranslateLegalizeResults(SDValue Op, SDValue Result) {
108 for (unsigned i = 0, e = Op.getNode()->getNumValues(); i != e; ++i)
109 AddLegalizedOperand(Op.getValue(i), Result.getValue(i));
110 return Result.getValue(Op.getResNo());
113 SDValue VectorLegalizer::LegalizeOp(SDValue Op) {
116 DenseMap<SDValue, SDValue>::iterator I = LegalizedNodes.find(Op);
119 SDNode* Node = Op.getNode();
127 SDValue(DAG.UpdateNodeOperands(Op.getNode(), Ops.data(), Ops.size()), 0);
129 if (Op.getOpcode() == ISD::LOAD) {
130 LoadSDNode *LD = cast<LoadSDNode>(Op.getNode());
134 return TranslateLegalizeResults(Op, Result);
136 return LegalizeOp(ExpandLoad(Op));
138 } else if (Op.getOpcode() == ISD::STORE) {
139 StoreSDNode *ST = cast<StoreSDNode>(Op.getNode());
146 return TranslateLegalizeResults(Op, Result);
152 return LegalizeOp(ExpandStore(Op));
162 return TranslateLegalizeResults(Op, Result);
165 switch (Op.getOpcode()) {
167 return TranslateLegalizeResults(Op, Result);
233 Result = PromoteVectorOp(Op);
238 SDValue Tmp1 = TLI.LowerOperation(Op, DAG);
247 Result = ExpandVSELECT(Op);
249 Result = ExpandUINT_TO_FLOAT(Op);
251 Result = ExpandFNEG(Op);
253 Result = UnrollVSETCC(Op);
255 Result = DAG.UnrollVectorOp(Op.getNode());
260 if (Result != Op) {
267 AddLegalizedOperand(Op, Result);
271 SDValue VectorLegalizer::PromoteVectorOp(SDValue Op) {
275 EVT VT = Op.getValueType();
276 assert(Op.getNode()->getNumValues() == 1 &&
278 EVT NVT = TLI.getTypeToPromoteTo(Op.getOpcode(), VT);
279 DebugLoc dl = Op.getDebugLoc();
280 SmallVector<SDValue, 4> Operands(Op.getNumOperands());
282 for (unsigned j = 0; j != Op.getNumOperands(); ++j) {
283 if (Op.getOperand(j).getValueType().isVector())
284 Operands[j] = DAG.getNode(ISD::BITCAST, dl, NVT, Op.getOperand(j));
286 Operands[j] = Op.getOperand(j);
289 Op = DAG.getNode(Op.getOpcode(), dl, NVT, &Operands[0], Operands.size());
291 return DAG.getNode(ISD::BITCAST, dl, VT, Op);
295 SDValue VectorLegalizer::ExpandLoad(SDValue Op) {
296 DebugLoc dl = Op.getDebugLoc();
297 LoadSDNode *LD = cast<LoadSDNode>(Op.getNode());
310 Op.getNode()->getValueType(0).getScalarType(),
326 Op.getNode()->getValueType(0), &LoadVals[0], LoadVals.size());
328 AddLegalizedOperand(Op.getValue(0), Value);
329 AddLegalizedOperand(Op.getValue(1), NewChain);
331 return (Op.getResNo() ? NewChain : Value);
334 SDValue VectorLegalizer::ExpandStore(SDValue Op) {
335 DebugLoc dl = Op.getDebugLoc();
336 StoreSDNode *ST = cast<StoreSDNode>(Op.getNode());
381 AddLegalizedOperand(Op, TF);
385 SDValue VectorLegalizer::ExpandVSELECT(SDValue Op) {
388 EVT VT = Op.getOperand(0).getValueType();
389 DebugLoc DL = Op.getDebugLoc();
391 SDValue Mask = Op.getOperand(0);
392 SDValue Op1 = Op.getOperand(1);
393 SDValue Op2 = Op.getOperand(2);
396 // AND,OR,XOR, we will have to scalarize the op.
400 return DAG.UnrollVectorOp(Op.getNode());
402 assert(VT.getSizeInBits() == Op.getOperand(1).getValueType().getSizeInBits()
419 SDValue VectorLegalizer::ExpandUINT_TO_FLOAT(SDValue Op) {
420 EVT VT = Op.getOperand(0).getValueType();
421 DebugLoc DL = Op.getDebugLoc();
426 return DAG.UnrollVectorOp(Op.getNode());
442 SDValue TWOHW = DAG.getConstantFP((1<<(BW/2)), Op.getValueType());
445 SDValue HI = DAG.getNode(ISD::SRL, DL, VT, Op.getOperand(0), HalfWord);
446 SDValue LO = DAG.getNode(ISD::AND, DL, VT, Op.getOperand(0), HalfWordMask);
450 SDValue fHI = DAG.getNode(ISD::SINT_TO_FP, DL, Op.getValueType(), HI);
451 fHI = DAG.getNode(ISD::FMUL, DL, Op.getValueType(), fHI, TWOHW);
452 SDValue fLO = DAG.getNode(ISD::SINT_TO_FP, DL, Op.getValueType(), LO);
455 return DAG.getNode(ISD::FADD, DL, Op.getValueType(), fHI, fLO);
459 SDValue VectorLegalizer::ExpandFNEG(SDValue Op) {
460 if (TLI.isOperationLegalOrCustom(ISD::FSUB, Op.getValueType())) {
461 Op.getValueType());
462 return DAG.getNode(ISD::FSUB, Op.getDebugLoc(), Op.getValueType(),
463 Zero, Op.getOperand(0));
465 return DAG.UnrollVectorOp(Op.getNode());
468 SDValue VectorLegalizer::UnrollVSETCC(SDValue Op) {
469 EVT VT = Op.getValueType();
472 SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1), CC = Op.getOperand(2);
474 DebugLoc dl = Op.getDebugLoc();