[llvm] [X86] Handle multi-use setcc in commuteSelect (PR #213645)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 3 06:25:02 PDT 2026


================
@@ -48564,21 +48564,44 @@ static SDValue commuteSelect(SDNode *N, SelectionDAG &DAG, const SDLoc &DL,
 
   ISD::CondCode CC;
   SDValue Cond, X, Y, LHS, RHS;
-  if (!sd_match(N, m_VSelect(m_AllOf(m_Value(Cond),
-                                     m_OneUse(m_SetCC(m_Value(X), m_Value(Y),
-                                                      m_CondCode(CC)))),
-                             m_Value(LHS), m_Value(RHS))))
+  if (!sd_match(
+          N, m_VSelect(m_AllOf(m_Value(Cond),
+                               m_SetCC(m_Value(X), m_Value(Y), m_CondCode(CC))),
+                       m_Value(LHS), m_Value(RHS))))
     return SDValue();
 
   if (canCombineAsMaskOperation(LHS, Subtarget) ||
       !canCombineAsMaskOperation(RHS, Subtarget))
     return SDValue();
 
+  // For multi-use setcc, check that all users are vselects that benefit.
+  if (!Cond.hasOneUse()) {
+    SDValue UserLHS, UserRHS;
+    for (SDNode *User : Cond->users()) {
----------------
RKSimon wrote:

use an llvm::all_of pattern ?

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


More information about the llvm-commits mailing list