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