forked from OSchip/llvm-project
[X86][SSE] Add i386 test coverage to sse2 intrinsic tests
This commit is contained in:
parent
b7df71524e
commit
3949c2de79
|
@ -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=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>
|
#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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
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: [[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: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
||||||
// CHECK-NEXT: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
// 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);
|
return _mm_cmpunord_pd(A, B);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 -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
|
// 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 -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=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>
|
#include <immintrin.h>
|
||||||
|
@ -187,7 +189,6 @@ __m128d test_mm_cmpeq_pd(__m128d A, __m128d B) {
|
||||||
// CHECK: [[CMP:%.*]] = fcmp oeq <2 x double>
|
// CHECK: [[CMP:%.*]] = fcmp oeq <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpeq_pd(A, B);
|
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: [[CMP:%.*]] = fcmp ole <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpge_pd(A, B);
|
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: [[CMP:%.*]] = fcmp olt <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpgt_pd(A, B);
|
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: [[CMP:%.*]] = fcmp ole <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmple_pd(A, B);
|
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: [[CMP:%.*]] = fcmp olt <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmplt_pd(A, B);
|
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: [[CMP:%.*]] = fcmp une <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpneq_pd(A, B);
|
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: [[CMP:%.*]] = fcmp ugt <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpnge_pd(A, B);
|
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: [[CMP:%.*]] = fcmp uge <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpngt_pd(A, B);
|
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: [[CMP:%.*]] = fcmp ugt <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpnle_pd(A, B);
|
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: [[CMP:%.*]] = fcmp uge <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpnlt_pd(A, B);
|
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: [[CMP:%.*]] = fcmp ord <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpord_pd(A, B);
|
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: [[CMP:%.*]] = fcmp uno <2 x double>
|
||||||
// CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i64>
|
// 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: [[BC:%.*]] = bitcast <2 x i64> [[SEXT]] to <2 x double>
|
||||||
// CHECK-NEXT: ret <2 x double> [[BC]]
|
|
||||||
return _mm_cmpunord_pd(A, B);
|
return _mm_cmpunord_pd(A, B);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,8 +492,8 @@ int test_mm_cvtsd_si32(__m128d A) {
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
long long test_mm_cvtsd_si64(__m128d A) {
|
long long test_mm_cvtsd_si64(__m128d A) {
|
||||||
// CHECK-LABEL: test_mm_cvtsd_si64
|
// X64-LABEL: test_mm_cvtsd_si64
|
||||||
// CHECK: call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %{{.*}})
|
// X64: call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %{{.*}})
|
||||||
return _mm_cvtsd_si64(A);
|
return _mm_cvtsd_si64(A);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -522,8 +512,8 @@ int test_mm_cvtsi128_si32(__m128i A) {
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
long long test_mm_cvtsi128_si64(__m128i A) {
|
long long test_mm_cvtsi128_si64(__m128i A) {
|
||||||
// CHECK-LABEL: test_mm_cvtsi128_si64
|
// X64-LABEL: test_mm_cvtsi128_si64
|
||||||
// CHECK: extractelement <2 x i64> %{{.*}}, i32 0
|
// X64: extractelement <2 x i64> %{{.*}}, i32 0
|
||||||
return _mm_cvtsi128_si64(A);
|
return _mm_cvtsi128_si64(A);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -546,16 +536,16 @@ __m128i test_mm_cvtsi32_si128(int A) {
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
__m128d test_mm_cvtsi64_sd(__m128d A, long long B) {
|
__m128d test_mm_cvtsi64_sd(__m128d A, long long B) {
|
||||||
// CHECK-LABEL: test_mm_cvtsi64_sd
|
// X64-LABEL: test_mm_cvtsi64_sd
|
||||||
// CHECK: sitofp i64 %{{.*}} to double
|
// X64: sitofp i64 %{{.*}} to double
|
||||||
// CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
|
// X64: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
|
||||||
return _mm_cvtsi64_sd(A, B);
|
return _mm_cvtsi64_sd(A, B);
|
||||||
}
|
}
|
||||||
|
|
||||||
__m128i test_mm_cvtsi64_si128(long long A) {
|
__m128i test_mm_cvtsi64_si128(long long A) {
|
||||||
// CHECK-LABEL: test_mm_cvtsi64_si128
|
// X64-LABEL: test_mm_cvtsi64_si128
|
||||||
// CHECK: insertelement <2 x i64> undef, i64 %{{.*}}, i32 0
|
// X64: insertelement <2 x i64> undef, i64 %{{.*}}, i32 0
|
||||||
// CHECK: insertelement <2 x i64> %{{.*}}, i64 0, i32 1
|
// X64: insertelement <2 x i64> %{{.*}}, i64 0, i32 1
|
||||||
return _mm_cvtsi64_si128(A);
|
return _mm_cvtsi64_si128(A);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -588,8 +578,8 @@ int test_mm_cvttsd_si32(__m128d A) {
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
long long test_mm_cvttsd_si64(__m128d A) {
|
long long test_mm_cvttsd_si64(__m128d A) {
|
||||||
// CHECK-LABEL: test_mm_cvttsd_si64
|
// X64-LABEL: test_mm_cvttsd_si64
|
||||||
// CHECK: call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %{{.*}})
|
// X64: call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %{{.*}})
|
||||||
return _mm_cvttsd_si64(A);
|
return _mm_cvttsd_si64(A);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1515,8 +1505,8 @@ void test_mm_stream_si32(int *A, int B) {
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
void test_mm_stream_si64(long long *A, long long B) {
|
void test_mm_stream_si64(long long *A, long long B) {
|
||||||
// CHECK-LABEL: test_mm_stream_si64
|
// X64-LABEL: test_mm_stream_si64
|
||||||
// CHECK: store i64 %{{.*}}, i64* %{{.*}}, align 1, !nontemporal
|
// X64: store i64 %{{.*}}, i64* %{{.*}}, align 1, !nontemporal
|
||||||
_mm_stream_si64(A, B);
|
_mm_stream_si64(A, B);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1629,8 +1619,11 @@ int test_mm_ucomineq_sd(__m128d A, __m128d B) {
|
||||||
}
|
}
|
||||||
|
|
||||||
__m128d test_mm_undefined_pd(void) {
|
__m128d test_mm_undefined_pd(void) {
|
||||||
// CHECK-LABEL: test_mm_undefined_pd
|
// X64-LABEL: test_mm_undefined_pd
|
||||||
// CHECK: ret <2 x double> zeroinitializer
|
// X64: ret <2 x double> zeroinitializer
|
||||||
|
//
|
||||||
|
// X86-LABEL: test_mm_undefined_pd
|
||||||
|
// X86: store <2 x double> zeroinitializer
|
||||||
return _mm_undefined_pd();
|
return _mm_undefined_pd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue