[clang] [Clang] Honor -flax-vector-conversions=none on some tests (PR #153433)
Mikołaj Piróg via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 14 03:38:01 PDT 2025
https://github.com/mikolaj-pirog updated https://github.com/llvm/llvm-project/pull/153433
>From b5f04e72dcb0e8a043ee3e345545ef8888891182 Mon Sep 17 00:00:00 2001
From: "Pirog, Mikolaj Maciej" <mikolaj.maciej.pirog at intel.com>
Date: Wed, 13 Aug 2025 17:27:16 +0200
Subject: [PATCH 1/3] Honor -flax-vector-conversions=none
---
clang/test/AST/ByteCode/vectors.cpp | 9 ++-------
clang/test/CodeGen/2007-01-20-VectorICE.c | 6 +++---
clang/test/CodeGen/palignr.c | 12 ++++++------
3 files changed, 11 insertions(+), 16 deletions(-)
diff --git a/clang/test/AST/ByteCode/vectors.cpp b/clang/test/AST/ByteCode/vectors.cpp
index a04b678a623a1..4e359b0f8cee8 100644
--- a/clang/test/AST/ByteCode/vectors.cpp
+++ b/clang/test/AST/ByteCode/vectors.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=expected,both %s
-// RUN: %clang_cc1 -verify=ref,both %s
+// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=expected,both -flax-vector-conversions=none %s
+// RUN: %clang_cc1 -verify=ref,both -flax-vector-conversions=none %s
typedef int __attribute__((vector_size(16))) VI4;
constexpr VI4 A = {1,2,3,4};
@@ -56,11 +56,6 @@ namespace Vector {
static_assert(__builtin_vectorelements(v2) == (32 / sizeof(double)), "");
}
-namespace {
- typedef float __attribute__((vector_size(16))) VI42;
- constexpr VI42 A2 = A;
-}
-
namespace BoolToSignedIntegralCast{
typedef __attribute__((__ext_vector_type__(4))) unsigned int int4;
constexpr int4 intsT = (int4)true;
diff --git a/clang/test/CodeGen/2007-01-20-VectorICE.c b/clang/test/CodeGen/2007-01-20-VectorICE.c
index 286b8a1b3de08..15790c1726660 100644
--- a/clang/test/CodeGen/2007-01-20-VectorICE.c
+++ b/clang/test/CodeGen/2007-01-20-VectorICE.c
@@ -1,11 +1,11 @@
-// RUN: %clang_cc1 %s -emit-llvm -o -
+// RUN: %clang_cc1 %s -emit-llvm -flax-vector-conversions=none -o -
typedef float __m128 __attribute__((__vector_size__(16)));
typedef long long __v2di __attribute__((__vector_size__(16)));
typedef int __v4si __attribute__((__vector_size__(16)));
-__v2di bar(void);
+__v2di bar(void);
void foo(int X, __v4si *P) {
- *P = X == 2 ? bar() : bar();
+ *P = X == 2 ? (__v4si)(bar()) : (__v4si)(bar());
}
diff --git a/clang/test/CodeGen/palignr.c b/clang/test/CodeGen/palignr.c
index 092937ac115de..fa6e880c9d4ff 100644
--- a/clang/test/CodeGen/palignr.c
+++ b/clang/test/CodeGen/palignr.c
@@ -1,16 +1,16 @@
// REQUIRES: x86-registered-target
-// RUN: %clang_cc1 %s -triple=i686-apple-darwin -target-feature +ssse3 -O1 -S -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple=i686-apple-darwin -target-feature +ssse3 -O1 -S -flax-vector-conversions=none -o - | FileCheck %s
#define _mm_alignr_epi8(a, b, n) (__builtin_ia32_palignr128((a), (b), (n)))
-typedef __attribute__((vector_size(16))) int int4;
+typedef long long __m128i __attribute__((__vector_size__(16), __aligned__(16)));
// CHECK: palignr $15, %xmm1, %xmm0
-int4 align1(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 15); }
+__m128i align1(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 15); }
// CHECK: ret
// CHECK: ret
// CHECK-NOT: palignr
-int4 align2(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 16); }
+__m128i align2(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 16); }
// CHECK: psrldq $1, %xmm0
-int4 align3(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 17); }
+__m128i align3(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 17); }
// CHECK: xor
-int4 align4(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 32); }
+__m128i align4(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 32); }
>From a6937ac36f98abbec2e74261cc316281358c76a0 Mon Sep 17 00:00:00 2001
From: "Pirog, Mikolaj Maciej" <mikolaj.maciej.pirog at intel.com>
Date: Wed, 13 Aug 2025 17:41:52 +0200
Subject: [PATCH 2/3] fix test
---
clang/test/CodeGen/palignr.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/clang/test/CodeGen/palignr.c b/clang/test/CodeGen/palignr.c
index fa6e880c9d4ff..9b80cf992cd1b 100644
--- a/clang/test/CodeGen/palignr.c
+++ b/clang/test/CodeGen/palignr.c
@@ -2,15 +2,15 @@
// RUN: %clang_cc1 %s -triple=i686-apple-darwin -target-feature +ssse3 -O1 -S -flax-vector-conversions=none -o - | FileCheck %s
#define _mm_alignr_epi8(a, b, n) (__builtin_ia32_palignr128((a), (b), (n)))
-typedef long long __m128i __attribute__((__vector_size__(16), __aligned__(16)));
+typedef char __v16qi __attribute__((__vector_size__(16)));
// CHECK: palignr $15, %xmm1, %xmm0
-__m128i align1(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 15); }
+__v16qi align1(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 15); }
// CHECK: ret
// CHECK: ret
// CHECK-NOT: palignr
-__m128i align2(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 16); }
+__v16qi align2(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 16); }
// CHECK: psrldq $1, %xmm0
-__m128i align3(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 17); }
+__v16qi align3(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 17); }
// CHECK: xor
-__m128i align4(__m128i a, __m128i b) { return _mm_alignr_epi8(a, b, 32); }
+__v16qi align4(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 32); }
>From 6755044eb316560c924ddd1e0468bce5a832b1fb Mon Sep 17 00:00:00 2001
From: "Pirog, Mikolaj Maciej" <mikolaj.maciej.pirog at intel.com>
Date: Thu, 14 Aug 2025 12:35:58 +0200
Subject: [PATCH 3/3] Reviewer suggestions
---
clang/test/AST/ByteCode/vectors.cpp | 5 +++++
clang/test/CodeGen/2007-01-20-VectorICE.c | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/clang/test/AST/ByteCode/vectors.cpp b/clang/test/AST/ByteCode/vectors.cpp
index 4e359b0f8cee8..091caf8c9a275 100644
--- a/clang/test/AST/ByteCode/vectors.cpp
+++ b/clang/test/AST/ByteCode/vectors.cpp
@@ -56,6 +56,11 @@ namespace Vector {
static_assert(__builtin_vectorelements(v2) == (32 / sizeof(double)), "");
}
+namespace {
+ typedef float __attribute__((vector_size(16))) VI42;
+ constexpr VI42 A2 = {1.f, 2.f, 3.f, 4.f};
+}
+
namespace BoolToSignedIntegralCast{
typedef __attribute__((__ext_vector_type__(4))) unsigned int int4;
constexpr int4 intsT = (int4)true;
diff --git a/clang/test/CodeGen/2007-01-20-VectorICE.c b/clang/test/CodeGen/2007-01-20-VectorICE.c
index 15790c1726660..61013ac467692 100644
--- a/clang/test/CodeGen/2007-01-20-VectorICE.c
+++ b/clang/test/CodeGen/2007-01-20-VectorICE.c
@@ -6,6 +6,6 @@ typedef int __v4si __attribute__((__vector_size__(16)));
__v2di bar(void);
void foo(int X, __v4si *P) {
- *P = X == 2 ? (__v4si)(bar()) : (__v4si)(bar());
+ *P = X == 2 ? (__v4si)bar() : (__v4si)bar();
}
More information about the cfe-commits
mailing list