238 lines · c
1// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s4// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s5 6// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s7// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s8// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s9// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s10 11#include <immintrin.h>12#include "builtin_test_helpers.h"13 14__m512i test_mm512_madd52hi_epu64(__m512i __X, __m512i __Y, __m512i __Z) {15 // CHECK-LABEL: test_mm512_madd52hi_epu6416 // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52h.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})17 return _mm512_madd52hi_epu64(__X, __Y, __Z);18}19 20TEST_CONSTEXPR(match_v8di(_mm512_madd52hi_epu64(21 (__m512i)(__v8du){100, 0, 0, 0, 0, 0, 0, 0},22 (__m512i)(__v8du){10, 0, 0, 0, 0, 0, 0, 0},23 (__m512i)(__v8du){5, 0, 0, 0, 0, 0, 0, 0}),24 100, 0, 0, 0, 0, 0, 0, 0));25 26TEST_CONSTEXPR(match_v8di(_mm512_madd52hi_epu64(27 (__m512i)(__v8du){0, 0, 0, 0, 0, 0, 0, 0},28 (__m512i)(__v8du){0xFFFFFFFFFFFFFull, 0, 0, 0,29 0, 0, 0, 0},30 (__m512i)(__v8du){0xFFFFFFFFFFFFFull, 0, 0, 0,31 0, 0, 0, 0}),32 0xFFFFFFFFFFFFEull, 0, 0, 0, 0, 0, 0, 0));33 34TEST_CONSTEXPR(match_v8di(_mm512_madd52hi_epu64(35 (__m512i)(__v8du){1, 2, 3, 4, 5, 6, 7, 8},36 (__m512i)(__v8du){0xFFFFFFFFFFFFFull,37 0xFFFFFFFFFFFFFull,38 0xFFFFFFFFFFFFFull,39 0xFFFFFFFFFFFFFull,40 0xFFFFFFFFFFFFFull,41 0xFFFFFFFFFFFFFull,42 0xFFFFFFFFFFFFFull,43 0xFFFFFFFFFFFFFull},44 (__m512i)(__v8du){0xFFFFFFFFFFFFFull,45 0xFFFFFFFFFFFFFull,46 0xFFFFFFFFFFFFFull,47 0xFFFFFFFFFFFFFull,48 0xFFFFFFFFFFFFFull,49 0xFFFFFFFFFFFFFull,50 0xFFFFFFFFFFFFFull,51 0xFFFFFFFFFFFFFull}),52 4503599627370495ull, 4503599627370496ull,53 4503599627370497ull, 4503599627370498ull,54 4503599627370499ull, 4503599627370500ull,55 4503599627370501ull, 4503599627370502ull));56 57__m512i test_mm512_mask_madd52hi_epu64(__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) {58 // CHECK-LABEL: test_mm512_mask_madd52hi_epu6459 // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52h.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})60 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}61 return _mm512_mask_madd52hi_epu64(__W, __M, __X, __Y);62}63 64TEST_CONSTEXPR(match_v8di(_mm512_mask_madd52hi_epu64(65 (__m512i)(__v8du){111, 222, 333, 444, 555, 666,66 777, 888},67 0x00,68 (__m512i)(__v8du){1, 2, 3, 4, 5, 6, 7, 8},69 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,70 80}),71 111, 222, 333, 444, 555, 666, 777, 888));72 73TEST_CONSTEXPR(match_v8di(_mm512_mask_madd52hi_epu64(74 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,75 80},76 0xFF,77 (__m512i)(__v8du){100, 200, 300, 400, 500, 600,78 700, 800},79 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,80 80}),81 10, 20, 30, 40, 50, 60, 70, 80));82 83__m512i test_mm512_maskz_madd52hi_epu64(__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z) {84 // CHECK-LABEL: test_mm512_maskz_madd52hi_epu6485 // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52h.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})86 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}87 return _mm512_maskz_madd52hi_epu64(__M, __X, __Y, __Z);88}89 90TEST_CONSTEXPR(match_v8di(_mm512_maskz_madd52hi_epu64(91 0x00,92 (__m512i)(__v8du){1, 2, 3, 4, 5, 6, 7, 8},93 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,94 80},95 (__m512i)(__v8du){100, 200, 300, 400, 500, 600,96 700, 800}),97 0, 0, 0, 0, 0, 0, 0, 0));98 99TEST_CONSTEXPR(match_v8di(_mm512_maskz_madd52hi_epu64(100 0xFF,101 (__m512i)(__v8du){1, 2, 3, 4, 5, 6, 7, 8},102 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,103 80},104 (__m512i)(__v8du){100, 200, 300, 400, 500, 600,105 700, 800}),106 1, 2, 3, 4, 5, 6, 7, 8));107 108__m512i test_mm512_madd52lo_epu64(__m512i __X, __m512i __Y, __m512i __Z) {109 // CHECK-LABEL: test_mm512_madd52lo_epu64110 // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52l.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})111 return _mm512_madd52lo_epu64(__X, __Y, __Z);112}113 114TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(115 (__m512i)(__v8du){0, 0, 0, 0, 0, 0, 0, 0},116 (__m512i)(__v8du){10, 0, 0, 0, 0, 0, 0, 0},117 (__m512i)(__v8du){5, 0, 0, 0, 0, 0, 0, 0}),118 50, 0, 0, 0, 0, 0, 0, 0));119 120TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(121 (__m512i)(__v8du){100, 0, 0, 0, 0, 0, 0, 0},122 (__m512i)(__v8du){20, 0, 0, 0, 0, 0, 0, 0},123 (__m512i)(__v8du){30, 0, 0, 0, 0, 0, 0, 0}),124 700, 0, 0, 0, 0, 0, 0, 0));125 126TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(127 (__m512i)(__v8du){0, 0, 0, 0, 0, 0, 0, 0},128 (__m512i)(__v8du){0xFFFFFFFFFFFFFull, 0, 0, 0,129 0, 0, 0, 0},130 (__m512i)(__v8du){1, 0, 0, 0, 0, 0, 0, 0}),131 0xFFFFFFFFFFFFFull, 0, 0, 0, 0, 0, 0, 0));132 133TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(134 (__m512i)(__v8du){0, 0, 0, 0, 0, 0, 0, 0},135 (__m512i)(__v8du){0x1F000000000000ull, 0, 0, 0,136 0, 0, 0, 0},137 (__m512i)(__v8du){2, 0, 0, 0, 0, 0, 0, 0}),138 0xE000000000000ull, 0, 0, 0, 0, 0, 0, 0));139 140TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(141 (__m512i)(__v8du){1, 2, 3, 4, 5, 6, 7, 8},142 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,143 80},144 (__m512i)(__v8du){2, 3, 4, 5, 6, 7, 8, 9}),145 21, 62, 123, 204, 305, 426, 567, 728));146 147TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(148 (__m512i)(__v8du){0xFFFFFFFFFFFFFull, 0, 0, 0,149 0, 0, 0, 0},150 (__m512i)(__v8du){10, 0, 0, 0, 0, 0, 0, 0},151 (__m512i)(__v8du){5, 0, 0, 0, 0, 0, 0, 0}),152 4503599627370545ull, 0, 0, 0, 0, 0, 0, 0));153 154TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(155 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,156 80},157 (__m512i)(__v8du){100, 200, 300, 400, 500, 600,158 700, 800},159 (__m512i)(__v8du){2, 3, 4, 5, 6, 7, 8, 9}),160 210, 620, 1230, 2040, 3050, 4260, 5670, 7280));161 162TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(163 (__m512i)(__v8du){0, 0, 0, 0, 0, 0, 0, 0},164 (__m512i)(__v8du){0x1F000000000000ull,165 0x1F000000000000ull, 0, 0, 0,166 0, 0, 0},167 (__m512i)(__v8du){2, 3, 0, 0, 0, 0, 0, 0}),168 0xE000000000000ull, 0xD000000000000ull, 0, 0, 0, 0,169 0, 0));170 171TEST_CONSTEXPR(match_v8di(_mm512_madd52lo_epu64(172 (__m512i)(__v8du){0, 0, 0, 0, 0, 0, 0, 0},173 (__m512i)(__v8du){0xFFFFFFFFFFFFFull,174 0xFFFFFFFFFFFFFull,175 0xFFFFFFFFFFFFFull,176 0xFFFFFFFFFFFFFull,177 0xFFFFFFFFFFFFFull,178 0xFFFFFFFFFFFFFull,179 0xFFFFFFFFFFFFFull,180 0xFFFFFFFFFFFFFull},181 (__m512i)(__v8du){1, 1, 1, 1, 1, 1, 1, 1}),182 0xFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFull,183 0xFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFull,184 0xFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFull,185 0xFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFull));186 187__m512i test_mm512_mask_madd52lo_epu64(__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) {188 // CHECK-LABEL: test_mm512_mask_madd52lo_epu64189 // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52l.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})190 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}191 return _mm512_mask_madd52lo_epu64(__W, __M, __X, __Y);192}193 194TEST_CONSTEXPR(match_v8di(_mm512_mask_madd52lo_epu64(195 (__m512i)(__v8du){111, 222, 333, 444, 555, 666,196 777, 888},197 0x00,198 (__m512i)(__v8du){1, 2, 3, 4, 5, 6, 7, 8},199 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,200 80}),201 111, 222, 333, 444, 555, 666, 777, 888));202 203TEST_CONSTEXPR(match_v8di(_mm512_mask_madd52lo_epu64(204 (__m512i)(__v8du){1000, 2000, 3000, 4000, 5000,205 6000, 7000, 8000},206 0xFF,207 (__m512i)(__v8du){100, 200, 300, 400, 500, 600,208 700, 800},209 (__m512i)(__v8du){20, 30, 40, 50, 60, 70, 80,210 90}),211 3000, 8000, 15000, 24000, 35000, 48000, 63000,212 80000));213 214__m512i test_mm512_maskz_madd52lo_epu64(__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z) {215 // CHECK-LABEL: test_mm512_maskz_madd52lo_epu64216 // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52l.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}})217 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}218 return _mm512_maskz_madd52lo_epu64(__M, __X, __Y, __Z);219}220 221TEST_CONSTEXPR(match_v8di(_mm512_maskz_madd52lo_epu64(222 0x00,223 (__m512i)(__v8du){1, 2, 3, 4, 5, 6, 7, 8},224 (__m512i)(__v8du){10, 20, 30, 40, 50, 60, 70,225 80},226 (__m512i)(__v8du){2, 3, 4, 5, 6, 7, 8, 9}),227 0, 0, 0, 0, 0, 0, 0, 0));228 229TEST_CONSTEXPR(match_v8di(_mm512_maskz_madd52lo_epu64(230 0xFF,231 (__m512i)(__v8du){100, 200, 300, 400, 500, 600,232 700, 800},233 (__m512i)(__v8du){20, 30, 40, 50, 60, 70, 80,234 90},235 (__m512i)(__v8du){30, 40, 50, 60, 70, 80, 90,236 100}),237 700, 1400, 2300, 3400, 4700, 6200, 7900, 9800));238