@@ -198,19 +198,22 @@ static bool hasUndefinedMergeOp(const MachineInstr &MI,
198
198
if (UseMO.getReg ().isPhysical ())
199
199
return false ;
200
200
201
- if (MachineInstr *UseMI = MRI.getVRegDef (UseMO.getReg ())) {
202
- if (UseMI->isImplicitDef ())
203
- return true ;
201
+ MachineInstr *UseMI = MRI.getUniqueVRegDef (UseMO.getReg ());
202
+ assert (UseMI);
203
+ if (UseMI->isImplicitDef ())
204
+ return true ;
204
205
205
- if (UseMI->isRegSequence ()) {
206
- for (unsigned i = 1 , e = UseMI->getNumOperands (); i < e; i += 2 ) {
207
- MachineInstr *SourceMI = MRI. getVRegDef (UseMI-> getOperand (i). getReg ());
208
- if (!SourceMI || !SourceMI-> isImplicitDef ())
209
- return false ;
210
- }
211
- return true ;
206
+ if (UseMI->isRegSequence ()) {
207
+ for (unsigned i = 1 , e = UseMI->getNumOperands (); i < e; i += 2 ) {
208
+ MachineInstr *SourceMI =
209
+ MRI. getUniqueVRegDef (UseMI-> getOperand (i). getReg ());
210
+ assert (SourceMI) ;
211
+ if (!SourceMI-> isImplicitDef ())
212
+ return false ;
212
213
}
214
+ return true ;
213
215
}
216
+
214
217
return false ;
215
218
}
216
219
@@ -890,7 +893,7 @@ static VSETVLIInfo getInfoForVSETVLI(const MachineInstr &MI,
890
893
if (AVLReg == RISCV::X0)
891
894
NewInfo.setAVLVLMAX ();
892
895
else
893
- NewInfo.setAVLRegDef (MRI.getVRegDef (AVLReg), AVLReg);
896
+ NewInfo.setAVLRegDef (MRI.getUniqueVRegDef (AVLReg), AVLReg);
894
897
}
895
898
NewInfo.setVTYPE (MI.getOperand (2 ).getImm ());
896
899
@@ -962,7 +965,8 @@ static VSETVLIInfo computeInfoForInstr(const MachineInstr &MI, uint64_t TSFlags,
962
965
else
963
966
InstrInfo.setAVLImm (Imm);
964
967
} else {
965
- InstrInfo.setAVLRegDef (MRI->getVRegDef (VLOp.getReg ()), VLOp.getReg ());
968
+ InstrInfo.setAVLRegDef (MRI->getUniqueVRegDef (VLOp.getReg ()),
969
+ VLOp.getReg ());
966
970
}
967
971
} else {
968
972
assert (isScalarExtractInstr (MI));
@@ -1235,7 +1239,7 @@ void RISCVInsertVSETVLI::transferAfter(VSETVLIInfo &Info,
1235
1239
1236
1240
if (RISCV::isFaultFirstLoad (MI)) {
1237
1241
// Update AVL to vl-output of the fault first load.
1238
- Info.setAVLRegDef (MRI->getVRegDef (MI.getOperand (1 ).getReg ()),
1242
+ Info.setAVLRegDef (MRI->getUniqueVRegDef (MI.getOperand (1 ).getReg ()),
1239
1243
MI.getOperand (1 ).getReg ());
1240
1244
return ;
1241
1245
}
@@ -1342,8 +1346,9 @@ bool RISCVInsertVSETVLI::needVSETVLIPHI(const VSETVLIInfo &Require,
1342
1346
const VSETVLIInfo &PBBExit = BlockInfo[PBB->getNumber ()].Exit ;
1343
1347
1344
1348
// We need the PHI input to the be the output of a VSET(I)VLI.
1345
- MachineInstr *DefMI = MRI->getVRegDef (InReg);
1346
- if (!DefMI || !isVectorConfigInstr (*DefMI))
1349
+ MachineInstr *DefMI = MRI->getUniqueVRegDef (InReg);
1350
+ assert (DefMI);
1351
+ if (!isVectorConfigInstr (*DefMI))
1347
1352
return true ;
1348
1353
1349
1354
// We found a VSET(I)VLI make sure it matches the output of the
@@ -1403,7 +1408,8 @@ void RISCVInsertVSETVLI::emitVSETVLIs(MachineBasicBlock &MBB) {
1403
1408
MachineOperand &VLOp = MI.getOperand (getVLOpNum (MI));
1404
1409
if (VLOp.isReg ()) {
1405
1410
Register Reg = VLOp.getReg ();
1406
- MachineInstr *VLOpDef = MRI->getVRegDef (Reg);
1411
+ MachineInstr *VLOpDef = MRI->getUniqueVRegDef (Reg);
1412
+ assert (VLOpDef);
1407
1413
1408
1414
// Erase the AVL operand from the instruction.
1409
1415
VLOp.setReg (RISCV::NoRegister);
@@ -1413,8 +1419,7 @@ void RISCVInsertVSETVLI::emitVSETVLIs(MachineBasicBlock &MBB) {
1413
1419
// as an ADDI. However, the ADDI might not have been used in the
1414
1420
// vsetvli, or a vsetvli might not have been emitted, so it may be
1415
1421
// dead now.
1416
- if (VLOpDef && TII->isAddImmediate (*VLOpDef, Reg) &&
1417
- MRI->use_nodbg_empty (Reg))
1422
+ if (TII->isAddImmediate (*VLOpDef, Reg) && MRI->use_nodbg_empty (Reg))
1418
1423
VLOpDef->eraseFromParent ();
1419
1424
}
1420
1425
MI.addOperand (MachineOperand::CreateReg (RISCV::VL, /* isDef*/ false ,
0 commit comments