forked from OSchip/llvm-project
[Clang][AVX512][BuiltIn] Adding intrinsics of VGATHER{DPS|DPD} , VPGATHER{QD|QQ|DD|DQ} and VGATHERPF{0|1}{DPS|QPS|DPD|QPD} instruction set .
Differential Revision: http://reviews.llvm.org/D19224 llvm-svn: 266983
This commit is contained in:
parent
29af472cf6
commit
4fa96af4db
|
@ -1059,12 +1059,28 @@ TARGET_BUILTIN(__builtin_ia32_alignd512_mask, "V16iV16iV16iIiV16iUs", "", "avx51
|
|||
TARGET_BUILTIN(__builtin_ia32_extractf64x4_mask, "V4dV8dIiV4dUc", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_extractf32x4_mask, "V4fV16fIiV4fUc", "", "avx512f")
|
||||
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div2df, "V2dV2dvC*V2LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div2di, "V4iV2LLivC*V2LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div4df, "V4dV4dvC*V4LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div4di, "V8iV4LLivC*V4LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div4sf, "V4fV4fvC*V2LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div4si, "V4iV4ivC*V2LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div8sf, "V4fV4fvC*V4LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3div8si, "V4iV4ivC*V4LLiUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv2df, "V2dV2dvC*V4iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv2di, "V4iV2LLivC*V4iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv4df, "V4dV4dvC*V4iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv4di, "V8iV4LLivC*V4iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv4sf, "V4fV4fvC*V4iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv4si, "V4iV4ivC*V4iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv8sf, "V8fV8fvC*V8iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gather3siv8si, "V8iV8ivC*V8iUci","","avx512vl")
|
||||
TARGET_BUILTIN(__builtin_ia32_gathersiv8df, "V8dV8dvC*V8iUcIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16fvC*UsIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16fvC*V16fUsIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8dvC*V8LLiUcIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8fvC*V8LLiUcIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gathersiv8di, "V8LLiV8LLivC*V8iUcIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16ivC*UsIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16ivC*V16iUsIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gatherdiv8di, "V8LLiV8LLivC*V8LLiUcIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8ivC*V8LLiUcIi", "", "avx512f")
|
||||
TARGET_BUILTIN(__builtin_ia32_scattersiv8df, "vv*UcV8iV8dIi", "", "avx512f")
|
||||
|
|
|
@ -8,6 +8,7 @@ set(files
|
|||
avx512cdintrin.h
|
||||
avx512erintrin.h
|
||||
avx512fintrin.h
|
||||
avx512pfintrin.h
|
||||
avx512vlbwintrin.h
|
||||
avx512vlintrin.h
|
||||
avx512dqintrin.h
|
||||
|
|
|
@ -6321,6 +6321,87 @@ _mm512_maskz_getexp_ps (__mmask16 __U, __m512 __A)
|
|||
_MM_FROUND_CUR_DIRECTION);
|
||||
}
|
||||
|
||||
#define _mm512_i64gather_ps( __index, __addr, __scale) __extension__ ({ \
|
||||
__builtin_ia32_gatherdiv16sf ((__v8sf) _mm256_undefined_ps (),\
|
||||
__addr, (__v8di) __index, (__mmask8) -1, __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i64gather_ps( __v1_old, __mask, __index,\
|
||||
__addr, __scale) __extension__({\
|
||||
__builtin_ia32_gatherdiv16sf ((__v8sf) __v1_old,\
|
||||
__addr,(__v8di) __index, __mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_i64gather_epi32(__index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gatherdiv16si ((__v8si) _mm256_undefined_ps (),\
|
||||
__addr, (__v8di) __index, (__mmask8) -1 , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i64gather_epi32( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gatherdiv16si ((__v8si) __v1_old,\
|
||||
__addr, (__v8di) __index, __mask , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_i64gather_pd(__index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gatherdiv8df ((__v8df) _mm512_undefined_pd(),\
|
||||
__addr, (__v8di) __index, (__mmask8) -1 , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i64gather_pd( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gatherdiv8df ((__v8df) __v1_old,\
|
||||
__addr, (__v8di) __index, __mask , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_i64gather_epi64(__index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gatherdiv8di ((__v8di) _mm512_undefined_pd(),\
|
||||
__addr, (__v8di) __index, (__mmask8) -1 , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i64gather_epi64( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gatherdiv8di ((__v8di) __v1_old,\
|
||||
__addr, (__v8di) __index, __mask , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_i32gather_ps(__index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv16sf ((__v16sf) _mm512_undefined_ps(),\
|
||||
__addr, (__v16si) __index, (__mmask8) -1 , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i32gather_ps( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv16sf ((__v16sf) __v1_old,\
|
||||
__addr, (__v16si) __index, __mask , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_i32gather_epi32(__index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv16si ((__v16sf) _mm512_undefined_epi32(),\
|
||||
__addr, (__v16si) __index, (__mmask8) -1 , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i32gather_epi32( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv16si ((__v16sf) __v1_old,\
|
||||
__addr, (__v16si) __index, __mask , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_i32gather_pd(__index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv8df ((__v8df) _mm512_undefined_pd(),\
|
||||
__addr, (__v8si) __index, (__mmask8) -1 , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i32gather_pd( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv8df ((__v8df) __v1_old,\
|
||||
__addr, (__v8si) __index, __mask , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_i32gather_epi64(__index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv8di ((__v8di) _mm512_undefined_epi32(),\
|
||||
__addr, (__v8si) __index, (__mmask8) -1 , __scale);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_i32gather_epi64( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gathersiv8di ((__v8di) __v1_old,\
|
||||
__addr, (__v8si) __index, __mask , __scale);\
|
||||
})
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif // __AVX512FINTRIN_H
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
/*===------------- avx512pfintrin.h - PF intrinsics ------------------===
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
#ifndef __IMMINTRIN_H
|
||||
#error "Never use <avx512pfintrin.h> directly; include <immintrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __AVX512PFINTRIN_H
|
||||
#define __AVX512PFINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512pf")))
|
||||
|
||||
#define _mm512_mask_prefetch_i32gather_pd( index, mask, addr, scale, hint) __extension__ ({\
|
||||
__builtin_ia32_gatherpfdpd (mask, (__v8si) index, (long long const *) addr, scale, hint);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_prefetch_i32gather_ps( index, mask, addr, scale, hint) ({\
|
||||
__builtin_ia32_gatherpfdps (mask, (__v16si) index, (int const *) addr, scale, hint);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_prefetch_i64gather_pd( index, mask, addr, scale, hint) __extension__ ({\
|
||||
__builtin_ia32_gatherpfqpd (mask, (__v8di) index, (long long const *) addr, scale, hint);\
|
||||
})
|
||||
|
||||
#define _mm512_mask_prefetch_i64gather_ps( index, mask, addr, scale, hint) ({\
|
||||
__builtin_ia32_gatherpfqps (mask, (__v8di) index, (int const *) addr, scale, hint);\
|
||||
})
|
||||
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif
|
|
@ -8978,6 +8978,86 @@ __builtin_ia32_getmantps256_mask ((__v8sf)( __A),\
|
|||
(__mmask8)( __U));\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i64gather_pd( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div2df ((__v2df) __v1_old, __addr, (__v2di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i64gather_epi64( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div2di ((__v2di) __v1_old, __addr, (__v2di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i64gather_pd( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div4df ((__v4df) __v1_old, __addr, (__v4di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i64gather_epi64( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div4di ((__v4di) __v1_old, __addr, (__v4di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i64gather_ps( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div4sf ((__v4sf) __v1_old, __addr, (__v2di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i64gather_epi32( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div4si ((__v4si) __v1_old, __addr, (__v2di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i64gather_ps( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div8sf ((__v4sf) __v1_old, __addr, (__v4di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i64gather_epi32( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3div8si ((__v4si) __v1_old, __addr, (__v4di) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i32gather_pd( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv2df ((__v2df) __v1_old, __addr, (__v4si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i32gather_epi64( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv2di ((__v2di) __v1_old, __addr, (__v4si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i32gather_pd( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv4df ((__v4df) __v1_old, __addr, (__v4si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i32gather_epi64( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv4di ((__v4di) __v1_old, __addr, (__v4si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i32gather_ps( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv4sf ((__v4sf) __v1_old, __addr, (__v4si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm_mmask_i32gather_epi32( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv4si ((__v4si) __v1_old, __addr, (__v4si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i32gather_ps( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv8sf ((__v8sf) __v1_old, __addr, (__v8si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#define _mm256_mmask_i32gather_epi32( __v1_old, __mask, __index, __addr, __scale) __extension__ ({\
|
||||
__builtin_ia32_gather3siv8si ((__v8si) __v1_old, __addr, (__v8si) __index,\
|
||||
__mask, __scale);\
|
||||
})
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS_BOTH
|
||||
|
||||
|
|
|
@ -87,6 +87,8 @@ _mm256_cvtph_ps(__m128i __a)
|
|||
|
||||
#include <avx512vbmivlintrin.h>
|
||||
|
||||
#include <avx512pfintrin.h>
|
||||
|
||||
#include <pkuintrin.h>
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
|
||||
|
|
|
@ -4275,3 +4275,100 @@ __m512 test_mm512_maskz_getexp_ps(__mmask16 __U, __m512 __A) {
|
|||
// CHECK: @llvm.x86.avx512.mask.getexp.ps.512
|
||||
return _mm512_maskz_getexp_ps(__U, __A);
|
||||
}
|
||||
|
||||
__m256 test_mm512_i64gather_ps(__m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i64gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather.qps.512
|
||||
return _mm512_i64gather_ps(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256 test_mm512_mask_i64gather_ps(__m256 __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i64gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather.qps.512
|
||||
return _mm512_mask_i64gather_ps(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256i test_mm512_i64gather_epi32(__m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i64gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather.qpi.512
|
||||
return _mm512_i64gather_epi32(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256i test_mm512_mask_i64gather_epi32(__m256i __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i64gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather.qpi.512
|
||||
return _mm512_mask_i64gather_epi32(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512d test_mm512_i64gather_pd(__m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i64gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather.qpd.512
|
||||
return _mm512_i64gather_pd(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512d test_mm512_mask_i64gather_pd(__m512d __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i64gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather.qpd.512
|
||||
return _mm512_mask_i64gather_pd(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512i test_mm512_i64gather_epi64(__m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i64gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather.qpq.512
|
||||
return _mm512_i64gather_epi64(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512i test_mm512_mask_i64gather_epi64(__m512i __v1_old, __mmask8 __mask, __m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i64gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather.qpq.512
|
||||
return _mm512_mask_i64gather_epi64(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512 test_mm512_i32gather_ps(__m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i32gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather.dps.512
|
||||
return _mm512_i32gather_ps(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512 test_mm512_mask_i32gather_ps(__m512 v1_old, __mmask16 __mask, __m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i32gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather.dps.512
|
||||
return _mm512_mask_i32gather_ps(v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512i test_mm512_i32gather_epi32(__m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i32gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather.dpi.512
|
||||
return _mm512_i32gather_epi32(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512i test_mm512_mask_i32gather_epi32(__m512i __v1_old, __mmask16 __mask, __m512i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i32gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather.dpi.512
|
||||
return _mm512_mask_i32gather_epi32(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512d test_mm512_i32gather_pd(__m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i32gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather.dpd.512
|
||||
return _mm512_i32gather_pd(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512d test_mm512_mask_i32gather_pd(__m512d __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i32gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather.dpd.512
|
||||
return _mm512_mask_i32gather_pd(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512i test_mm512_i32gather_epi64(__m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_i32gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather.dpq.512
|
||||
return _mm512_i32gather_epi64(__index, __addr, 2);
|
||||
}
|
||||
|
||||
__m512i test_mm512_mask_i32gather_epi64(__m512i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm512_mask_i32gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather.dpq.512
|
||||
return _mm512_mask_i32gather_epi64(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx512pf -emit-llvm -o - -Werror | FileCheck %s
|
||||
|
||||
// Don't include mm_malloc.h, it's system specific.
|
||||
#define __MM_MALLOC_H
|
||||
|
||||
#include <immintrin.h>
|
||||
|
||||
void test_mm512_mask_prefetch_i32gather_pd(__m256i index, __mmask8 mask, void const *addr, int hint) {
|
||||
// CHECK-LABEL: @test_mm512_mask_prefetch_i32gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gatherpf.dpd
|
||||
return _mm512_mask_prefetch_i32gather_pd(index, mask, addr, 2, 1);
|
||||
}
|
||||
|
||||
void test_mm512_mask_prefetch_i32gather_ps(__m512i index, __mmask16 mask, void const *addr, int hint) {
|
||||
// CHECK-LABEL: @test_mm512_mask_prefetch_i32gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gatherpf.dps
|
||||
return _mm512_mask_prefetch_i32gather_ps(index, mask, addr, 2, 1);
|
||||
}
|
||||
|
||||
void test_mm512_mask_prefetch_i64gather_pd(__m512i index, __mmask8 mask, void const *addr, int hint) {
|
||||
// CHECK-LABEL: @test_mm512_mask_prefetch_i64gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gatherpf.qpd
|
||||
return _mm512_mask_prefetch_i64gather_pd(index, mask, addr, 2, 1);
|
||||
}
|
||||
|
||||
void test_mm512_mask_prefetch_i64gather_ps(__m512i index, __mmask8 mask, void const *addr, int hint) {
|
||||
// CHECK-LABEL: @test_mm512_mask_prefetch_i64gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gatherpf.qps
|
||||
return _mm512_mask_prefetch_i64gather_ps(index, mask, addr, 2, 1);
|
||||
}
|
|
@ -6262,3 +6262,99 @@ __m256 test_mm256_maskz_getmant_ps(__mmask8 __U, __m256 __A) {
|
|||
// CHECK: @llvm.x86.avx512.mask.getmant.ps.256
|
||||
return _mm256_maskz_getmant_ps(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan);
|
||||
}
|
||||
|
||||
__m128d test_mm_mmask_i64gather_pd(__m128d __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mmask_i64gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather3div2.df
|
||||
return _mm_mmask_i64gather_pd(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128i test_mm_mmask_i64gather_epi64(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mmask_i64gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather3div2.di
|
||||
return _mm_mmask_i64gather_epi64(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256d test_mm256_mmask_i64gather_pd(__m256d __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mmask_i64gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather3div4.df
|
||||
return _mm256_mmask_i64gather_pd(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256i test_mm256_mmask_i64gather_epi64(__m256i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mmask_i64gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather3div4.di
|
||||
return _mm256_mmask_i64gather_epi64(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128 test_mm_mmask_i64gather_ps(__m128 __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mmask_i64gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather3div4.sf
|
||||
return _mm_mmask_i64gather_ps(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128i test_mm_mmask_i64gather_epi32(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mmask_i64gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather3div4.si
|
||||
return _mm_mmask_i64gather_epi32(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128 test_mm256_mmask_i64gather_ps(__m128 __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mmask_i64gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather3div8.sf
|
||||
return _mm256_mmask_i64gather_ps(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128i test_mm256_mmask_i64gather_epi32(__m128i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mmask_i64gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather3div8.si
|
||||
return _mm256_mmask_i64gather_epi32(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128d test_mm_mask_i32gather_pd(__m128d __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mask_i32gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather3siv2.df
|
||||
return _mm_mmask_i32gather_pd(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128i test_mm_mask_i32gather_epi64(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mask_i32gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather3siv2.di
|
||||
return _mm_mmask_i32gather_epi64(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256d test_mm256_mask_i32gather_pd(__m256d __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mask_i32gather_pd
|
||||
// CHECK: @llvm.x86.avx512.gather3siv4.df
|
||||
return _mm256_mmask_i32gather_pd(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256i test_mm256_mask_i32gather_epi64(__m256i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mask_i32gather_epi64
|
||||
// CHECK: @llvm.x86.avx512.gather3siv4.di
|
||||
return _mm256_mmask_i32gather_epi64(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128 test_mm_mask_i32gather_ps(__m128 __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mask_i32gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather3siv4.sf
|
||||
return _mm_mmask_i32gather_ps(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m128i test_mm_mask_i32gather_epi32(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm_mask_i32gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather3siv4.si
|
||||
return _mm_mmask_i32gather_epi32(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256 test_mm256_mask_i32gather_ps(__m256 __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mask_i32gather_ps
|
||||
// CHECK: @llvm.x86.avx512.gather3siv8.sf
|
||||
return _mm256_mmask_i32gather_ps(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
||||
__m256i test_mm256_mask_i32gather_epi32(__m256i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) {
|
||||
// CHECK-LABEL: @test_mm256_mask_i32gather_epi32
|
||||
// CHECK: @llvm.x86.avx512.gather3siv8.si
|
||||
return _mm256_mmask_i32gather_epi32(__v1_old, __mask, __index, __addr, 2);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue