@@ -81,12 +81,11 @@ static unsigned countOperands(SDNode *Node, unsigned NumExpUses,
8181
8282// / EmitCopyFromReg - Generate machine code for an CopyFromReg node or an
8383// / implicit physical register output.
84- void InstrEmitter::EmitCopyFromReg (SDNode *Node, unsigned ResNo, bool IsClone ,
85- Register SrcReg, VRBaseMapType &VRBaseMap) {
84+ void InstrEmitter::EmitCopyFromReg (SDValue Op, bool IsClone, Register SrcReg ,
85+ VRBaseMapType &VRBaseMap) {
8686 Register VRBase;
8787 if (SrcReg.isVirtual ()) {
8888 // Just use the input register directly!
89- SDValue Op (Node, ResNo);
9089 if (IsClone)
9190 VRBaseMap.erase (Op);
9291 bool isNew = VRBaseMap.insert (std::make_pair (Op, SrcReg)).second ;
@@ -99,17 +98,15 @@ void InstrEmitter::EmitCopyFromReg(SDNode *Node, unsigned ResNo, bool IsClone,
9998 // the CopyToReg'd destination register instead of creating a new vreg.
10099 bool MatchReg = true ;
101100 const TargetRegisterClass *UseRC = nullptr ;
102- MVT VT = Node-> getSimpleValueType (ResNo );
101+ MVT VT = Op. getSimpleValueType ();
103102
104103 // Stick to the preferred register classes for legal types.
105104 if (TLI->isTypeLegal (VT))
106- UseRC = TLI->getRegClassFor (VT, Node ->isDivergent ());
105+ UseRC = TLI->getRegClassFor (VT, Op ->isDivergent ());
107106
108- for (SDNode *User : Node ->users ()) {
107+ for (SDNode *User : Op ->users ()) {
109108 bool Match = true ;
110- if (User->getOpcode () == ISD::CopyToReg &&
111- User->getOperand (2 ).getNode () == Node &&
112- User->getOperand (2 ).getResNo () == ResNo) {
109+ if (User->getOpcode () == ISD::CopyToReg && User->getOperand (2 ) == Op) {
113110 Register DestReg = cast<RegisterSDNode>(User->getOperand (1 ))->getReg ();
114111 if (DestReg.isVirtual ()) {
115112 VRBase = DestReg;
@@ -118,10 +115,8 @@ void InstrEmitter::EmitCopyFromReg(SDNode *Node, unsigned ResNo, bool IsClone,
118115 Match = false ;
119116 } else {
120117 for (unsigned i = 0 , e = User->getNumOperands (); i != e; ++i) {
121- SDValue Op = User->getOperand (i);
122- if (Op.getNode () != Node || Op.getResNo () != ResNo)
118+ if (User->getOperand (i) != Op)
123119 continue ;
124- MVT VT = Node->getSimpleValueType (Op.getResNo ());
125120 if (VT == MVT::Other || VT == MVT::Glue)
126121 continue ;
127122 Match = false ;
@@ -170,11 +165,11 @@ void InstrEmitter::EmitCopyFromReg(SDNode *Node, unsigned ResNo, bool IsClone,
170165 } else {
171166 // Create the reg, emit the copy.
172167 VRBase = MRI->createVirtualRegister (DstRC);
173- BuildMI (*MBB, InsertPos, Node->getDebugLoc (), TII->get (TargetOpcode::COPY),
174- VRBase).addReg (SrcReg);
168+ BuildMI (*MBB, InsertPos, Op.getDebugLoc (), TII->get (TargetOpcode::COPY),
169+ VRBase)
170+ .addReg (SrcReg);
175171 }
176172
177- SDValue Op (Node, ResNo);
178173 if (IsClone)
179174 VRBaseMap.erase (Op);
180175 bool isNew = VRBaseMap.insert (std::make_pair (Op, VRBase)).second ;
@@ -1170,7 +1165,7 @@ EmitMachineNode(SDNode *Node, bool IsClone, bool IsCloned,
11701165 continue ;
11711166 // This implicitly defined physreg has a use.
11721167 UsedRegs.push_back (Reg);
1173- EmitCopyFromReg (Node, i, IsClone, Reg, VRBaseMap);
1168+ EmitCopyFromReg (SDValue ( Node, i) , IsClone, Reg, VRBaseMap);
11741169 }
11751170 }
11761171
@@ -1283,7 +1278,7 @@ EmitSpecialNode(SDNode *Node, bool IsClone, bool IsCloned,
12831278 }
12841279 case ISD::CopyFromReg: {
12851280 Register SrcReg = cast<RegisterSDNode>(Node->getOperand (1 ))->getReg ();
1286- EmitCopyFromReg (Node, 0 , IsClone, SrcReg, VRBaseMap);
1281+ EmitCopyFromReg (SDValue ( Node, 0 ) , IsClone, SrcReg, VRBaseMap);
12871282 break ;
12881283 }
12891284 case ISD::EH_LABEL:
0 commit comments