[llvm-branch-commits] [llvm] [DAG] Fold (setcc ((x | x >> c0 | ...) & mask)) sequences (PR #146054)

Jay Foad via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Jun 27 04:05:33 PDT 2025


================
@@ -28909,13 +28909,97 @@ SDValue DAGCombiner::SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1,
   return SDValue();
 }
 
+static SDValue matchMergedBFX(SDValue Root, SelectionDAG &DAG,
+                              const TargetLowering &TLI) {
+  // Match a pattern such as:
+  //  (X | (X >> C0) | (X >> C1) | ...) & Mask
+  // This extracts contiguous parts of X and ORs them together before comparing.
+  // We can optimize this so that we directly check (X & SomeMask) instead,
+  // eliminating the shifts.
+
+  EVT VT = Root.getValueType();
----------------
jayfoad wrote:

Do you need to explicitly reject vector types here. (Or can this be made to work on vector types?)

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


More information about the llvm-branch-commits mailing list