[llvm] [WASM] Fold bitselect with splat zero (PR #147305)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 8 02:06:25 PDT 2025
================
@@ -3210,6 +3213,64 @@ static SDValue performTruncateCombine(SDNode *N,
return truncateVectorWithNARROW(OutVT, In, DL, DAG);
}
+static SDValue performVSelectCombine(SDNode *N, SelectionDAG &DAG) {
+ // In the tablegen.td, vselect A B C -> bitselect B C A
+
+ // SCENARIO A
+ // vselect <0>, X, Y
+ // -> bitselect X, Y, <0>
+ // -> or (AND(X, <0>), AND(<Y>, !<0>))
+ // -> or (0, AND(<Y>, !<0>))
+ // -> AND(Y, !<0>)
+ // -> AND(Y, 1)
+ // -> Y
----------------
badumbatish wrote:
we do have it as, I will remove the redundant checks
```
SDValue SelectionDAG::simplifySelect(SDValue Cond, SDValue T, SDValue F) {
// select undef, T, F --> T (if T is a constant), otherwise F
// select, ?, undef, F --> F
// select, ?, T, undef --> T
if (Cond.isUndef())
return isConstantValueOfAnyType(T) ? T : F;
if (T.isUndef())
return F;
if (F.isUndef())
return T;
// select true, T, F --> T
// select false, T, F --> F
if (auto C = isBoolConstant(Cond, /*AllowTruncation=*/true))
return *C ? T : F;
// select ?, T, T --> T
if (T == F)
return T;
return SDValue();
}
```
https://github.com/llvm/llvm-project/pull/147305
More information about the llvm-commits
mailing list