aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
diff options
context:
space:
mode:
authorStefan Pintilie <stefanp@ca.ibm.com>2023-05-08 12:22:03 -0400
committerStefan Pintilie <stefanp@ca.ibm.com>2023-05-08 14:25:20 -0400
commitbe95b4dec2604247d9fbad5f7641b4373b740904 (patch)
treeec17e67d839656f95222b43cd01184f5de7af7e5 /llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
parentaf88d34f0552ef207ac54ec2522ae2371ea54e85 (diff)
downloadllvm-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.cpp14
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;