[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