File tree Expand file tree Collapse file tree 1 file changed +30
-1
lines changed Expand file tree Collapse file tree 1 file changed +30
-1
lines changed Original file line number Diff line number Diff 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: {
You can’t perform that action at this time.
0 commit comments