303 changes: 303 additions & 0 deletions clang/lib/Headers/avx10_2_512satcvtdsintrin.h
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
496 changes: 496 additions & 0 deletions clang/lib/Headers/avx10_2satcvtdsintrin.h

Large diffs are not rendered by default.

33 changes: 33 additions & 0 deletions clang/lib/Headers/hlsl/hlsl_intrinsics.h
Original file line number Diff line number Diff line change
Expand Up @@ -1717,6 +1717,39 @@ float3 sqrt(float3);
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
float4 sqrt(float4);

//===----------------------------------------------------------------------===//
// step builtins
//===----------------------------------------------------------------------===//

/// \fn T step(T x, T y)
/// \brief Returns 1 if the x parameter is greater than or equal to the y
/// parameter; otherwise, 0. vector. \param x [in] The first floating-point
/// value to compare. \param y [in] The first floating-point value to compare.
///
/// Step is based on the following formula: (x >= y) ? 1 : 0

_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
half step(half, half);
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
half2 step(half2, half2);
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
half3 step(half3, half3);
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
half4 step(half4, half4);

_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
float step(float, float);
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
float2 step(float2, float2);
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
float3 step(float3, float3);
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
float4 step(float4, float4);

//===----------------------------------------------------------------------===//
// tan builtins
//===----------------------------------------------------------------------===//
Expand Down
2 changes: 2 additions & 0 deletions clang/lib/Headers/immintrin.h
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,7 @@ _storebe_i64(void * __P, long long __D) {
#include <avx10_2convertintrin.h>
#include <avx10_2minmaxintrin.h>
#include <avx10_2niintrin.h>
#include <avx10_2satcvtdsintrin.h>
#include <avx10_2satcvtintrin.h>
#endif

Expand All @@ -661,6 +662,7 @@ _storebe_i64(void * __P, long long __D) {
#include <avx10_2_512convertintrin.h>
#include <avx10_2_512minmaxintrin.h>
#include <avx10_2_512niintrin.h>
#include <avx10_2_512satcvtdsintrin.h>
#include <avx10_2_512satcvtintrin.h>
#endif

Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Parse/ParseStmt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ StmtResult Parser::ParseStatementOrDeclarationAfterAttributes(
return StmtError();
}

// If the identifier was typo-corrected, try again.
// If the identifier was annotated, try again.
if (Tok.isNot(tok::identifier))
goto Retry;
}
Expand Down
12 changes: 12 additions & 0 deletions clang/lib/Sema/SemaHLSL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1747,6 +1747,18 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
SetElementTypeAsReturnType(&SemaRef, TheCall, getASTContext().IntTy);
break;
}
case Builtin::BI__builtin_hlsl_step: {
if (SemaRef.checkArgCount(TheCall, 2))
return true;
if (CheckFloatOrHalfRepresentations(&SemaRef, TheCall))
return true;

ExprResult A = TheCall->getArg(0);
QualType ArgTyA = A.get()->getType();
// return type is the same as the input type
TheCall->setType(ArgTyA);
break;
}
// Note these are llvm builtins that we want to catch invalid intrinsic
// generation. Normal handling of these builitns will occur elsewhere.
case Builtin::BI__builtin_elementwise_bitreverse: {
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Sema/SemaInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9548,7 +9548,7 @@ static void DiagnoseNarrowingInInitList(Sema &S,
unsigned ConstRefDiagID, unsigned WarnDiagID) {
unsigned DiagID;
auto &L = S.getLangOpts();
if (L.CPlusPlus11 &&
if (L.CPlusPlus11 && !L.HLSL &&
(!L.MicrosoftExt || L.isCompatibleWithMSVC(LangOptions::MSVC2015)))
DiagID = IsConstRef ? ConstRefDiagID : DefaultDiagID;
else
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Sema/SemaOverload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2067,7 +2067,7 @@ static bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType,

// There are no conversions between extended vector types, only identity.
if (auto *ToExtType = ToType->getAs<ExtVectorType>()) {
if (auto *FromExtType = FromType->getAs<ExtVectorType>()) {
if (FromType->getAs<ExtVectorType>()) {
// There are no conversions between extended vector types other than the
// identity conversion.
return false;
Expand Down
26 changes: 26 additions & 0 deletions clang/lib/Sema/SemaX86.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,14 @@ bool SemaX86::CheckBuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) {
case X86::BI__builtin_ia32_vcvttsh2si64:
case X86::BI__builtin_ia32_vcvttsh2usi32:
case X86::BI__builtin_ia32_vcvttsh2usi64:
case X86::BI__builtin_ia32_vcvttsd2sis32:
case X86::BI__builtin_ia32_vcvttsd2usis32:
case X86::BI__builtin_ia32_vcvttss2sis32:
case X86::BI__builtin_ia32_vcvttss2usis32:
case X86::BI__builtin_ia32_vcvttsd2sis64:
case X86::BI__builtin_ia32_vcvttsd2usis64:
case X86::BI__builtin_ia32_vcvttss2sis64:
case X86::BI__builtin_ia32_vcvttss2usis64:
ArgNum = 1;
break;
case X86::BI__builtin_ia32_maxpd512:
Expand Down Expand Up @@ -435,6 +443,24 @@ bool SemaX86::CheckBuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) {
ArgNum = 4;
HasRC = true;
break;
case X86::BI__builtin_ia32_vcvttpd2dqs256_round_mask:
case X86::BI__builtin_ia32_vcvttpd2dqs512_round_mask:
case X86::BI__builtin_ia32_vcvttpd2udqs256_round_mask:
case X86::BI__builtin_ia32_vcvttpd2udqs512_round_mask:
case X86::BI__builtin_ia32_vcvttpd2qqs256_round_mask:
case X86::BI__builtin_ia32_vcvttpd2qqs512_round_mask:
case X86::BI__builtin_ia32_vcvttpd2uqqs256_round_mask:
case X86::BI__builtin_ia32_vcvttpd2uqqs512_round_mask:
case X86::BI__builtin_ia32_vcvttps2dqs256_round_mask:
case X86::BI__builtin_ia32_vcvttps2dqs512_round_mask:
case X86::BI__builtin_ia32_vcvttps2udqs256_round_mask:
case X86::BI__builtin_ia32_vcvttps2udqs512_round_mask:
case X86::BI__builtin_ia32_vcvttps2qqs256_round_mask:
case X86::BI__builtin_ia32_vcvttps2qqs512_round_mask:
case X86::BI__builtin_ia32_vcvttps2uqqs256_round_mask:
case X86::BI__builtin_ia32_vcvttps2uqqs512_round_mask:
ArgNum = 3;
break;
}

llvm::APSInt Result;
Expand Down
6 changes: 5 additions & 1 deletion clang/lib/Sema/TreeTransform.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,13 @@ class TreeTransform {
class ForgetPartiallySubstitutedPackRAII {
Derived &Self;
TemplateArgument Old;
// Set the pack expansion index to -1 to avoid pack substitution and
// indicate that parameter packs should be instantiated as themselves.
Sema::ArgumentPackSubstitutionIndexRAII ResetPackSubstIndex;

public:
ForgetPartiallySubstitutedPackRAII(Derived &Self) : Self(Self) {
ForgetPartiallySubstitutedPackRAII(Derived &Self)
: Self(Self), ResetPackSubstIndex(Self.getSema(), -1) {
Old = Self.ForgetPartiallySubstitutedPack();
}

Expand Down
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1129,7 +1129,7 @@ tryToInvalidateFReadBufferByElements(ProgramStateRef State, CheckerContext &C,
if (!ElemTy.isNull() && CountVal && Size && StartIndexVal) {
int64_t NumBytesRead = Size.value() * CountVal.value();
int64_t ElemSizeInChars = Ctx.getTypeSizeInChars(ElemTy).getQuantity();
if (ElemSizeInChars == 0)
if (ElemSizeInChars == 0 || NumBytesRead < 0)
return nullptr;

bool IncompleteLastElement = (NumBytesRead % ElemSizeInChars) != 0;
Expand Down
19 changes: 19 additions & 0 deletions clang/test/AST/ByteCode/const-base-cast.cpp
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

5 changes: 5 additions & 0 deletions clang/test/AST/ByteCode/cxx11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,8 @@ namespace FinalLtorDiags {
A<q> c; // both-error {{non-type template argument of type 'int *' is not a constant expression}} \
// both-note {{read of non-constexpr variable 'q' is not allowed in a constant expression}}
}

void lambdas() {
int d;
int a9[1] = {[d = 0] = 1}; // both-error {{not an integral constant expression}}
}
3 changes: 2 additions & 1 deletion clang/test/AST/HLSL/vector-constructors.hlsl
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s | FileCheck %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -ast-dump -o - %s | FileCheck %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -std=hlsl202x -ast-dump -o - %s | FileCheck %s

typedef float float2 __attribute__((ext_vector_type(2)));
typedef float float3 __attribute__((ext_vector_type(3)));
Expand Down
30 changes: 30 additions & 0 deletions clang/test/Analysis/fread.c
Original file line number Diff line number Diff line change
Expand Up @@ -443,3 +443,33 @@ void test_unaligned_start_read(void) {
fclose(fp);
}
}

void no_crash_if_count_is_negative(long l, long r, unsigned char *buffer) {
FILE *fp = fopen("path", "r");
if (fp) {
if (l * r == -1) {
fread(buffer, 1, l * r, fp); // no-crash
}
fclose(fp);
}
}

void no_crash_if_size_is_negative(long l, long r, unsigned char *buffer) {
FILE *fp = fopen("path", "r");
if (fp) {
if (l * r == -1) {
fread(buffer, l * r, 1, fp); // no-crash
}
fclose(fp);
}
}

void no_crash_if_size_and_count_are_negative(long l, long r, unsigned char *buffer) {
FILE *fp = fopen("path", "r");
if (fp) {
if (l * r == -1) {
fread(buffer, l * r, l * r, fp); // no-crash
}
fclose(fp);
}
}
52 changes: 52 additions & 0 deletions clang/test/CodeGen/X86/avx10_2_512satcvtds-builtins-errors.c
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}}
}
76 changes: 76 additions & 0 deletions clang/test/CodeGen/X86/avx10_2_512satcvtds-builtins-x64-error.c
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}}
}
184 changes: 184 additions & 0 deletions clang/test/CodeGen/X86/avx10_2_512satcvtds-builtins-x64.c
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);
}
151 changes: 151 additions & 0 deletions clang/test/CodeGen/X86/avx10_2_512satcvtds-builtins.c
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: {{.*}}
57 changes: 57 additions & 0 deletions clang/test/CodeGen/X86/avx10_2satcvtds-builtins-errors.c
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}}
}
262 changes: 262 additions & 0 deletions clang/test/CodeGen/X86/avx10_2satcvtds-builtins-x64.c
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 );
}
225 changes: 225 additions & 0 deletions clang/test/CodeGen/X86/avx10_2satcvtds-builtins.c
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: {{.*}}
2 changes: 1 addition & 1 deletion clang/test/CodeGenCXX/const-base-cast.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 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

// Check that the following construct, which is similar to one which occurs
// in Firefox, is folded correctly.
Expand Down
84 changes: 84 additions & 0 deletions clang/test/CodeGenHLSL/builtins/step.hlsl
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);
}
1 change: 1 addition & 0 deletions clang/test/CodeGenObjC/boxing.m
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fexperimental-new-constant-interpreter | FileCheck %s

typedef long NSInteger;
typedef unsigned long NSUInteger;
Expand Down
31 changes: 31 additions & 0 deletions clang/test/SemaHLSL/BuiltIns/step-errors.hlsl
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)}}
}
14 changes: 14 additions & 0 deletions clang/test/SemaTemplate/pack-deduction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -185,3 +185,17 @@ void Run() {
Outer<void>::Inner<0>().Test(1,1);
}
}

namespace GH107560 {
int bar(...);

template <int> struct Int {};

template <class ...T>
constexpr auto foo(T... x) -> decltype(bar(T(x)...)) { return 10; }

template <class ...T>
constexpr auto baz(Int<foo<T>(T())>... x) -> int { return 1; }

static_assert(baz<Int<1>, Int<2>, Int<3>>(Int<10>(), Int<10>(), Int<10>()) == 1, "");
}
1 change: 0 additions & 1 deletion clang/tools/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ add_clang_subdirectory(driver)
add_clang_subdirectory(apinotes-test)
add_clang_subdirectory(clang-diff)
add_clang_subdirectory(clang-format)
add_clang_subdirectory(clang-format-vs)
add_clang_subdirectory(clang-fuzzer)
add_clang_subdirectory(clang-import-test)
add_clang_subdirectory(clang-linker-wrapper)
Expand Down
11 changes: 0 additions & 11 deletions clang/tools/clang-format-vs/.gitignore

This file was deleted.

33 changes: 0 additions & 33 deletions clang/tools/clang-format-vs/CMakeLists.txt

This file was deleted.

22 changes: 0 additions & 22 deletions clang/tools/clang-format-vs/ClangFormat.sln

This file was deleted.

261 changes: 0 additions & 261 deletions clang/tools/clang-format-vs/ClangFormat/ClangFormat.csproj

This file was deleted.

127 changes: 0 additions & 127 deletions clang/tools/clang-format-vs/ClangFormat/ClangFormat.vsct

This file was deleted.

Loading