brintos

brintos / llvm-project-archived public Read only

0
0
Text · 103.6 KiB · 00bcf9c Raw
2307 lines · c
1// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X642// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X643// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X864// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X865// RUN: %clang_cc1 -x c -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X646// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X647// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X648// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X869// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X8610// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X6411 12// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X6413// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X6414// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X8615// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X8616// RUN: %clang_cc1 -x c -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X6417// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X6418// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X6419// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X8620// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X8621// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X6422 23 24#include <immintrin.h>25#include "builtin_test_helpers.h"26 27// NOTE: This should match the tests in llvm/test/CodeGen/X86/avx-intrinsics-fast-isel.ll28 29__m256d test_mm256_add_pd(__m256d A, __m256d B) {30  // CHECK-LABEL: test_mm256_add_pd31  // CHECK: fadd <4 x double>32  return _mm256_add_pd(A, B);33}34TEST_CONSTEXPR(match_m256d( _mm256_add_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-4.0, -5.0, +6.0, +7.0}), -8.0, -10.0, +12.0, +14.0));35 36__m256 test_mm256_add_ps(__m256 A, __m256 B) {37  // CHECK-LABEL: test_mm256_add_ps38  // CHECK: fadd <8 x float>39  return _mm256_add_ps(A, B);40}41TEST_CONSTEXPR(match_m256(_mm256_add_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}), -8.0f, -10.0f, +12.0f, +14.0f, +14.0f, +12.0f, -10.0f, -8.0f));42 43__m256d test_mm256_addsub_pd(__m256d A, __m256d B) {44  // CHECK-LABEL: test_mm256_addsub_pd45  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})46  return _mm256_addsub_pd(A, B);47}48TEST_CONSTEXPR(match_m256d(_mm256_addsub_pd((__m256d){+1.0, +2.0, +3.0, +4.0}, (__m256d){+1.0, +1.0, +1.0, +1.0}), +0.0, +3.0, +2.0, +5.0));49 50__m256 test_mm256_addsub_ps(__m256 A, __m256 B) {51  // CHECK-LABEL: test_mm256_addsub_ps52  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})53  return _mm256_addsub_ps(A, B);54}55TEST_CONSTEXPR(match_m256(_mm256_addsub_ps((__m256){+1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f}, (__m256){+1.0f, +1.0f, +1.0f, +1.0f, +1.0f, +1.0f, +1.0f, +1.0f}), +0.0f, +3.0f, +2.0f, +5.0f, +4.0f, +7.0f, +6.0f, +9.0f));56 57__m256d test_mm256_and_pd(__m256d A, __m256d B) {58  // CHECK-LABEL: test_mm256_and_pd59  // CHECK: and <4 x i64>60  return _mm256_and_pd(A, B);61}62TEST_CONSTEXPR(match_m256d(_mm256_and_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), +0.0, -0.0, +0.0, +7.0));63 64__m256 test_mm256_and_ps(__m256 A, __m256 B) {65  // CHECK-LABEL: test_mm256_and_ps66  // CHECK: and <8 x i32>67  return _mm256_and_ps(A, B);68}69TEST_CONSTEXPR(match_m256(_mm256_and_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), +0.0f, -0.0f, +0.0f, +7.0f, +7.0f, +0.0f, -0.0f, +0.0f));70 71__m256d test_mm256_andnot_pd(__m256d A, __m256d B) {72  // CHECK-LABEL: test_mm256_andnot_pd73  // CHECK: xor <4 x i64> %{{.*}}, splat (i64 -1)74  // CHECK: and <4 x i64>75  return _mm256_andnot_pd(A, B);76}77TEST_CONSTEXPR(match_m256d(_mm256_andnot_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), +0.0, +0.0, -0.0, +0.0));78 79__m256 test_mm256_andnot_ps(__m256 A, __m256 B) {80  // CHECK-LABEL: test_mm256_andnot_ps81  // CHECK: xor <8 x i32> %{{.*}}, splat (i32 -1)82  // CHECK: and <8 x i32>83  return _mm256_andnot_ps(A, B);84}85TEST_CONSTEXPR(match_m256(_mm256_andnot_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), +0.0f, +0.0f, -0.0f, +0.0f, +0.0f, -0.0f, +0.0f, +0.0f));86 87__m256d test_mm256_blend_pd(__m256d A, __m256d B) {88  // CHECK-LABEL: test_mm256_blend_pd89  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>90  return _mm256_blend_pd(A, B, 0x05);91}92TEST_CONSTEXPR(match_m256d(_mm256_blend_pd(((__m256d){1.0, 2.0, 3.0, 4.0}), ((__m256d){5.0, 6.0, 7.0, 8.0}), 0x00), 1.0, 2.0, 3.0, 4.0));93TEST_CONSTEXPR(match_m256d(_mm256_blend_pd(((__m256d){1.0, 2.0, 3.0, 4.0}), ((__m256d){5.0, 6.0, 7.0, 8.0}), 0x05), 5.0, 2.0, 7.0, 4.0));94TEST_CONSTEXPR(match_m256d(_mm256_blend_pd(((__m256d){1.0, 2.0, 3.0, 4.0}), ((__m256d){5.0, 6.0, 7.0, 8.0}), 0x0A), 1.0, 6.0, 3.0, 8.0));95TEST_CONSTEXPR(match_m256d(_mm256_blend_pd(((__m256d){1.0, 2.0, 3.0, 4.0}), ((__m256d){5.0, 6.0, 7.0, 8.0}), 0x0F), 5.0, 6.0, 7.0, 8.0));96 97__m256 test_mm256_blend_ps(__m256 A, __m256 B) {98  // CHECK-LABEL: test_mm256_blend_ps99  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 13, i32 6, i32 7>100  return _mm256_blend_ps(A, B, 0x35);101}102TEST_CONSTEXPR(match_m256(_mm256_blend_ps(((__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}), ((__m256){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f}), 0x00), 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));103TEST_CONSTEXPR(match_m256(_mm256_blend_ps(((__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}), ((__m256){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f}), 0x35), -1.0f, 2.0f, -3.0f, 4.0f, -5.0f, -6.0f, 7.0f, 8.0f));104TEST_CONSTEXPR(match_m256(_mm256_blend_ps(((__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}), ((__m256){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f}), 0xAA), 1.0f, -2.0f, 3.0f, -4.0f, 5.0f, -6.0f, 7.0f, -8.0f));105TEST_CONSTEXPR(match_m256(_mm256_blend_ps(((__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}), ((__m256){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f}), 0xFF), -1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f));106 107__m256d test_mm256_blendv_pd(__m256d V1, __m256d V2, __m256d V3) {108  // CHECK-LABEL: test_mm256_blendv_pd109  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})110  return _mm256_blendv_pd(V1, V2, V3);111}112TEST_CONSTEXPR(match_m256d(_mm256_blendv_pd((__m256d)(__v4df){1.0, 2.0, 3.0, 4.0},(__m256d)(__v4df){-100.0, -101.0, -102.0, -103.0},(__m256d)(__v4df){0.0, -1.0, 1.0, -1.0}), 1.0f, -101.0, 3.0, -103.0));113 114__m256 test_mm256_blendv_ps(__m256 V1, __m256 V2, __m256 V3) {115  // CHECK-LABEL: test_mm256_blendv_ps116  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})117  return _mm256_blendv_ps(V1, V2, V3);118}119TEST_CONSTEXPR(match_m256(_mm256_blendv_ps((__m256)(__v8sf){0.0f,1.0f,2.0f,3.0f,4.0f,5.0f,6.0f,7.0f},(__m256)(__v8sf){-100.0f, -101.0f, -102.0f, -103.0f, -104.0f, -105.0f, -106.0f, -107.0f},(__m256)(__v8sf){-1.0f, 2.0f, -3.0f, 4.0f, -5.0f, -6.0f, 7.0f, -0.0f}), -100.0f, 1.0f, -102.0f, 3.0f, -104.0f, -105.0f, 6.0f, -107.0f));120 121__m256d test_mm256_broadcast_pd(__m128d* A) {122  // CHECK-LABEL: test_mm256_broadcast_pd123  // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}124  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>125  return _mm256_broadcast_pd(A);126}127 128__m256 test_mm256_broadcast_ps(__m128* A) {129  // CHECK-LABEL: test_mm256_broadcast_ps130  // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}131  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>132  return _mm256_broadcast_ps(A);133}134 135__m256d test_mm256_broadcast_sd(double* A) {136  // CHECK-LABEL: test_mm256_broadcast_sd137  // CHECK: load double, ptr %{{.*}}, align 1{{$}}138  // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 0139  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1140  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2141  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3142  return _mm256_broadcast_sd(A);143}144 145__m128 test_mm_broadcast_ss(float* A) {146  // CHECK-LABEL: test_mm_broadcast_ss147  // CHECK: load float, ptr %{{.*}}, align 1{{$}}148  // CHECK: insertelement <4 x float> poison, float %{{.*}}, i32 0149  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 1150  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 2151  // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 3152  return _mm_broadcast_ss(A);153}154 155__m256 test_mm256_broadcast_ss(float* A) {156  // CHECK-LABEL: test_mm256_broadcast_ss157  // CHECK: load float, ptr %{{.*}}, align 1{{$}}158  // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 0159  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1160  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2161  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3162  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4163  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5164  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6165  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7166  return _mm256_broadcast_ss(A);167}168 169__m256 test_mm256_castpd_ps(__m256d A) {170  // CHECK-LABEL: test_mm256_castpd_ps171  return _mm256_castpd_ps(A);172}173TEST_CONSTEXPR(match_m256(_mm256_castpd_ps((__m256d){-1.0, +2.0, +4.0, -6.0}), +0.0f, -1.875f, +0.0f, +2.0f, +0.0f, +2.25f, 0.0f, -2.375f));174 175__m256i test_mm256_castpd_si256(__m256d A) {176  // CHECK-LABEL: test_mm256_castpd_si256177  return _mm256_castpd_si256(A);178}179TEST_CONSTEXPR(match_m256i(_mm256_castpd_si256((__m256d){-1.0, +2.0, -3.0, +4.0}), 0xBFF0000000000000ULL, 0x4000000000000000ULL, 0xC008000000000000ULL, 0x4010000000000000ULL));180 181__m256d test_mm256_castpd128_pd256(__m128d A) {182  // CHECK-LABEL: test_mm256_castpd128_pd256183  // CHECK: [[A:%.*]] = freeze <2 x double> poison184  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> [[A]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>185  return _mm256_castpd128_pd256(A);186}187 188__m128d test_mm256_castpd256_pd128(__m256d A) {189  // CHECK-LABEL: test_mm256_castpd256_pd128190  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>191  return _mm256_castpd256_pd128(A);192}193TEST_CONSTEXPR(match_m128d(_mm256_castpd256_pd128((__m256d){-1.0, +2.0, -3.0, +4.0}), -1.0, +2.0));194 195__m256d test_mm256_castps_pd(__m256 A) {196  // CHECK-LABEL: test_mm256_castps_pd197  return _mm256_castps_pd(A);198}199TEST_CONSTEXPR(match_m256d(_mm256_castps_pd((__m256){0.0f, -1.0f, 0.0f, 4.0f, 0.0f, -2.0f, 0.0f, 6.0f}), -0.0078125, 512.0, -2.0, +8192.0));200 201__m256i test_mm256_castps_si256(__m256 A) {202  // CHECK-LABEL: test_mm256_castps_si256203  return _mm256_castps_si256(A);204}205TEST_CONSTEXPR(match_m256i(_mm256_castps_si256((__m256){1.0f, -2.0f, -4.0f, 8.0f, -16.0f, +16.0f, +32.0f, -32.0f}), 0xC00000003F800000ULL, 0x41000000c0800000ULL, 0x41800000C1800000ULL, 0xC200000042000000ULL));206 207__m256 test_mm256_castps128_ps256(__m128 A) {208  // CHECK-LABEL: test_mm256_castps128_ps256209  // CHECK: [[A:%.*]] = freeze <4 x float> poison210  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> [[A]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>211  return _mm256_castps128_ps256(A);212}213 214__m128 test_mm256_castps256_ps128(__m256 A) {215  // CHECK-LABEL: test_mm256_castps256_ps128216  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>217  return _mm256_castps256_ps128(A);218}219TEST_CONSTEXPR(match_m128(_mm256_castps256_ps128((__m256){1.0f, -2.0f, -4.0f, 8.0f, -16.0f, +16.0f, +32.0f, -32.0f}), 1.0f, -2.0f, -4.0f, 8.0f));220 221__m256i test_mm256_castsi128_si256(__m128i A) {222  // CHECK-LABEL: test_mm256_castsi128_si256223  // CHECK: [[A:%.*]] = freeze <2 x i64> poison224  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> [[A]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>225  return _mm256_castsi128_si256(A);226}227 228__m256d test_mm256_castsi256_pd(__m256i A) {229  // CHECK-LABEL: test_mm256_castsi256_pd230  return _mm256_castsi256_pd(A);231}232TEST_CONSTEXPR(match_m256d(_mm256_castsi256_pd((__m256i)(__v4du){0x4070000000000000ULL, 0xC000000000000000ULL, 0xBFF0000000000000ULL, 0xC008000000000000ULL}), 256.0, -2.0, -1.0, -3.0));233 234__m256 test_mm256_castsi256_ps(__m256i A) {235  // CHECK-LABEL: test_mm256_castsi256_ps236  return _mm256_castsi256_ps(A);237}238TEST_CONSTEXPR(match_m256(_mm256_castsi256_ps((__m256i)(__v4du){0x42000000c1800000ULL, 0x43000000c2800000ULL, 0x41000000c0800000ULL, 0xC00000003F800000ULL}), -16.0f, 32.0f, -64.0f, 128.0f, -4.0f, 8.0f, 1.0f, -2.0f));239 240__m128i test_mm256_castsi256_si128(__m256i A) {241  // CHECK-LABEL: test_mm256_castsi256_si128242  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>243  return _mm256_castsi256_si128(A);244}245TEST_CONSTEXPR(match_m128i(_mm256_castsi256_si128((__m256i)(__v4du){0xBFF0000000000000ULL, 0x4070000000000000ULL, 0xC000000000000000ULL, 0xC008000000000000ULL}), 0xBFF0000000000000ULL, 0x4070000000000000ULL));246 247__m256d test_mm256_ceil_pd(__m256d x) {248  // CHECK-LABEL: test_mm256_ceil_pd249  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 2)250  return _mm256_ceil_pd(x);251}252 253__m256 test_mm_ceil_ps(__m256 x) {254  // CHECK-LABEL: test_mm_ceil_ps255  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 2)256  return _mm256_ceil_ps(x);257}258 259__m256d test_mm256_cmp_pd_eq_oq(__m256d a, __m256d b) {260  // CHECK-LABEL: test_mm256_cmp_pd_eq_oq261  // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}262  return _mm256_cmp_pd(a, b, _CMP_EQ_OQ);263}264 265__m256d test_mm256_cmp_pd_lt_os(__m256d a, __m256d b) {266  // CHECK-LABEL: test_mm256_cmp_pd_lt_os267  // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}268  return _mm256_cmp_pd(a, b, _CMP_LT_OS);269}270 271__m256d test_mm256_cmp_pd_le_os(__m256d a, __m256d b) {272  // CHECK-LABEL: test_mm256_cmp_pd_le_os273  // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}274  return _mm256_cmp_pd(a, b, _CMP_LE_OS);275}276 277__m256d test_mm256_cmp_pd_unord_q(__m256d a, __m256d b) {278  // CHECK-LABEL: test_mm256_cmp_pd_unord_q279  // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}280  return _mm256_cmp_pd(a, b, _CMP_UNORD_Q);281}282 283__m256d test_mm256_cmp_pd_neq_uq(__m256d a, __m256d b) {284  // CHECK-LABEL: test_mm256_cmp_pd_neq_uq285  // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}286  return _mm256_cmp_pd(a, b, _CMP_NEQ_UQ);287}288 289__m256d test_mm256_cmp_pd_nlt_us(__m256d a, __m256d b) {290  // CHECK-LABEL: test_mm256_cmp_pd_nlt_us291  // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}292  return _mm256_cmp_pd(a, b, _CMP_NLT_US);293}294 295__m256d test_mm256_cmp_pd_nle_us(__m256d a, __m256d b) {296  // CHECK-LABEL: test_mm256_cmp_pd_nle_us297  // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}298  return _mm256_cmp_pd(a, b, _CMP_NLE_US);299}300 301__m256d test_mm256_cmp_pd_ord_q(__m256d a, __m256d b) {302  // CHECK-LABEL: test_mm256_cmp_pd_ord_q303  // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}304  return _mm256_cmp_pd(a, b, _CMP_ORD_Q);305}306 307__m256d test_mm256_cmp_pd_eq_uq(__m256d a, __m256d b) {308  // CHECK-LABEL: test_mm256_cmp_pd_eq_uq309  // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}310  return _mm256_cmp_pd(a, b, _CMP_EQ_UQ);311}312 313__m256d test_mm256_cmp_pd_nge_us(__m256d a, __m256d b) {314  // CHECK-LABEL: test_mm256_cmp_pd_nge_us315  // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}316  return _mm256_cmp_pd(a, b, _CMP_NGE_US);317}318 319__m256d test_mm256_cmp_pd_ngt_us(__m256d a, __m256d b) {320  // CHECK-LABEL: test_mm256_cmp_pd_ngt_us321  // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}322  return _mm256_cmp_pd(a, b, _CMP_NGT_US);323}324 325__m256d test_mm256_cmp_pd_false_oq(__m256d a, __m256d b) {326  // CHECK-LABEL: test_mm256_cmp_pd_false_oq327  // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}328  return _mm256_cmp_pd(a, b, _CMP_FALSE_OQ);329}330 331__m256d test_mm256_cmp_pd_neq_oq(__m256d a, __m256d b) {332  // CHECK-LABEL: test_mm256_cmp_pd_neq_oq333  // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}334  return _mm256_cmp_pd(a, b, _CMP_NEQ_OQ);335}336 337__m256d test_mm256_cmp_pd_ge_os(__m256d a, __m256d b) {338  // CHECK-LABEL: test_mm256_cmp_pd_ge_os339  // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}340  return _mm256_cmp_pd(a, b, _CMP_GE_OS);341}342 343__m256d test_mm256_cmp_pd_gt_os(__m256d a, __m256d b) {344  // CHECK-LABEL: test_mm256_cmp_pd_gt_os345  // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}346  return _mm256_cmp_pd(a, b, _CMP_GT_OS);347}348 349__m256d test_mm256_cmp_pd_true_uq(__m256d a, __m256d b) {350  // CHECK-LABEL: test_mm256_cmp_pd_true_uq351  // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}352  return _mm256_cmp_pd(a, b, _CMP_TRUE_UQ);353}354 355__m256d test_mm256_cmp_pd_eq_os(__m256d a, __m256d b) {356  // CHECK-LABEL: test_mm256_cmp_pd_eq_os357  // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}358  return _mm256_cmp_pd(a, b, _CMP_EQ_OS);359}360 361__m256d test_mm256_cmp_pd_lt_oq(__m256d a, __m256d b) {362  // CHECK-LABEL: test_mm256_cmp_pd_lt_oq363  // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}364  return _mm256_cmp_pd(a, b, _CMP_LT_OQ);365}366 367__m256d test_mm256_cmp_pd_le_oq(__m256d a, __m256d b) {368  // CHECK-LABEL: test_mm256_cmp_pd_le_oq369  // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}370  return _mm256_cmp_pd(a, b, _CMP_LE_OQ);371}372 373__m256d test_mm256_cmp_pd_unord_s(__m256d a, __m256d b) {374  // CHECK-LABEL: test_mm256_cmp_pd_unord_s375  // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}376  return _mm256_cmp_pd(a, b, _CMP_UNORD_S);377}378 379__m256d test_mm256_cmp_pd_neq_us(__m256d a, __m256d b) {380  // CHECK-LABEL: test_mm256_cmp_pd_neq_us381  // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}382  return _mm256_cmp_pd(a, b, _CMP_NEQ_US);383}384 385__m256d test_mm256_cmp_pd_nlt_uq(__m256d a, __m256d b) {386  // CHECK-LABEL: test_mm256_cmp_pd_nlt_uq387  // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}388  return _mm256_cmp_pd(a, b, _CMP_NLT_UQ);389}390 391__m256d test_mm256_cmp_pd_nle_uq(__m256d a, __m256d b) {392  // CHECK-LABEL: test_mm256_cmp_pd_nle_uq393  // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}394  return _mm256_cmp_pd(a, b, _CMP_NLE_UQ);395}396 397__m256d test_mm256_cmp_pd_ord_s(__m256d a, __m256d b) {398  // CHECK-LABEL: test_mm256_cmp_pd_ord_s399  // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}400  return _mm256_cmp_pd(a, b, _CMP_ORD_S);401}402 403__m256d test_mm256_cmp_pd_eq_us(__m256d a, __m256d b) {404  // CHECK-LABEL: test_mm256_cmp_pd_eq_us405  // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}406  return _mm256_cmp_pd(a, b, _CMP_EQ_US);407}408 409__m256d test_mm256_cmp_pd_nge_uq(__m256d a, __m256d b) {410  // CHECK-LABEL: test_mm256_cmp_pd_nge_uq411  // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}412  return _mm256_cmp_pd(a, b, _CMP_NGE_UQ);413}414 415__m256d test_mm256_cmp_pd_ngt_uq(__m256d a, __m256d b) {416  // CHECK-LABEL: test_mm256_cmp_pd_ngt_uq417  // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}418  return _mm256_cmp_pd(a, b, _CMP_NGT_UQ);419}420 421__m256d test_mm256_cmp_pd_false_os(__m256d a, __m256d b) {422  // CHECK-LABEL: test_mm256_cmp_pd_false_os423  // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}424  return _mm256_cmp_pd(a, b, _CMP_FALSE_OS);425}426 427__m256d test_mm256_cmp_pd_neq_os(__m256d a, __m256d b) {428  // CHECK-LABEL: test_mm256_cmp_pd_neq_os429  // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}430  return _mm256_cmp_pd(a, b, _CMP_NEQ_OS);431}432 433__m256d test_mm256_cmp_pd_ge_oq(__m256d a, __m256d b) {434  // CHECK-LABEL: test_mm256_cmp_pd_ge_oq435  // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}436  return _mm256_cmp_pd(a, b, _CMP_GE_OQ);437}438 439__m256d test_mm256_cmp_pd_gt_oq(__m256d a, __m256d b) {440  // CHECK-LABEL: test_mm256_cmp_pd_gt_oq441  // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}442  return _mm256_cmp_pd(a, b, _CMP_GT_OQ);443}444 445__m256d test_mm256_cmp_pd_true_us(__m256d a, __m256d b) {446  // CHECK-LABEL: test_mm256_cmp_pd_true_us447  // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}448  return _mm256_cmp_pd(a, b, _CMP_TRUE_US);449}450 451__m256 test_mm256_cmp_ps_eq_oq(__m256 a, __m256 b) {452  // CHECK-LABEL: test_mm256_cmp_ps_eq_oq453  // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}454  return _mm256_cmp_ps(a, b, _CMP_EQ_OQ);455}456 457__m256 test_mm256_cmp_ps_lt_os(__m256 a, __m256 b) {458  // CHECK-LABEL: test_mm256_cmp_ps_lt_os459  // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}460  return _mm256_cmp_ps(a, b, _CMP_LT_OS);461}462 463__m256 test_mm256_cmp_ps_le_os(__m256 a, __m256 b) {464  // CHECK-LABEL: test_mm256_cmp_ps_le_os465  // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}466  return _mm256_cmp_ps(a, b, _CMP_LE_OS);467}468 469__m256 test_mm256_cmp_ps_unord_q(__m256 a, __m256 b) {470  // CHECK-LABEL: test_mm256_cmp_ps_unord_q471  // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}472  return _mm256_cmp_ps(a, b, _CMP_UNORD_Q);473}474 475__m256 test_mm256_cmp_ps_neq_uq(__m256 a, __m256 b) {476  // CHECK-LABEL: test_mm256_cmp_ps_neq_uq477  // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}478  return _mm256_cmp_ps(a, b, _CMP_NEQ_UQ);479}480 481__m256 test_mm256_cmp_ps_nlt_us(__m256 a, __m256 b) {482  // CHECK-LABEL: test_mm256_cmp_ps_nlt_us483  // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}484  return _mm256_cmp_ps(a, b, _CMP_NLT_US);485}486 487__m256 test_mm256_cmp_ps_nle_us(__m256 a, __m256 b) {488  // CHECK-LABEL: test_mm256_cmp_ps_nle_us489  // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}490  return _mm256_cmp_ps(a, b, _CMP_NLE_US);491}492 493__m256 test_mm256_cmp_ps_ord_q(__m256 a, __m256 b) {494  // CHECK-LABEL: test_mm256_cmp_ps_ord_q495  // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}496  return _mm256_cmp_ps(a, b, _CMP_ORD_Q);497}498 499__m256 test_mm256_cmp_ps_eq_uq(__m256 a, __m256 b) {500  // CHECK-LABEL: test_mm256_cmp_ps_eq_uq501  // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}502  return _mm256_cmp_ps(a, b, _CMP_EQ_UQ);503}504 505__m256 test_mm256_cmp_ps_nge_us(__m256 a, __m256 b) {506  // CHECK-LABEL: test_mm256_cmp_ps_nge_us507  // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}508  return _mm256_cmp_ps(a, b, _CMP_NGE_US);509}510 511__m256 test_mm256_cmp_ps_ngt_us(__m256 a, __m256 b) {512  // CHECK-LABEL: test_mm256_cmp_ps_ngt_us513  // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}514  return _mm256_cmp_ps(a, b, _CMP_NGT_US);515}516 517__m256 test_mm256_cmp_ps_false_oq(__m256 a, __m256 b) {518  // CHECK-LABEL: test_mm256_cmp_ps_false_oq519  // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}520  return _mm256_cmp_ps(a, b, _CMP_FALSE_OQ);521}522 523__m256 test_mm256_cmp_ps_neq_oq(__m256 a, __m256 b) {524  // CHECK-LABEL: test_mm256_cmp_ps_neq_oq525  // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}526  return _mm256_cmp_ps(a, b, _CMP_NEQ_OQ);527}528 529__m256 test_mm256_cmp_ps_ge_os(__m256 a, __m256 b) {530  // CHECK-LABEL: test_mm256_cmp_ps_ge_os531  // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}532  return _mm256_cmp_ps(a, b, _CMP_GE_OS);533}534 535__m256 test_mm256_cmp_ps_gt_os(__m256 a, __m256 b) {536  // CHECK-LABEL: test_mm256_cmp_ps_gt_os537  // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}538  return _mm256_cmp_ps(a, b, _CMP_GT_OS);539}540 541__m256 test_mm256_cmp_ps_true_uq(__m256 a, __m256 b) {542  // CHECK-LABEL: test_mm256_cmp_ps_true_uq543  // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}544  return _mm256_cmp_ps(a, b, _CMP_TRUE_UQ);545}546 547__m256 test_mm256_cmp_ps_eq_os(__m256 a, __m256 b) {548  // CHECK-LABEL: test_mm256_cmp_ps_eq_os549  // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}550  return _mm256_cmp_ps(a, b, _CMP_EQ_OS);551}552 553__m256 test_mm256_cmp_ps_lt_oq(__m256 a, __m256 b) {554  // CHECK-LABEL: test_mm256_cmp_ps_lt_oq555  // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}556  return _mm256_cmp_ps(a, b, _CMP_LT_OQ);557}558 559__m256 test_mm256_cmp_ps_le_oq(__m256 a, __m256 b) {560  // CHECK-LABEL: test_mm256_cmp_ps_le_oq561  // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}562  return _mm256_cmp_ps(a, b, _CMP_LE_OQ);563}564 565__m256 test_mm256_cmp_ps_unord_s(__m256 a, __m256 b) {566  // CHECK-LABEL: test_mm256_cmp_ps_unord_s567  // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}568  return _mm256_cmp_ps(a, b, _CMP_UNORD_S);569}570 571__m256 test_mm256_cmp_ps_neq_us(__m256 a, __m256 b) {572  // CHECK-LABEL: test_mm256_cmp_ps_neq_us573  // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}574  return _mm256_cmp_ps(a, b, _CMP_NEQ_US);575}576 577__m256 test_mm256_cmp_ps_nlt_uq(__m256 a, __m256 b) {578  // CHECK-LABEL: test_mm256_cmp_ps_nlt_uq579  // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}580  return _mm256_cmp_ps(a, b, _CMP_NLT_UQ);581}582 583__m256 test_mm256_cmp_ps_nle_uq(__m256 a, __m256 b) {584  // CHECK-LABEL: test_mm256_cmp_ps_nle_uq585  // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}586  return _mm256_cmp_ps(a, b, _CMP_NLE_UQ);587}588 589__m256 test_mm256_cmp_ps_ord_s(__m256 a, __m256 b) {590  // CHECK-LABEL: test_mm256_cmp_ps_ord_s591  // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}592  return _mm256_cmp_ps(a, b, _CMP_ORD_S);593}594 595__m256 test_mm256_cmp_ps_eq_us(__m256 a, __m256 b) {596  // CHECK-LABEL: test_mm256_cmp_ps_eq_us597  // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}598  return _mm256_cmp_ps(a, b, _CMP_EQ_US);599}600 601__m256 test_mm256_cmp_ps_nge_uq(__m256 a, __m256 b) {602  // CHECK-LABEL: test_mm256_cmp_ps_nge_uq603  // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}604  return _mm256_cmp_ps(a, b, _CMP_NGE_UQ);605}606 607__m256 test_mm256_cmp_ps_ngt_uq(__m256 a, __m256 b) {608  // CHECK-LABEL: test_mm256_cmp_ps_ngt_uq609  // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}610  return _mm256_cmp_ps(a, b, _CMP_NGT_UQ);611}612 613__m256 test_mm256_cmp_ps_false_os(__m256 a, __m256 b) {614  // CHECK-LABEL: test_mm256_cmp_ps_false_os615  // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}616  return _mm256_cmp_ps(a, b, _CMP_FALSE_OS);617}618 619__m256 test_mm256_cmp_ps_neq_os(__m256 a, __m256 b) {620  // CHECK-LABEL: test_mm256_cmp_ps_neq_os621  // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}622  return _mm256_cmp_ps(a, b, _CMP_NEQ_OS);623}624 625__m256 test_mm256_cmp_ps_ge_oq(__m256 a, __m256 b) {626  // CHECK-LABEL: test_mm256_cmp_ps_ge_oq627  // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}628  return _mm256_cmp_ps(a, b, _CMP_GE_OQ);629}630 631__m256 test_mm256_cmp_ps_gt_oq(__m256 a, __m256 b) {632  // CHECK-LABEL: test_mm256_cmp_ps_gt_oq633  // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}634  return _mm256_cmp_ps(a, b, _CMP_GT_OQ);635}636 637__m256 test_mm256_cmp_ps_true_us(__m256 a, __m256 b) {638  // CHECK-LABEL: test_mm256_cmp_ps_true_us639  // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}640  return _mm256_cmp_ps(a, b, _CMP_TRUE_US);641}642 643__m128d test_mm_cmp_pd_eq_uq(__m128d a, __m128d b) {644  // CHECK-LABEL: test_mm_cmp_pd_eq_uq645  // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}646  return _mm_cmp_pd(a, b, _CMP_EQ_UQ);647}648 649__m128d test_mm_cmp_pd_nge_us(__m128d a, __m128d b) {650  // CHECK-LABEL: test_mm_cmp_pd_nge_us651  // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}652  return _mm_cmp_pd(a, b, _CMP_NGE_US);653}654 655__m128d test_mm_cmp_pd_ngt_us(__m128d a, __m128d b) {656  // CHECK-LABEL: test_mm_cmp_pd_ngt_us657  // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}658  return _mm_cmp_pd(a, b, _CMP_NGT_US);659}660 661__m128d test_mm_cmp_pd_false_oq(__m128d a, __m128d b) {662  // CHECK-LABEL: test_mm_cmp_pd_false_oq663  // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}664  return _mm_cmp_pd(a, b, _CMP_FALSE_OQ);665}666 667__m128d test_mm_cmp_pd_neq_oq(__m128d a, __m128d b) {668  // CHECK-LABEL: test_mm_cmp_pd_neq_oq669  // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}670  return _mm_cmp_pd(a, b, _CMP_NEQ_OQ);671}672 673__m128d test_mm_cmp_pd_ge_os(__m128d a, __m128d b) {674  // CHECK-LABEL: test_mm_cmp_pd_ge_os675  // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}676  return _mm_cmp_pd(a, b, _CMP_GE_OS);677}678 679__m128d test_mm_cmp_pd_gt_os(__m128d a, __m128d b) {680  // CHECK-LABEL: test_mm_cmp_pd_gt_os681  // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}682  return _mm_cmp_pd(a, b, _CMP_GT_OS);683}684 685__m128d test_mm_cmp_pd_true_uq(__m128d a, __m128d b) {686  // CHECK-LABEL: test_mm_cmp_pd_true_uq687  // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}688  return _mm_cmp_pd(a, b, _CMP_TRUE_UQ);689}690 691__m128d test_mm_cmp_pd_eq_os(__m128d a, __m128d b) {692  // CHECK-LABEL: test_mm_cmp_pd_eq_os693  // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}}694  return _mm_cmp_pd(a, b, _CMP_EQ_OS);695}696 697__m128d test_mm_cmp_pd_lt_oq(__m128d a, __m128d b) {698  // CHECK-LABEL: test_mm_cmp_pd_lt_oq699  // CHECK: fcmp olt <2 x double> %{{.*}}, %{{.*}}700  return _mm_cmp_pd(a, b, _CMP_LT_OQ);701}702 703__m128d test_mm_cmp_pd_le_oq(__m128d a, __m128d b) {704  // CHECK-LABEL: test_mm_cmp_pd_le_oq705  // CHECK: fcmp ole <2 x double> %{{.*}}, %{{.*}}706  return _mm_cmp_pd(a, b, _CMP_LE_OQ);707}708 709__m128d test_mm_cmp_pd_unord_s(__m128d a, __m128d b) {710  // CHECK-LABEL: test_mm_cmp_pd_unord_s711  // CHECK: fcmp uno <2 x double> %{{.*}}, %{{.*}}712  return _mm_cmp_pd(a, b, _CMP_UNORD_S);713}714 715__m128d test_mm_cmp_pd_neq_us(__m128d a, __m128d b) {716  // CHECK-LABEL: test_mm_cmp_pd_neq_us717  // CHECK: fcmp une <2 x double> %{{.*}}, %{{.*}}718  return _mm_cmp_pd(a, b, _CMP_NEQ_US);719}720 721__m128d test_mm_cmp_pd_nlt_uq(__m128d a, __m128d b) {722  // CHECK-LABEL: test_mm_cmp_pd_nlt_uq723  // CHECK: fcmp uge <2 x double> %{{.*}}, %{{.*}}724  return _mm_cmp_pd(a, b, _CMP_NLT_UQ);725}726 727__m128d test_mm_cmp_pd_nle_uq(__m128d a, __m128d b) {728  // CHECK-LABEL: test_mm_cmp_pd_nle_uq729  // CHECK: fcmp ugt <2 x double> %{{.*}}, %{{.*}}730  return _mm_cmp_pd(a, b, _CMP_NLE_UQ);731}732 733__m128d test_mm_cmp_pd_ord_s(__m128d a, __m128d b) {734  // CHECK-LABEL: test_mm_cmp_pd_ord_s735  // CHECK: fcmp ord <2 x double> %{{.*}}, %{{.*}}736  return _mm_cmp_pd(a, b, _CMP_ORD_S);737}738 739__m128d test_mm_cmp_pd_eq_us(__m128d a, __m128d b) {740  // CHECK-LABEL: test_mm_cmp_pd_eq_us741  // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}742  return _mm_cmp_pd(a, b, _CMP_EQ_US);743}744 745__m128d test_mm_cmp_pd_nge_uq(__m128d a, __m128d b) {746  // CHECK-LABEL: test_mm_cmp_pd_nge_uq747  // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}748  return _mm_cmp_pd(a, b, _CMP_NGE_UQ);749}750 751__m128d test_mm_cmp_pd_ngt_uq(__m128d a, __m128d b) {752  // CHECK-LABEL: test_mm_cmp_pd_ngt_uq753  // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}754  return _mm_cmp_pd(a, b, _CMP_NGT_UQ);755}756 757__m128d test_mm_cmp_pd_false_os(__m128d a, __m128d b) {758  // CHECK-LABEL: test_mm_cmp_pd_false_os759  // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}760  return _mm_cmp_pd(a, b, _CMP_FALSE_OS);761}762 763__m128d test_mm_cmp_pd_neq_os(__m128d a, __m128d b) {764  // CHECK-LABEL: test_mm_cmp_pd_neq_os765  // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}766  return _mm_cmp_pd(a, b, _CMP_NEQ_OS);767}768 769__m128d test_mm_cmp_pd_ge_oq(__m128d a, __m128d b) {770  // CHECK-LABEL: test_mm_cmp_pd_ge_oq771  // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}772  return _mm_cmp_pd(a, b, _CMP_GE_OQ);773}774 775__m128d test_mm_cmp_pd_gt_oq(__m128d a, __m128d b) {776  // CHECK-LABEL: test_mm_cmp_pd_gt_oq777  // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}778  return _mm_cmp_pd(a, b, _CMP_GT_OQ);779}780 781__m128d test_mm_cmp_pd_true_us(__m128d a, __m128d b) {782  // CHECK-LABEL: test_mm_cmp_pd_true_us783  // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}784  return _mm_cmp_pd(a, b, _CMP_TRUE_US);785}786 787__m128 test_mm_cmp_ps_eq_uq(__m128 a, __m128 b) {788  // CHECK-LABEL: test_mm_cmp_ps_eq_uq789  // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}790  return _mm_cmp_ps(a, b, _CMP_EQ_UQ);791}792 793__m128 test_mm_cmp_ps_nge_us(__m128 a, __m128 b) {794  // CHECK-LABEL: test_mm_cmp_ps_nge_us795  // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}796  return _mm_cmp_ps(a, b, _CMP_NGE_US);797}798 799__m128 test_mm_cmp_ps_ngt_us(__m128 a, __m128 b) {800  // CHECK-LABEL: test_mm_cmp_ps_ngt_us801  // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}802  return _mm_cmp_ps(a, b, _CMP_NGT_US);803}804 805__m128 test_mm_cmp_ps_false_oq(__m128 a, __m128 b) {806  // CHECK-LABEL: test_mm_cmp_ps_false_oq807  // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}808  return _mm_cmp_ps(a, b, _CMP_FALSE_OQ);809}810 811__m128 test_mm_cmp_ps_neq_oq(__m128 a, __m128 b) {812  // CHECK-LABEL: test_mm_cmp_ps_neq_oq813  // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}814  return _mm_cmp_ps(a, b, _CMP_NEQ_OQ);815}816 817__m128 test_mm_cmp_ps_ge_os(__m128 a, __m128 b) {818  // CHECK-LABEL: test_mm_cmp_ps_ge_os819  // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}820  return _mm_cmp_ps(a, b, _CMP_GE_OS);821}822 823__m128 test_mm_cmp_ps_gt_os(__m128 a, __m128 b) {824  // CHECK-LABEL: test_mm_cmp_ps_gt_os825  // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}826  return _mm_cmp_ps(a, b, _CMP_GT_OS);827}828 829__m128 test_mm_cmp_ps_true_uq(__m128 a, __m128 b) {830  // CHECK-LABEL: test_mm_cmp_ps_true_uq831  // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}832  return _mm_cmp_ps(a, b, _CMP_TRUE_UQ);833}834 835__m128 test_mm_cmp_ps_eq_os(__m128 a, __m128 b) {836  // CHECK-LABEL: test_mm_cmp_ps_eq_os837  // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}}838  return _mm_cmp_ps(a, b, _CMP_EQ_OS);839}840 841__m128 test_mm_cmp_ps_lt_oq(__m128 a, __m128 b) {842  // CHECK-LABEL: test_mm_cmp_ps_lt_oq843  // CHECK: fcmp olt <4 x float> %{{.*}}, %{{.*}}844  return _mm_cmp_ps(a, b, _CMP_LT_OQ);845}846 847__m128 test_mm_cmp_ps_le_oq(__m128 a, __m128 b) {848  // CHECK-LABEL: test_mm_cmp_ps_le_oq849  // CHECK: fcmp ole <4 x float> %{{.*}}, %{{.*}}850  return _mm_cmp_ps(a, b, _CMP_LE_OQ);851}852 853__m128 test_mm_cmp_ps_unord_s(__m128 a, __m128 b) {854  // CHECK-LABEL: test_mm_cmp_ps_unord_s855  // CHECK: fcmp uno <4 x float> %{{.*}}, %{{.*}}856  return _mm_cmp_ps(a, b, _CMP_UNORD_S);857}858 859__m128 test_mm_cmp_ps_neq_us(__m128 a, __m128 b) {860  // CHECK-LABEL: test_mm_cmp_ps_neq_us861  // CHECK: fcmp une <4 x float> %{{.*}}, %{{.*}}862  return _mm_cmp_ps(a, b, _CMP_NEQ_US);863}864 865__m128 test_mm_cmp_ps_nlt_uq(__m128 a, __m128 b) {866  // CHECK-LABEL: test_mm_cmp_ps_nlt_uq867  // CHECK: fcmp uge <4 x float> %{{.*}}, %{{.*}}868  return _mm_cmp_ps(a, b, _CMP_NLT_UQ);869}870 871__m128 test_mm_cmp_ps_nle_uq(__m128 a, __m128 b) {872  // CHECK-LABEL: test_mm_cmp_ps_nle_uq873  // CHECK: fcmp ugt <4 x float> %{{.*}}, %{{.*}}874  return _mm_cmp_ps(a, b, _CMP_NLE_UQ);875}876 877__m128 test_mm_cmp_ps_ord_s(__m128 a, __m128 b) {878  // CHECK-LABEL: test_mm_cmp_ps_ord_s879  // CHECK: fcmp ord <4 x float> %{{.*}}, %{{.*}}880  return _mm_cmp_ps(a, b, _CMP_ORD_S);881}882 883__m128 test_mm_cmp_ps_eq_us(__m128 a, __m128 b) {884  // CHECK-LABEL: test_mm_cmp_ps_eq_us885  // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}886  return _mm_cmp_ps(a, b, _CMP_EQ_US);887}888 889__m128 test_mm_cmp_ps_nge_uq(__m128 a, __m128 b) {890  // CHECK-LABEL: test_mm_cmp_ps_nge_uq891  // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}892  return _mm_cmp_ps(a, b, _CMP_NGE_UQ);893}894 895__m128 test_mm_cmp_ps_ngt_uq(__m128 a, __m128 b) {896  // CHECK-LABEL: test_mm_cmp_ps_ngt_uq897  // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}898  return _mm_cmp_ps(a, b, _CMP_NGT_UQ);899}900 901__m128 test_mm_cmp_ps_false_os(__m128 a, __m128 b) {902  // CHECK-LABEL: test_mm_cmp_ps_false_os903  // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}904  return _mm_cmp_ps(a, b, _CMP_FALSE_OS);905}906 907__m128 test_mm_cmp_ps_neq_os(__m128 a, __m128 b) {908  // CHECK-LABEL: test_mm_cmp_ps_neq_os909  // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}910  return _mm_cmp_ps(a, b, _CMP_NEQ_OS);911}912 913__m128 test_mm_cmp_ps_ge_oq(__m128 a, __m128 b) {914  // CHECK-LABEL: test_mm_cmp_ps_ge_oq915  // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}916  return _mm_cmp_ps(a, b, _CMP_GE_OQ);917}918 919__m128 test_mm_cmp_ps_gt_oq(__m128 a, __m128 b) {920  // CHECK-LABEL: test_mm_cmp_ps_gt_oq921  // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}922  return _mm_cmp_ps(a, b, _CMP_GT_OQ);923}924 925__m128 test_mm_cmp_ps_true_us(__m128 a, __m128 b) {926  // CHECK-LABEL: test_mm_cmp_ps_true_us927  // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}928  return _mm_cmp_ps(a, b, _CMP_TRUE_US);929}930 931__m128d test_mm_cmp_sd(__m128d A, __m128d B) {932  // CHECK-LABEL: test_mm_cmp_sd933  // CHECK: call {{.*}}<2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 13)934  return _mm_cmp_sd(A, B, _CMP_GE_OS);935}936 937__m128 test_mm_cmp_ss(__m128 A, __m128 B) {938  // CHECK-LABEL: test_mm_cmp_ss939  // CHECK: call {{.*}}<4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 13)940  return _mm_cmp_ss(A, B, _CMP_GE_OS);941}942 943__m256d test_mm256_cvtepi32_pd(__m128i A) {944  // CHECK-LABEL: test_mm256_cvtepi32_pd945  // CHECK: sitofp <4 x i32> %{{.*}} to <4 x double>946  return _mm256_cvtepi32_pd(A);947}948 949TEST_CONSTEXPR(match_m256d(_mm256_cvtepi32_pd((__m128i)(__v4si){-2, -1, 0, 1}), -2.0, -1.0, 0.0, 1.0));950 951__m256 test_mm256_cvtepi32_ps(__m256i A) {952  // CHECK-LABEL: test_mm256_cvtepi32_ps953  // CHECK: sitofp <8 x i32> %{{.*}} to <8 x float>954  return _mm256_cvtepi32_ps(A);955}956 957TEST_CONSTEXPR(match_m256(_mm256_cvtepi32_ps((__m256i)(__v8si){-8, -4, -2, -1, 0, 1, 2, 4}), -8.0f, -4.0f, -2.0f, -1.0f, 0.0f, 1.0f, 2.0f, 4.0f));958 959__m128i test_mm256_cvtpd_epi32(__m256d A) {960  // CHECK-LABEL: test_mm256_cvtpd_epi32961  // CHECK: call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %{{.*}})962  return _mm256_cvtpd_epi32(A);963}964 965__m128 test_mm256_cvtpd_ps(__m256d A) {966  // CHECK-LABEL: test_mm256_cvtpd_ps967  // CHECK: call {{.*}}<4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %{{.*}})968  return _mm256_cvtpd_ps(A);969}970 971__m256i test_mm256_cvtps_epi32(__m256 A) {972  // CHECK-LABEL: test_mm256_cvtps_epi32973  // CHECK: call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %{{.*}})974  return _mm256_cvtps_epi32(A);975}976 977__m256d test_mm256_cvtps_pd(__m128 A) {978  // CHECK-LABEL: test_mm256_cvtps_pd979  // CHECK: fpext <4 x float> %{{.*}} to <4 x double>980  return _mm256_cvtps_pd(A);981}982 983TEST_CONSTEXPR(match_m256d(_mm256_cvtps_pd((__m128){0.25f, 1.75f, -1.75f, 16777216.0f}), 0.25, 1.75, -1.75, 16777216.0));984 985double test_mm256_cvtsd_f64(__m256d __a) {986  // CHECK-LABEL: test_mm256_cvtsd_f64987  // CHECK: extractelement <4 x double> %{{.*}}, i32 0988  return _mm256_cvtsd_f64(__a);989}990TEST_CONSTEXPR(_mm256_cvtsd_f64((__m256d){8.0, 7.0, 6.0, 5.0}) == 8.0);991 992int test_mm256_cvtsi256_si32(__m256i __a) {993  // CHECK-LABEL: test_mm256_cvtsi256_si32994  // CHECK: extractelement <8 x i32> %{{.*}}, i32 0995  return _mm256_cvtsi256_si32(__a);996}997TEST_CONSTEXPR(_mm256_cvtsi256_si32((__m256i)(__v8si){8, 7, 6, 5, 4, 3, 2, 1}) == 8);998 999float test_mm256_cvtss_f32(__m256 __a) {1000  // CHECK-LABEL: test_mm256_cvtss_f321001  // CHECK: extractelement <8 x float> %{{.*}}, i32 01002  return _mm256_cvtss_f32(__a);1003}1004TEST_CONSTEXPR(_mm256_cvtss_f32((__m256){8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f}) == 8.0f);1005 1006__m128i test_mm256_cvttpd_epi32(__m256d A) {1007  // CHECK-LABEL: test_mm256_cvttpd_epi321008  // CHECK: call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> %{{.*}})1009  return _mm256_cvttpd_epi32(A);1010}1011 1012__m256i test_mm256_cvttps_epi32(__m256 A) {1013  // CHECK-LABEL: test_mm256_cvttps_epi321014  // CHECK: call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> %{{.*}})1015  return _mm256_cvttps_epi32(A);1016}1017 1018__m256d test_mm256_div_pd(__m256d A, __m256d B) {1019  // CHECK-LABEL: test_mm256_div_pd1020  // CHECK: fdiv <4 x double>1021  return _mm256_div_pd(A, B);1022}1023TEST_CONSTEXPR(match_m256d( _mm256_div_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-1.0, +1.0, -1.0, +1.0}), +4.0, -5.0, -6.0, +7.0));1024 1025__m256 test_mm256_div_ps(__m256 A, __m256 B) {1026  // CHECK-LABEL: test_mm256_div_ps1027  // CHECK: fdiv <8 x float>1028  return _mm256_div_ps(A, B);1029}1030TEST_CONSTEXPR(match_m256( _mm256_div_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-1.0f, +1.0f, -1.0f, +1.0f, +1.0f, -1.0f, +1.0f, -1.0f}), +4.0f, -5.0f, -6.0f, +7.0f, +7.0f, -6.0f, -5.0f, +4.0f));1031 1032__m256 test_mm256_dp_ps(__m256 A, __m256 B) {1033  // CHECK-LABEL: test_mm256_dp_ps1034  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> {{.*}}, <8 x float> {{.*}}, i8 7)1035  return _mm256_dp_ps(A, B, 7);1036}1037 1038int test_mm256_extract_epi8(__m256i A) {1039  // CHECK-LABEL: test_mm256_extract_epi81040  // CHECK: extractelement <32 x i8> %{{.*}}, {{i32|i64}} 311041  // CHECK: zext i8 %{{.*}} to i321042  return _mm256_extract_epi8(A, 31);1043}1044TEST_CONSTEXPR(_mm256_extract_epi8(((__m256i)(__v32qs){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 45) == 13);1045 1046int test_mm256_extract_epi16(__m256i A) {1047  // CHECK-LABEL: test_mm256_extract_epi161048  // CHECK: extractelement <16 x i16> %{{.*}}, {{i32|i64}} 151049  // CHECK: zext i16 %{{.*}} to i321050  return _mm256_extract_epi16(A, 15);1051}1052TEST_CONSTEXPR(_mm256_extract_epi16(((__m256i)(__v16hi){0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30}), 50) == 4);1053 1054int test_mm256_extract_epi32(__m256i A) {1055  // CHECK-LABEL: test_mm256_extract_epi321056  // CHECK: extractelement <8 x i32> %{{.*}}, {{i32|i64}} 71057  return _mm256_extract_epi32(A, 7);1058}1059TEST_CONSTEXPR(_mm256_extract_epi32(((__m256i)(__v8si){0, 5, 10, 15, 20, 25, 30, 35}), 18) == 10);1060 1061#if __x86_64__1062long long test_mm256_extract_epi64(__m256i A) {1063  // X64-LABEL: test_mm256_extract_epi641064  // X64: extractelement <4 x i64> %{{.*}}, {{i32|i64}} 31065  return _mm256_extract_epi64(A, 3);1066}1067TEST_CONSTEXPR(_mm256_extract_epi64(((__m256i)(__v4di){5, 15, 25, 35}), 14) == 25);1068#endif1069 1070__m128d test_mm256_extractf128_pd(__m256d A) {1071  // CHECK-LABEL: test_mm256_extractf128_pd1072  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>1073  return _mm256_extractf128_pd(A, 1);1074}1075TEST_CONSTEXPR(match_m128d(_mm256_extractf128_pd(((__m256d){0.0, 1.0, 2.0, 3.0}), 1),1076              2.0, 3.0));1077 1078__m128 test_mm256_extractf128_ps(__m256 A) {1079  // CHECK-LABEL: test_mm256_extractf128_ps1080  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1081  return _mm256_extractf128_ps(A, 1);1082}1083TEST_CONSTEXPR(match_m128(_mm256_extractf128_ps(((__m256){0,1,2,3,4,5,6,7}), 1),1084             4.0f, 5.0f, 6.0f, 7.0f));1085 1086__m128i test_mm256_extractf128_si256(__m256i A) {1087  // CHECK-LABEL: test_mm256_extractf128_si2561088  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1089  return _mm256_extractf128_si256(A, 1);1090}1091TEST_CONSTEXPR(match_m128i(_mm256_extractf128_si256(((__m256i){0ULL, 1ULL, 2ULL, 3ULL}), 1),1092              2ULL, 3ULL));1093              1094__m256d test_mm256_floor_pd(__m256d x) {1095  // CHECK-LABEL: test_mm256_floor_pd1096  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 1)1097  return _mm256_floor_pd(x);1098}1099 1100__m256 test_mm_floor_ps(__m256 x) {1101  // CHECK-LABEL: test_mm_floor_ps1102  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 1)1103  return _mm256_floor_ps(x);1104}1105 1106__m256d test_mm256_hadd_pd(__m256d A, __m256d B) {1107  // CHECK-LABEL: test_mm256_hadd_pd1108  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})1109  return _mm256_hadd_pd(A, B);1110}1111TEST_CONSTEXPR(match_m256d(_mm256_hadd_pd((__m256d){+1.0, +2.0, +3.0, +4.0}, (__m256d){+5.0, +6.0, +7.0, +8.0}), +3.0, +11.0, +7.0, +15.0));1112 1113__m256 test_mm256_hadd_ps(__m256 A, __m256 B) {1114  // CHECK-LABEL: test_mm256_hadd_ps1115  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})1116  return _mm256_hadd_ps(A, B);1117}1118 1119TEST_CONSTEXPR(match_m256(_mm256_hadd_ps(1120    (__m256){+1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f},1121    (__m256){+9.0f, +10.0f, +11.0f, +12.0f, +13.0f, +14.0f, +15.0f, +16.0f}),1122    +3.0f, +7.0f, +19.0f, +23.0f, +11.0f, +15.0f, +27.0f, +31.0f));1123 1124__m256d test_mm256_hsub_pd(__m256d A, __m256d B) {1125  // CHECK-LABEL: test_mm256_hsub_pd1126  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})1127  return _mm256_hsub_pd(A, B);1128}1129TEST_CONSTEXPR(match_m256d(_mm256_hsub_pd((__m256d){+1.0, +2.0, +4.0, +3.0}, (__m256d){+10.0, +6.0, +16.0, +8.0}), -1.0,+4.0,+1.0,+8.0));1130 1131__m256 test_mm256_hsub_ps(__m256 A, __m256 B) {1132  // CHECK-LABEL: test_mm256_hsub_ps1133  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})1134  return _mm256_hsub_ps(A, B);1135}1136TEST_CONSTEXPR(match_m256(_mm256_hsub_ps(1137    (__m256){1.0f, 2.0f, 4.0f, 3.0f, 5.0f, 7.0f, 7.0f, 5.0f},1138    (__m256){6.0f, 9.0f, 11.0f, 8.0f, 13.0f, 17.0f, 15.0f, 11.0f}),1139    -1.0f, 1.0f, -3.0f, 3.0f, -2.0f, 2.0f, -4.0f, 4.0f));1140 1141__m256i test_mm256_insert_epi8(__m256i x, char b) {1142  // CHECK-LABEL: test_mm256_insert_epi81143  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, {{i32|i64}} 141144  return _mm256_insert_epi8(x, b, 14);1145}1146TEST_CONSTEXPR(match_v32qi(_mm256_insert_epi8(((__m256i)(__v32qs){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 77, 47), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 77, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31));1147 1148__m256i test_mm256_insert_epi16(__m256i x, int b) {1149  // CHECK-LABEL: test_mm256_insert_epi161150  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, {{i32|i64}} 41151  return _mm256_insert_epi16(x, b, 4);1152}1153TEST_CONSTEXPR(match_v16hi(_mm256_insert_epi16(((__m256i)(__v16hi){0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30}), 909, 62), 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 909, 30));1154 1155__m256i test_mm256_insert_epi32(__m256i x, int b) {1156  // CHECK-LABEL: test_mm256_insert_epi321157  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, {{i32|i64}} 51158  return _mm256_insert_epi32(x, b, 5);1159}1160TEST_CONSTEXPR(match_v8si(_mm256_insert_epi32(((__m256i)(__v8si){ 0, 5, 10, 15, 20, 25, 30, 35}), 4321, 18), 0, 5, 4321, 15, 20, 25, 30, 35));1161 1162#if __x86_64__1163__m256i test_mm256_insert_epi64(__m256i x, long long b) {1164  // X64-LABEL: test_mm256_insert_epi641165  // X64: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, {{i32|i64}} 21166  return _mm256_insert_epi64(x, b, 2);1167}1168TEST_CONSTEXPR(match_v4di(_mm256_insert_epi64(((__m256i)(__v4di){5, 15, 25, 35}), -123456789LL, 10), 5, 15, -123456789LL, 35));1169#endif1170 1171__m256d test_mm256_insertf128_pd(__m256d A, __m128d B) {1172  // CHECK-LABEL: test_mm256_insertf128_pd1173  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1174  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 5, i32 2, i32 3>1175  return _mm256_insertf128_pd(A, B, 0);1176}1177TEST_CONSTEXPR(match_m256d(_mm256_insertf128_pd(((__m256d){1.0, 2.0, 3.0, 4.0}), ((__m128d){5.0, 6.0}), 0), 5.0, 6.0, 3.0, 4.0));1178 1179__m256 test_mm256_insertf128_ps(__m256 A, __m128 B) {1180  // CHECK-LABEL: test_mm256_insertf128_ps1181  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1182  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>1183  return _mm256_insertf128_ps(A, B, 1);1184}1185TEST_CONSTEXPR(match_m256(_mm256_insertf128_ps(((__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}), ((__m128){10.0f, 20.0f, 30.0f, 40.0f}), 1), 1.0f, 2.0f, 3.0f, 4.0f, 10.0f, 20.0f, 30.0f, 40.0f));1186 1187__m256i test_mm256_insertf128_si256(__m256i A, __m128i B) {1188  // CHECK-LABEL: test_mm256_insertf128_si2561189  // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1190  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 4, i32 5, i32 6, i32 7>1191  return _mm256_insertf128_si256(A, B, 0);1192}1193TEST_CONSTEXPR(match_m256i(_mm256_insertf128_si256(((__m256i){1ULL, 2ULL, 3ULL, 4ULL}), ((__m128i){10ULL, 20ULL}), 0), 10ULL, 20ULL, 3ULL, 4ULL));1194 1195__m256i test_mm256_lddqu_si256(__m256i* A) {1196  // CHECK-LABEL: test_mm256_lddqu_si2561197  // CHECK: call <32 x i8> @llvm.x86.avx.ldu.dq.256(ptr %{{.*}})1198  return _mm256_lddqu_si256(A);1199}1200 1201__m256d test_mm256_load_pd(double* A) {1202  // CHECK-LABEL: test_mm256_load_pd1203  // CHECK: load <4 x double>, ptr %{{.*}}, align 321204  return _mm256_load_pd(A);1205}1206 1207__m256 test_mm256_load_ps(float* A) {1208  // CHECK-LABEL: test_mm256_load_ps1209  // CHECK: load <8 x float>, ptr %{{.*}}, align 321210  return _mm256_load_ps(A);1211}1212 1213__m256i test_mm256_load_si256(__m256i* A) {1214  // CHECK-LABEL: test_mm256_load_si2561215  // CHECK: load <4 x i64>, ptr %{{.*}}, align 321216  return _mm256_load_si256(A);1217}1218 1219__m256d test_mm256_loadu_pd(double* A) {1220  // CHECK-LABEL: test_mm256_loadu_pd1221  // CHECK: load <4 x double>, ptr %{{.*}}, align 1{{$}}1222  return _mm256_loadu_pd(A);1223}1224 1225__m256 test_mm256_loadu_ps(float* A) {1226  // CHECK-LABEL: test_mm256_loadu_ps1227  // CHECK: load <8 x float>, ptr %{{.*}}, align 1{{$}}1228  return _mm256_loadu_ps(A);1229}1230 1231__m256i test_mm256_loadu_si256(__m256i* A) {1232  // CHECK-LABEL: test_mm256_loadu_si2561233  // CHECK: load <4 x i64>, ptr %{{.+}}, align 1{{$}}1234  return _mm256_loadu_si256(A);1235}1236 1237__m256 test_mm256_loadu2_m128(float* A, float* B) {1238  // CHECK-LABEL: test_mm256_loadu2_m1281239  // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}1240  // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}1241  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1242  return _mm256_loadu2_m128(A, B);1243}1244 1245__m256d test_mm256_loadu2_m128d(double* A, double* B) {1246  // CHECK-LABEL: test_mm256_loadu2_m128d1247  // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}1248  // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}1249  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1250  return _mm256_loadu2_m128d(A, B);1251}1252 1253__m256i test_mm256_loadu2_m128i(__m128i* A, __m128i* B) {1254  // CHECK-LABEL: test_mm256_loadu2_m128i1255  // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}}1256  // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}}1257  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1258  return _mm256_loadu2_m128i(A, B);1259}1260 1261__m128d test_mm_maskload_pd(double* A, __m128i B) {1262  // CHECK-LABEL: test_mm_maskload_pd1263  // CHECK: call {{.*}}<2 x double> @llvm.x86.avx.maskload.pd(ptr %{{.*}}, <2 x i64> %{{.*}})1264  return _mm_maskload_pd(A, B);1265}1266 1267__m256d test_mm256_maskload_pd(double* A, __m256i B) {1268  // CHECK-LABEL: test_mm256_maskload_pd1269  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.maskload.pd.256(ptr %{{.*}}, <4 x i64> %{{.*}})1270  return _mm256_maskload_pd(A, B);1271}1272 1273__m128 test_mm_maskload_ps(float* A, __m128i B) {1274  // CHECK-LABEL: test_mm_maskload_ps1275  // CHECK: call {{.*}}<4 x float> @llvm.x86.avx.maskload.ps(ptr %{{.*}}, <4 x i32> %{{.*}})1276  return _mm_maskload_ps(A, B);1277}1278 1279__m256 test_mm256_maskload_ps(float* A, __m256i B) {1280  // CHECK-LABEL: test_mm256_maskload_ps1281  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.maskload.ps.256(ptr %{{.*}}, <8 x i32> %{{.*}})1282  return _mm256_maskload_ps(A, B);1283}1284 1285void test_mm_maskstore_pd(double* A, __m128i B, __m128d C) {1286  // CHECK-LABEL: test_mm_maskstore_pd1287  // CHECK: call void @llvm.x86.avx.maskstore.pd(ptr %{{.*}}, <2 x i64> %{{.*}}, <2 x double> %{{.*}})1288  _mm_maskstore_pd(A, B, C);1289}1290 1291void test_mm256_maskstore_pd(double* A, __m256i B, __m256d C) {1292  // CHECK-LABEL: test_mm256_maskstore_pd1293  // CHECK: call void @llvm.x86.avx.maskstore.pd.256(ptr %{{.*}}, <4 x i64> %{{.*}}, <4 x double> %{{.*}})1294  _mm256_maskstore_pd(A, B, C);1295}1296 1297void test_mm_maskstore_ps(float* A, __m128i B, __m128 C) {1298  // CHECK-LABEL: test_mm_maskstore_ps1299  // CHECK: call void @llvm.x86.avx.maskstore.ps(ptr %{{.*}}, <4 x i32> %{{.*}}, <4 x float> %{{.*}})1300  _mm_maskstore_ps(A, B, C);1301}1302 1303void test_mm256_maskstore_ps(float* A, __m256i B, __m256 C) {1304  // CHECK-LABEL: test_mm256_maskstore_ps1305  // CHECK: call void @llvm.x86.avx.maskstore.ps.256(ptr %{{.*}}, <8 x i32> %{{.*}}, <8 x float> %{{.*}})1306  _mm256_maskstore_ps(A, B, C);1307}1308 1309__m256d test_mm256_max_pd(__m256d A, __m256d B) {1310  // CHECK-LABEL: test_mm256_max_pd1311  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})1312  return _mm256_max_pd(A, B);1313}1314 1315__m256 test_mm256_max_ps(__m256 A, __m256 B) {1316  // CHECK-LABEL: test_mm256_max_ps1317  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})1318  return _mm256_max_ps(A, B);1319}1320 1321__m256d test_mm256_min_pd(__m256d A, __m256d B) {1322  // CHECK-LABEL: test_mm256_min_pd1323  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})1324  return _mm256_min_pd(A, B);1325}1326 1327__m256 test_mm256_min_ps(__m256 A, __m256 B) {1328  // CHECK-LABEL: test_mm256_min_ps1329  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})1330  return _mm256_min_ps(A, B);1331}1332 1333__m256d test_mm256_movedup_pd(__m256d A) {1334  // CHECK-LABEL: test_mm256_movedup_pd1335  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2>1336  return _mm256_movedup_pd(A);1337}1338TEST_CONSTEXPR(match_m256d(_mm256_movedup_pd((__m256d){+7.0, -7.0, -42.0, +42.0}), +7.0, +7.0, -42.0, -42.0));1339 1340__m256 test_mm256_movehdup_ps(__m256 A) {1341  // CHECK-LABEL: test_mm256_movehdup_ps1342  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>1343  return _mm256_movehdup_ps(A);1344}1345TEST_CONSTEXPR(match_m256(_mm256_movehdup_ps((__m256){+1.0f,-1.0f,+2.0f,+4.0f,+8.0f,-8.0f,-3.0f,+3.0f}), -1.0f, -1.0f, +4.0f, +4.0f, -8.0f, -8.0f, +3.0f, +3.0f));1346 1347__m256 test_mm256_moveldup_ps(__m256 A) {1348  // CHECK-LABEL: test_mm256_moveldup_ps1349  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1350  return _mm256_moveldup_ps(A);1351}1352TEST_CONSTEXPR(match_m256(_mm256_moveldup_ps((__m256){+1.0f,-1.0f,+2.0f,+4.0f,+8.0f,-8.0f,-3.0f,+3.0f}), +1.0f, +1.0f, +2.0f, +2.0f, +8.0f, +8.0f, -3.0f, -3.0f));1353 1354int test_mm256_movemask_pd(__m256d A) {1355  // CHECK-LABEL: test_mm256_movemask_pd1356  // CHECK: call {{.*}}i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %{{.*}})1357  return _mm256_movemask_pd(A);1358}1359TEST_CONSTEXPR(_mm256_movemask_pd((__m256d)(__v4df){-1234.5678901234, 98765.4321098765, 0.000123456789, -3.14159265358979}) == 0x9);1360TEST_CONSTEXPR(_mm256_movemask_pd((__m256d)(__v4df){-0.000000987654321, -99999.999999999, 42.424242424242, 314159.2653589793}) == 0x3);1361 1362int test_mm256_movemask_ps(__m256 A) {1363  // CHECK-LABEL: test_mm256_movemask_ps1364  // CHECK: call {{.*}}i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %{{.*}})1365  return _mm256_movemask_ps(A);1366}1367TEST_CONSTEXPR(_mm256_movemask_ps((__m256)(__v8sf){-12.3456f, 34.7890f, -0.0001234f, 123456.78f, -987.654f, 0.001234f, 3.14159f, -256.001f}) == 0x95);1368TEST_CONSTEXPR(_mm256_movemask_ps((__m256)(__v8sf){0.333333f, -45.6789f, 999.999f, -0.9999f, 17.234f, -128.512f, 2048.0f, -3.14f}) == 0xAA);1369 1370__m256d test_mm256_mul_pd(__m256d A, __m256d B) {1371  // CHECK-LABEL: test_mm256_mul_pd1372  // CHECK: fmul <4 x double>1373  return _mm256_mul_pd(A, B);1374}1375TEST_CONSTEXPR(match_m256d( _mm256_mul_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-4.0, -5.0, +6.0, +7.0}), +16.0, +25.0, +36.0, +49.0));1376 1377__m256 test_mm256_mul_ps(__m256 A, __m256 B) {1378  // CHECK-LABEL: test_mm256_mul_ps1379  // CHECK: fmul <8 x float>1380  return _mm256_mul_ps(A, B);1381}1382TEST_CONSTEXPR(match_m256( _mm256_mul_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}), +16.0f, +25.0f, +36.0f, +49.0f, +49.0f, +36.0f, +25.0f, +16.0f));1383 1384__m256d test_mm256_or_pd(__m256d A, __m256d B) {1385  // CHECK-LABEL: test_mm256_or_pd1386  // CHECK: or <4 x i64>1387  return _mm256_or_pd(A, B);1388}1389TEST_CONSTEXPR(match_m256d(_mm256_or_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), -4.0, -5.0, -6.0, +7.0));1390 1391__m256 test_mm256_or_ps(__m256 A, __m256 B) {1392  // CHECK-LABEL: test_mm256_or_ps1393  // CHECK: or <8 x i32>1394  return _mm256_or_ps(A, B);1395}1396TEST_CONSTEXPR(match_m256(_mm256_or_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), -4.0f, -5.0f, -6.0f, +7.0f, +7.0f, -6.0f, -5.0f, -4.0f));1397 1398__m128d test_mm_permute_pd(__m128d A) {1399  // CHECK-LABEL: test_mm_permute_pd1400  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 0>1401  return _mm_permute_pd(A, 1);1402}1403TEST_CONSTEXPR(match_m128d(_mm_permute_pd(((__m128d){1.0, 2.0}), 1), 2.0, 1.0));1404 1405__m256d test_mm256_permute_pd(__m256d A) {1406  // CHECK-LABEL: test_mm256_permute_pd1407  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>1408  return _mm256_permute_pd(A, 5);1409}1410TEST_CONSTEXPR(match_m256d(_mm256_permute_pd(((__m256d){1.0f, 2.0f, 3.0f, 4.0f}), 5), 2.0f, 1.0f, 4.0f, 3.0f));1411 1412__m128 test_mm_permute_ps(__m128 A) {1413  // CHECK-LABEL: test_mm_permute_ps1414  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>1415  return _mm_permute_ps(A, 0x1b);1416}1417TEST_CONSTEXPR(match_m128(_mm_permute_ps(((__m128){1.0, 2.0, 3.0, 4.0}), 0x1b), 4.0, 3.0, 2.0, 1.0));1418 1419// Test case for PR124011420__m128 test2_mm_permute_ps(__m128 a) {1421  // CHECK-LABEL: test2_mm_permute_ps1422  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 2, i32 1, i32 2, i32 3>1423  return _mm_permute_ps(a, 0xe6);1424}1425TEST_CONSTEXPR(match_m128(_mm_permute_ps(((__m128){1.0, 2.0, 3.0, 4.0}), 0xe6), 3.0, 2.0, 3.0, 4.0));1426 1427__m256 test_mm256_permute_ps(__m256 A) {1428  // CHECK-LABEL: test_mm256_permute_ps1429  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1430  return _mm256_permute_ps(A, 0x1b);1431}1432TEST_CONSTEXPR(match_m256(_mm256_permute_ps(((__m256){1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}), 0x1b), 4.0, 3.0, 2.0, 1.0, 8.0, 7.0, 6.0, 5.0));1433 1434__m256d test_mm256_permute2f128_pd(__m256d A, __m256d B) {1435  // CHECK-LABEL: test_mm256_permute2f128_pd1436  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1437  return _mm256_permute2f128_pd(A, B, 0x31);1438}1439 1440__m256 test_mm256_permute2f128_ps(__m256 A, __m256 B) {1441  // CHECK-LABEL: test_mm256_permute2f128_ps1442  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15>1443  return _mm256_permute2f128_ps(A, B, 0x13);1444}1445 1446__m256i test_mm256_permute2f128_si256(__m256i A, __m256i B) {1447  // CHECK-LABEL: test_mm256_permute2f128_si2561448  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>1449  return _mm256_permute2f128_si256(A, B, 0x20);1450}1451 1452__m128d test_mm_permutevar_pd(__m128d A, __m128i B) {1453  // CHECK-LABEL: test_mm_permutevar_pd1454  // CHECK: call {{.*}}<2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %{{.*}}, <2 x i64> %{{.*}})1455  return _mm_permutevar_pd(A, B);1456}1457TEST_CONSTEXPR(match_m128d(1458  _mm_permutevar_pd(1459    ((__m128d){0.0, 1.0}),1460    ((__m128i){0b10, 0b00})1461  ),1462  1.0, 0.01463));1464 1465__m256d test_mm256_permutevar_pd(__m256d A, __m256i B) {1466  // CHECK-LABEL: test_mm256_permutevar_pd1467  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %{{.*}}, <4 x i64> %{{.*}})1468  return _mm256_permutevar_pd(A, B);1469}1470TEST_CONSTEXPR(match_m256d(1471  _mm256_permutevar_pd(1472    ((__m256d){0.0, 1.0, 2.0, 3.0}),1473    ((__m256i){0b10, 0b00, 0b00, 0b10})1474  ),1475  1.0, 0.0, 2.0, 3.01476));1477 1478__m128 test_mm_permutevar_ps(__m128 A, __m128i B) {1479  // CHECK-LABEL: test_mm_permutevar_ps1480  // CHECK: call {{.*}}<4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %{{.*}}, <4 x i32> %{{.*}})1481  return _mm_permutevar_ps(A, B);1482}1483TEST_CONSTEXPR(match_m128(1484  _mm_permutevar_ps(1485    ((__m128){0.0, 1.0, 2.0, 3.0}),1486    ((__m128i)(__v4si){0b11, 0b10, 0b01, 0b00})1487  ),1488  3.0, 2.0, 1.0, 0.01489));1490 1491__m256 test_mm256_permutevar_ps(__m256 A, __m256i B) {1492  // CHECK-LABEL: test_mm256_permutevar_ps1493  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %{{.*}}, <8 x i32> %{{.*}})1494  return _mm256_permutevar_ps(A, B);1495}1496TEST_CONSTEXPR(match_m256(1497  _mm256_permutevar_ps(1498    ((__m256){0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}),1499    ((__m256i)(__v8si){0b11, 0b10, 0b01, 0b00, 0b01, 0b00, 0b11, 0b10})1500  ),1501  3.0, 2.0, 1.0, 0.0, 5.0, 4.0, 7.0, 6.01502));1503 1504__m256 test_mm256_rcp_ps(__m256 A) {1505  // CHECK-LABEL: test_mm256_rcp_ps1506  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float> %{{.*}})1507  return _mm256_rcp_ps(A);1508}1509 1510__m256d test_mm256_round_pd(__m256d x) {1511  // CHECK-LABEL: test_mm256_round_pd1512  // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 4)1513  return _mm256_round_pd(x, 4);1514}1515 1516__m256 test_mm256_round_ps(__m256 x) {1517  // CHECK-LABEL: test_mm256_round_ps1518  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 4)1519  return _mm256_round_ps(x, 4);1520}1521 1522__m256 test_mm256_rsqrt_ps(__m256 A) {1523  // CHECK-LABEL: test_mm256_rsqrt_ps1524  // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float> %{{.*}})1525  return _mm256_rsqrt_ps(A);1526}1527 1528__m256i test_mm256_set_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,1529                            char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,1530                            char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,1531                            char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {1532  // CHECK-LABEL: test_mm256_set_epi81533  // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 01534  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11535  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21536  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31537  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 41538  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 51539  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 61540  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 71541  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 81542  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 91543  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 101544  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 111545  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 121546  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 131547  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 141548  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 151549  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 161550  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 171551  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 181552  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 191553  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 201554  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 211555  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 221556  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 231557  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 241558  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 251559  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 261560  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 271561  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 281562  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 291563  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 301564  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 311565  return _mm256_set_epi8(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31);1566}1567TEST_CONSTEXPR(match_v32qi(_mm256_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0));1568 1569__m256i test_mm256_set_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,1570                             short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {1571  // CHECK-LABEL: test_mm256_set_epi161572  // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 01573  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11574  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 21575  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 31576  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 41577  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 51578  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 61579  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 71580  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 81581  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 91582  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 101583  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 111584  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 121585  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 131586  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 141587  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 151588  return _mm256_set_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);1589}1590TEST_CONSTEXPR(match_v16hi(_mm256_set_epi16(0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15), -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0));1591 1592__m256i test_mm256_set_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {1593  // CHECK-LABEL: test_mm256_set_epi321594  // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 01595  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 11596  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 21597  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 31598  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 41599  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 51600  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 61601  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 71602  return _mm256_set_epi32(A0, A1, A2, A3, A4, A5, A6, A7);1603}1604TEST_CONSTEXPR(match_v8si(_mm256_set_epi32(1, -3, 5, -7, 9, -11, 13, -15), -15, 13, -11, 9, -7, 5, -3, 1));1605 1606__m256i test_mm256_set_epi64x(long long A0, long long A1, long long A2, long long A3) {1607  // CHECK-LABEL: test_mm256_set_epi64x1608  // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 01609  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 11610  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 21611  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 31612  return _mm256_set_epi64x(A0, A1, A2, A3);1613}1614TEST_CONSTEXPR(match_v4di(_mm256_set_epi64x(100, -1000, 2000, -200), -200, 2000, -1000, 100));1615 1616__m256 test_mm256_set_m128(__m128 A, __m128 B) {1617  // CHECK-LABEL: test_mm256_set_m1281618  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1619  return _mm256_set_m128(A, B);1620}1621TEST_CONSTEXPR(match_m256(_mm256_set_m128((__m128){10.0f, 20.0f, 30.0f, 40.0f}, (__m128){1.0f, 2.0f, 3.0f, 4.0f}), 1.0f, 2.0f, 3.0f, 4.0f, 10.0f, 20.0f, 30.0f, 40.0f));1622 1623__m256d test_mm256_set_m128d(__m128d A, __m128d B) {1624  // CHECK-LABEL: test_mm256_set_m128d1625  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1626  return _mm256_set_m128d(A, B);1627}1628TEST_CONSTEXPR(match_m256d(_mm256_set_m128d((__m128d){10.0, 20.0}, (__m128d){1.0, 2.0}), 1.0, 2.0, 10.0, 20.0));1629 1630__m256i test_mm256_set_m128i(__m128i A, __m128i B) {1631  // CHECK-LABEL: test_mm256_set_m128i1632  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1633  return _mm256_set_m128i(A, B);1634}1635TEST_CONSTEXPR(match_m256i(_mm256_set_m128i((__m128i){10LL, 20LL}, (__m128i){1LL, 2LL}), 1LL, 2LL, 10LL, 20LL));1636 1637__m256d test_mm256_set_pd(double A0, double A1, double A2, double A3) {1638  // CHECK-LABEL: test_mm256_set_pd1639  // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 01640  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 11641  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 21642  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 31643  return _mm256_set_pd(A0, A1, A2, A3);1644}1645TEST_CONSTEXPR(match_m256d(_mm256_set_pd(-100.0, +90.0, -50.0, +1.0), +1.0, -50.0, +90.0, -100.0));1646 1647__m256 test_mm256_set_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {1648  // CHECK-LABEL: test_mm256_set_ps1649  // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 01650  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 11651  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 21652  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 31653  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 41654  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 51655  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 61656  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 71657  return _mm256_set_ps(A0, A1, A2, A3, A4, A5, A6, A7);1658}1659TEST_CONSTEXPR(match_m256(_mm256_set_ps(-1.0f, +2.0f, -3.0f, +4.0f, -5.0f, +6.0f, -7.0f, +8.0f), +8.0f, -7.0f, +6.0f, -5.0f, +4.0f, -3.0f, +2.0f, -1.0f));1660 1661__m256i test_mm256_set1_epi8(char A) {1662  // CHECK-LABEL: test_mm256_set1_epi81663  // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 01664  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11665  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21666  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31667  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 41668  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 51669  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 61670  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 71671  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 81672  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 91673  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 101674  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 111675  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 121676  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 131677  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 141678  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 151679  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 161680  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 171681  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 181682  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 191683  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 201684  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 211685  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 221686  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 231687  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 241688  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 251689  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 261690  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 271691  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 281692  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 291693  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 301694  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 311695  return _mm256_set1_epi8(A);1696}1697TEST_CONSTEXPR(match_v32qi(_mm256_set1_epi8(99), 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99));1698 1699__m256i test_mm256_set1_epi16(short A) {1700  // CHECK-LABEL: test_mm256_set1_epi161701  // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 01702  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11703  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 21704  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 31705  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 41706  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 51707  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 61708  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 71709  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 81710  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 91711  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 101712  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 111713  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 121714  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 131715  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 141716  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 151717  return _mm256_set1_epi16(A);1718}1719TEST_CONSTEXPR(match_v16hi(_mm256_set1_epi16(-128), -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128));1720 1721__m256i test_mm256_set1_epi32(int A) {1722  // CHECK-LABEL: test_mm256_set1_epi321723  // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 01724  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 11725  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 21726  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 31727  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 41728  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 51729  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 61730  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 71731  return _mm256_set1_epi32(A);1732}1733TEST_CONSTEXPR(match_v8si(_mm256_set1_epi32(55), 55, 55, 55, 55, 55, 55, 55, 55));1734 1735__m256i test_mm256_set1_epi64x(long long A) {1736  // CHECK-LABEL: test_mm256_set1_epi64x1737  // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 01738  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 11739  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 21740  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 31741  return _mm256_set1_epi64x(A);1742}1743TEST_CONSTEXPR(match_v4di(_mm256_set1_epi64x(-65535), -65535, -65535, -65535, -65535));1744 1745__m256d test_mm256_set1_pd(double A) {1746  // CHECK-LABEL: test_mm256_set1_pd1747  // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 01748  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 11749  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 21750  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 31751  return _mm256_set1_pd(A);1752}1753TEST_CONSTEXPR(match_m256d(_mm256_set1_pd(+42.0), +42.0, +42.0, +42.0, +42.0));1754 1755__m256 test_mm256_set1_ps(float A) {1756  // CHECK-LABEL: test_mm256_set1_ps1757  // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 01758  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 11759  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 21760  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 31761  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 41762  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 51763  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 61764  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 71765  return _mm256_set1_ps(A);1766}1767TEST_CONSTEXPR(match_m256(_mm256_set1_ps(-101.0f), -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f));1768 1769__m256i test_mm256_setr_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,1770                             char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,1771                             char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,1772                             char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {1773  // CHECK-LABEL: test_mm256_setr_epi81774  // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 01775  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11776  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21777  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31778  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 41779  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 51780  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 61781  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 71782  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 81783  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 91784  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 101785  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 111786  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 121787  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 131788  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 141789  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 151790  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 161791  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 171792  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 181793  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 191794  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 201795  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 211796  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 221797  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 231798  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 241799  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 251800  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 261801  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 271802  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 281803  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 291804  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 301805  // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 311806  return _mm256_setr_epi8(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31);1807}1808TEST_CONSTEXPR(match_v32qi(_mm256_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31));1809 1810__m256i test_mm256_setr_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,1811                              short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {1812  // CHECK-LABEL: test_mm256_setr_epi161813  // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 01814  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11815  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 21816  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 31817  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 41818  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 51819  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 61820  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 71821  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 81822  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 91823  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 101824  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 111825  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 121826  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 131827  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 141828  // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 151829  return _mm256_setr_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);1830}1831TEST_CONSTEXPR(match_v16hi(_mm256_setr_epi16(0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15), 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15));1832 1833__m256i test_mm256_setr_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {1834  // CHECK-LABEL: test_mm256_setr_epi321835  // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 01836  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 11837  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 21838  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 31839  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 41840  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 51841  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 61842  // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 71843  return _mm256_setr_epi32(A0, A1, A2, A3, A4, A5, A6, A7);1844}1845TEST_CONSTEXPR(match_v8si(_mm256_setr_epi32(1, -3, 5, -7, 9, -11, 13, -15), 1, -3, 5, -7, 9, -11, 13, -15));1846 1847__m256i test_mm256_setr_epi64x(long long A0, long long A1, long long A2, long long A3) {1848  // CHECK-LABEL: test_mm256_setr_epi64x1849  // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 01850  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 11851  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 21852  // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 31853  return _mm256_setr_epi64x(A0, A1, A2, A3);1854}1855TEST_CONSTEXPR(match_v4di(_mm256_setr_epi64x(100, -1000, 2000, -200), 100, -1000, 2000, -200));1856 1857__m256 test_mm256_setr_m128(__m128 A, __m128 B) {1858  // CHECK-LABEL: test_mm256_setr_m1281859  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1860  return _mm256_setr_m128(A, B);1861}1862TEST_CONSTEXPR(match_m256(_mm256_setr_m128((__m128){1.0f, 2.0f, 3.0f, 4.0f}, (__m128){10.0f, 20.0f, 30.0f, 40.0f}), 1.0f, 2.0f, 3.0f, 4.0f, 10.0f, 20.0f, 30.0f, 40.0f));1863 1864__m256d test_mm256_setr_m128d(__m128d A, __m128d B) {1865  // CHECK-LABEL: test_mm256_setr_m128d1866  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1867  return _mm256_setr_m128d(A, B);1868}1869TEST_CONSTEXPR(match_m256d(_mm256_setr_m128d((__m128d){1.0, 2.0}, (__m128d){10.0, 20.0}), 1.0, 2.0, 10.0, 20.0));1870 1871__m256i test_mm256_setr_m128i(__m128i A, __m128i B) {1872  // CHECK-LABEL: test_mm256_setr_m128i1873  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1874  return _mm256_setr_m128i(A, B);1875}1876TEST_CONSTEXPR(match_m256i(_mm256_setr_m128i((__m128i){1LL, 2LL}, (__m128i){10LL, 20LL}), 1LL, 2LL, 10LL, 20LL));1877 1878__m256d test_mm256_setr_pd(double A0, double A1, double A2, double A3) {1879  // CHECK-LABEL: test_mm256_setr_pd1880  // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 01881  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 11882  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 21883  // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 31884  return _mm256_setr_pd(A0, A1, A2, A3);1885}1886TEST_CONSTEXPR(match_m256d(_mm256_setr_pd(-100.0, +90.0, -50.0, +1.0), -100.0, +90.0, -50.0, +1.0));1887 1888__m256 test_mm256_setr_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {1889  // CHECK-LABEL: test_mm256_setr_ps1890  // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 01891  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 11892  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 21893  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 31894  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 41895  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 51896  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 61897  // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 71898  return _mm256_setr_ps(A0, A1, A2, A3, A4, A5, A6, A7);1899}1900TEST_CONSTEXPR(match_m256(_mm256_setr_ps(-1.0f, +2.0f, -3.0f, +4.0f, -5.0f, +6.0f, -7.0f, +8.0f), -1.0f, +2.0f, -3.0f, +4.0f, -5.0f, +6.0f, -7.0f, +8.0f));1901 1902__m256d test_mm256_setzero_pd(void) {1903  // CHECK-LABEL: test_mm256_setzero_pd1904  // CHECK: store <4 x double> zeroinitializer1905  return _mm256_setzero_pd();1906}1907TEST_CONSTEXPR(match_m256d(_mm256_setzero_pd(), +0.0, +0.0, +0.0, +0.0));1908 1909__m256 test_mm256_setzero_ps(void) {1910  // CHECK-LABEL: test_mm256_setzero_ps1911  // CHECK: store <8 x float> zeroinitializer1912  return _mm256_setzero_ps();1913}1914TEST_CONSTEXPR(match_m256(_mm256_setzero_ps(), +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f));1915 1916__m256i test_mm256_setzero_si256(void) {1917  // CHECK-LABEL: test_mm256_setzero_si2561918  // CHECK: store <4 x i64> zeroinitializer1919  return _mm256_setzero_si256();1920}1921TEST_CONSTEXPR(match_m256i(_mm256_setzero_si256(), 0, 0, 0, 0));1922 1923__m256d test_mm256_shuffle_pd(__m256d A, __m256d B) {1924  // CHECK-LABEL: test_mm256_shuffle_pd1925  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1926  return _mm256_shuffle_pd(A, B, 0);1927}1928 1929TEST_CONSTEXPR((match_m256d(_mm256_shuffle_pd(((__m256d)(__v4df){1.0, 2.0, 3.0, 4.0}), ((__m256d)(__v4df){5.0, 6.0, 7.0, 8.0}), 15), 2.0, 6.0, 4.0, 8.0)));1930 1931__m256 test_mm256_shuffle_ps(__m256 A, __m256 B) {1932  // CHECK-LABEL: test_mm256_shuffle_ps1933  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 8, i32 8, i32 4, i32 4, i32 12, i32 12>1934  return _mm256_shuffle_ps(A, B, 0);1935}1936 1937TEST_CONSTEXPR((match_m256(_mm256_shuffle_ps(((__m256)(__v8sf){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}), ((__m256)(__v8sf){9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f}), 4), 1.0f, 2.0f, 9.0f, 9.0f, 5.0f, 6.0f, 13.0f, 13.0f)));1938 1939__m256d test_mm256_sqrt_pd(__m256d A) {1940  // CHECK-LABEL: test_mm256_sqrt_pd1941  // CHECK: call {{.*}}<4 x double> @llvm.sqrt.v4f64(<4 x double> %{{.*}})1942  return _mm256_sqrt_pd(A);1943}1944 1945__m256 test_mm256_sqrt_ps(__m256 A) {1946  // CHECK-LABEL: test_mm256_sqrt_ps1947  // CHECK: call {{.*}}<8 x float> @llvm.sqrt.v8f32(<8 x float> %{{.*}})1948  return _mm256_sqrt_ps(A);1949}1950 1951void test_mm256_store_pd(double* A, __m256d B) {1952  // CHECK-LABEL: test_mm256_store_pd1953  // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 321954  _mm256_store_pd(A, B);1955}1956 1957void test_mm256_store_ps(float* A, __m256 B) {1958  // CHECK-LABEL: test_mm256_store_ps1959  // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 321960  _mm256_store_ps(A, B);1961}1962 1963void test_mm256_store_si256(__m256i* A, __m256i B) {1964  // CHECK-LABEL: test_mm256_store_si2561965  // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 321966  _mm256_store_si256(A, B);1967}1968 1969void test_mm256_storeu_pd(double* A, __m256d B) {1970  // CHECK-LABEL: test_mm256_storeu_pd1971  // CHECK:   store <4 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}1972  // CHECK-NEXT: ret void1973  _mm256_storeu_pd(A, B);1974}1975 1976void test_mm256_storeu_ps(float* A, __m256 B) {1977  // CHECK-LABEL: test_mm256_storeu_ps1978  // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}1979  // CHECK-NEXT: ret void1980  _mm256_storeu_ps(A, B);1981}1982 1983void test_mm256_storeu_si256(__m256i* A, __m256i B) {1984  // CHECK-LABEL: test_mm256_storeu_si2561985  // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}1986  // CHECK-NEXT: ret void1987  _mm256_storeu_si256(A, B);1988}1989 1990void test_mm256_storeu2_m128(float* A, float* B, __m256 C) {1991  // CHECK-LABEL: test_mm256_storeu2_m1281992  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1993  // CHECK: store <4 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}1994  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1995  // CHECK: store <4 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}1996  _mm256_storeu2_m128(A, B, C);1997}1998 1999void test_mm256_storeu2_m128d(double* A, double* B, __m256d C) {2000  // CHECK-LABEL: test_mm256_storeu2_m128d2001  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>2002  // CHECK: store <2 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}2003  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>2004  // CHECK: store <2 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}2005  _mm256_storeu2_m128d(A, B, C);2006}2007 2008void test_mm256_storeu2_m128i(__m128i* A, __m128i* B, __m256i C) {2009  // CHECK-LABEL: test_mm256_storeu2_m128i2010  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>2011  // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}2012  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>2013  // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}2014  _mm256_storeu2_m128i(A, B, C);2015}2016 2017void test_mm256_stream_pd(double* A, __m256d B) {2018  // CHECK-LABEL: test_mm256_stream_pd2019  // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal2020  _mm256_stream_pd(A, B);2021}2022 2023void test_mm256_stream_pd_void(void *A, __m256d B) {2024  // CHECK-LABEL: test_mm256_stream_pd_void2025  // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal2026  _mm256_stream_pd(A, B);2027}2028 2029void test_mm256_stream_ps(float* A, __m256 B) {2030  // CHECK-LABEL: test_mm256_stream_ps2031  // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal2032  _mm256_stream_ps(A, B);2033}2034 2035void test_mm256_stream_ps_void(void *A, __m256 B) {2036  // CHECK-LABEL: test_mm256_stream_ps_void2037  // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal2038  _mm256_stream_ps(A, B);2039}2040 2041void test_mm256_stream_si256(__m256i* A, __m256i B) {2042  // CHECK-LABEL: test_mm256_stream_si2562043  // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal2044  _mm256_stream_si256(A, B);2045}2046 2047void test_mm256_stream_si256_void(void *A, __m256i B) {2048  // CHECK-LABEL: test_mm256_stream_si256_void2049  // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal2050  _mm256_stream_si256(A, B);2051}2052 2053__m256d test_mm256_sub_pd(__m256d A, __m256d B) {2054  // CHECK-LABEL: test_mm256_sub_pd2055  // CHECK: fsub <4 x double>2056  return _mm256_sub_pd(A, B);2057}2058TEST_CONSTEXPR(match_m256d( _mm256_sub_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-0.0, +0.0, +2.0, -1.0}), -4.0, -5.0, 4.0, 8.0));2059 2060__m256 test_mm256_sub_ps(__m256 A, __m256 B) {2061  // CHECK-LABEL: test_mm256_sub_ps2062  // CHECK: fsub <8 x float>2063  return _mm256_sub_ps(A, B);2064}2065TEST_CONSTEXPR(match_m256( _mm256_sub_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-0.0f, +0.0f, +2.0f, -1.0f, -1.0f, +2.0f, +0.0f, -0.0f}), -4.0f, -5.0f, 4.0f, 8.0f, 8.0f, 4.0f, -5.0f, -4.0f));2066 2067int test_mm_testc_pd(__m128d A, __m128d B) {2068  // CHECK-LABEL: test_mm_testc_pd2069  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})2070  return _mm_testc_pd(A, B);2071}2072TEST_CONSTEXPR(_mm_testc_pd((__m128d)(__v2df){-1.0, -2.0},(__m128d)(__v2df){-3.0,  4.0}) == 1);2073TEST_CONSTEXPR(_mm_testc_pd((__m128d)(__v2df){ 1.0, -2.0},(__m128d)(__v2df){-3.0,  4.0}) == 0);2074TEST_CONSTEXPR(_mm_testc_pd((__m128d)(__v2df){ 1.0, -2.0},(__m128d)(__v2df){ 0.0,  5.0}) == 1);2075 2076int test_mm256_testc_pd(__m256d A, __m256d B) {2077  // CHECK-LABEL: test_mm256_testc_pd2078  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})2079  return _mm256_testc_pd(A, B);2080}2081TEST_CONSTEXPR(_mm256_testc_pd((__m256d)(__v4df){-1.0,  2.0, -3.0,  4.0},(__m256d)(__v4df){-5.0,  6.0,  7.0,  8.0}) == 1);2082TEST_CONSTEXPR(_mm256_testc_pd((__m256d)(__v4df){ 1.0,  2.0, -3.0,  4.0},(__m256d)(__v4df){-5.0,  6.0,  7.0,  8.0}) == 0);2083TEST_CONSTEXPR(_mm256_testc_pd((__m256d)(__v4df){-1.0, -2.0, -3.0, -4.0},(__m256d)(__v4df){ 5.0,  6.0,  7.0,  8.0}) == 1);2084 2085int test_mm_testc_ps(__m128 A, __m128 B) {2086  // CHECK-LABEL: test_mm_testc_ps2087  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})2088  return _mm_testc_ps(A, B);2089}2090TEST_CONSTEXPR(_mm_testc_ps((__m128)(__v4sf){-1,-1,-9001.1009,0x0FA1L}, (__m128)(__v4sf){-1.0,-9001,9001,9000}) == 1);2091TEST_CONSTEXPR(_mm_testc_ps((__m128)(__v4sf){-1,2384.23,-9001.1009,0x0FA1L}, (__m128)(__v4sf){-1.0,-9001,9001,9000}) == 0);2092TEST_CONSTEXPR(_mm_testc_ps((__m128)(__v4sf){-1,-2,-9001.1009,-93}, (__m128)(__v4sf){-1.0,-9001,-0.9001,-1000}) == 1);2093 2094int test_mm256_testc_ps(__m256 A, __m256 B) {2095  // CHECK-LABEL: test_mm256_testc_ps2096  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})2097  return _mm256_testc_ps(A, B);2098}2099TEST_CONSTEXPR(_mm256_testc_ps((__m256)(__v8sf){-1, -2, -3, -4, -5, -6, -7, 8},(__m256)(__v8sf){1, 2, 3, 4, 5, 6, 7, -8}) == 0);2100TEST_CONSTEXPR(_mm256_testc_ps((__m256)(__v8sf){0,0,0,0,0,0,0,-1.00001},(__m256)(__v8sf){1, 2, 3, 4, 5, 6, 7, -8}) == 1);2101TEST_CONSTEXPR(_mm256_testc_ps((__m256)(__v8sf){0,-0.00002,0,0,0,0,0,-1.00001},(__m256)(__v8sf){1, 2, 3, -4, 5, -6, -7, 8}) == 0);2102 2103int test_mm256_testc_si256(__m256i A, __m256i B) {2104  // CHECK-LABEL: test_mm256_testc_si2562105  // CHECK: call {{.*}}i32 @llvm.x86.avx.ptestc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})2106  return _mm256_testc_si256(A, B);2107}2108TEST_CONSTEXPR(_mm256_testc_si256((__m256i)(__v4di){0,0,0,0}, (__m256i)(__v4di){0,0,0,0}) == 1);2109TEST_CONSTEXPR(_mm256_testc_si256((__m256i)(__v4di){0,0,-1,0}, (__m256i)(__v4di){0,0,1,0}) == 1);2110TEST_CONSTEXPR(_mm256_testc_si256((__m256i)(__v4di){-1,-2,1,3}, (__m256i)(__v4di){0,-1,1,1}) == 0);2111 2112int test_mm_testnzc_pd(__m128d A, __m128d B) {2113  // CHECK-LABEL: test_mm_testnzc_pd2114  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})2115  return _mm_testnzc_pd(A, B);2116}2117TEST_CONSTEXPR(_mm_testnzc_pd((__m128d)(__v2df){-1.0, +2.0},(__m128d)(__v2df){-3.0, -4.0}) == 1);2118TEST_CONSTEXPR(_mm_testnzc_pd((__m128d)(__v2df){+1.0, +2.0},(__m128d)(__v2df){+3.0, -4.0}) == 0);2119TEST_CONSTEXPR(_mm_testnzc_pd((__m128d)(__v2df){-1.0, -2.0},(__m128d)(__v2df){-3.0, +4.0}) == 0);2120 2121int test_mm256_testnzc_pd(__m256d A, __m256d B) {2122  // CHECK-LABEL: test_mm256_testnzc_pd2123  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})2124  return _mm256_testnzc_pd(A, B);2125}2126TEST_CONSTEXPR(_mm256_testnzc_pd((__m256d)(__v4df){-1.0, 2.0, 3.0, -4.0}, (__m256d)(__v4df){-5.0, -6.0, 7.0, 8.0}) == 1);2127TEST_CONSTEXPR(_mm256_testnzc_pd((__m256d)(__v4df){1.0, 2.0, 3.0, 4.0}, (__m256d)(__v4df){-1.0, 6.0, 7.0, 8.0}) == 0);2128TEST_CONSTEXPR(_mm256_testnzc_pd((__m256d)(__v4df){-1.0, -2.0, -3.0, -4.0}, (__m256d)(__v4df){-5.0, 6.0, 7.0, 8.0}) == 0);2129 2130int test_mm_testnzc_ps(__m128 A, __m128 B) {2131  // CHECK-LABEL: test_mm_testnzc_ps2132  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})2133  return _mm_testnzc_ps(A, B);2134}2135TEST_CONSTEXPR(_mm_testnzc_ps((__m128)(__v4sf){-9.9,987,-67,0}, (__m128)(__v4sf){10.0,-1.12,-29.29,0}) == 1);2136TEST_CONSTEXPR(_mm_testnzc_ps((__m128)(__v4sf){-810.0,-1.0,-1.0,-3.0}, (__m128)(__v4sf){-10.0,-1.0,-1.0,-2.0}) == 0);2137TEST_CONSTEXPR(_mm_testnzc_ps((__m128)(__v4sf){0,0,0,0}, (__m128)(__v4sf){0,-1,0,-1}) == 0);2138 2139int test_mm256_testnzc_ps(__m256 A, __m256 B) {2140  // CHECK-LABEL: test_mm256_testnzc_ps2141  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})2142  return _mm256_testnzc_ps(A, B);2143}2144TEST_CONSTEXPR(_mm256_testnzc_ps((__m256)(__v8sf){-1, -2, -3, -4, -5, -6, -7, 8},(__m256)(__v8sf){1, -2, 3, 4, 5, 6, 7, -8}) == 1);2145TEST_CONSTEXPR(_mm256_testnzc_ps((__m256)(__v8sf){0,0,0,0,0,0,0,-1.00001},(__m256)(__v8sf){1, 2, 3, 4, 5, 6, 7, -8}) == 0);2146TEST_CONSTEXPR(_mm256_testnzc_ps((__m256)(__v8sf){0,-0.00002,0,0,0,0,0,-1.00001},(__m256)(__v8sf){1, 2, 3, -4, 5, -6, -7, 8}) == 0);2147 2148int test_mm256_testnzc_si256(__m256i A, __m256i B) {2149  // CHECK-LABEL: test_mm256_testnzc_si2562150  // CHECK: call {{.*}}i32 @llvm.x86.avx.ptestnzc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})2151  return _mm256_testnzc_si256(A, B);2152}2153TEST_CONSTEXPR(_mm256_testnzc_si256((__m256i)(__v4di){-1,0,0,0}, (__m256i)(__v4di){478329848,23438,2343,-3483}) == 1);2154TEST_CONSTEXPR(_mm256_testnzc_si256((__m256i)(__v4di){1,0,0,0}, (__m256i)(__v4di){3,0,0,0}) == 1);2155TEST_CONSTEXPR(_mm256_testnzc_si256((__m256i)(__v4di){-1,239483,-1,0}, (__m256i)(__v4di){3849234,0,-2,0}) == 0);2156TEST_CONSTEXPR(_mm256_testnzc_si256((__m256i)(__v4di){-1,0,-1,3}, (__m256i)(__v4di){1,0,9999999,1}) == 0);2157 2158int test_mm_testz_pd(__m128d A, __m128d B) {2159  // CHECK-LABEL: test_mm_testz_pd2160  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})2161  return _mm_testz_pd(A, B);2162}2163TEST_CONSTEXPR(_mm_testz_pd((__m128d)(__v2df){-1,0}, (__m128d)(__v2df){0,-1}) == 1);2164TEST_CONSTEXPR(_mm_testz_pd((__m128d)(__v2df){0,-13.13}, (__m128d)(__v2df){0,-11.1}) == 0);2165TEST_CONSTEXPR(_mm_testz_pd((__m128d)(__v2df){0,5.13}, (__m128d)(__v2df){0,-113.1324823}) == 1);2166 2167int test_mm256_testz_pd(__m256d A, __m256d B) {2168  // CHECK-LABEL: test_mm256_testz_pd2169  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})2170  return _mm256_testz_pd(A, B);2171}2172TEST_CONSTEXPR(_mm256_testz_pd((__m256d)(__v4df){-1,0,-47.47,0.00002}, (__m256d)(__v4df){0,-1,74.0101,-1}) == 1);2173TEST_CONSTEXPR(_mm256_testz_pd((__m256d)(__v4df){-1,3249.9,-47.47,-0.00002}, (__m256d)(__v4df){0,-1,74.0101,-9999900}) == 0);2174TEST_CONSTEXPR(_mm256_testz_pd((__m256d)(__v4df){0,0,-8,0}, (__m256d)(__v4df){0,-1,-101,-123}) == 0);2175 2176int test_mm_testz_ps(__m128 A, __m128 B) {2177  // CHECK-LABEL: test_mm_testz_ps2178  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})2179  return _mm_testz_ps(A, B);2180}2181TEST_CONSTEXPR(_mm_testz_ps((__m128)(__v4sf){-9.9,987,67,0}, (__m128)(__v4sf){10.0,-1.12,-29.29,0}) == 1);2182TEST_CONSTEXPR(_mm_testz_ps((__m128)(__v4sf){10.0,1.0,-1.0,-3.0}, (__m128)(__v4sf){-10.0,-1.0,-1.0,-2.0}) == 0);2183TEST_CONSTEXPR(_mm_testz_ps((__m128)(__v4sf){0,0,0,0}, (__m128)(__v4sf){0,-1,0,-1}) == 1);2184 2185int test_mm256_testz_ps(__m256 A, __m256 B) {2186  // CHECK-LABEL: test_mm256_testz_ps2187  // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})2188  return _mm256_testz_ps(A, B);2189}2190TEST_CONSTEXPR(_mm256_testz_ps((__m256)(__v8sf){-1, -2, -3, -4, -5, -6, -7, 8},(__m256)(__v8sf){1, 2, 3, 4, 5, 6, 7, -8}) == 1);2191TEST_CONSTEXPR(_mm256_testz_ps((__m256)(__v8sf){0,0,0,0,0,0,0,-1.00001},(__m256)(__v8sf){1, 2, 3, 4, 5, 6, 7, -8}) == 0);2192TEST_CONSTEXPR(_mm256_testz_ps((__m256)(__v8sf){0,-0.00002,0,0,0,0,0,-1.00001},(__m256)(__v8sf){1, 2, 3, -4, 5, -6, -7, 8}) == 1);2193 2194int test_mm256_testz_si256(__m256i A, __m256i B) {2195  // CHECK-LABEL: test_mm256_testz_si2562196  // CHECK: call {{.*}}i32 @llvm.x86.avx.ptestz.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})2197  return _mm256_testz_si256(A, B);2198}2199TEST_CONSTEXPR(_mm256_testz_si256((__m256i)(__v4di){0,0,0,0}, (__m256i)(__v4di){0,0,0,0}) == 1);2200TEST_CONSTEXPR(_mm256_testz_si256((__m256i)(__v4di){0,0,-1,0}, (__m256i)(__v4di){0,0,-1,0}) == 0);2201TEST_CONSTEXPR(_mm256_testz_si256((__m256i)(__v4di){-1,0,1,0}, (__m256i)(__v4di){0,-1,0,1}) == 1);2202 2203__m256 test_mm256_undefined_ps(void) {2204  // X64-LABEL: test_mm256_undefined_ps2205  // X64: ret <8 x float> zeroinitializer2206  //2207  // X86-LABEL: test_mm256_undefined_ps2208  // X86: store <8 x float> zeroinitializer2209  return _mm256_undefined_ps();2210}2211 2212__m256d test_mm256_undefined_pd(void) {2213  // X64-LABEL: test_mm256_undefined_pd2214  // X64: ret <4 x double> zeroinitializer2215  //2216  // X86-LABEL: test_mm256_undefined_pd2217  // X86: store <4 x double> zeroinitializer2218  return _mm256_undefined_pd();2219}2220 2221__m256i test_mm256_undefined_si256(void) {2222  // X64-LABEL: test_mm256_undefined_si2562223  // X64: ret <4 x i64> zeroinitializer2224  //2225  // X86-LABEL: test_mm256_undefined_si2562226  // X86: store <4 x i64> zeroinitializer2227  return _mm256_undefined_si256();2228}2229 2230__m256d test_mm256_unpackhi_pd(__m256d A, __m256d B) {2231  // CHECK-LABEL: test_mm256_unpackhi_pd2232  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2233  return _mm256_unpackhi_pd(A, B);2234}2235TEST_CONSTEXPR(match_m256d(_mm256_unpackhi_pd((__m256d){+1.0, +2.0, +3.0, +4.0}, (__m256d){+5.0, +6.0, +7.0, +8.0}), +2.0, +6.0, +4.0, +8.0));2236 2237__m256 test_mm256_unpackhi_ps(__m256 A, __m256 B) {2238  // CHECK-LABEL: test_mm256_unpackhi_ps2239  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>2240  return _mm256_unpackhi_ps(A, B);2241}2242TEST_CONSTEXPR(match_m256(_mm256_unpackhi_ps((__m256){+0.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f}, (__m256){+10.0f, +11.0f, +12.0f, +13.0f, +14.0f, +15.0f, +16.0f, +17.0f}), +2.0f, +12.0f, +3.0f, +13.0f, +6.0f, +16.0f, +7.0f, +17.0f));2243 2244__m256d test_mm256_unpacklo_pd(__m256d A, __m256d B) {2245  // CHECK-LABEL: test_mm256_unpacklo_pd2246  // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>2247  return _mm256_unpacklo_pd(A, B);2248}2249TEST_CONSTEXPR(match_m256d(_mm256_unpacklo_pd((__m256d){+1.0, +2.0, +3.0, +4.0}, (__m256d){+5.0, +6.0, +7.0, +8.0}), +1.0, +5.0, +3.0, +7.0));2250 2251__m256 test_mm256_unpacklo_ps(__m256 A, __m256 B) {2252  // CHECK-LABEL: test_mm256_unpacklo_ps2253  // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>2254  return _mm256_unpacklo_ps(A, B);2255}2256TEST_CONSTEXPR(match_m256(_mm256_unpacklo_ps((__m256){+0.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f}, (__m256){+10.0f, +11.0f, +12.0f, +13.0f, +14.0f, +15.0f, +16.0f, +17.0f}), +0.0f, +10.0f, +1.0f, +11.0f, +4.0f, +14.0f, +5.0f, +15.0f));2257 2258__m256d test_mm256_xor_pd(__m256d A, __m256d B) {2259  // CHECK-LABEL: test_mm256_xor_pd2260  // CHECK: xor <4 x i64>2261  return _mm256_xor_pd(A, B);2262}2263TEST_CONSTEXPR(match_m256d(_mm256_xor_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), -4.0, +5.0, -6.0, +0.0));2264 2265__m256 test_mm256_xor_ps(__m256 A, __m256 B) {2266  // CHECK-LABEL: test_mm256_xor_ps2267  // CHECK: xor <8 x i32>2268  return _mm256_xor_ps(A, B);2269}2270TEST_CONSTEXPR(match_m256(_mm256_xor_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), -4.0f, +5.0f, -6.0f, +0.0f, +0.0f, -6.0f, +5.0f, -4.0f));2271 2272void test_mm256_zeroall(void) {2273  // CHECK-LABEL: test_mm256_zeroall2274  // CHECK: call void @llvm.x86.avx.vzeroall()2275  return _mm256_zeroall();2276}2277 2278void test_mm256_zeroupper(void) {2279  // CHECK-LABEL: test_mm256_zeroupper2280  // CHECK: call void @llvm.x86.avx.vzeroupper()2281  return _mm256_zeroupper();2282}2283 2284__m256d test_mm256_zextpd128_pd256(__m128d A) {2285  // CHECK-LABEL: test_mm256_zextpd128_pd2562286  // CHECK: store <2 x double> zeroinitializer2287  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2288  return _mm256_zextpd128_pd256(A);2289}2290TEST_CONSTEXPR(match_m256d(_mm256_zextpd128_pd256((__m128d){-4.0, -5.0}), -4.0, -5.0, +0.0, +0.0));2291 2292__m256 test_mm256_zextps128_ps256(__m128 A) {2293  // CHECK-LABEL: test_mm256_zextps128_ps2562294  // CHECK: store <4 x float> zeroinitializer2295  // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2296  return _mm256_zextps128_ps256(A);2297}2298TEST_CONSTEXPR(match_m256(_mm256_zextps128_ps256((__m128){1.0f, 2.0f, 3.0f, 4.0f}), 1.0f, 2.0f, 3.0f, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f));2299 2300__m256i test_mm256_zextsi128_si256(__m128i A) {2301  // CHECK-LABEL: test_mm256_zextsi128_si2562302  // CHECK: store <2 x i64> zeroinitializer2303  // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2304  return _mm256_zextsi128_si256(A);2305}2306TEST_CONSTEXPR(match_m256i(_mm256_zextsi128_si256((__m128i){1, 2}), 1, 2, 0, 0));2307