[llvm-branch-commits] [llvm] [ConstantFolding] Add constant folding for mask.beforefirst (PR #234472)
Luke Lau via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Oct 22 03:56:08 PDT 2026
================
@@ -0,0 +1,58 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -p instsimplify -S < %s | FileCheck %s
+
+define <4 x i1> @v4i1_zero() {
+; CHECK-LABEL: define <4 x i1> @v4i1_zero() {
+; CHECK-NEXT: ret <4 x i1> splat (i1 true)
+;
+ %res = call <4 x i1> @llvm.mask.beforefirst(<4 x i1> zeroinitializer)
+ ret <4 x i1> %res
+}
+
+define <4 x i1> @v4i1_ones() {
+; CHECK-LABEL: define <4 x i1> @v4i1_ones() {
+; CHECK-NEXT: ret <4 x i1> zeroinitializer
+;
+ %res = call <4 x i1> @llvm.mask.beforefirst(<4 x i1> splat (i1 true))
+ ret <4 x i1> %res
+}
+
+define <4 x i1> @v4i1() {
+; CHECK-LABEL: define <4 x i1> @v4i1() {
+; CHECK-NEXT: ret <4 x i1> <i1 true, i1 false, i1 false, i1 false>
+;
+ %res = call <4 x i1> @llvm.mask.beforefirst(<4 x i1> <i1 false, i1 true, i1 false, i1 true>)
+ ret <4 x i1> %res
+}
+
+define <4 x i1> @v4i1_poison() {
+; CHECK-LABEL: define <4 x i1> @v4i1_poison() {
+; CHECK-NEXT: ret <4 x i1> poison
+;
+ %res = call <4 x i1> @llvm.mask.beforefirst(<4 x i1> <i1 false, i1 true, i1 poison, i1 false>)
----------------
lukel97 wrote:
Also worth noting that this matches the current cttz.elts semantics used by the loop vectorizer today. We need to freeze the early exit condition regardless because lanes past it are used in a variety of other places, e.g. when checking that any lane has exited we use a vector.reduce.or reduction
https://github.com/llvm/llvm-project/pull/234472
More information about the llvm-branch-commits
mailing list