[llvm-branch-commits] [llvm] [ConstantFolding] Add constant folding for mask.beforefirst (PR #234472)

Paul Walker via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Oct 22 03:09:21 PDT 2026


================
@@ -4551,6 +4552,20 @@ static Constant *ConstantFoldFixedVectorCall(
     }
     return nullptr;
   }
+  case Intrinsic::mask_beforefirst: {
+    bool SeenActive = false;
+    for (unsigned I = 0, E = FVTy->getNumElements(); I != E; ++I) {
+      Constant *Elt = Operands[0]->getAggregateElement(I);
+      if (isa_and_nonnull<PoisonValue>(Elt))
+        return PoisonValue::get(FVTy);
+      auto *CI = dyn_cast_or_null<ConstantInt>(Elt);
+      if (!CI)
+        return nullptr;
----------------
paulwalker-arm wrote:

When `SeenActive` is true we know the value of all following lanes regardless of whether Elt is known? Extending from my comment on the test, I'm thinking this is an example where the current definition forces us to implement the wrong (from a design perspective) behaviour?

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


More information about the llvm-branch-commits mailing list