Lines Matching refs:Node

42 unsigned InstrEmitter::CountResults(SDNode *Node) {
43 unsigned N = Node->getNumValues();
44 while (N && Node->getValueType(N - 1) == MVT::Glue)
46 if (N && Node->getValueType(N - 1) == MVT::Other)
55 unsigned InstrEmitter::CountOperands(SDNode *Node) {
56 unsigned N = Node->getNumOperands();
57 while (N && Node->getOperand(N - 1).getValueType() == MVT::Glue)
59 if (N && Node->getOperand(N - 1).getValueType() == MVT::Other)
67 EmitCopyFromReg(SDNode *Node, unsigned ResNo, bool IsClone, bool IsCloned,
72 SDValue Op(Node, ResNo);
77 assert(isNew && "Node emitted out of order - early");
85 EVT VT = Node->getValueType(ResNo);
92 for (SDNode::use_iterator UI = Node->use_begin(), E = Node->use_end();
97 User->getOperand(2).getNode() == Node &&
108 if (Op.getNode() != Node || Op.getResNo() != ResNo)
110 EVT VT = Node->getValueType(Op.getResNo());
157 BuildMI(*MBB, InsertPos, Node->getDebugLoc(), TII->get(TargetOpcode::COPY),
161 SDValue Op(Node, ResNo);
166 assert(isNew && "Node emitted out of order - early");
171 unsigned InstrEmitter::getDstOfOnlyCopyToRegUse(SDNode *Node,
173 if (!Node->hasOneUse())
176 SDNode *User = *Node->use_begin();
178 User->getOperand(2).getNode() == Node &&
187 void InstrEmitter::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI,
191 assert(Node->getMachineOpcode() != TargetOpcode::IMPLICIT_DEF &&
202 unsigned NumResults = CountResults(Node);
203 VRBase = cast<RegisterSDNode>(Node->getOperand(i-NumResults))->getReg();
209 for (SDNode::use_iterator UI = Node->use_begin(), E = Node->use_end();
213 User->getOperand(2).getNode() == Node &&
235 SDValue Op(Node, i);
240 assert(isNew && "Node emitted out of order - early");
264 assert(I != VRBaseMap.end() && "Node emitted out of order - late");
426 void InstrEmitter::EmitSubregNode(SDNode *Node,
430 unsigned Opc = Node->getMachineOpcode();
434 for (SDNode::use_iterator UI = Node->use_begin(), E = Node->use_end();
438 User->getOperand(2).getNode() == Node) {
451 unsigned SubIdx = cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue();
452 const TargetRegisterClass *TRC = TLI->getRegClassFor(Node->getValueType(0));
454 unsigned VReg = getVR(Node->getOperand(0), VRBaseMap);
466 BuildMI(*MBB, InsertPos, Node->getDebugLoc(),
473 Node->getOperand(0).getValueType(),
474 Node->getDebugLoc());
481 BuildMI(*MBB, InsertPos, Node->getDebugLoc(),
486 SDValue N0 = Node->getOperand(0);
487 SDValue N1 = Node->getOperand(1);
488 SDValue N2 = Node->getOperand(2);
505 const TargetRegisterClass *SRC = TLI->getRegClassFor(Node->getValueType(0));
513 MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(), TII->get(Opc));
530 llvm_unreachable("Node is not insert_subreg, extract_subreg, or subreg_to_reg");
532 SDValue Op(Node, 0);
535 assert(isNew && "Node emitted out of order - early");
543 InstrEmitter::EmitCopyToRegClassNode(SDNode *Node,
545 unsigned VReg = getVR(Node->getOperand(0), VRBaseMap);
548 unsigned DstRCIdx = cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue();
551 BuildMI(*MBB, InsertPos, Node->getDebugLoc(), TII->get(TargetOpcode::COPY),
554 SDValue Op(Node, 0);
557 assert(isNew && "Node emitted out of order - early");
562 void InstrEmitter::EmitRegSequence(SDNode *Node,
565 unsigned DstRCIdx = cast<ConstantSDNode>(Node->getOperand(0))->getZExtValue();
568 MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
570 unsigned NumOps = Node->getNumOperands();
575 SDValue Op = Node->getOperand(i);
578 unsigned SubReg = getVR(Node->getOperand(i-1), VRBaseMap);
592 SDValue Op(Node, 0);
595 assert(isNew && "Node emitted out of order - early");
617 SDNode *Node = SD->getSDNode();
618 SDValue Op = SDValue(Node, SD->getResNo());
657 EmitMachineNode(SDNode *Node, bool IsClone, bool IsCloned,
659 unsigned Opc = Node->getMachineOpcode();
665 EmitSubregNode(Node, VRBaseMap, IsClone, IsCloned);
671 EmitCopyToRegClassNode(Node, VRBaseMap);
677 EmitRegSequence(Node, VRBaseMap, IsClone, IsCloned);
686 unsigned NumResults = CountResults(Node);
687 unsigned NodeOperands = CountOperands(Node);
701 MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(), II);
706 Node->getValueType(Node->getNumValues()-1) == MVT::Glue) {
709 for (SDNode *F = Node->getGluedUser(); F; F = F->getGluedUser())
733 CreateVirtualRegisters(Node, MI, II, IsClone, IsCloned, VRBaseMap);
742 AddOperand(MI, Node->getOperand(i), i-NumSkip+II.getNumDefs(), &II,
746 MI->setMemRefs(cast<MachineSDNode>(Node)->memoperands_begin(),
747 cast<MachineSDNode>(Node)->memoperands_end());
758 if (Node->hasAnyUseOfValue(i))
759 EmitCopyFromReg(Node, i, IsClone, IsCloned, Reg, VRBaseMap);
764 else if (Node->getValueType(Node->getNumValues()-1) != MVT::Glue)
772 if (Node->getValueType(Node->getNumValues()-1) != MVT::Glue)
783 TLI->AdjustInstrPostInstrSelection(MI, Node);
789 EmitSpecialNode(SDNode *Node, bool IsClone, bool IsCloned,
791 switch (Node->getOpcode()) {
794 Node->dump();
806 SDValue SrcVal = Node->getOperand(2);
812 unsigned DestReg = cast<RegisterSDNode>(Node->getOperand(1))->getReg();
816 BuildMI(*MBB, InsertPos, Node->getDebugLoc(), TII->get(TargetOpcode::COPY),
821 unsigned SrcReg = cast<RegisterSDNode>(Node->getOperand(1))->getReg();
822 EmitCopyFromReg(Node, 0, IsClone, IsCloned, SrcReg, VRBaseMap);
826 MCSymbol *S = cast<EHLabelSDNode>(Node)->getLabel();
827 BuildMI(*MBB, InsertPos, Node->getDebugLoc(),
833 unsigned NumOps = Node->getNumOperands();
834 if (Node->getOperand(NumOps-1).getValueType() == MVT::Glue)
838 MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
842 SDValue AsmStrV = Node->getOperand(InlineAsm::Op_AsmString);
848 cast<ConstantSDNode>(Node->getOperand(InlineAsm::Op_ExtraInfo))->
855 cast<ConstantSDNode>(Node->getOperand(i))->getZExtValue();
865 unsigned Reg = cast<RegisterSDNode>(Node->getOperand(i))->getReg();
876 unsigned Reg = cast<RegisterSDNode>(Node->getOperand(i))->getReg();
891 AddOperand(MI, Node->getOperand(i), 0, 0, VRBaseMap,
898 SDValue MDV = Node->getOperand(InlineAsm::Op_MDNode);