Skip to content

Commit 77147a9

Browse files
author
esmeyi
committed
Revert "[PowerPC][Peephole] Combine rldicl/rldicr and andi/andis after isel."
This reverts commit 2de74e1. A test-suite failure occurs due to this commit, will fix soon.
1 parent c84f9f9 commit 77147a9

File tree

3 files changed

+9
-213
lines changed

3 files changed

+9
-213
lines changed

llvm/lib/Target/PowerPC/PPCMIPeephole.cpp

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,60 +1197,6 @@ bool PPCMIPeephole::simplifyCode() {
11971197
combineSEXTAndSHL(MI, ToErase);
11981198
break;
11991199
}
1200-
case PPC::ANDI_rec:
1201-
case PPC::ANDI8_rec:
1202-
case PPC::ANDIS_rec:
1203-
case PPC::ANDIS8_rec: {
1204-
Register TrueReg =
1205-
TRI->lookThruCopyLike(MI.getOperand(1).getReg(), MRI);
1206-
if (!TrueReg.isVirtual() || !MRI->hasOneNonDBGUse(TrueReg))
1207-
break;
1208-
1209-
MachineInstr *SrcMI = MRI->getVRegDef(TrueReg);
1210-
if (!SrcMI)
1211-
break;
1212-
1213-
unsigned SrcOpCode = SrcMI->getOpcode();
1214-
if (SrcOpCode != PPC::RLDICL && SrcOpCode != PPC::RLDICR)
1215-
break;
1216-
1217-
uint64_t AndImm = MI.getOperand(2).getImm();
1218-
if (MI.getOpcode() == PPC::ANDIS_rec ||
1219-
MI.getOpcode() == PPC::ANDIS8_rec)
1220-
AndImm <<= 16;
1221-
uint64_t LZeroAndImm = llvm::countl_zero<uint64_t>(AndImm);
1222-
uint64_t RZeroAndImm = llvm::countr_zero<uint64_t>(AndImm);
1223-
uint64_t ImmSrc = SrcMI->getOperand(3).getImm();
1224-
1225-
// We can transfer `RLDICL/RLDICR + ANDI_rec/ANDIS_rec` to `ANDI_rec 0`
1226-
// if all bits to AND are already zero in the input.
1227-
bool PatternResultZero =
1228-
(SrcOpCode == PPC::RLDICL && (RZeroAndImm + ImmSrc > 63)) ||
1229-
(SrcOpCode == PPC::RLDICR && LZeroAndImm > ImmSrc);
1230-
1231-
// We can eliminate RLDICL/RLDICR if it's used to clear bits and all
1232-
// bits cleared will be ANDed with 0 by ANDI_rec/ANDIS_rec.
1233-
bool PatternRemoveRotate =
1234-
SrcMI->getOperand(2).getImm() == 0 &&
1235-
((SrcOpCode == PPC::RLDICL && LZeroAndImm >= ImmSrc) ||
1236-
(SrcOpCode == PPC::RLDICR && (RZeroAndImm + ImmSrc > 63)));
1237-
1238-
if (!PatternResultZero && !PatternRemoveRotate)
1239-
break;
1240-
1241-
LLVM_DEBUG(dbgs() << "Combining pair: ");
1242-
LLVM_DEBUG(SrcMI->dump());
1243-
LLVM_DEBUG(MI.dump());
1244-
if (PatternResultZero)
1245-
MI.getOperand(2).setImm(0);
1246-
MI.getOperand(1).setReg(SrcMI->getOperand(1).getReg());
1247-
addRegToUpdate(MI.getOperand(1).getReg());
1248-
LLVM_DEBUG(dbgs() << "To: ");
1249-
LLVM_DEBUG(MI.dump());
1250-
Simplified = true;
1251-
SrcMI->eraseFromParent();
1252-
break;
1253-
}
12541200
case PPC::RLWINM:
12551201
case PPC::RLWINM_rec:
12561202
case PPC::RLWINM8:

llvm/test/CodeGen/PowerPC/fold-rot-and-peephole.mir

Lines changed: 0 additions & 156 deletions
This file was deleted.

llvm/test/CodeGen/PowerPC/p8-scalar_vector_conversions.ll

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2204,7 +2204,8 @@ entry:
22042204
define i64 @getvelsl(<2 x i64> %vsl, i32 signext %i) {
22052205
; CHECK-LABEL: getvelsl:
22062206
; CHECK: # %bb.0: # %entry
2207-
; CHECK-NEXT: andi. r3, r5, 1
2207+
; CHECK-NEXT: clrldi r3, r5, 32
2208+
; CHECK-NEXT: andi. r3, r3, 1
22082209
; CHECK-NEXT: sldi r3, r3, 3
22092210
; CHECK-NEXT: lvsl v3, 0, r3
22102211
; CHECK-NEXT: vperm v2, v2, v2, v3
@@ -2224,6 +2225,7 @@ define i64 @getvelsl(<2 x i64> %vsl, i32 signext %i) {
22242225
;
22252226
; CHECK-AIX-LABEL: getvelsl:
22262227
; CHECK-AIX: # %bb.0: # %entry
2228+
; CHECK-AIX-NEXT: clrldi 3, 3, 32
22272229
; CHECK-AIX-NEXT: andi. 3, 3, 1
22282230
; CHECK-AIX-NEXT: sldi 3, 3, 3
22292231
; CHECK-AIX-NEXT: lvsl 3, 0, 3
@@ -2240,7 +2242,8 @@ entry:
22402242
define i64 @getvelul(<2 x i64> %vul, i32 signext %i) {
22412243
; CHECK-LABEL: getvelul:
22422244
; CHECK: # %bb.0: # %entry
2243-
; CHECK-NEXT: andi. r3, r5, 1
2245+
; CHECK-NEXT: clrldi r3, r5, 32
2246+
; CHECK-NEXT: andi. r3, r3, 1
22442247
; CHECK-NEXT: sldi r3, r3, 3
22452248
; CHECK-NEXT: lvsl v3, 0, r3
22462249
; CHECK-NEXT: vperm v2, v2, v2, v3
@@ -2260,6 +2263,7 @@ define i64 @getvelul(<2 x i64> %vul, i32 signext %i) {
22602263
;
22612264
; CHECK-AIX-LABEL: getvelul:
22622265
; CHECK-AIX: # %bb.0: # %entry
2266+
; CHECK-AIX-NEXT: clrldi 3, 3, 32
22632267
; CHECK-AIX-NEXT: andi. 3, 3, 1
22642268
; CHECK-AIX-NEXT: sldi 3, 3, 3
22652269
; CHECK-AIX-NEXT: lvsl 3, 0, 3
@@ -2457,7 +2461,8 @@ entry:
24572461
define double @getveld(<2 x double> %vd, i32 signext %i) {
24582462
; CHECK-LABEL: getveld:
24592463
; CHECK: # %bb.0: # %entry
2460-
; CHECK-NEXT: andi. r3, r5, 1
2464+
; CHECK-NEXT: clrldi r3, r5, 32
2465+
; CHECK-NEXT: andi. r3, r3, 1
24612466
; CHECK-NEXT: sldi r3, r3, 3
24622467
; CHECK-NEXT: lvsl v3, 0, r3
24632468
; CHECK-NEXT: vperm v2, v2, v2, v3
@@ -2479,6 +2484,7 @@ define double @getveld(<2 x double> %vd, i32 signext %i) {
24792484
;
24802485
; CHECK-AIX-LABEL: getveld:
24812486
; CHECK-AIX: # %bb.0: # %entry
2487+
; CHECK-AIX-NEXT: clrldi 3, 3, 32
24822488
; CHECK-AIX-NEXT: andi. 3, 3, 1
24832489
; CHECK-AIX-NEXT: sldi 3, 3, 3
24842490
; CHECK-AIX-NEXT: lvsl 3, 0, 3

0 commit comments

Comments
 (0)