[llvm] [InstCombine] Add fold combining adjacent extracted bit fields to restore optimization for separate truncations (PR #219598)

Andreas Jonson via llvm-commits llvm-commits at lists.llvm.org
Sat Aug 29 04:07:42 PDT 2026


================
@@ -4319,6 +4319,29 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) {
           return BinaryOperator::CreateAnd(Or, C01);
         }
       }
+
+      // (trunc (lshr X, S) & C0) | (lshr (trunc X), S & C1)
+      // --> (trunc (lshr X, S) & (C0 | C1) (and similar cases) 
+      // A = trunc (lshr X, S) B = lshr (trunc X), S
+      const APInt *ShiftAmt;
+      if (match(A, m_OneUse(m_Trunc(m_LShr(m_Value(X), m_APInt(ShiftAmt))))) &&
----------------
andjo403 wrote:

why is the m_OneUse needed? looks like a improvement with less or equal amount of instructions.
add some test with multi use see https://llvm.org/docs/InstCombineContributorGuide.html#add-multi-use-tests

https://github.com/llvm/llvm-project/pull/219598


More information about the llvm-commits mailing list