[clang] [SystemZ] Fix wrong mask for float vec_insert (PR #192967)
Dominik Steenken via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 21 01:21:55 PDT 2026
https://github.com/dominik-steenken updated https://github.com/llvm/llvm-project/pull/192967
>From d08987f941eb993225643133d24281648c4cbef9 Mon Sep 17 00:00:00 2001
From: Dominik Steenken <dost at de.ibm.com>
Date: Mon, 20 Apr 2026 11:20:10 +0200
Subject: [PATCH] [SystemZ] Fix wrong mask for float vec_insert
This commit fixes an error in , where the index masking
effectively made the last two float elements of a vector non-insertable.
co-authored-by: @Andreas-Krebbel
---
clang/lib/Headers/vecintrin.h | 2 +-
clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c | 7 +++++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Headers/vecintrin.h b/clang/lib/Headers/vecintrin.h
index 338ea51ce8863..4e567b9adc265 100644
--- a/clang/lib/Headers/vecintrin.h
+++ b/clang/lib/Headers/vecintrin.h
@@ -207,7 +207,7 @@ vec_insert(unsigned long long __scalar, __vector unsigned long long __vec,
#if __ARCH__ >= 12
static inline __ATTRS_o_ai __vector float
vec_insert(float __scalar, __vector float __vec, int __index) {
- __vec[__index & 1] = __scalar;
+ __vec[__index & 3] = __scalar;
return __vec;
}
#endif
diff --git a/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c b/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c
index c1ef178fcfaa9..9809afbab1a61 100644
--- a/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c
+++ b/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c
@@ -67,7 +67,7 @@ int cc;
void test_core(void) {
// CHECK-ASM-LABEL: test_core
- vector float vf2;
+ vector float vf2, vf3;
vector double vd2;
f = vec_extract(vf, 0);
@@ -86,7 +86,10 @@ void test_core(void) {
vf2 = vf;
vf = vec_insert(f, vf2, 0);
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
- // CHECK-ASM: vlef
+ // CHECK-ASM: vlef %{{.*}}, 0(%{{.*}}), 0
+ vf = vec_insert(f, vf2, 3);
+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 3
+ // CHECK-ASM: vlef %{{.*}}, 0(%{{.*}}), 3
vf = vec_insert(0.0f, vf, 1);
// CHECK: insertelement <4 x float> %{{.*}}, float 0.000000e+00, i64 1
// CHECK-ASM: vleif %{{.*}}, 0, 1
More information about the cfe-commits
mailing list