[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 04:05:21 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>)
----------------
paulwalker-arm wrote:
Is that not backwards though? I would expect to use something like mask.beforefirst to clean up the predicate for early exit loops, making it safe to then pass to vector.reduce.or and friends?
https://github.com/llvm/llvm-project/pull/234472
More information about the llvm-branch-commits
mailing list