[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:20 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:

Not relevant to this PR but here the result can be well defined? Just something to consider if we find the current definition hampers usage. Specially I'm thinking once we have better support for speculative loads.

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


More information about the llvm-branch-commits mailing list