225 lines · c
1// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s4// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s5 6// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s7// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s8// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s9// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s10 11#include <immintrin.h>12#include "builtin_test_helpers.h"13 14 15__m128i test_mm_madd52hi_epu64(__m128i __X, __m128i __Y, __m128i __Z) {16// CHECK-LABEL: test_mm_madd52hi_epu6417// CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})18 return _mm_madd52hi_epu64(__X, __Y, __Z);19}20 21TEST_CONSTEXPR(match_v2di(_mm_madd52hi_epu64(22 (__m128i)((__v2du){50, 100}),23 (__m128i)((__v2du){10, 20}),24 (__m128i)((__v2du){5, 6})),25 50, 100));26 27TEST_CONSTEXPR(match_v2di(_mm_madd52hi_epu64(28 (__m128i)((__v2du){0, 0}),29 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0}),30 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0})),31 0xFFFFFFFFFFFFEull, 0));32 33__m256i test_mm256_madd52hi_epu64(__m256i __X, __m256i __Y, __m256i __Z) {34// CHECK-LABEL: test_mm256_madd52hi_epu6435// CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})36 return _mm256_madd52hi_epu64(__X, __Y, __Z);37}38 39TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_epu64(40 (__m256i)((__v4du){100, 200, 300, 400}),41 (__m256i)((__v4du){10, 20, 30, 40}),42 (__m256i)((__v4du){5, 6, 7, 8})),43 100, 200, 300, 400));44 45TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_epu64(46 (__m256i)((__v4du){0, 0, 0, 0}),47 (__m256i)((__v4du){0xFFFFFFFFFFFFFull,48 0xFFFFFFFFFFFFFull, 0, 0}),49 (__m256i)((__v4du){0xFFFFFFFFFFFFFull,50 0xFFFFFFFFFFFFFull, 0, 0})),51 0xFFFFFFFFFFFFEull, 0xFFFFFFFFFFFFEull, 0, 0));52 53__m128i test_mm_madd52lo_epu64(__m128i __X, __m128i __Y, __m128i __Z) {54// CHECK-LABEL: test_mm_madd52lo_epu6455// CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})56 return _mm_madd52lo_epu64(__X, __Y, __Z);57}58 59TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64(60 (__m128i)((__v2du){0, 0}),61 (__m128i)((__v2du){10, 0}),62 (__m128i)((__v2du){5, 0})),63 50, 0));64 65TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64(66 (__m128i)((__v2du){1, 2}),67 (__m128i)((__v2du){10, 20}),68 (__m128i)((__v2du){2, 3})),69 21, 62));70 71TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64(72 (__m128i)((__v2du){0, 0}),73 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0}),74 (__m128i)((__v2du){1, 0})),75 0xFFFFFFFFFFFFFull, 0));76 77__m256i test_mm256_madd52lo_epu64(__m256i __X, __m256i __Y, __m256i __Z) {78// CHECK-LABEL: test_mm256_madd52lo_epu6479// CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})80 return _mm256_madd52lo_epu64(__X, __Y, __Z);81}82 83TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_epu64(84 (__m256i)((__v4du){1, 2, 3, 4}),85 (__m256i)((__v4du){10, 20, 30, 40}),86 (__m256i)((__v4du){2, 3, 4, 5})),87 21, 62, 123, 204));88 89TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_epu64(90 (__m256i)((__v4du){0, 0, 0, 0}),91 (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0,92 0}),93 (__m256i)((__v4du){1, 0, 0, 0})),94 0xFFFFFFFFFFFFFull, 0, 0, 0));95 96TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_epu64(97 (__m256i)((__v4du){0, 0, 0, 0}),98 (__m256i)((__v4du){0x1F000000000000ull, 0, 0,99 0}),100 (__m256i)((__v4du){2, 0, 0, 0})),101 0xE000000000000ull, 0, 0, 0));102 103__m128i test_mm_madd52hi_avx_epu64(__m128i __X, __m128i __Y, __m128i __Z) {104 // CHECK-LABEL: test_mm_madd52hi_avx_epu64105 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})106 return _mm_madd52hi_avx_epu64(__X, __Y, __Z);107}108 109TEST_CONSTEXPR(match_v2di(_mm_madd52hi_avx_epu64(110 (__m128i)((__v2du){50, 100}),111 (__m128i)((__v2du){10, 20}),112 (__m128i)((__v2du){5, 6})),113 50, 100));114 115TEST_CONSTEXPR(match_v2di(_mm_madd52hi_avx_epu64(116 (__m128i)((__v2du){100, 0}),117 (__m128i)((__v2du){10, 0}),118 (__m128i)((__v2du){5, 0})),119 100, 0));120 121TEST_CONSTEXPR(match_v2di(_mm_madd52hi_avx_epu64(122 (__m128i)((__v2du){0, 0}),123 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0}),124 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0})),125 0xFFFFFFFFFFFFEull, 0));126 127__m256i test_mm256_madd52hi_avx_epu64(__m256i __X, __m256i __Y, __m256i __Z) {128 // CHECK-LABEL: test_mm256_madd52hi_avx_epu64129 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})130 return _mm256_madd52hi_avx_epu64(__X, __Y, __Z);131}132 133TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_avx_epu64(134 (__m256i)((__v4du){0, 0, 0, 0}),135 (__m256i)((__v4du){0xFFFFFFFFFFFFFull,136 0xFFFFFFFFFFFFFull, 0, 0}),137 (__m256i)((__v4du){0xFFFFFFFFFFFFFull,138 0xFFFFFFFFFFFFFull, 0, 0})),139 0xFFFFFFFFFFFFEull, 0xFFFFFFFFFFFFEull, 0, 0));140 141TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_avx_epu64(142 (__m256i)((__v4du){100, 200, 300, 400}),143 (__m256i)((__v4du){10, 20, 30, 40}),144 (__m256i)((__v4du){5, 6, 7, 8})),145 100, 200, 300, 400));146 147TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_avx_epu64(148 (__m256i)((__v4du){0, 0, 0, 0}),149 (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0,150 0}),151 (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0,152 0})),153 0xFFFFFFFFFFFFEull, 0, 0, 0));154 155__m128i test_mm_madd52lo_avx_epu64(__m128i __X, __m128i __Y, __m128i __Z) {156 // CHECK-LABEL: test_mm_madd52lo_avx_epu64157 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})158 return _mm_madd52lo_avx_epu64(__X, __Y, __Z);159}160 161TEST_CONSTEXPR(match_v2di(_mm_madd52lo_avx_epu64(162 (__m128i)((__v2du){0, 0}),163 (__m128i)((__v2du){10, 0}),164 (__m128i)((__v2du){5, 0})),165 50, 0));166 167TEST_CONSTEXPR(match_v2di(_mm_madd52lo_avx_epu64(168 (__m128i)((__v2du){100, 0}),169 (__m128i)((__v2du){20, 0}),170 (__m128i)((__v2du){30, 0})),171 700, 0));172 173TEST_CONSTEXPR(match_v2di(_mm_madd52lo_avx_epu64(174 (__m128i)((__v2du){1, 2}),175 (__m128i)((__v2du){10, 20}),176 (__m128i)((__v2du){2, 3})),177 21, 62));178 179TEST_CONSTEXPR(match_v2di(_mm_madd52lo_avx_epu64(180 (__m128i)((__v2du){0, 0}),181 (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0}),182 (__m128i)((__v2du){1, 0})),183 0xFFFFFFFFFFFFFull, 0));184 185__m256i test_mm256_madd52lo_avx_epu64(__m256i __X, __m256i __Y, __m256i __Z) {186 // CHECK-LABEL: test_mm256_madd52lo_avx_epu64187 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})188 return _mm256_madd52lo_avx_epu64(__X, __Y, __Z);189}190 191TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_avx_epu64(192 (__m256i)((__v4du){1, 2, 3, 4}),193 (__m256i)((__v4du){10, 20, 30, 40}),194 (__m256i)((__v4du){2, 3, 4, 5})),195 21, 62, 123, 204));196 197 198 199TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_avx_epu64(200 (__m256i)((__v4du){0, 0, 0, 0}),201 (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0,202 0}),203 (__m256i)((__v4du){1, 0, 0, 0})),204 0xFFFFFFFFFFFFFull, 0, 0, 0));205 206TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_avx_epu64(207 (__m256i)((__v4du){0, 0, 0, 0}),208 (__m256i)((__v4du){0x1F000000000000ull, 0, 0,209 0}),210 (__m256i)((__v4du){2, 0, 0, 0})),211 0xE000000000000ull, 0, 0, 0));212 213TEST_CONSTEXPR(match_v2di(_mm_madd52lo_avx_epu64(214 (__m128i)((__v2du){5, 10}),215 (__m128i)((__v2du){100, 200}),216 (__m128i)((__v2du){7, 8})),217 705, 1610));218 219TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_avx_epu64(220 (__m256i)((__v4du){1, 2, 3, 4}),221 (__m256i)((__v4du){10, 20, 30, 40}),222 (__m256i)((__v4du){2, 3, 4, 5})),223 21, 62, 123, 204));224 225