brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.1 KiB · 1cbb580 Raw
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