249 lines · c
1// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=i386-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s4// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=i386-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s5 6// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s7// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=i386-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s8// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s9// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=i386-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s10 11#include <immintrin.h>12#include "builtin_test_helpers.h"13 14__m128i test_mm_madd52hi_epu64(__m128i __X, __m128i __Y, __m128i __Z) {15 // CHECK-LABEL: test_mm_madd52hi_epu6416 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})17 return _mm_madd52hi_epu64(__X, __Y, __Z);18}19 20TEST_CONSTEXPR(match_v2di(_mm_madd52hi_epu64(21 (__m128i)((__v2du){100, 0}),22 (__m128i)((__v2du){10, 0}),23 (__m128i)((__v2du){5, 0})),24 100, 0));25 26TEST_CONSTEXPR(match_v2di(_mm_madd52hi_epu64(27 (__m128i)((__v2du){0, 0}),28 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0}),29 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0})),30 0xFFFFFFFFFFFFEull, 0));31 32__m128i test_mm_mask_madd52hi_epu64(__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) {33 // CHECK-LABEL: test_mm_mask_madd52hi_epu6434 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})35 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}36 return _mm_mask_madd52hi_epu64(__W, __M, __X, __Y);37}38 39TEST_CONSTEXPR(match_v2di(_mm_mask_madd52hi_epu64((__m128i)((__v2du){111, 222}),40 0x0,41 (__m128i)((__v2du){1, 2}),42 (__m128i)((__v2du){10, 20})),43 111, 222));44 45TEST_CONSTEXPR(match_v2di(_mm_mask_madd52hi_epu64((__m128i)((__v2du){10, 20}),46 0x2,47 (__m128i)((__v2du){0x1000000000000ULL, 0x1000000000000ULL}),48 (__m128i)((__v2du){0x1000000000000ULL, 0x1000000000000ULL})),49 10, 0x100000000014ULL));50 51__m128i test_mm_maskz_madd52hi_epu64(__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z) {52 // CHECK-LABEL: test_mm_maskz_madd52hi_epu6453 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})54 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}55 return _mm_maskz_madd52hi_epu64(__M, __X, __Y, __Z);56}57 58TEST_CONSTEXPR(match_v2di(_mm_maskz_madd52hi_epu64(0x3,59 (__m128i)((__v2du){1, 2}),60 (__m128i)((__v2du){10, 20}),61 (__m128i)((__v2du){100, 200})),62 1, 2));63 64TEST_CONSTEXPR(match_v2di(_mm_maskz_madd52hi_epu64(0x1,65 (__m128i)((__v2du){0x1000000000000ULL, 0x1000000000000ULL}),66 (__m128i)((__v2du){0x1000000000000ULL, 0x1000000000000ULL}),67 (__m128i)((__v2du){0, 0})),68 0x1000000000000ULL, 0));69 70__m256i test_mm256_madd52hi_epu64(__m256i __X, __m256i __Y, __m256i __Z) {71 // CHECK-LABEL: test_mm256_madd52hi_epu6472 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})73 return _mm256_madd52hi_epu64(__X, __Y, __Z);74}75 76TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_epu64(77 (__m256i)((__v4du){100, 200, 300, 400}),78 (__m256i)((__v4du){10, 20, 30, 40}),79 (__m256i)((__v4du){5, 6, 7, 8})),80 100, 200, 300, 400));81 82TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_epu64(83 (__m256i)((__v4du){0, 0, 0, 0}),84 (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0,85 0}),86 (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0,87 0})),88 0xFFFFFFFFFFFFEull, 0, 0, 0));89 90__m256i test_mm256_mask_madd52hi_epu64(__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) {91 // CHECK-LABEL: test_mm256_mask_madd52hi_epu6492 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})93 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}94 return _mm256_mask_madd52hi_epu64(__W, __M, __X, __Y);95}96 97TEST_CONSTEXPR(match_v4di(_mm256_mask_madd52hi_epu64((__m256i)((__v4du){111, 222, 333, 444}),98 0x0,99 (__m256i)((__v4du){1, 2, 3, 4}),100 (__m256i)((__v4du){10, 20, 30, 40})),101 111, 222, 333, 444));102 103TEST_CONSTEXPR(match_v4di(_mm256_mask_madd52hi_epu64((__m256i)((__v4du){10, 20, 30, 40}),104 0xA,105 (__m256i)((__v4du){0x1000000000000ULL, 0x1000000000000ULL,106 0x1000000000000ULL, 0x1000000000000ULL}),107 (__m256i)((__v4du){0x1000000000000ULL, 0x1000000000000ULL,108 0x1000000000000ULL, 0x1000000000000ULL})),109 10, 0x100000000014ULL, 30, 0x100000000028ULL));110 111__m256i test_mm256_maskz_madd52hi_epu64(__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z) {112 // CHECK-LABEL: test_mm256_maskz_madd52hi_epu64113 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})114 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}115 return _mm256_maskz_madd52hi_epu64(__M, __X, __Y, __Z);116}117 118TEST_CONSTEXPR(match_v4di(_mm256_maskz_madd52hi_epu64(0xF,119 (__m256i)((__v4du){1, 2, 3, 4}),120 (__m256i)((__v4du){10, 20, 30, 40}),121 (__m256i)((__v4du){100, 200, 300, 400})),122 1, 2, 3, 4));123 124TEST_CONSTEXPR(match_v4di(_mm256_maskz_madd52hi_epu64(0x5,125 (__m256i)((__v4du){0x1000000000000ULL, 0x1000000000000ULL,126 0x1000000000000ULL, 0x1000000000000ULL}),127 (__m256i)((__v4du){0x1000000000000ULL, 0x1000000000000ULL,128 0x1000000000000ULL, 0x1000000000000ULL}),129 (__m256i)((__v4du){0, 0, 0, 0})),130 0x1000000000000ULL, 0, 0x1000000000000ULL, 0));131 132__m128i test_mm_madd52lo_epu64(__m128i __X, __m128i __Y, __m128i __Z) {133 // CHECK-LABEL: test_mm_madd52lo_epu64134 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})135 return _mm_madd52lo_epu64(__X, __Y, __Z);136}137 138TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64(139 (__m128i)((__v2du){0, 0}),140 (__m128i)((__v2du){10, 0}),141 (__m128i)((__v2du){5, 0})),142 50, 0));143 144TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64(145 (__m128i)((__v2du){100, 0}),146 (__m128i)((__v2du){20, 0}),147 (__m128i)((__v2du){30, 0})),148 700, 0));149 150TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64(151 (__m128i)((__v2du){1, 2}),152 (__m128i)((__v2du){10, 20}),153 (__m128i)((__v2du){2, 3})),154 21, 62));155 156__m128i test_mm_mask_madd52lo_epu64(__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) {157 // CHECK-LABEL: test_mm_mask_madd52lo_epu64158 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})159 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}160 return _mm_mask_madd52lo_epu64(__W, __M, __X, __Y);161}162 163TEST_CONSTEXPR(match_v2di(_mm_mask_madd52lo_epu64((__m128i)((__v2du){1000, 2000}),164 0x3,165 (__m128i)((__v2du){100, 200}),166 (__m128i)((__v2du){20, 30})),167 3000, 8000));168 169TEST_CONSTEXPR(match_v2di(_mm_mask_madd52lo_epu64((__m128i)((__v2du){111, 222}),170 0x0,171 (__m128i)((__v2du){1, 2}),172 (__m128i)((__v2du){10, 20})),173 111, 222));174 175__m128i test_mm_maskz_madd52lo_epu64(__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z) {176 // CHECK-LABEL: test_mm_maskz_madd52lo_epu64177 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})178 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}179 return _mm_maskz_madd52lo_epu64(__M, __X, __Y, __Z);180}181 182TEST_CONSTEXPR(match_v2di(_mm_maskz_madd52lo_epu64(0x3,183 (__m128i)((__v2du){100, 200}),184 (__m128i)((__v2du){20, 30}),185 (__m128i)((__v2du){30, 40})),186 700, 1400));187 188TEST_CONSTEXPR(match_v2di(_mm_maskz_madd52lo_epu64(0x1,189 (__m128i)((__v2du){100, 0}),190 (__m128i)((__v2du){20, 0}),191 (__m128i)((__v2du){30, 0})),192 700, 0));193 194__m256i test_mm256_madd52lo_epu64(__m256i __X, __m256i __Y, __m256i __Z) {195 // CHECK-LABEL: test_mm256_madd52lo_epu64196 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})197 return _mm256_madd52lo_epu64(__X, __Y, __Z);198}199 200TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_epu64(201 (__m256i)((__v4du){1, 2, 3, 4}),202 (__m256i)((__v4du){10, 20, 30, 40}),203 (__m256i)((__v4du){2, 3, 4, 5})),204 21, 62, 123, 204));205 206__m256i test_mm256_mask_madd52lo_epu64(__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) {207 // CHECK-LABEL: test_mm256_mask_madd52lo_epu64208 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})209 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}210 return _mm256_mask_madd52lo_epu64(__W, __M, __X, __Y);211}212 213TEST_CONSTEXPR(match_v4di(_mm256_mask_madd52lo_epu64((__m256i)((__v4du){1000, 2000, 3000, 4000}),214 0xF,215 (__m256i)((__v4du){100, 200, 300, 400}),216 (__m256i)((__v4du){20, 30, 40, 50})),217 3000, 8000, 15000, 24000));218 219TEST_CONSTEXPR(match_v4di(_mm256_mask_madd52lo_epu64((__m256i)((__v4du){111, 222, 333, 444}),220 0x0,221 (__m256i)((__v4du){1, 2, 3, 4}),222 (__m256i)((__v4du){10, 20, 30, 40})),223 111, 222, 333, 444));224 225TEST_CONSTEXPR(match_v4di(_mm256_mask_madd52lo_epu64((__m256i)((__v4du){11, 22, 33, 44}),226 0x5,227 (__m256i)((__v4du){100, 200, 300, 400}),228 (__m256i)((__v4du){10, 20, 30, 40})),229 1011, 22, 9033, 44));230 231__m256i test_mm256_maskz_madd52lo_epu64(__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z) {232 // CHECK-LABEL: test_mm256_maskz_madd52lo_epu64233 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})234 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}235 return _mm256_maskz_madd52lo_epu64(__M, __X, __Y, __Z);236}237 238TEST_CONSTEXPR(match_v4di(_mm256_maskz_madd52lo_epu64(0xF,239 (__m256i)((__v4du){100, 200, 300, 400}),240 (__m256i)((__v4du){20, 30, 40, 50}),241 (__m256i)((__v4du){30, 40, 50, 60})),242 700, 1400, 2300, 3400));243 244TEST_CONSTEXPR(match_v4di(_mm256_maskz_madd52lo_epu64(0x9,245 (__m256i)((__v4du){100, 200, 300, 400}),246 (__m256i)((__v4du){10, 20, 30, 40}),247 (__m256i)((__v4du){5, 10, 15, 20})),248 150, 0, 0, 1200));249