@@ -813,7 +813,7 @@ static bool forAllMIsUntilDef(MachineInstr &MI, MCPhysReg DefReg,
813
813
--Limit;
814
814
815
815
bool isDef = any_of (I->operands (), [DefReg, TRI](MachineOperand &MOP) {
816
- return MOP.isReg () && MOP.isDef () &&
816
+ return MOP.isReg () && MOP.isDef () && !MOP. isDebug () && MOP. getReg () &&
817
817
TRI->regsOverlap (MOP.getReg (), DefReg);
818
818
});
819
819
if (!Fn (*I, isDef))
@@ -880,7 +880,7 @@ AArch64LoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I,
880
880
for (auto &MOP : MI.operands ()) {
881
881
// Rename the first explicit definition and all implicit
882
882
// definitions matching RegToRename.
883
- if (MOP.isReg () &&
883
+ if (MOP.isReg () && !MOP. isDebug () && MOP. getReg () &&
884
884
(!SeenDef || (MOP.isDef () && MOP.isImplicit ())) &&
885
885
TRI->regsOverlap (MOP.getReg (), RegToRename)) {
886
886
assert ((MOP.isImplicit () ||
@@ -892,7 +892,8 @@ AArch64LoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I,
892
892
}
893
893
} else {
894
894
for (auto &MOP : MI.operands ()) {
895
- if (MOP.isReg () && TRI->regsOverlap (MOP.getReg (), RegToRename)) {
895
+ if (MOP.isReg () && !MOP.isDebug () && MOP.getReg () &&
896
+ TRI->regsOverlap (MOP.getReg (), RegToRename)) {
896
897
assert (MOP.isImplicit () ||
897
898
(MOP.isRenamable () && !MOP.isEarlyClobber ()) &&
898
899
" Need renamable operands" );
@@ -913,7 +914,7 @@ AArch64LoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I,
913
914
std::next (I), std::next (Paired)))
914
915
assert (all_of (MI.operands (),
915
916
[this , &RenameReg](const MachineOperand &MOP) {
916
- return !MOP.isReg () || MOP.isDebug () ||
917
+ return !MOP.isReg () || MOP.isDebug () || !MOP. getReg () ||
917
918
!TRI->regsOverlap (MOP.getReg (), *RenameReg);
918
919
}) &&
919
920
" Rename register used between paired instruction, trashing the "
@@ -1348,7 +1349,8 @@ canRenameUpToDef(MachineInstr &FirstMI, LiveRegUnits &UsedInBetween,
1348
1349
if (!getLdStRegOp (FirstMI).isKill () &&
1349
1350
!any_of (FirstMI.operands (),
1350
1351
[TRI, RegToRename](const MachineOperand &MOP) {
1351
- return MOP.isReg () && MOP.isImplicit () && MOP.isKill () &&
1352
+ return MOP.isReg () && !MOP.isDebug () && MOP.getReg () &&
1353
+ MOP.isImplicit () && MOP.isKill () &&
1352
1354
TRI->regsOverlap (RegToRename, MOP.getReg ());
1353
1355
})) {
1354
1356
LLVM_DEBUG (dbgs () << " Operand not killed at " << FirstMI << " \n " );
@@ -1384,7 +1386,7 @@ canRenameUpToDef(MachineInstr &FirstMI, LiveRegUnits &UsedInBetween,
1384
1386
// For defs, check if we can rename the first def of RegToRename.
1385
1387
if (FoundDef) {
1386
1388
for (auto &MOP : MI.operands ()) {
1387
- if (!MOP.isReg () || !MOP.isDef () ||
1389
+ if (!MOP.isReg () || !MOP.isDef () || MOP. isDebug () || !MOP. getReg () ||
1388
1390
!TRI->regsOverlap (MOP.getReg (), RegToRename))
1389
1391
continue ;
1390
1392
if (!canRenameMOP (MOP)) {
@@ -1397,7 +1399,8 @@ canRenameUpToDef(MachineInstr &FirstMI, LiveRegUnits &UsedInBetween,
1397
1399
return true ;
1398
1400
} else {
1399
1401
for (auto &MOP : MI.operands ()) {
1400
- if (!MOP.isReg () || !TRI->regsOverlap (MOP.getReg (), RegToRename))
1402
+ if (!MOP.isReg () || MOP.isDebug () || !MOP.getReg () ||
1403
+ !TRI->regsOverlap (MOP.getReg (), RegToRename))
1401
1404
continue ;
1402
1405
1403
1406
if (!canRenameMOP (MOP)) {
0 commit comments