Skip to content

Commit add8403

Browse files
committed
rebase + review updates
1 parent 1d13db6 commit add8403

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -622,9 +622,18 @@ MachineInstr *SystemZInstrInfo::optimizeLoadInstr(MachineInstr &MI,
622622
!MRI->hasOneNonDBGUse(FoldAsLoadDefReg))
623623
return nullptr;
624624

625-
int UseOpIdx = MI.findRegisterUseOperandIdx(FoldAsLoadDefReg);
625+
int UseOpIdx =
626+
MI.findRegisterUseOperandIdx(FoldAsLoadDefReg, /*TRI=*/nullptr);
626627
assert(UseOpIdx != -1 && "Expected FoldAsLoadDefReg to be used by MI.");
627-
return foldMemoryOperand(MI, {((unsigned) UseOpIdx)}, *DefMI);
628+
629+
// Check whether we can fold the load.
630+
if (MachineInstr *FoldMI =
631+
foldMemoryOperand(MI, {((unsigned)UseOpIdx)}, *DefMI)) {
632+
FoldAsLoadDefReg = 0;
633+
return FoldMI;
634+
}
635+
636+
return nullptr;
628637
}
629638

630639
bool SystemZInstrInfo::foldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
@@ -955,8 +964,9 @@ static LogicOp interpretAndImmediate(unsigned Opcode) {
955964
}
956965

957966
static void transferDeadCC(MachineInstr *OldMI, MachineInstr *NewMI) {
958-
if (OldMI->registerDefIsDead(SystemZ::CC)) {
959-
MachineOperand *CCDef = NewMI->findRegisterDefOperand(SystemZ::CC);
967+
if (OldMI->registerDefIsDead(SystemZ::CC, /*TRI=*/nullptr)) {
968+
MachineOperand *CCDef =
969+
NewMI->findRegisterDefOperand(SystemZ::CC, /*TRI=*/nullptr);
960970
if (CCDef != nullptr)
961971
CCDef->setIsDead(true);
962972
}
@@ -1453,8 +1463,8 @@ MachineInstr *SystemZInstrInfo::foldMemoryOperandImpl(
14531463
assert(LoadMI != InsertPt && "Assuming InsertPt not to be first in MBB.");
14541464
for (MachineBasicBlock::iterator MII = std::prev(InsertPt);;
14551465
--MII) {
1456-
if (MII->definesRegister(SystemZ::CC)) {
1457-
if (!MII->registerDefIsDead(SystemZ::CC))
1466+
if (MII->definesRegister(SystemZ::CC, /*TRI=*/nullptr)) {
1467+
if (!MII->registerDefIsDead(SystemZ::CC, /*TRI=*/nullptr))
14581468
return nullptr;
14591469
break;
14601470
}
@@ -1467,9 +1477,8 @@ MachineInstr *SystemZInstrInfo::foldMemoryOperandImpl(
14671477
}
14681478

14691479
Register FoldAsLoadDefReg = LoadMI.getOperand(0).getReg();
1470-
// We don't really need Ops, but do a sanity check:
1471-
assert(Ops.size() == 1 && FoldAsLoadDefReg == MI.getOperand(Ops[0]).getReg() &&
1472-
"Expected MI to have the only use of the load.");
1480+
if (Ops.size() != 1 || FoldAsLoadDefReg != MI.getOperand(Ops[0]).getReg())
1481+
return nullptr;
14731482
Register DstReg = MI.getOperand(0).getReg();
14741483
MachineOperand LHS = MI.getOperand(1);
14751484
MachineOperand RHS = MI.getOperand(2);

0 commit comments

Comments
 (0)