From bfa0aaf37f8d68cb7fb63eff5c825724c3829d09 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Fri, 28 Feb 2020 16:54:45 +0000 Subject: [PATCH] [AVX512] Add strict-fp cvtph2ps constrained tests As suggested on D75162 --- clang/test/CodeGen/avx512f-builtins-constrained.c | 64 ++++++++++++++++++ clang/test/CodeGen/avx512f-builtins.c | 7 ++ clang/test/CodeGen/avx512vl-builtins-constrained.c | 79 ++++++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 clang/test/CodeGen/avx512vl-builtins-constrained.c diff --git a/clang/test/CodeGen/avx512f-builtins-constrained.c b/clang/test/CodeGen/avx512f-builtins-constrained.c index f4a9697..dcddd24 100644 --- a/clang/test/CodeGen/avx512f-builtins-constrained.c +++ b/clang/test/CodeGen/avx512f-builtins-constrained.c @@ -70,6 +70,48 @@ __m512 test_mm512_maskz_sqrt_ps( __mmask16 __U, __m512 __A) return _mm512_maskz_sqrt_ps(__U ,__A); } +__m256i test_mm512_cvt_roundps_ph(__m512 __A) +{ + // COMMON-LABEL: test_mm512_cvt_roundps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.512 + return _mm512_cvt_roundps_ph(__A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); +} + +__m256i test_mm512_mask_cvt_roundps_ph(__m256i __W , __mmask16 __U, __m512 __A) +{ + // COMMON-LABEL: test_mm512_mask_cvt_roundps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.512 + return _mm512_mask_cvt_roundps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); +} + +__m256i test_mm512_maskz_cvt_roundps_ph(__mmask16 __U, __m512 __A) +{ + // COMMON-LABEL: test_mm512_maskz_cvt_roundps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.512 + return _mm512_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); +} + +__m512 test_mm512_cvt_roundph_ps(__m256i __A) +{ + // COMMON-LABEL: test_mm512_cvt_roundph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_cvt_roundph_ps(__A, _MM_FROUND_NO_EXC); +} + +__m512 test_mm512_mask_cvt_roundph_ps(__m512 __W, __mmask16 __U, __m256i __A) +{ + // COMMON-LABEL: test_mm512_mask_cvt_roundph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_mask_cvt_roundph_ps(__W, __U, __A, _MM_FROUND_NO_EXC); +} + +__m512 test_mm512_maskz_cvt_roundph_ps(__mmask16 __U, __m256i __A) +{ + // COMMON-LABEL: test_mm512_maskz_cvt_roundph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_maskz_cvt_roundph_ps(__U, __A, _MM_FROUND_NO_EXC); +} + __m128d test_mm_mask_sqrt_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){ // COMMON-LABEL: test_mm_mask_sqrt_sd // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0 @@ -125,3 +167,25 @@ __m128 test_mm_maskz_sqrt_ss(__mmask8 __U, __m128 __A, __m128 __B){ // COMMONIR-NEXT: insertelement <4 x float> %{{.*}}, float {{.*}}, i64 0 return _mm_maskz_sqrt_ss(__U,__A,__B); } + +__m512 test_mm512_cvtph_ps (__m256i __A) +{ + // COMMON-LABEL: test_mm512_cvtph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_cvtph_ps (__A); +} + +__m512 test_mm512_mask_cvtph_ps (__m512 __W, __mmask16 __U, __m256i __A) +{ + // COMMON-LABEL: test_mm512_mask_cvtph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_mask_cvtph_ps (__W,__U,__A); +} + +__m512 test_mm512_maskz_cvtph_ps (__mmask16 __U, __m256i __A) +{ + // COMMON-LABEL: test_mm512_maskz_cvtph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_maskz_cvtph_ps (__U,__A); +} + diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index bd15424..390ea14f 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -9460,6 +9460,13 @@ __m256 test_mm512_maskz_cvtpd_ps (__mmask8 __U, __m512d __A) return _mm512_maskz_cvtpd_ps (__U,__A); } +__m512 test_mm512_cvtph_ps (__m256i __A) +{ + // CHECK-LABEL: @test_mm512_cvtph_ps + // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_cvtph_ps (__A); +} + __m512 test_mm512_mask_cvtph_ps (__m512 __W, __mmask16 __U, __m256i __A) { // CHECK-LABEL: @test_mm512_mask_cvtph_ps diff --git a/clang/test/CodeGen/avx512vl-builtins-constrained.c b/clang/test/CodeGen/avx512vl-builtins-constrained.c new file mode 100644 index 0000000..0e2aa4e --- /dev/null +++ b/clang/test/CodeGen/avx512vl-builtins-constrained.c @@ -0,0 +1,79 @@ +// REQUIRES: x86-registered-target +// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s +// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s +// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -target-feature +avx512vl -ffp-exception-behavior=strict -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s +// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -fms-compatibility -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -target-feature +avx512vl -ffp-exception-behavior=strict -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s + +#include + +__m128 test_mm_mask_cvtph_ps(__m128 __W, __mmask8 __U, __m128i __A) { + // COMMON-LABEL: @test_mm_mask_cvtph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.128 + return _mm_mask_cvtph_ps(__W, __U, __A); +} + +__m128 test_mm_maskz_cvtph_ps(__mmask8 __U, __m128i __A) { + // COMMON-LABEL: @test_mm_maskz_cvtph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.128 + return _mm_maskz_cvtph_ps(__U, __A); +} + +__m256 test_mm256_mask_cvtph_ps(__m256 __W, __mmask8 __U, __m128i __A) { + // COMMON-LABEL: @test_mm256_mask_cvtph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.256 + return _mm256_mask_cvtph_ps(__W, __U, __A); +} + +__m256 test_mm256_maskz_cvtph_ps(__mmask8 __U, __m128i __A) { + // COMMON-LABEL: @test_mm256_maskz_cvtph_ps + // COMMONIR: @llvm.x86.avx512.mask.vcvtph2ps.256 + return _mm256_maskz_cvtph_ps(__U, __A); +} + +__m128i test_mm_mask_cvtps_ph(__m128i __W, __mmask8 __U, __m128 __A) { + // COMMON-LABEL: @test_mm_mask_cvtps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.128 + return _mm_mask_cvtps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); +} + +__m128i test_mm_maskz_cvtps_ph(__mmask8 __U, __m128 __A) { + // COMMON-LABEL: @test_mm_maskz_cvtps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.128 + return _mm_maskz_cvtps_ph(__U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); +} + +__m128i test_mm256_mask_cvtps_ph(__m128i __W, __mmask8 __U, __m256 __A) { + // COMMON-LABEL: @test_mm256_mask_cvtps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.256 + return _mm256_mask_cvtps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); +} + +__m128i test_mm256_maskz_cvtps_ph(__mmask8 __U, __m256 __A) { + // COMMON-LABEL: @test_mm256_maskz_cvtps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.256 + return _mm256_maskz_cvtps_ph(__U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); +} + +__m128i test_mm_mask_cvt_roundps_ph(__m128i __W, __mmask8 __U, __m128 __A) { + // COMMON-LABEL: @test_mm_mask_cvt_roundps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.128 + return _mm_mask_cvt_roundps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO); +} + +__m128i test_mm_maskz_cvt_roundps_ph(__mmask8 __U, __m128 __A) { + // COMMON-LABEL: @test_mm_maskz_cvt_roundps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.128 + return _mm_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_TO_ZERO); +} + +__m128i test_mm256_mask_cvt_roundps_ph(__m128i __W, __mmask8 __U, __m256 __A) { + // COMMON-LABEL: @test_mm256_mask_cvt_roundps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.256 + return _mm256_mask_cvt_roundps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO); +} + +__m128i test_mm256_maskz_cvt_roundps_ph(__mmask8 __U, __m256 __A) { + // COMMON-LABEL: @test_mm256_maskz_cvt_roundps_ph + // COMMONIR: @llvm.x86.avx512.mask.vcvtps2ph.256 + return _mm256_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_TO_ZERO); +} -- 2.7.4