[llvm] [SLP] NFC. Add a comment to introduce the alternate instruction. (PR #134572)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 6 20:46:28 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-vectorizers
Author: Han-Kuan Chen (HanKuanChen)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/134572.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp (+22-1)
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 31c684e16f051..b3eeaa2ea3d3d 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -817,7 +817,28 @@ namespace {
/// Main data required for vectorization of instructions.
class InstructionsState {
- /// The main/alternate instruction. MainOp is also VL0.
+ /// MainOp and AltOp are primarily determined by getSameOpcode. Currently,
+ /// only BinaryOperator, CastInst, and CmpInst support alternate instructions
+ /// (i.e., AltOp is not equal to MainOp; this can be checked using
+ /// isAltShuffle).
+ /// A rare exception is TrySplitNode, where the InstructionsState is derived
+ /// from getMainAltOpsNoStateVL.
+ /// For those InstructionsState that use alternate instructions, the resulting
+ /// vectorized output ultimately comes from a shufflevector. For example,
+ /// given a vector list (VL):
+ /// VL[0] = add i32 a, e
+ /// VL[1] = sub i32 b, f
+ /// VL[2] = add i32 c, g
+ /// VL[3] = sub i32 d, h
+ /// The vectorized result would be:
+ /// intermediated_0 = add <4 x i32> <a, b, c, d>, <e, f, g, h>
+ /// intermediated_1 = sub <4 x i32> <a, b, c, d>, <e, f, g, h>
+ /// result = shufflevector <4 x i32> intermediated_0,
+ /// <4 x i32> intermediated_1,
+ /// <4 x i32> <i32 0, i32 5, i32 2, i32 7>
+ /// Since shufflevector is used in the final result, when calculating the cost
+ /// (getEntryCost), we must account for the usage of shufflevector in
+ /// GetVectorCost.
Instruction *MainOp = nullptr;
Instruction *AltOp = nullptr;
``````````
</details>
https://github.com/llvm/llvm-project/pull/134572
More information about the llvm-commits
mailing list