[clang] 3949c2d - [X86][SSE] Add i386 test coverage to sse2 intrinsic tests
Simon Pilgrim via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 20 04:05:16 PDT 2022
Author: Simon Pilgrim
Date: 2022-04-20T12:05:10+01:00
New Revision: 3949c2de79813231492e631cfd3680198d146fe9
URL: https://github.com/llvm/llvm-project/commit/3949c2de79813231492e631cfd3680198d146fe9
DIFF: https://github.com/llvm/llvm-project/commit/3949c2de79813231492e631cfd3680198d146fe9.diff
LOG: [X86][SSE] Add i386 test coverage to sse2 intrinsic tests
Added:
Modified:
clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c
clang/test/CodeGen/X86/sse2-builtins.c
Removed:
################################################################################
diff --git a/clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c b/clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c
index 95384a13605b4..f430bba9d06e8 100644
--- a/clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c
+++ b/clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
+// RUN: %clang_cc1 -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -emit-llvm -ffp-exception-behavior=strict -o - -Wall -Werror | FileCheck %s
#include <immintrin.h>
@@ -8,7 +9,6 @@ __m128d test_mm_cmpeq_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"oeq", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpeq_pd(A, B);
}
@@ -17,7 +17,6 @@ __m128d test_mm_cmpge_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"ole", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpge_pd(A, B);
}
@@ -26,7 +25,6 @@ __m128d test_mm_cmpgt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"olt", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpgt_pd(A, B);
}
@@ -35,7 +33,6 @@ __m128d test_mm_cmple_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"ole", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmple_pd(A, B);
}
@@ -44,7 +41,6 @@ __m128d test_mm_cmplt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"olt", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmplt_pd(A, B);
}
@@ -53,7 +49,6 @@ __m128d test_mm_cmpneq_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"une", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpneq_pd(A, B);
}
@@ -62,7 +57,6 @@ __m128d test_mm_cmpnge_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"ugt", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpnge_pd(A, B);
}
@@ -71,7 +65,6 @@ __m128d test_mm_cmpngt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"uge", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpngt_pd(A, B);
}
@@ -80,7 +73,6 @@ __m128d test_mm_cmpnle_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"ugt", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpnle_pd(A, B);
}
@@ -89,7 +81,6 @@ __m128d test_mm_cmpnlt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"uge", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpnlt_pd(A, B);
}
@@ -98,7 +89,6 @@ __m128d test_mm_cmpord_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"ord", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpord_pd(A, B);
}
@@ -107,6 +97,5 @@ __m128d test_mm_cmpunord_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !"uno", metadata !"fpexcept.strict")
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpunord_pd(A, B);
}
diff --git a/clang/test/CodeGen/X86/sse2-builtins.c b/clang/test/CodeGen/X86/sse2-builtins.c
index 742c3f80962d5..50a8443e2cc2d 100644
--- a/clang/test/CodeGen/X86/sse2-builtins.c
+++ b/clang/test/CodeGen/X86/sse2-builtins.c
@@ -1,6 +1,8 @@
-// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s
-// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s
-// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s
+// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X64
+// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X64
+// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86
+// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86
+// RUN: %clang_cc1 -no-opaque-pointers -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X64
#include <immintrin.h>
@@ -187,7 +189,6 @@ __m128d test_mm_cmpeq_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp oeq <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpeq_pd(A, B);
}
@@ -202,7 +203,6 @@ __m128d test_mm_cmpge_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp ole <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpge_pd(A, B);
}
@@ -239,7 +239,6 @@ __m128d test_mm_cmpgt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp olt <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpgt_pd(A, B);
}
@@ -258,7 +257,6 @@ __m128d test_mm_cmple_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp ole <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmple_pd(A, B);
}
@@ -291,7 +289,6 @@ __m128d test_mm_cmplt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp olt <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmplt_pd(A, B);
}
@@ -306,7 +303,6 @@ __m128d test_mm_cmpneq_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp une <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpneq_pd(A, B);
}
@@ -321,7 +317,6 @@ __m128d test_mm_cmpnge_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp ugt <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpnge_pd(A, B);
}
@@ -340,7 +335,6 @@ __m128d test_mm_cmpngt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp uge <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpngt_pd(A, B);
}
@@ -359,7 +353,6 @@ __m128d test_mm_cmpnle_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp ugt <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpnle_pd(A, B);
}
@@ -374,7 +367,6 @@ __m128d test_mm_cmpnlt_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp uge <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpnlt_pd(A, B);
}
@@ -389,7 +381,6 @@ __m128d test_mm_cmpord_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp ord <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpord_pd(A, B);
}
@@ -404,7 +395,6 @@ __m128d test_mm_cmpunord_pd(__m128d A, __m128d B) {
// CHECK: [[CMP:%.*]] = fcmp uno <2 x double>
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
- // CHECK-NEXT: ret <2 x double> [[BC]]
return _mm_cmpunord_pd(A, B);
}
@@ -502,8 +492,8 @@ int test_mm_cvtsd_si32(__m128d A) {
#ifdef __x86_64__
long long test_mm_cvtsd_si64(__m128d A) {
- // CHECK-LABEL: test_mm_cvtsd_si64
- // CHECK: call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %{{.*}})
+ // X64-LABEL: test_mm_cvtsd_si64
+ // X64: call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %{{.*}})
return _mm_cvtsd_si64(A);
}
#endif
@@ -522,8 +512,8 @@ int test_mm_cvtsi128_si32(__m128i A) {
#ifdef __x86_64__
long long test_mm_cvtsi128_si64(__m128i A) {
- // CHECK-LABEL: test_mm_cvtsi128_si64
- // CHECK: extractelement <2 x i64> %{{.*}}, i32 0
+ // X64-LABEL: test_mm_cvtsi128_si64
+ // X64: extractelement <2 x i64> %{{.*}}, i32 0
return _mm_cvtsi128_si64(A);
}
#endif
@@ -546,16 +536,16 @@ __m128i test_mm_cvtsi32_si128(int A) {
#ifdef __x86_64__
__m128d test_mm_cvtsi64_sd(__m128d A, long long B) {
- // CHECK-LABEL: test_mm_cvtsi64_sd
- // CHECK: sitofp i64 %{{.*}} to double
- // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
+ // X64-LABEL: test_mm_cvtsi64_sd
+ // X64: sitofp i64 %{{.*}} to double
+ // X64: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
return _mm_cvtsi64_sd(A, B);
}
__m128i test_mm_cvtsi64_si128(long long A) {
- // CHECK-LABEL: test_mm_cvtsi64_si128
- // CHECK: insertelement <2 x i64> undef, i64 %{{.*}}, i32 0
- // CHECK: insertelement <2 x i64> %{{.*}}, i64 0, i32 1
+ // X64-LABEL: test_mm_cvtsi64_si128
+ // X64: insertelement <2 x i64> undef, i64 %{{.*}}, i32 0
+ // X64: insertelement <2 x i64> %{{.*}}, i64 0, i32 1
return _mm_cvtsi64_si128(A);
}
#endif
@@ -588,8 +578,8 @@ int test_mm_cvttsd_si32(__m128d A) {
#ifdef __x86_64__
long long test_mm_cvttsd_si64(__m128d A) {
- // CHECK-LABEL: test_mm_cvttsd_si64
- // CHECK: call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %{{.*}})
+ // X64-LABEL: test_mm_cvttsd_si64
+ // X64: call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %{{.*}})
return _mm_cvttsd_si64(A);
}
#endif
@@ -1515,8 +1505,8 @@ void test_mm_stream_si32(int *A, int B) {
#ifdef __x86_64__
void test_mm_stream_si64(long long *A, long long B) {
- // CHECK-LABEL: test_mm_stream_si64
- // CHECK: store i64 %{{.*}}, i64* %{{.*}}, align 1, !nontemporal
+ // X64-LABEL: test_mm_stream_si64
+ // X64: store i64 %{{.*}}, i64* %{{.*}}, align 1, !nontemporal
_mm_stream_si64(A, B);
}
#endif
@@ -1629,8 +1619,11 @@ int test_mm_ucomineq_sd(__m128d A, __m128d B) {
}
__m128d test_mm_undefined_pd(void) {
- // CHECK-LABEL: test_mm_undefined_pd
- // CHECK: ret <2 x double> zeroinitializer
+ // X64-LABEL: test_mm_undefined_pd
+ // X64: ret <2 x double> zeroinitializer
+ //
+ // X86-LABEL: test_mm_undefined_pd
+ // X86: store <2 x double> zeroinitializer
return _mm_undefined_pd();
}
More information about the cfe-commits
mailing list