[llvm] f2f61a9 - [PowerPC] A fix for D159073. Do not optimize when register classes are different in src and dst.

via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 26 06:30:07 PDT 2023


Author: esmeyi
Date: 2023-09-26T09:28:26-04:00
New Revision: f2f61a99f7f754f3e4c819e1e7c65848affe70b3

URL: https://github.com/llvm/llvm-project/commit/f2f61a99f7f754f3e4c819e1e7c65848affe70b3
DIFF: https://github.com/llvm/llvm-project/commit/f2f61a99f7f754f3e4c819e1e7c65848affe70b3.diff

LOG: [PowerPC] A fix for D159073. Do not optimize when register classes are different in src and dst.

For example:
```
  %298:g8rc = RLDICL %297:g8rc, 0, 48
  %299:gprc = COPY killed %298.sub_32:g8rc
  dead %498:gprc = ANDI_rec killed %299:gprc, 1, implicit-def dead $cr0, implicit-def $cr0gt
```

Added: 
    

Modified: 
    llvm/lib/Target/PowerPC/PPCMIPeephole.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
index 5fd604b042f56c9..76a73436d61b545 100644
--- a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+++ b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
@@ -1214,6 +1214,14 @@ bool PPCMIPeephole::simplifyCode() {
         if (SrcOpCode != PPC::RLDICL && SrcOpCode != PPC::RLDICR)
           break;
 
+        Register SrcReg, DstReg;
+        SrcReg = SrcMI->getOperand(1).getReg();
+        DstReg = MI.getOperand(1).getReg();
+        const TargetRegisterClass *SrcRC = MRI->getRegClassOrNull(SrcReg);
+        const TargetRegisterClass *DstRC = MRI->getRegClassOrNull(DstReg);
+        if (DstRC != SrcRC)
+          break;
+
         uint64_t AndImm = MI.getOperand(2).getImm();
         if (MI.getOpcode() == PPC::ANDIS_rec ||
             MI.getOpcode() == PPC::ANDIS8_rec)


        


More information about the llvm-commits mailing list