[llvm] Add m_SelectCCLike matcher to match SELECT_CC or SELECT with SETCC (PR #149646)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 22 00:23:31 PDT 2025
================
@@ -578,6 +578,43 @@ m_InsertSubvector(const LHS &Base, const RHS &Sub, const IDX &Idx) {
return TernaryOpc_match<LHS, RHS, IDX>(ISD::INSERT_SUBVECTOR, Base, Sub, Idx);
}
+template <typename LTy, typename RTy, typename TTy, typename FTy, typename CCTy>
+struct SelectCC_match {
+ LTy L;
+ RTy R;
+ TTy T;
+ FTy F;
+ CCTy CC;
+
+ SelectCC_match(LTy L, RTy R, TTy T, FTy F, CCTy CC)
+ : L(std::move(L)), R(std::move(R)), T(std::move(T)), F(std::move(F)),
+ CC(std::move(CC)) {}
+
+ template <typename MatchContext>
+ bool match(MatchContext &Ctx, SDValue V) {
+ return V.getOpcode() == ISD::SELECT_CC && L.match(Ctx, V.getOperand(0)) &&
+ R.match(Ctx, V.getOperand(1)) && T.match(Ctx, V.getOperand(2)) &&
+ F.match(Ctx, V.getOperand(3)) && CC.match(Ctx, V.getOperand(4));
+ }
+};
+
+template <typename LTy, typename RTy, typename TTy, typename FTy, typename CCTy>
+inline auto m_SelectCC(LTy &&L, RTy &&R, TTy &&T, FTy &&F, CCTy &&CC) {
+ return SelectCC_match<std::decay_t<LTy>, std::decay_t<RTy>, std::decay_t<TTy>,
+ std::decay_t<FTy>, std::decay_t<CCTy>>(
+ std::forward<LTy>(L), std::forward<RTy>(R), std::forward<TTy>(T),
+ std::forward<FTy>(F), std::forward<CCTy>(CC));
+}
+
+template <typename LTy, typename RTy, typename TTy, typename FTy, typename CCTy>
+inline auto m_SelectCCLike(LTy &&L, RTy &&R, TTy &&T, FTy &&F, CCTy &&CC) {
+ return SDPatternMatch::m_AnyOf(
+ SDPatternMatch::m_Select(SDPatternMatch::m_SetCC(L, R, CC), T, F),
----------------
RKSimon wrote:
Why the namespace?
https://github.com/llvm/llvm-project/pull/149646
More information about the llvm-commits
mailing list