diff options
author | Stefan Pintilie <stefanp@ca.ibm.com> | 2023-05-08 12:22:03 -0400 |
---|---|---|
committer | Stefan Pintilie <stefanp@ca.ibm.com> | 2023-05-08 14:25:20 -0400 |
commit | be95b4dec2604247d9fbad5f7641b4373b740904 (patch) | |
tree | ec17e67d839656f95222b43cd01184f5de7af7e5 /llvm/lib/Target/PowerPC/PPCMIPeephole.cpp | |
parent | af88d34f0552ef207ac54ec2522ae2371ea54e85 (diff) | |
download | llvm-be95b4dec2604247d9fbad5f7641b4373b740904.zip llvm-be95b4dec2604247d9fbad5f7641b4373b740904.tar.gz llvm-be95b4dec2604247d9fbad5f7641b4373b740904.tar.bz2 |
[PowerPC] Look through OR, AND, XOR instructions when checking a clear.
This patch adds the additional step of looking through AND, OR, XOR
instructions when we check the number of leading zeros.
Reviewed By: shchenz
Differential Revision: https://reviews.llvm.org/D149223
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCMIPeephole.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCMIPeephole.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp index f1d1d2f..34da55e 100644 --- a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp +++ b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp @@ -219,6 +219,20 @@ static unsigned getKnownLeadingZeroCount(const unsigned Reg, Opcode == PPC::LBZU8 || Opcode == PPC::LBZUX8) return 56; + if (Opcode == PPC::AND || Opcode == PPC::AND8 || Opcode == PPC::AND_rec || + Opcode == PPC::AND8_rec) + return std::max( + getKnownLeadingZeroCount(MI->getOperand(1).getReg(), TII, MRI), + getKnownLeadingZeroCount(MI->getOperand(2).getReg(), TII, MRI)); + + if (Opcode == PPC::OR || Opcode == PPC::OR8 || Opcode == PPC::XOR || + Opcode == PPC::XOR8 || Opcode == PPC::OR_rec || + Opcode == PPC::OR8_rec || Opcode == PPC::XOR_rec || + Opcode == PPC::XOR8_rec) + return std::min( + getKnownLeadingZeroCount(MI->getOperand(1).getReg(), TII, MRI), + getKnownLeadingZeroCount(MI->getOperand(2).getReg(), TII, MRI)); + if (TII->isZeroExtended(Reg, MRI)) return 32; |