265 lines · c
1// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=x86_64 -target-feature +avx10.2 \2// RUN: -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=i386 -target-feature +avx10.2 \4// RUN: -emit-llvm -o - -Wno-invalid-feature-combination -Wall -Werror | FileCheck %s5 6#include <immintrin.h>7 8__m128bh test_mm_minmax_pbh(__m128bh __A, __m128bh __B) {9 // CHECK-LABEL: @test_mm_minmax_pbh(10 // CHECK: call <8 x bfloat> @llvm.x86.avx10.vminmaxbf16128(11 return _mm_minmax_pbh(__A, __B, 127);12}13 14__m128bh test_mm_mask_minmax_pbh(__m128bh __A, __mmask8 __B, __m128bh __C, __m128bh __D) {15 // CHECK-LABEL: @test_mm_mask_minmax_pbh(16 // CHECK: call <8 x bfloat> @llvm.x86.avx10.vminmaxbf16128(17 // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}18 return _mm_mask_minmax_pbh(__A, __B, __C, __D, 127);19}20 21__m128bh test_mm_maskz_minmax_pbh(__mmask8 __A, __m128bh __B, __m128bh __C) {22 // CHECK-LABEL: @test_mm_maskz_minmax_pbh(23 // CHECK: call <8 x bfloat> @llvm.x86.avx10.vminmaxbf16128(24 // CHECK: zeroinitializer25 // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}26 return _mm_maskz_minmax_pbh(__A, __B, __C, 127);27}28 29__m256bh test_mm256_minmax_pbh(__m256bh __A, __m256bh __B) {30 // CHECK-LABEL: @test_mm256_minmax_pbh(31 // CHECK: call <16 x bfloat> @llvm.x86.avx10.vminmaxbf16256(32 return _mm256_minmax_pbh(__A, __B, 127);33}34 35__m256bh test_mm256_mask_minmax_pbh(__m256bh __A, __mmask16 __B, __m256bh __C, __m256bh __D) {36 // CHECK-LABEL: @test_mm256_mask_minmax_pbh(37 // CHECK: call <16 x bfloat> @llvm.x86.avx10.vminmaxbf16256(38 // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}39 return _mm256_mask_minmax_pbh(__A, __B, __C, __D, 127);40}41 42__m256bh test_mm256_maskz_minmax_pbh(__mmask16 __A, __m256bh __B, __m256bh __C) {43 // CHECK-LABEL: @test_mm256_maskz_minmax_pbh(44 // CHECK: call <16 x bfloat> @llvm.x86.avx10.vminmaxbf16256(45 // CHECK: zeroinitializer46 // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}47 return _mm256_maskz_minmax_pbh(__A, __B, __C, 127);48}49 50__m128d test_mm_minmax_pd(__m128d __A, __m128d __B) {51 // CHECK-LABEL: @test_mm_minmax_pd(52 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxpd128(53 return _mm_minmax_pd(__A, __B, 127);54}55 56__m128d test_mm_mask_minmax_pd(__m128d __A, __mmask8 __B, __m128d __C, __m128d __D) {57 // CHECK-LABEL: @test_mm_mask_minmax_pd(58 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxpd128(59 return _mm_mask_minmax_pd(__A, __B, __C, __D, 127);60}61 62__m128d test_mm_maskz_minmax_pd(__mmask8 __A, __m128d __B, __m128d __C) {63 // CHECK-LABEL: @test_mm_maskz_minmax_pd(64 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxpd128(65 return _mm_maskz_minmax_pd(__A, __B, __C, 127);66}67 68__m256d test_mm256_minmax_pd(__m256d __A, __m256d __B) {69 // CHECK-LABEL: @test_mm256_minmax_pd(70 // CHECK: call <4 x double> @llvm.x86.avx10.mask.vminmaxpd256(71 return _mm256_minmax_pd(__A, __B, 127);72}73 74__m256d test_mm256_mask_minmax_pd(__m256d __A, __mmask8 __B, __m256d __C, __m256d __D) {75 // CHECK-LABEL: @test_mm256_mask_minmax_pd(76 // CHECK: call <4 x double> @llvm.x86.avx10.mask.vminmaxpd256(77 return _mm256_mask_minmax_pd(__A, __B, __C, __D, 127);78}79 80__m256d test_mm256_maskz_minmax_pd(__mmask8 __A, __m256d __B, __m256d __C) {81 // CHECK-LABEL: @test_mm256_maskz_minmax_pd(82 // CHECK: call <4 x double> @llvm.x86.avx10.mask.vminmaxpd256(83 return _mm256_maskz_minmax_pd(__A, __B, __C, 127);84}85 86__m128h test_mm_minmax_ph(__m128h __A, __m128h __B) {87 // CHECK-LABEL: @test_mm_minmax_ph(88 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxph128(89 return _mm_minmax_ph(__A, __B, 127);90}91 92__m128h test_mm_mask_minmax_ph(__m128h __A, __mmask8 __B, __m128h __C, __m128h __D) {93 // CHECK-LABEL: @test_mm_mask_minmax_ph(94 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxph128(95 return _mm_mask_minmax_ph(__A, __B, __C, __D, 127);96}97 98__m128h test_mm_maskz_minmax_ph(__mmask8 __A, __m128h __B, __m128h __C) {99 // CHECK-LABEL: @test_mm_maskz_minmax_ph(100 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxph128(101 return _mm_maskz_minmax_ph(__A, __B, __C, 127);102}103 104__m256h test_mm256_minmax_ph(__m256h __A, __m256h __B) {105 // CHECK-LABEL: @test_mm256_minmax_ph(106 // CHECK: call <16 x half> @llvm.x86.avx10.mask.vminmaxph256(107 return _mm256_minmax_ph(__A, __B, 127);108}109 110__m256h test_mm256_mask_minmax_ph(__m256h __A, __mmask16 __B, __m256h __C, __m256h __D) {111 // CHECK-LABEL: @test_mm256_mask_minmax_ph(112 // CHECK: call <16 x half> @llvm.x86.avx10.mask.vminmaxph256(113 return _mm256_mask_minmax_ph(__A, __B, __C, __D, 127);114}115 116__m256h test_mm256_maskz_minmax_ph(__mmask16 __A, __m256h __B, __m256h __C) {117 // CHECK-LABEL: @test_mm256_maskz_minmax_ph(118 // CHECK: call <16 x half> @llvm.x86.avx10.mask.vminmaxph256(119 return _mm256_maskz_minmax_ph(__A, __B, __C, 127);120}121 122__m128 test_mm_minmax_ps(__m128 __A, __m128 __B) {123 // CHECK-LABEL: @test_mm_minmax_ps(124 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxps128(125 return _mm_minmax_ps(__A, __B, 127);126}127 128__m128 test_mm_mask_minmax_ps(__m128 __A, __mmask8 __B, __m128 __C, __m128 __D) {129 // CHECK-LABEL: @test_mm_mask_minmax_ps(130 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxps128(131 return _mm_mask_minmax_ps(__A, __B, __C, __D, 127);132}133 134__m128 test_mm_maskz_minmax_ps(__mmask8 __A, __m128 __B, __m128 __C) {135 // CHECK-LABEL: @test_mm_maskz_minmax_ps(136 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxps128(137 return _mm_maskz_minmax_ps(__A, __B, __C, 127);138}139 140__m256 test_mm256_minmax_ps(__m256 __A, __m256 __B) {141 // CHECK-LABEL: @test_mm256_minmax_ps(142 // CHECK: call <8 x float> @llvm.x86.avx10.mask.vminmaxps256(143 return _mm256_minmax_ps(__A, __B, 127);144}145 146__m256 test_mm256_mask_minmax_ps(__m256 __A, __mmask8 __B, __m256 __C, __m256 __D) {147 // CHECK-LABEL: @test_mm256_mask_minmax_ps(148 // CHECK: call <8 x float> @llvm.x86.avx10.mask.vminmaxps256(149 return _mm256_mask_minmax_ps(__A, __B, __C, __D, 127);150}151 152__m256 test_mm256_maskz_minmax_ps(__mmask8 __A, __m256 __B, __m256 __C) {153 // CHECK-LABEL: @test_mm256_maskz_minmax_ps(154 // CHECK: call <8 x float> @llvm.x86.avx10.mask.vminmaxps256(155 return _mm256_maskz_minmax_ps(__A, __B, __C, 127);156}157 158__m128d test_mm_minmax_sd(__m128d __A, __m128d __B) {159 // CHECK-LABEL: @test_mm_minmax_sd(160 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxsd.round(161 return _mm_minmax_sd(__A, __B, 127);162}163 164__m128d test_mm_mask_minmax_sd(__m128d __A, __mmask8 __B, __m128d __C, __m128d __D) {165 // CHECK-LABEL: @test_mm_mask_minmax_sd(166 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxsd.round(167 return _mm_mask_minmax_sd(__A, __B, __C, __D, 127);168}169 170__m128d test_mm_maskz_minmax_sd(__mmask8 __A, __m128d __B, __m128d __C) {171 // CHECK-LABEL: @test_mm_maskz_minmax_sd(172 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxsd.round(173 return _mm_maskz_minmax_sd(__A, __B, __C, 127);174}175 176__m128d test_mm_minmax_round_sd(__m128d __A, __m128d __B) {177 // CHECK-LABEL: @test_mm_minmax_round_sd(178 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxsd.round(179 return _mm_minmax_round_sd(__A, __B, 127, _MM_FROUND_NO_EXC);180}181 182__m128d test_mm_mask_minmax_round_sd(__m128d __A, __mmask8 __B, __m128d __C, __m128d __D) {183 // CHECK-LABEL: @test_mm_mask_minmax_round_sd(184 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxsd.round(185 return _mm_mask_minmax_round_sd(__A, __B, __C, __D, 127, _MM_FROUND_NO_EXC);186}187 188__m128d test_mm_maskz_minmax_round_sd(__mmask8 __A, __m128d __B, __m128d __C) {189 // CHECK-LABEL: @test_mm_maskz_minmax_round_sd(190 // CHECK: call <2 x double> @llvm.x86.avx10.mask.vminmaxsd.round(191 return _mm_maskz_minmax_round_sd(__A, __B, __C, 127, _MM_FROUND_NO_EXC);192}193 194__m128h test_mm_minmax_sh(__m128h __A, __m128h __B) {195 // CHECK-LABEL: @test_mm_minmax_sh(196 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxsh.round(197 return _mm_minmax_sh(__A, __B, 127);198}199 200__m128h test_mm_mask_minmax_sh(__m128h __A, __mmask8 __B, __m128h __C, __m128h __D) {201 // CHECK-LABEL: @test_mm_mask_minmax_sh(202 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxsh.round(203 return _mm_mask_minmax_sh(__A, __B, __C, __D, 127);204}205 206__m128h test_mm_maskz_minmax_sh(__mmask8 __A, __m128h __B, __m128h __C) {207 // CHECK-LABEL: @test_mm_maskz_minmax_sh(208 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxsh.round(209 return _mm_maskz_minmax_sh(__A, __B, __C, 127);210}211 212__m128h test_mm_minmax_round_sh(__m128h __A, __m128h __B) {213 // CHECK-LABEL: @test_mm_minmax_round_sh(214 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxsh.round(215 return _mm_minmax_round_sh(__A, __B, 127, _MM_FROUND_NO_EXC);216}217 218__m128h test_mm_mask_minmax_round_sh(__m128h __A, __mmask8 __B, __m128h __C, __m128h __D) {219 // CHECK-LABEL: @test_mm_mask_minmax_round_sh(220 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxsh.round(221 return _mm_mask_minmax_round_sh(__A, __B, __C, __D, 127, _MM_FROUND_NO_EXC);222}223 224__m128h test_mm_maskz_minmax_round_sh(__mmask8 __A, __m128h __B, __m128h __C) {225 // CHECK-LABEL: @test_mm_maskz_minmax_round_sh(226 // CHECK: call <8 x half> @llvm.x86.avx10.mask.vminmaxsh.round(227 return _mm_maskz_minmax_round_sh(__A, __B, __C, 127, _MM_FROUND_NO_EXC);228}229 230__m128 test_mm_minmax_ss(__m128 __A, __m128 __B) {231 // CHECK-LABEL: @test_mm_minmax_ss(232 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxss.round(233 return _mm_minmax_ss(__A, __B, 127);234}235 236__m128 test_mm_mask_minmax_ss(__m128 __A, __mmask8 __B, __m128 __C, __m128 __D) {237 // CHECK-LABEL: @test_mm_mask_minmax_ss(238 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxss.round(239 return _mm_mask_minmax_ss(__A, __B, __C, __D, 127);240}241 242__m128 test_mm_maskz_minmax_ss(__mmask8 __A, __m128 __B, __m128 __C) {243 // CHECK-LABEL: @test_mm_maskz_minmax_ss(244 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxss.round(245 return _mm_maskz_minmax_ss(__A, __B, __C, 127);246}247 248__m128 test_mm_minmax_round_ss(__m128 __A, __m128 __B) {249 // CHECK-LABEL: @test_mm_minmax_round_ss(250 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxss.round(251 return _mm_minmax_round_ss(__A, __B, 127, _MM_FROUND_NO_EXC);252}253 254__m128 test_mm_mask_minmax_round_ss(__m128 __A, __mmask8 __B, __m128 __C, __m128 __D) {255 // CHECK-LABEL: @test_mm_mask_minmax_round_ss(256 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxss.round(257 return _mm_mask_minmax_round_ss(__A, __B, __C, __D, 127, _MM_FROUND_NO_EXC);258}259 260__m128 test_mm_maskz_minmax_round_ss(__mmask8 __A, __m128 __B, __m128 __C) {261 // CHECK-LABEL: @test_mm_maskz_minmax_round_ss(262 // CHECK: call <4 x float> @llvm.x86.avx10.mask.vminmaxss.round(263 return _mm_maskz_minmax_round_ss(__A, __B, __C, 127, _MM_FROUND_NO_EXC);264}265