| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,303 @@ | ||
| /*===----- avx10_2_512satcvtdsintrin.h - AVX10_2_512SATCVTDS intrinsics ----=== | ||
| * | ||
| * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
| * See https://llvm.org/LICENSE.txt for license information. | ||
| * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| * | ||
| *===-----------------------------------------------------------------------=== | ||
| */ | ||
| #ifndef __IMMINTRIN_H | ||
| #error \ | ||
| "Never use <avx10_2_512satcvtdsintrin.h> directly; include <immintrin.h> instead." | ||
| #endif | ||
|
|
||
| #ifndef __AVX10_2_512SATCVTDSINTRIN_H | ||
| #define __AVX10_2_512SATCVTDSINTRIN_H | ||
|
|
||
| /* Define the default attributes for the functions in this file. */ | ||
| #define __DEFAULT_FN_ATTRS \ | ||
| __attribute__((__always_inline__, __nodebug__, __target__("avx10.2-512"), \ | ||
| __min_vector_width__(512))) | ||
|
|
||
| // 512 bit : Double -> Int | ||
| static __inline__ __m256i __DEFAULT_FN_ATTRS _mm512_cvttspd_epi32(__m512d __A) { | ||
| return ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( | ||
| (__v8df)__A, (__v8si)_mm256_undefined_si256(), (__mmask8)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m256i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttspd_epi32(__m256i __W, __mmask8 __U, __m512d __A) { | ||
| return ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( | ||
| (__v8df)__A, (__v8si)__W, __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m256i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttspd_epi32(__mmask8 __U, __m512d __A) { | ||
| return ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( | ||
| (__v8df)__A, (__v8si)_mm256_setzero_si256(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundpd_epi32(__A, __R) \ | ||
| ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8si)_mm256_undefined_si256(), \ | ||
| (__mmask8) - 1, (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundpd_epi32(__W, __U, __A, __R) \ | ||
| ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8si)(__m256i)(__W), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundpd_epi32(__U, __A, __R) \ | ||
| ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8si)_mm256_setzero_si256(), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| // 512 bit : Double -> uInt | ||
| static __inline__ __m256i __DEFAULT_FN_ATTRS _mm512_cvttspd_epu32(__m512d __A) { | ||
| return ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( | ||
| (__v8df)__A, (__v8si)_mm256_undefined_si256(), (__mmask8)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m256i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttspd_epu32(__m256i __W, __mmask8 __U, __m512d __A) { | ||
| return ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( | ||
| (__v8df)__A, (__v8si)__W, __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m256i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttspd_epu32(__mmask8 __U, __m512d __A) { | ||
| return ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( | ||
| (__v8df)__A, (__v8si)_mm256_setzero_si256(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundpd_epu32(__A, __R) \ | ||
| ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8si)_mm256_undefined_si256(), \ | ||
| (__mmask8) - 1, (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundpd_epu32(__W, __U, __A, __R) \ | ||
| ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8si)(__m256i)(__W), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundpd_epu32(__U, __A, __R) \ | ||
| ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8si)_mm256_setzero_si256(), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| // 512 bit : Double -> Long | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvttspd_epi64(__m512d __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( | ||
| (__v8df)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttspd_epi64(__m512i __W, __mmask8 __U, __m512d __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( | ||
| (__v8df)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttspd_epi64(__mmask8 __U, __m512d __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( | ||
| (__v8df)__A, (__v8di)_mm512_setzero_si512(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundpd_epi64(__A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8di)_mm512_undefined_epi32(), \ | ||
| (__mmask8) - 1, (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundpd_epi64(__W, __U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundpd_epi64(__U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| // 512 bit : Double -> ULong | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvttspd_epu64(__m512d __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( | ||
| (__v8df)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttspd_epu64(__m512i __W, __mmask8 __U, __m512d __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( | ||
| (__v8df)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttspd_epu64(__mmask8 __U, __m512d __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( | ||
| (__v8df)__A, (__v8di)_mm512_setzero_si512(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundpd_epu64(__A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8di)_mm512_undefined_epi32(), \ | ||
| (__mmask8) - 1, (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundpd_epu64(__W, __U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundpd_epu64(__U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( \ | ||
| (__v8df)(__m512d)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| // 512 bit: Float -> int | ||
| static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvttsps_epi32(__m512 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( | ||
| (__v16sf)(__A), (__v16si)_mm512_undefined_epi32(), (__mmask16)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttsps_epi32(__m512i __W, __mmask16 __U, __m512 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( | ||
| (__v16sf)(__A), (__v16si)(__W), __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttsps_epi32(__mmask16 __U, __m512 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( | ||
| (__v16sf)(__A), (__v16si)_mm512_setzero_si512(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundps_epi32(__A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( \ | ||
| (__v16sf)(__m512)(__A), (__v16si)_mm512_undefined_epi32(), \ | ||
| (__mmask16) - 1, (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundps_epi32(__W, __U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( \ | ||
| (__v16sf)(__m512)(__A), (__v16si)(__m512i)(__W), (__mmask16)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundps_epi32(__U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( \ | ||
| (__v16sf)(__m512)(__A), (__v16si)_mm512_setzero_si512(), \ | ||
| (__mmask16)(__U), (const int)(__R))) | ||
|
|
||
| // 512 bit: Float -> uint | ||
| static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvttsps_epu32(__m512 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( | ||
| (__v16sf)(__A), (__v16si)_mm512_undefined_epi32(), (__mmask16)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttsps_epu32(__m512i __W, __mmask16 __U, __m512 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( | ||
| (__v16sf)(__A), (__v16si)(__W), __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttsps_epu32(__mmask16 __U, __m512 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( | ||
| (__v16sf)(__A), (__v16si)_mm512_setzero_si512(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundps_epu32(__A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( \ | ||
| (__v16sf)(__m512)(__A), (__v16si)_mm512_undefined_epi32(), \ | ||
| (__mmask16) - 1, (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundps_epu32(__W, __U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( \ | ||
| (__v16sf)(__m512)(__A), (__v16si)(__m512i)(__W), (__mmask16)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundps_epu32(__U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( \ | ||
| (__v16sf)(__m512)(__A), (__v16si)_mm512_setzero_si512(), \ | ||
| (__mmask16)(__U), (const int)(__R))) | ||
|
|
||
| // 512 bit : float -> long | ||
| static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvttsps_epi64(__m256 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( | ||
| (__v8sf)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttsps_epi64(__m512i __W, __mmask8 __U, __m256 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( | ||
| (__v8sf)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttsps_epi64(__mmask8 __U, __m256 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( | ||
| (__v8sf)__A, (__v8di)_mm512_setzero_si512(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundps_epi64(__A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( \ | ||
| (__v8sf)(__m256)(__A), (__v8di)_mm512_undefined_epi32(), (__mmask8) - 1, \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundps_epi64(__W, __U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( \ | ||
| (__v8sf)(__m256)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundps_epi64(__U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( \ | ||
| (__v8sf)(__m256)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| // 512 bit : float -> ulong | ||
| static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvttsps_epu64(__m256 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( | ||
| (__v8sf)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_mask_cvttsps_epu64(__m512i __W, __mmask8 __U, __m256 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( | ||
| (__v8sf)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| static __inline__ __m512i __DEFAULT_FN_ATTRS | ||
| _mm512_maskz_cvttsps_epu64(__mmask8 __U, __m256 __A) { | ||
| return ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( | ||
| (__v8sf)__A, (__v8di)_mm512_setzero_si512(), __U, | ||
| _MM_FROUND_CUR_DIRECTION)); | ||
| } | ||
|
|
||
| #define _mm512_cvtts_roundps_epu64(__A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( \ | ||
| (__v8sf)(__m256)(__A), (__v8di)_mm512_undefined_epi32(), (__mmask8) - 1, \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_mask_cvtts_roundps_epu64(__W, __U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( \ | ||
| (__v8sf)(__m256)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #define _mm512_maskz_cvtts_roundps_epu64(__U, __A, __R) \ | ||
| ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( \ | ||
| (__v8sf)(__m256)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \ | ||
| (const int)(__R))) | ||
|
|
||
| #undef __DEFAULT_FN_ATTRS | ||
| #endif // __AVX10_2_512SATCVTDSINTRIN_H |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck %s | ||
| // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - -fexperimental-new-constant-interpreter | FileCheck %s | ||
|
|
||
|
|
||
| /// Slightly adapted to the version from test/CodeGenCXX/. | ||
|
|
||
| struct X { int x[12];}; | ||
| struct A : X { char x, y, z; }; | ||
| struct B { char y; }; | ||
| struct C : A,B {}; | ||
| unsigned char x = ((char*)(X*)(C*)0x1000) - (char*)0x1000; | ||
| // CHECK: @x = {{(dso_local )?}}global i8 0 | ||
|
|
||
| unsigned char y = ((char*)(B*)(C*)0x1000) - (char*)0x1000; | ||
| // CHECK: @y = {{(dso_local )?}}global i8 51 | ||
|
|
||
| unsigned char z = ((char*)(A*)(C*)0x1000) - (char*)0x1000; | ||
| // CHECK: @z = {{(dso_local )?}}global i8 0 | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx10.2-512 -emit-llvm -Wall -Werror -verify | ||
|
|
||
| #include <immintrin.h> | ||
| #include <stddef.h> | ||
|
|
||
| __m256i test_mm512_cvtts_roundpd_epi32(__m512d A) { | ||
| return _mm512_cvtts_roundpd_epi32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm512_mask_cvtts_roundpd_epi32(__m256i W, __mmask8 U, __m512d A) { | ||
| return _mm512_mask_cvtts_roundpd_epi32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm512_maskz_cvtts_roundpd_epi32(__mmask8 U, __m512d A) { | ||
| return _mm512_maskz_cvtts_roundpd_epi32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm512_cvtts_roundpd_epu32(__m512d A) { | ||
| return _mm512_cvtts_roundpd_epu32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm512_mask_cvtts_roundpd_epu32(__m256i W, __mmask8 U, __m512d A) { | ||
| return _mm512_mask_cvtts_roundpd_epu32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm512_maskz_cvtts_roundpd_epu32(__mmask8 U, __m512d A) { | ||
| return _mm512_maskz_cvtts_roundpd_epu32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epi32(__m512 A) { | ||
| return _mm512_cvtts_roundps_epi32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epi32(__m512i W, __mmask8 U, __m512 A) { | ||
| return _mm512_mask_cvtts_roundps_epi32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundps_epi32(__mmask8 U, __m512 A) { | ||
| return _mm512_maskz_cvtts_roundps_epi32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epu32(__m512 A) { | ||
| return _mm512_cvtts_roundps_epu32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epu32(__m512i W, __mmask8 U, __m512 A) { | ||
| return _mm512_mask_cvtts_roundps_epu32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundps_epu32(__mmask8 U, __m512 A) { | ||
| return _mm512_maskz_cvtts_roundps_epu32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx10.2-512 -emit-llvm -Wall -Werror -verify | ||
|
|
||
| #include <immintrin.h> | ||
| #include <stddef.h> | ||
|
|
||
| long long test_mm_cvttssd_si64(__m128d __A) { | ||
| return _mm_cvtts_roundsd_si64(__A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| long long test_mm_cvttssd_i64(__m128d __A) { | ||
| return _mm_cvtts_roundsd_i64(__A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| unsigned long long test_mm_cvttssd_u64(__m128d __A) { | ||
| return _mm_cvtts_roundsd_u64(__A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| float test_mm_cvttsss_i64(__m128 __A) { | ||
| return _mm_cvtts_roundss_i64(__A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| long long test_mm_cvttsss_si64(__m128 __A) { | ||
| return _mm_cvtts_roundss_si64(__A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| unsigned long long test_mm_cvttsss_u64(__m128 __A) { | ||
| return _mm_cvtts_roundss_u64(__A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundpd_epi64(__m512d A) { | ||
| return _mm512_cvtts_roundpd_epi64( A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundpd_epi64(__m512i W, __mmask8 U, __m512d A) { | ||
| return _mm512_mask_cvtts_roundpd_epi64( W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundpd_epi64(__mmask8 U, __m512d A) { | ||
| return _mm512_maskz_cvtts_roundpd_epi64( U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundpd_epu64(__m512d A) { | ||
| return _mm512_cvtts_roundpd_epu64( A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundpd_epu64(__m512i W, __mmask8 U, __m512d A) { | ||
| return _mm512_mask_cvtts_roundpd_epu64( W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundpd_epu64(__mmask8 U, __m512d A) { | ||
| return _mm512_maskz_cvtts_roundpd_epu64( U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epi64(__m256 A) { | ||
| return _mm512_cvtts_roundps_epi64( A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epi64(__m512i W, __mmask8 U, __m256 A) { | ||
| return _mm512_mask_cvtts_roundps_epi64( W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundps_epi64(__mmask8 U, __m256 A) { | ||
| return _mm512_maskz_cvtts_roundps_epi64( U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epu64(__m256 A) { | ||
| return _mm512_cvtts_roundps_epu64( A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epu64(__m512i W, __mmask8 U, __m256 A) { | ||
| return _mm512_mask_cvtts_roundps_epu64( W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundps_epu64(__mmask8 U, __m256 A) { | ||
| return _mm512_maskz_cvtts_roundps_epu64( U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,184 @@ | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx10.2-512 -emit-llvm -o - | FileCheck %s | ||
|
|
||
| #include <immintrin.h> | ||
| #include <stddef.h> | ||
|
|
||
| long long test_mm_cvttssd_si64(__m128d __A) { | ||
| // CHECK-LABEL: @test_mm_cvttssd_si64( | ||
| // CHECK: @llvm.x86.avx10.vcvttsd2sis64(<2 x double> | ||
| return _mm_cvtts_roundsd_si64(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| long long test_mm_cvttssd_i64(__m128d __A) { | ||
| // CHECK-LABEL: @test_mm_cvttssd_i64( | ||
| // CHECK: @llvm.x86.avx10.vcvttsd2sis64(<2 x double> | ||
| return _mm_cvtts_roundsd_i64(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| unsigned long long test_mm_cvttssd_u64(__m128d __A) { | ||
| // CHECK-LABEL: @test_mm_cvttssd_u64( | ||
| // CHECK: @llvm.x86.avx10.vcvttsd2usis64(<2 x double> | ||
| return _mm_cvtts_roundsd_u64(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| float test_mm_cvttsss_i64(__m128 __A) { | ||
| // CHECK-LABEL: @test_mm_cvttsss_i64( | ||
| // CHECK: @llvm.x86.avx10.vcvttss2sis64(<4 x float> | ||
| return _mm_cvtts_roundss_i64(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| long long test_mm_cvttsss_si64(__m128 __A) { | ||
| // CHECK-LABEL: @test_mm_cvttsss_si64( | ||
| // CHECK: @llvm.x86.avx10.vcvttss2sis64(<4 x float> | ||
| return _mm_cvtts_roundss_si64(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| unsigned long long test_mm_cvttsss_u64(__m128 __A) { | ||
| // CHECK-LABEL: @test_mm_cvttsss_u64( | ||
| // CHECK: @llvm.x86.avx10.vcvttss2usis64(<4 x float> | ||
| return _mm_cvtts_roundss_u64(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvttspd_epi64(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.512(<8 x double> | ||
| return _mm512_cvttspd_epi64(A); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvttspd_epi64(__m512i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.512(<8 x double> | ||
| return _mm512_mask_cvttspd_epi64(W, U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvttspd_epi64(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvttspd_epi64(U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundpd_epi64(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundpd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.512(<8 x double> | ||
| return _mm512_cvtts_roundpd_epi64(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundpd_epi64(__m512i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundpd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.512(<8 x double> | ||
| return _mm512_mask_cvtts_roundpd_epi64(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundpd_epi64(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundpd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvtts_roundpd_epi64(U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvttspd_epu64(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.512(<8 x double> | ||
| return _mm512_cvttspd_epu64(A); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvttspd_epu64(__m512i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.512(<8 x double> | ||
| return _mm512_mask_cvttspd_epu64(W, U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvttspd_epu64(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvttspd_epu64(U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundpd_epu64(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundpd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.512(<8 x double> | ||
| return _mm512_cvtts_roundpd_epu64(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundpd_epu64(__m512i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundpd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.512(<8 x double> | ||
| return _mm512_mask_cvtts_roundpd_epu64(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundpd_epu64(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundpd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvtts_roundpd_epu64(U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvttsps_epi64(__m256 A) { | ||
| // CHECK-LABEL: test_mm512_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.512(<8 x float> | ||
| return _mm512_cvttsps_epi64(A); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvttsps_epi64(__m512i W, __mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.512(<8 x float> | ||
| return _mm512_mask_cvttsps_epi64(W, U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvttsps_epi64(__mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.512(<8 x float> | ||
| return _mm512_maskz_cvttsps_epi64(U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epi64(__m256 A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.512(<8 x float> | ||
| return _mm512_cvtts_roundps_epi64(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epi64(__m512i W, __mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.512(<8 x float> | ||
| return _mm512_mask_cvtts_roundps_epi64(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundps_epi64(__mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.512(<8 x float> | ||
| return _mm512_maskz_cvtts_roundps_epi64(U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvttsps_epu64(__m256 A) { | ||
| // CHECK-LABEL: test_mm512_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.512(<8 x float> | ||
| return _mm512_cvttsps_epu64(A); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvttsps_epu64(__m512i W, __mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.512(<8 x float> | ||
| return _mm512_mask_cvttsps_epu64(W, U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvttsps_epu64(__mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.512(<8 x float> | ||
| return _mm512_maskz_cvttsps_epu64(U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epu64(__m256 A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.512(<8 x float> | ||
| return _mm512_cvtts_roundps_epu64(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epu64(__m512i W, __mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.512(<8 x float> | ||
| return _mm512_mask_cvtts_roundps_epu64(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundps_epu64(__mmask8 U, __m256 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.512(<8 x float> | ||
| return _mm512_maskz_cvtts_roundps_epu64(U, A, _MM_FROUND_NO_EXC); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,151 @@ | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386 -target-feature +avx10.2-512 -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,X86 | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64 -target-feature +avx10.2-512 -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,X64 | ||
|
|
||
| #include <immintrin.h> | ||
| #include <stddef.h> | ||
|
|
||
| __m256i test_mm512_cvttspd_epi32(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.512(<8 x double> | ||
| return _mm512_cvttspd_epi32(A); | ||
| } | ||
|
|
||
| __m256i test_mm512_mask_cvttspd_epi32(__m256i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.512(<8 x double> | ||
| return _mm512_mask_cvttspd_epi32(W, U, A); | ||
| } | ||
|
|
||
| __m256i test_mm512_maskz_cvttspd_epi32(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvttspd_epi32(U, A); | ||
| } | ||
|
|
||
| __m256i test_mm512_cvtts_roundpd_epi32(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundpd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.512(<8 x double> | ||
| return _mm512_cvtts_roundpd_epi32(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m256i test_mm512_mask_cvtts_roundpd_epi32(__m256i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundpd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.512(<8 x double> | ||
| return _mm512_mask_cvtts_roundpd_epi32(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m256i test_mm512_maskz_cvtts_roundpd_epi32(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundpd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvtts_roundpd_epi32(U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m256i test_mm512_cvttspd_epu32(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.512(<8 x double> | ||
| return _mm512_cvttspd_epu32(A); | ||
| } | ||
|
|
||
| __m256i test_mm512_mask_cvttspd_epu32(__m256i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.512(<8 x double> | ||
| return _mm512_mask_cvttspd_epu32(W, U, A); | ||
| } | ||
|
|
||
| __m256i test_mm512_maskz_cvttspd_epu32(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvttspd_epu32(U, A); | ||
| } | ||
|
|
||
| __m256i test_mm512_cvtts_roundpd_epu32(__m512d A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundpd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.512(<8 x double> | ||
| return _mm512_cvtts_roundpd_epu32(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m256i test_mm512_mask_cvtts_roundpd_epu32(__m256i W, __mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundpd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.512(<8 x double> | ||
| return _mm512_mask_cvtts_roundpd_epu32(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m256i test_mm512_maskz_cvtts_roundpd_epu32(__mmask8 U, __m512d A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundpd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.512(<8 x double> | ||
| return _mm512_maskz_cvtts_roundpd_epu32(U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvttsps_epi32(__m512 A) { | ||
| // CHECK-LABEL: test_mm512_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.512(<16 x float> | ||
| return _mm512_cvttsps_epi32(A); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvttsps_epi32(__m512i W, __mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.512(<16 x float> | ||
| return _mm512_mask_cvttsps_epi32(W, U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvttsps_epi32(__mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.512(<16 x float> | ||
| return _mm512_maskz_cvttsps_epi32(U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epi32(__m512 A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.512(<16 x float> | ||
| return _mm512_cvtts_roundps_epi32(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epi32(__m512i W, __mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.512(<16 x float> | ||
| return _mm512_mask_cvtts_roundps_epi32(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvtts_roundps_epi32(__mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.512(<16 x float> | ||
| return _mm512_maskz_cvtts_roundps_epi32(U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvttsps_epu32(__m512 A) { | ||
| // CHECK-LABEL: test_mm512_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.512(<16 x float> | ||
| return _mm512_cvttsps_epu32(A); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvttsps_epu32(__m512i W, __mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.512(<16 x float> | ||
| return _mm512_mask_cvttsps_epu32(W, U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_maskz_cvttsps_epu32(__mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.512(<16 x float> | ||
| return _mm512_maskz_cvttsps_epu32(U, A); | ||
| } | ||
|
|
||
| __m512i test_mm512_cvtts_roundps_epu32(__m512 A) { | ||
| // CHECK-LABEL: test_mm512_cvtts_roundps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.512(<16 x float> | ||
| return _mm512_cvtts_roundps_epu32(A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| __m512i test_mm512_mask_cvtts_roundps_epu32(__m512i W, __mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_mask_cvtts_roundps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.512(<16 x float> | ||
| return _mm512_mask_cvtts_roundps_epu32(W, U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
| __m512i test_mm512_maskz_cvtts_roundps_epu32(__mmask8 U, __m512 A) { | ||
| // CHECK-LABEL: test_mm512_maskz_cvtts_roundps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.512(<16 x float> | ||
| return _mm512_maskz_cvtts_roundps_epu32(U, A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| // X64: {{.*}} | ||
| // X86: {{.*}} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -Wall -Werror -verify | ||
|
|
||
| unsigned long long test_mm_cvttssd(unsigned long long __A) { | ||
| return _mm_cvttssd(__A); // expected-error {{call to undeclared function '_mm_cvttssd'}} | ||
| } | ||
|
|
||
| unsigned long long test_mm_cvttsss(unsigned long long __A) { | ||
| return _mm_cvttsss(__A); // expected-error {{call to undeclared function '_mm_cvttsss'}} | ||
| } | ||
|
|
||
| #include <immintrin.h> | ||
| #include <stddef.h> | ||
|
|
||
| __m128i test_mm256_cvtts_roundpd_epi32(__m256d A) { | ||
| return _mm256_cvtts_roundpd_epi32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
| __m128i test_mm256_mask_cvtts_roundpd_epi32(__m128i W, __mmask8 U, __m256d A) { | ||
| return _mm256_mask_cvtts_roundpd_epi32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m128i test_mm256_maskz_cvtts_roundpd_epi32(__mmask8 U, __m256d A) { | ||
| return _mm256_maskz_cvtts_roundpd_epi32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m128i test_mm256_cvtts_roundpd_epu32(__m256d A) { | ||
| return _mm256_cvtts_roundpd_epu32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
| __m128i test_mm256_mask_cvtts_roundpd_epu32(__m128i W, __mmask8 U, __m256d A) { | ||
| return _mm256_mask_cvtts_roundpd_epu32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m128i test_mm256_maskz_cvtts_roundpd_epu32(__mmask8 U, __m256d A) { | ||
| return _mm256_maskz_cvtts_roundpd_epu32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundps_epi32(__m256 A) { | ||
| return _mm256_cvtts_roundps_epi32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
| __m256i test_mm256_mask_cvtts_roundps_epi32(__m256i W, __mmask8 U, __m256 A) { | ||
| return _mm256_mask_cvtts_roundps_epi32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundps_epi32(__mmask8 U, __m256 A) { | ||
| return _mm256_maskz_cvtts_roundps_epi32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundps_epu32(__m256 A) { | ||
| return _mm256_cvtts_roundps_epu32(A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvtts_roundps_epu32(__m256i W, __mmask8 U, __m256 A) { | ||
| return _mm256_mask_cvtts_roundps_epu32(W, U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundps_epu32(__mmask8 U, __m256 A) { | ||
| return _mm256_maskz_cvtts_roundps_epu32(U, A, 22); // expected-error {{invalid rounding argument}} | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,262 @@ | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -o - | FileCheck %s | ||
|
|
||
| #include <immintrin.h> | ||
| #include <stddef.h> | ||
|
|
||
| // scalar | ||
|
|
||
| int test_mm_cvttssd_i32(__m128d __A) { | ||
| // CHECK-LABEL: @test_mm_cvttssd_i32 | ||
| // CHECK: @llvm.x86.avx10.vcvttsd2sis | ||
| return _mm_cvtts_roundsd_i32(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| int test_mm_cvttssd_si32(__m128d __A) { | ||
| // CHECK-LABEL: @test_mm_cvttssd_si32( | ||
| // CHECK: @llvm.x86.avx10.vcvttsd2sis(<2 x double> | ||
| return _mm_cvtts_roundsd_si32(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| unsigned test_mm_cvttssd_u32(__m128d __A) { | ||
| // CHECK-LABEL: @test_mm_cvttssd_u32( | ||
| // CHECK: @llvm.x86.avx10.vcvttsd2usis(<2 x double> | ||
| return _mm_cvtts_roundsd_u32(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| int test_mm_cvttsss_i32(__m128 __A) { | ||
| // CHECK-LABEL: @test_mm_cvttsss_i32( | ||
| // CHECK: @llvm.x86.avx10.vcvttss2sis(<4 x float> | ||
| return _mm_cvtts_roundss_i32(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| int test_mm_cvttsss_si32(__m128 __A) { | ||
| // CHECK-LABEL: @test_mm_cvttsss_si32( | ||
| // CHECK: @llvm.x86.avx10.vcvttss2sis(<4 x float> | ||
| return _mm_cvtts_roundss_si32(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| unsigned test_mm_cvttsss_u32(__m128 __A) { | ||
| // CHECK-LABEL: @test_mm_cvttsss_u32( | ||
| // CHECK: @llvm.x86.avx10.vcvttss2usis(<4 x float> | ||
| return _mm_cvtts_roundss_u32(__A, _MM_FROUND_NO_EXC); | ||
| } | ||
|
|
||
| // vector | ||
| // 128 bit | ||
| __m128i test_mm_cvttspd_epi64(__m128d A){ | ||
| // CHECK-LABEL: @test_mm_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.128(<2 x double> | ||
| return _mm_cvttspd_epi64(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttspd_epi64(__m128i W, __mmask8 U, __m128d A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.128(<2 x double> | ||
| return _mm_mask_cvttspd_epi64(W, U, A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttspd_epi64(__mmask8 U,__m128d A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.128(<2 x double> | ||
| return _mm_maskz_cvttspd_epi64(U, A); | ||
| } | ||
|
|
||
| __m128i test_mm_cvttspd_epu64(__m128d A){ | ||
| // CHECK-LABEL: @test_mm_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.128(<2 x double> | ||
| return _mm_cvttspd_epu64(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttspd_epu64(__m128i W, __mmask8 U, __m128d A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.128(<2 x double> | ||
| return _mm_mask_cvttspd_epu64(W, U, A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttspd_epu64(__mmask8 U,__m128d A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.128(<2 x double> | ||
| return _mm_maskz_cvttspd_epu64(U, A); | ||
| } | ||
|
|
||
| // 256 bit | ||
| __m256i test_mm256_cvttspd_epi64(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.256(<4 x double> | ||
| return _mm256_cvttspd_epi64(A); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvttspd_epi64(__m256i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.256(<4 x double> | ||
| return _mm256_mask_cvttspd_epi64(W,U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvttspd_epi64(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttspd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvttspd_epi64(U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundpd_epi64(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundpd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.256(<4 x double> | ||
| return _mm256_cvtts_roundpd_epi64(A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvtts_roundpd_epi64(__m256i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundpd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.256(<4 x double> | ||
| return _mm256_mask_cvtts_roundpd_epi64(W,U,A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundpd_epi64(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundpd_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2qqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvtts_roundpd_epi64(U,A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvttspd_epu64(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.256(<4 x double> | ||
| return _mm256_cvttspd_epu64(A); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvttspd_epu64(__m256i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.256(<4 x double> | ||
| return _mm256_mask_cvttspd_epu64(W,U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvttspd_epu64(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttspd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvttspd_epu64(U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundpd_epu64(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundpd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.256(<4 x double> | ||
| return _mm256_cvtts_roundpd_epu64(A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvtts_roundpd_epu64(__m256i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundpd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.256(<4 x double> | ||
| return _mm256_mask_cvtts_roundpd_epu64(W,U,A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundpd_epu64(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundpd_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2uqqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvtts_roundpd_epu64(U,A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| // 128 bit | ||
| __m128i test_mm_cvttsps_epi64(__m128 A){ | ||
| // CHECK-LABEL: @test_mm_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.128(<4 x float> | ||
| return _mm_cvttsps_epi64(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttsps_epi64(__m128i W, __mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.128(<4 x float> | ||
| return _mm_mask_cvttsps_epi64(W, U, A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttsps_epi64(__mmask8 U,__m128 A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.128(<4 x float> | ||
| return _mm_maskz_cvttsps_epi64(U, A); | ||
| } | ||
|
|
||
| __m128i test_mm_cvttsps_epu64(__m128 A){ | ||
| // CHECK-LABEL: @test_mm_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.128(<4 x float> | ||
| return _mm_cvttsps_epu64(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttsps_epu64(__m128i W, __mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.128(<4 x float> | ||
| return _mm_mask_cvttsps_epu64(W, U, A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttsps_epu64(__mmask8 U,__m128 A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.128(<4 x float> | ||
| return _mm_maskz_cvttsps_epu64(U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvttsps_epi64(__m128 A){ | ||
| // CHECK-LABEL: @test_mm256_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.256(<4 x float> | ||
| return _mm256_cvttsps_epi64(A); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvttsps_epi64(__m256i W,__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.256(<4 x float> | ||
| return _mm256_mask_cvttsps_epi64(W,U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvttsps_epi64(__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttsps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.256(<4 x float> | ||
| return _mm256_maskz_cvttsps_epi64(U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundps_epi64(__m128 A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.256(<4 x float> | ||
| return _mm256_cvtts_roundps_epi64(A, _MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvtts_roundps_epi64(__m256i W,__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.256(<4 x float> | ||
| return _mm256_mask_cvtts_roundps_epi64(W,U,A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundps_epi64(__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundps_epi64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2qqs.round.256(<4 x float> | ||
| return _mm256_maskz_cvtts_roundps_epi64(U,A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvttsps_epu64(__m128 A){ | ||
| // CHECK-LABEL: @test_mm256_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.256(<4 x float> | ||
| return _mm256_cvttsps_epu64(A); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvttsps_epu64(__m256i W,__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.256(<4 x float> | ||
| return _mm256_mask_cvttsps_epu64(W,U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvttsps_epu64(__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttsps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.256(<4 x float> | ||
| return _mm256_maskz_cvttsps_epu64(U, A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundps_epu64(__m128 A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.256(<4 x float> | ||
| return _mm256_cvtts_roundps_epu64(A, _MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvtts_roundps_epu64(__m256i W,__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.256(<4 x float> | ||
| return _mm256_mask_cvtts_roundps_epu64(W,U,A,_MM_FROUND_NEARBYINT ); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundps_epu64(__mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundps_epu64 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2uqqs.round.256(<4 x float> | ||
| return _mm256_maskz_cvtts_roundps_epu64(U,A,_MM_FROUND_NEARBYINT ); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,225 @@ | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386 -target-feature +avx10.2-256 -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,X86 | ||
| // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64 -target-feature +avx10.2-256 -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,X64 | ||
|
|
||
| #include <immintrin.h> | ||
| #include <stddef.h> | ||
|
|
||
| __m128i test_mm_cvttspd_epi32(__m128d A){ | ||
| // CHECK-LABEL: @test_mm_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.128(<2 x double> | ||
| return _mm_cvttspd_epi32(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttspd_epi32(__m128i W, __mmask8 U, __m128d A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.128(<2 x double> | ||
| return _mm_mask_cvttspd_epi32(W,U,A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttspd_epi32( __mmask8 U, __m128d A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttspd_epi32( | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.128(<2 x double> | ||
| return _mm_maskz_cvttspd_epi32(U,A); | ||
| } | ||
|
|
||
| __m128i test_mm256_cvttspd_epi32(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.256(<4 x double> | ||
| return _mm256_cvttspd_epi32(A); | ||
| } | ||
|
|
||
| __m128i test_mm256_mask_cvttspd_epi32(__m128i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.256(<4 x double> | ||
| return _mm256_mask_cvttspd_epi32(W,U,A); | ||
| } | ||
|
|
||
| __m128i test_mm256_maskz_cvttspd_epi32(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttspd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvttspd_epi32(U,A); | ||
| } | ||
|
|
||
| __m128i test_mm256_cvtts_roundpd_epi32(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundpd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.256(<4 x double> | ||
| return _mm256_cvtts_roundpd_epi32(A, _MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m128i test_mm256_mask_cvtts_roundpd_epi32(__m128i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundpd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.256(<4 x double> | ||
| return _mm256_mask_cvtts_roundpd_epi32(W,U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m128i test_mm256_maskz_cvtts_roundpd_epi32(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundpd_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2dqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvtts_roundpd_epi32(U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m128i test_mm_cvttspd_epu32(__m128d A){ | ||
| // CHECK-LABEL: @test_mm_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.128(<2 x double> | ||
| return _mm_cvttspd_epu32(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttspd_epu32(__m128i W, __mmask8 U, __m128d A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.128(<2 x double> | ||
| return _mm_mask_cvttspd_epu32(W,U,A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttspd_epu32( __mmask8 U, __m128d A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.128(<2 x double> | ||
| return _mm_maskz_cvttspd_epu32(U,A); | ||
| } | ||
|
|
||
|
|
||
| __m128i test_mm256_cvttspd_epu32(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.256(<4 x double> | ||
| return _mm256_cvttspd_epu32(A); | ||
| } | ||
|
|
||
| __m128i test_mm256_mask_cvttspd_epu32(__m128i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.256(<4 x double> | ||
| return _mm256_mask_cvttspd_epu32(W,U,A); | ||
| } | ||
|
|
||
| __m128i test_mm256_maskz_cvttspd_epu32(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttspd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvttspd_epu32(U,A); | ||
| } | ||
|
|
||
| __m128i test_mm256_cvtts_roundpd_epu32(__m256d A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundpd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.256(<4 x double> | ||
| return _mm256_cvtts_roundpd_epu32(A, _MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m128i test_mm256_mask_cvtts_roundpd_epu32(__m128i W,__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundpd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.256(<4 x double> | ||
| return _mm256_mask_cvtts_roundpd_epu32(W,U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m128i test_mm256_maskz_cvtts_roundpd_epu32(__mmask8 U, __m256d A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundpd_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttpd2udqs.round.256(<4 x double> | ||
| return _mm256_maskz_cvtts_roundpd_epu32(U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m128i test_mm_cvttsps_epi32(__m128 A){ | ||
| // CHECK-LABEL: @test_mm_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.128(<4 x float> | ||
| return _mm_cvttsps_epi32(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttsps_epi32(__m128i W, __mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.128(<4 x float> | ||
| return _mm_mask_cvttsps_epi32(W,U,A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttsps_epi32( __mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.128(<4 x float> | ||
| return _mm_maskz_cvttsps_epi32(U,A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvttsps_epi32(__m256 A){ | ||
| // CHECK-LABEL: @test_mm256_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.256(<8 x float> | ||
| return _mm256_cvttsps_epi32(A); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvttsps_epi32(__m256i W,__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.256(<8 x float> | ||
| return _mm256_mask_cvttsps_epi32(W,U,A); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvttsps_epi32(__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttsps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.256(<8 x float> | ||
| return _mm256_maskz_cvttsps_epi32(U,A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundps_epi32(__m256 A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.256(<8 x float> | ||
| return _mm256_cvtts_roundps_epi32(A, _MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvtts_roundps_epi32(__m256i W,__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.256(<8 x float> | ||
| return _mm256_mask_cvtts_roundps_epi32(W,U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundps_epi32(__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundps_epi32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2dqs.round.256(<8 x float> | ||
| return _mm256_maskz_cvtts_roundps_epi32(U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m128i test_mm_cvttsps_epu32(__m128 A){ | ||
| // CHECK-LABEL: @test_mm_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.128(<4 x float> | ||
| return _mm_cvttsps_epu32(A); | ||
| } | ||
|
|
||
| __m128i test_mm_mask_cvttsps_epu32(__m128i W, __mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm_mask_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.128(<4 x float> | ||
| return _mm_mask_cvttsps_epu32(W,U,A); | ||
| } | ||
|
|
||
| __m128i test_mm_maskz_cvttsps_epu32( __mmask8 U, __m128 A){ | ||
| // CHECK-LABEL: @test_mm_maskz_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.128(<4 x float> | ||
| return _mm_maskz_cvttsps_epu32(U,A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvttsps_epu32(__m256 A){ | ||
| // CHECK-LABEL: @test_mm256_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.256(<8 x float> | ||
| return _mm256_cvttsps_epu32(A); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvttsps_epu32(__m256i W,__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.256(<8 x float> | ||
| return _mm256_mask_cvttsps_epu32(W,U,A); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvttsps_epu32(__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvttsps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.256(<8 x float> | ||
| return _mm256_maskz_cvttsps_epu32(U,A); | ||
| } | ||
|
|
||
| __m256i test_mm256_cvtts_roundps_epu32(__m256 A){ | ||
| // CHECK-LABEL: @test_mm256_cvtts_roundps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.256(<8 x float> | ||
| return _mm256_cvtts_roundps_epu32(A, _MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m256i test_mm256_mask_cvtts_roundps_epu32(__m256i W,__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_mask_cvtts_roundps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.256(<8 x float> | ||
| return _mm256_mask_cvtts_roundps_epu32(W,U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| __m256i test_mm256_maskz_cvtts_roundps_epu32(__mmask8 U, __m256 A){ | ||
| // CHECK-LABEL: @test_mm256_maskz_cvtts_roundps_epu32 | ||
| // CHECK: @llvm.x86.avx10.mask.vcvttps2udqs.round.256(<8 x float> | ||
| return _mm256_maskz_cvtts_roundps_epu32(U,A,_MM_FROUND_NEARBYINT); | ||
| } | ||
|
|
||
| // X64: {{.*}} | ||
| // X86: {{.*}} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ | ||
| // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ | ||
| // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ | ||
| // RUN: --check-prefixes=CHECK,NATIVE_HALF \ | ||
| // RUN: -DFNATTRS=noundef -DTARGET=dx | ||
| // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ | ||
| // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ | ||
| // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ | ||
| // RUN: -DFNATTRS=noundef -DTARGET=dx | ||
| // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ | ||
| // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ | ||
| // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ | ||
| // RUN: --check-prefixes=CHECK,NATIVE_HALF \ | ||
| // RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv | ||
| // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ | ||
| // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ | ||
| // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ | ||
| // RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv | ||
|
|
||
| // NATIVE_HALF: define [[FNATTRS]] half @ | ||
| // NATIVE_HALF: call half @llvm.[[TARGET]].step.f16(half | ||
| // NO_HALF: call float @llvm.[[TARGET]].step.f32(float | ||
| // NATIVE_HALF: ret half | ||
| // NO_HALF: ret float | ||
| half test_step_half(half p0, half p1) | ||
| { | ||
| return step(p0, p1); | ||
| } | ||
| // NATIVE_HALF: define [[FNATTRS]] <2 x half> @ | ||
| // NATIVE_HALF: call <2 x half> @llvm.[[TARGET]].step.v2f16(<2 x half> | ||
| // NO_HALF: call <2 x float> @llvm.[[TARGET]].step.v2f32(<2 x float> | ||
| // NATIVE_HALF: ret <2 x half> %hlsl.step | ||
| // NO_HALF: ret <2 x float> %hlsl.step | ||
| half2 test_step_half2(half2 p0, half2 p1) | ||
| { | ||
| return step(p0, p1); | ||
| } | ||
| // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ | ||
| // NATIVE_HALF: call <3 x half> @llvm.[[TARGET]].step.v3f16(<3 x half> | ||
| // NO_HALF: call <3 x float> @llvm.[[TARGET]].step.v3f32(<3 x float> | ||
| // NATIVE_HALF: ret <3 x half> %hlsl.step | ||
| // NO_HALF: ret <3 x float> %hlsl.step | ||
| half3 test_step_half3(half3 p0, half3 p1) | ||
| { | ||
| return step(p0, p1); | ||
| } | ||
| // NATIVE_HALF: define [[FNATTRS]] <4 x half> @ | ||
| // NATIVE_HALF: call <4 x half> @llvm.[[TARGET]].step.v4f16(<4 x half> | ||
| // NO_HALF: call <4 x float> @llvm.[[TARGET]].step.v4f32(<4 x float> | ||
| // NATIVE_HALF: ret <4 x half> %hlsl.step | ||
| // NO_HALF: ret <4 x float> %hlsl.step | ||
| half4 test_step_half4(half4 p0, half4 p1) | ||
| { | ||
| return step(p0, p1); | ||
| } | ||
|
|
||
| // CHECK: define [[FNATTRS]] float @ | ||
| // CHECK: call float @llvm.[[TARGET]].step.f32(float | ||
| // CHECK: ret float | ||
| float test_step_float(float p0, float p1) | ||
| { | ||
| return step(p0, p1); | ||
| } | ||
| // CHECK: define [[FNATTRS]] <2 x float> @ | ||
| // CHECK: %hlsl.step = call <2 x float> @llvm.[[TARGET]].step.v2f32( | ||
| // CHECK: ret <2 x float> %hlsl.step | ||
| float2 test_step_float2(float2 p0, float2 p1) | ||
| { | ||
| return step(p0, p1); | ||
| } | ||
| // CHECK: define [[FNATTRS]] <3 x float> @ | ||
| // CHECK: %hlsl.step = call <3 x float> @llvm.[[TARGET]].step.v3f32( | ||
| // CHECK: ret <3 x float> %hlsl.step | ||
| float3 test_step_float3(float3 p0, float3 p1) | ||
| { | ||
| return step(p0, p1); | ||
| } | ||
| // CHECK: define [[FNATTRS]] <4 x float> @ | ||
| // CHECK: %hlsl.step = call <4 x float> @llvm.[[TARGET]].step.v4f32( | ||
| // CHECK: ret <4 x float> %hlsl.step | ||
| float4 test_step_float4(float4 p0, float4 p1) | ||
| { | ||
| return step(p0, p1); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| // RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.6-library %s -fnative-half-type -disable-llvm-passes -verify -verify-ignore-unexpected | ||
|
|
||
| void test_too_few_arg() | ||
| { | ||
| return __builtin_hlsl_step(); | ||
| // expected-error@-1 {{too few arguments to function call, expected 2, have 0}} | ||
| } | ||
|
|
||
| void test_too_many_arg(float2 p0) | ||
| { | ||
| return __builtin_hlsl_step(p0, p0, p0); | ||
| // expected-error@-1 {{too many arguments to function call, expected 2, have 3}} | ||
| } | ||
|
|
||
| bool builtin_bool_to_float_type_promotion(bool p1) | ||
| { | ||
| return __builtin_hlsl_step(p1, p1); | ||
| // expected-error@-1 {passing 'bool' to parameter of incompatible type 'float'}} | ||
| } | ||
|
|
||
| bool builtin_step_int_to_float_promotion(int p1) | ||
| { | ||
| return __builtin_hlsl_step(p1, p1); | ||
| // expected-error@-1 {{passing 'int' to parameter of incompatible type 'float'}} | ||
| } | ||
|
|
||
| bool2 builtin_step_int2_to_float2_promotion(int2 p1) | ||
| { | ||
| return __builtin_hlsl_step(p1, p1); | ||
| // expected-error@-1 {{passing 'int2' (aka 'vector<int, 2>') to parameter of incompatible type '__attribute__((__vector_size__(2 * sizeof(float)))) float' (vector of 2 'float' values)}} | ||
| } |