llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-transforms Author: Andrei Elovikov (eas) <details> <summary>Changes</summary> I plan to use it in the `VPlanPredicator.cpp`. AI-assisted. --- Full diff: https://github.com/llvm/llvm-project/pull/219059.diff 2 Files Affected: - (modified) llvm/lib/Transforms/Vectorize/VPlanEVLTailFolding.cpp (-23) - (modified) llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h (+23) ``````````diff diff --git a/llvm/lib/Transforms/Vectorize/VPlanEVLTailFolding.cpp b/llvm/lib/Transforms/Vectorize/VPlanEVLTailFolding.cpp index 9d8e55137025f..61bb7b35469bd 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanEVLTailFolding.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanEVLTailFolding.cpp @@ -61,29 +61,6 @@ bool VPlanTransforms::simplifyKnownEVL(VPlan &Plan, ElementCount VF, return false; } -template <typename Op0_t, typename Op1_t> struct RemoveMask_match { - Op0_t In; - Op1_t &Out; - - RemoveMask_match(const Op0_t &In, Op1_t &Out) : In(In), Out(Out) {} - - template <typename OpTy> bool match(OpTy *V) const { - if (m_Specific(In).match(V)) { - Out = nullptr; - return true; - } - return m_LogicalAnd(m_Specific(In), m_VPValue(Out)).match(V); - } -}; - -/// Match a specific mask \p In, or a combination of it (logical-and In, Out). -/// Returns the remaining part \p Out if so, or nullptr otherwise. -template <typename Op0_t, typename Op1_t> -static inline RemoveMask_match<Op0_t, Op1_t> m_RemoveMask(const Op0_t &In, - Op1_t &Out) { - return RemoveMask_match<Op0_t, Op1_t>(In, Out); -} - static std::optional<Intrinsic::ID> getVPDivRemIntrinsic(Intrinsic::ID IntrID) { switch (IntrID) { case Intrinsic::masked_udiv: diff --git a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h index 648ffa2b11a4f..b7f7a41a14a63 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h +++ b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h @@ -864,6 +864,29 @@ inline auto m_LogicalAnd(const Op0_t &Op0, const Op1_t &Op1) { m_Select(Op0, Op1, m_False())); } +/// Match a specific mask \p In, or a combination of it (logical-and In, Out). +/// Returns the remaining part \p Out if so, or nullptr otherwise. +template <typename Op0_t, typename Op1_t> struct RemoveMask_match { + Op0_t In; + Op1_t &Out; + + RemoveMask_match(const Op0_t &In, Op1_t &Out) : In(In), Out(Out) {} + + template <typename OpTy> bool match(OpTy *V) const { + if (m_Specific(In).match(V)) { + Out = nullptr; + return true; + } + return m_LogicalAnd(m_Specific(In), m_VPValue(Out)).match(V); + } +}; + +template <typename Op0_t, typename Op1_t> +inline RemoveMask_match<Op0_t, Op1_t> m_RemoveMask(const Op0_t &In, + Op1_t &Out) { + return RemoveMask_match<Op0_t, Op1_t>(In, Out); +} + template <typename Op0_t, typename Op1_t> inline auto m_c_LogicalAnd(const Op0_t &Op0, const Op1_t &Op1) { return m_CombineOr( `````````` </details> https://github.com/llvm/llvm-project/pull/219059 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
