Skip to content

Commit 579f7dd

Browse files
committed
conbine LBARX and RLWINM
1 parent c3ec9e3 commit 579f7dd

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

llvm/lib/Target/PowerPC/PPCMIPeephole.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1281,7 +1281,36 @@ bool PPCMIPeephole::simplifyCode() {
12811281
Simplified = true;
12821282
break;
12831283
}
1284-
case PPC::RLWINM:
1284+
case PPC::RLWINM: {
1285+
Register SrcReg = MI.getOperand(1).getReg();
1286+
MachineInstr *DefMI = MRI->getVRegDef(SrcReg);
1287+
1288+
if (DefMI) {
1289+
unsigned Opcode = DefMI->getOpcode();
1290+
if (Opcode == PPC::LBARX || Opcode == PPC::LHARX) {
1291+
unsigned SH = MI.getOperand(2).getImm();
1292+
unsigned MB = MI.getOperand(3).getImm();
1293+
unsigned ME = MI.getOperand(4).getImm();
1294+
1295+
if (SH == 0 && ME == 31 &&
1296+
((MB == 24 && Opcode == PPC::LBARX) ||
1297+
(MB == 16 && Opcode == PPC::LHARX))) {
1298+
Register SrcReg = MI.getOperand(0).getReg();
1299+
Register DstReg =
1300+
DefMI->getOperand(0).getReg();
1301+
1302+
// Replace all uses of RLWINM's result with LBARX result
1303+
MRI->replaceRegWith(DstReg, SrcReg);
1304+
addRegToUpdate(DstReg);
1305+
addRegToUpdate(SrcReg);
1306+
ToErase = &MI;
1307+
Simplified = true;
1308+
break;
1309+
}
1310+
}
1311+
}
1312+
[[fall_through]];
1313+
}
12851314
case PPC::RLWINM_rec:
12861315
case PPC::RLWINM8:
12871316
case PPC::RLWINM8_rec: {

0 commit comments

Comments
 (0)