[llvm] [VectorCombine] Add type shrinking and zext propagation for fixed-width vector types (PR #104606)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 16 08:37:16 PDT 2024
================
@@ -2493,6 +2494,106 @@ bool VectorCombine::foldSelectShuffle(Instruction &I, bool FromReduction) {
return true;
}
+/// Check if instruction depends on ZExt and this ZExt can be moved after the
+/// instruction. Move ZExt if it is profitable
+bool VectorCombine::shrinkType(llvm::Instruction &I) {
+ Value *ZExted, *OtherOperand;
+ if (match(&I, m_c_BinOp(m_ZExt(m_Value(ZExted)), m_Value(OtherOperand)))) {
+ if (I.getOpcode() != Instruction::And && I.getOpcode() != Instruction::Or &&
+ I.getOpcode() != Instruction::Xor && I.getOpcode() != Instruction::LShr)
+ return false;
----------------
RKSimon wrote:
You might be able to clean this up as:
```c
if (!match(&I, m_c_BitwiseLogic(m_ZExt(m_Value(ZExted)), m_Value(OtherOperand))) &&
!match(&I, m_LShr(m_ZExt(m_Value(ZExted)), m_Value(OtherOperand))))
return false;
```
https://github.com/llvm/llvm-project/pull/104606
More information about the llvm-commits
mailing list