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() {
1281
1281
Simplified = true ;
1282
1282
break ;
1283
1283
}
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
+ }
1285
1314
case PPC::RLWINM_rec:
1286
1315
case PPC::RLWINM8:
1287
1316
case PPC::RLWINM8_rec: {
You can’t perform that action at this time.
0 commit comments