[llvm] [ConstantFolding] Add folding for [de]interleave2, insert and extract (PR #141301)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Sat May 24 00:26:33 PDT 2025


================
@@ -3734,6 +3738,65 @@ static Constant *ConstantFoldFixedVectorCall(
     }
     return nullptr;
   }
+  case Intrinsic::vector_extract: {
+    auto *Vec = dyn_cast<Constant>(Operands[0]);
+    auto *Idx = dyn_cast<ConstantInt>(Operands[1]);
+    if (!Vec || !Idx)
+      return nullptr;
+
+    unsigned NumElements = FVTy->getNumElements();
+    unsigned VecNumElements =
+        cast<FixedVectorType>(Vec->getType())->getNumElements();
+    // Extracting entire vector is nop
+    if (NumElements == VecNumElements)
+      return Vec;
+
+    unsigned StartingIndex = Idx->getZExtValue();
+    assert(StartingIndex + NumElements <= VecNumElements &&
----------------
dtcxzyw wrote:

If `[idx, idx + vec_size)` are not valid vector indices, it should return a poison vector.


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


More information about the llvm-commits mailing list