[llvm] [SLP][NFC]Extract values state/operands analysis into separate class (PR #138724)
Han-Kuan Chen via llvm-commits
llvm-commits at lists.llvm.org
Thu May 8 20:54:01 PDT 2025
================
@@ -2896,11 +2885,17 @@ class BoUpSLP {
// Since operand reordering is performed on groups of commutative
// operations or alternating sequences (e.g., +, -), we can safely tell
// the inverse operations by checking commutativity.
- auto [SelectedOp, Ops] = convertTo(cast<Instruction>(VL[Lane]), S);
+ auto *I = dyn_cast<Instruction>(VL[Lane]);
+ if (!I && isa<PoisonValue>(VL[Lane])) {
----------------
HanKuanChen wrote:
I just feel it is weird because the following code is removed; however, it could have been kept.
```
assert((isa<Instruction>(V) || isa<PoisonValue>(V)) &&
"Expected instruction or poison value");
```
If we don't introduce any new concept, why do we remove the assert?
And if we keep the original assert, we can use
```
if (isa<PoisonValue>(VL[Lane])) {
for (unsigned OpIdx : seq<unsigned>(NumOperands))
OpsVec[OpIdx][Lane] = {Operands[OpIdx][Lane], true, false};
continue;
}
auto [SelectedOp, Ops] = convertTo(cast<Instruction>(VL[Lane]), S);
```
https://github.com/llvm/llvm-project/pull/138724
More information about the llvm-commits
mailing list