From 3949c2de79813231492e631cfd3680198d146fe9 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Wed, 20 Apr 2022 12:05:05 +0100 Subject: [PATCH] [X86][SSE] Add i386 test coverage to sse2 intrinsic tests --- .../X86/sse2-builtins-constrained-cmp.c | 13 +---- clang/test/CodeGen/X86/sse2-builtins.c | 55 ++++++++----------- 2 files changed, 25 insertions(+), 43 deletions(-) diff --git a/clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c b/clang/test/CodeGen/X86/sse2-builtins-constrained-cmp.c index 95384a13605b..f430bba9d06e 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 @@ -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 742c3f80962d..50a8443e2cc2 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 @@ -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(); }