1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64 -target-feature +avx10.2-512 -emit-llvm -o - | FileCheck %s 2 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i686 -target-feature +avx10.2-512 -emit-llvm -o - | FileCheck %s 3 4 #include <immintrin.h> 5 6 // VNNI FP16 7 __m512 test_mm512_dpph_ps(__m512 __W, __m512h __A, __m512h __B) { 8 // CHECK-LABEL: @test_mm512_dpph_ps( 9 // CHECK: call <16 x float> @llvm.x86.avx10.vdpphps.512 10 return _mm512_dpph_ps(__W, __A, __B); 11 } 12 13 __m512 test_mm512_mask_dpph_ps(__m512 __W, __mmask16 __U, __m512h __A, __m512h __B) { 14 // CHECK-LABEL: @test_mm512_mask_dpph_ps( 15 // CHECK: call <16 x float> @llvm.x86.avx10.vdpphps.512 16 // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} 17 return _mm512_mask_dpph_ps(__W, __U, __A, __B); 18 } 19 20 __m512 test_mm512_maskz_dpph_ps(__mmask16 __U, __m512 __W, __m512h __A, __m512h __B) { 21 // CHECK-LABEL: @test_mm512_maskz_dpph_ps( 22 // CHECK: call <16 x float> @llvm.x86.avx10.vdpphps.512 23 // CHECK: zeroinitializer 24 // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} 25 return _mm512_maskz_dpph_ps(__U, __W, __A, __B); 26 } 27 28 // VMPSADBW 29 __m512i test_mm512_mpsadbw_epu8(__m512i __A, __m512i __B) { 30 // CHECK-LABEL: @test_mm512_mpsadbw_epu8 31 // CHECK: @llvm.x86.avx10.vmpsadbw.512 32 return _mm512_mpsadbw_epu8(__A, __B, 17); 33 } 34 35 __m512i test_mm512_mask_mpsadbw_epu8(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { 36 // CHECK-LABEL: @test_mm512_mask_mpsadbw_epu8 37 // CHECK: @llvm.x86.avx10.vmpsadbw.512 38 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} 39 return _mm512_mask_mpsadbw_epu8(__W, __U, __A, __B, 17); 40 } 41 42 __m512i test_mm512_maskz_mpsadbw_epu8(__mmask32 __U, __m512i __A, __m512i __B) { 43 // CHECK-LABEL: @test_mm512_maskz_mpsadbw_epu8 44 // CHECK: @llvm.x86.avx10.vmpsadbw.512 45 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} 46 return _mm512_maskz_mpsadbw_epu8(__U, __A, __B, 17); 47 } 48 49 // VNNI INT8 50 __m512i test_mm512_dpbssd_epi32(__m512i __W, __m512i __A, __m512i __B) { 51 // CHECK-LABEL: @test_mm512_dpbssd_epi32( 52 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbssd.512 53 return _mm512_dpbssd_epi32(__W, __A, __B); 54 } 55 56 __m512i test_mm512_mask_dpbssd_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { 57 // CHECK-LABEL: @test_mm512_mask_dpbssd_epi32( 58 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbssd.512 59 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 60 return _mm512_mask_dpbssd_epi32(__W, __U, __A, __B); 61 } 62 63 __m512i test_mm512_maskz_dpbssd_epi32(__mmask16 __U, __m512i __W, __m512i __A, __m512i __B) { 64 // CHECK-LABEL: @test_mm512_maskz_dpbssd_epi32( 65 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbssd.512 66 // CHECK: zeroinitializer 67 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 68 return _mm512_maskz_dpbssd_epi32(__U, __W, __A, __B); 69 } 70 71 __m512i test_mm512_dpbssds_epi32(__m512i __W, __m512i __A, __m512i __B) { 72 // CHECK-LABEL: @test_mm512_dpbssds_epi32( 73 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbssds.512 74 return _mm512_dpbssds_epi32(__W, __A, __B); 75 } 76 77 __m512i test_mm512_mask_dpbssds_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { 78 // CHECK-LABEL: @test_mm512_mask_dpbssds_epi32( 79 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbssds.512 80 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 81 return _mm512_mask_dpbssds_epi32(__W, __U, __A, __B); 82 } 83 84 __m512i test_mm512_maskz_dpbssds_epi32(__mmask16 __U, __m512i __W, __m512i __A, __m512i __B) { 85 // CHECK-LABEL: @test_mm512_maskz_dpbssds_epi32( 86 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbssds.512 87 // CHECK: zeroinitializer 88 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 89 return _mm512_maskz_dpbssds_epi32(__U, __W, __A, __B); 90 } 91 92 __m512i test_mm512_dpbsud_epi32(__m512i __W, __m512i __A, __m512i __B) { 93 // CHECK-LABEL: @test_mm512_dpbsud_epi32( 94 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbsud.512 95 return _mm512_dpbsud_epi32(__W, __A, __B); 96 } 97 98 __m512i test_mm512_mask_dpbsud_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { 99 // CHECK-LABEL: @test_mm512_mask_dpbsud_epi32( 100 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbsud.512 101 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 102 return _mm512_mask_dpbsud_epi32(__W, __U, __A, __B); 103 } 104 105 __m512i test_mm512_maskz_dpbsud_epi32(__mmask16 __U, __m512i __W, __m512i __A, __m512i __B) { 106 // CHECK-LABEL: @test_mm512_maskz_dpbsud_epi32( 107 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbsud.512 108 // CHECK: zeroinitializer 109 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 110 return _mm512_maskz_dpbsud_epi32(__U, __W, __A, __B); 111 } 112 113 __m512i test_mm512_dpbsuds_epi32(__m512i __W, __m512i __A, __m512i __B) { 114 // CHECK-LABEL: @test_mm512_dpbsuds_epi32( 115 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbsuds.512 116 return _mm512_dpbsuds_epi32(__W, __A, __B); 117 } 118 119 __m512i test_mm512_mask_dpbsuds_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { 120 // CHECK-LABEL: @test_mm512_mask_dpbsuds_epi32( 121 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbsuds.512 122 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 123 return _mm512_mask_dpbsuds_epi32(__W, __U, __A, __B); 124 } 125 126 __m512i test_mm512_maskz_dpbsuds_epi32(__mmask16 __U, __m512i __W, __m512i __A, __m512i __B) { 127 // CHECK-LABEL: @test_mm512_maskz_dpbsuds_epi32( 128 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbsuds.512 129 // CHECK: zeroinitializer 130 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 131 return _mm512_maskz_dpbsuds_epi32(__U, __W, __A, __B); 132 } 133 134 __m512i test_mm512_dpbuud_epi32(__m512i __W, __m512i __A, __m512i __B) { 135 // CHECK-LABEL: @test_mm512_dpbuud_epi32( 136 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbuud.512 137 return _mm512_dpbuud_epi32(__W, __A, __B); 138 } 139 140 __m512i test_mm512_mask_dpbuud_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { 141 // CHECK-LABEL: @test_mm512_mask_dpbuud_epi32( 142 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbuud.512 143 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 144 return _mm512_mask_dpbuud_epi32(__W, __U, __A, __B); 145 } 146 147 __m512i test_mm512_maskz_dpbuud_epi32(__mmask16 __U, __m512i __W, __m512i __A, __m512i __B) { 148 // CHECK-LABEL: @test_mm512_maskz_dpbuud_epi32( 149 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbuud.512 150 // CHECK: zeroinitializer 151 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 152 return _mm512_maskz_dpbuud_epi32(__U, __W, __A, __B); 153 } 154 155 __m512i test_mm512_dpbuuds_epi32(__m512i __W, __m512i __A, __m512i __B) { 156 // CHECK-LABEL: @test_mm512_dpbuuds_epi32( 157 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbuuds.512 158 return _mm512_dpbuuds_epi32(__W, __A, __B); 159 } 160 161 __m512i test_mm512_mask_dpbuuds_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { 162 // CHECK-LABEL: @test_mm512_mask_dpbuuds_epi32( 163 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbuuds.512 164 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 165 return _mm512_mask_dpbuuds_epi32(__W, __U, __A, __B); 166 } 167 168 __m512i test_mm512_maskz_dpbuuds_epi32(__mmask16 __U, __m512i __W, __m512i __A, __m512i __B) { 169 // CHECK-LABEL: @test_mm512_maskz_dpbuuds_epi32( 170 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpbuuds.512 171 // CHECK: zeroinitializer 172 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 173 return _mm512_maskz_dpbuuds_epi32(__U, __W, __A, __B); 174 } 175 176 /* VNNI INT16 */ 177 __m512i test_mm512_dpwsud_epi32(__m512i __A, __m512i __B, __m512i __C) { 178 // CHECK-LABEL: @test_mm512_dpwsud_epi32( 179 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwsud.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 180 return _mm512_dpwsud_epi32(__A, __B, __C); 181 } 182 183 __m512i test_mm512_mask_dpwsud_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 184 // CHECK-LABEL: @test_mm512_mask_dpwsud_epi32( 185 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwsud.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 186 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 187 return _mm512_mask_dpwsud_epi32(__A, __B, __C, __D); 188 } 189 190 __m512i test_mm512_maskz_dpwsud_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 191 // CHECK-LABEL: @test_mm512_maskz_dpwsud_epi32( 192 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwsud.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 193 // CHECK: zeroinitializer 194 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 195 return _mm512_maskz_dpwsud_epi32(__A, __B, __C, __D); 196 } 197 198 __m512i test_mm512_dpwsuds_epi32(__m512i __A, __m512i __B, __m512i __C) { 199 // CHECK-LABEL: @test_mm512_dpwsuds_epi32( 200 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwsuds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 201 return _mm512_dpwsuds_epi32(__A, __B, __C); 202 } 203 204 __m512i test_mm512_mask_dpwsuds_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 205 // CHECK-LABEL: @test_mm512_mask_dpwsuds_epi32( 206 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwsuds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 207 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 208 return _mm512_mask_dpwsuds_epi32(__A, __B, __C, __D); 209 } 210 211 __m512i test_mm512_maskz_dpwsuds_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 212 // CHECK-LABEL: @test_mm512_maskz_dpwsuds_epi32( 213 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwsuds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 214 // CHECK: zeroinitializer 215 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 216 return _mm512_maskz_dpwsuds_epi32(__A, __B, __C, __D); 217 } 218 219 __m512i test_mm512_dpwusd_epi32(__m512i __A, __m512i __B, __m512i __C) { 220 // CHECK-LABEL: @test_mm512_dpwusd_epi32( 221 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwusd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 222 return _mm512_dpwusd_epi32(__A, __B, __C); 223 } 224 225 __m512i test_mm512_mask_dpwusd_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 226 // CHECK-LABEL: @test_mm512_mask_dpwusd_epi32( 227 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwusd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 228 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 229 return _mm512_mask_dpwusd_epi32(__A, __B, __C, __D); 230 } 231 232 __m512i test_mm512_maskz_dpwusd_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 233 // CHECK-LABEL: @test_mm512_maskz_dpwusd_epi32( 234 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwusd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 235 // CHECK: zeroinitializer 236 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 237 return _mm512_maskz_dpwusd_epi32(__A, __B, __C, __D); 238 } 239 240 __m512i test_mm512_dpwusds_epi32(__m512i __A, __m512i __B, __m512i __C) { 241 // CHECK-LABEL: @test_mm512_dpwusds_epi32( 242 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwusds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 243 return _mm512_dpwusds_epi32(__A, __B, __C); 244 } 245 246 __m512i test_mm512_mask_dpwusds_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 247 // CHECK-LABEL: @test_mm512_mask_dpwusds_epi32( 248 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwusds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 249 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 250 return _mm512_mask_dpwusds_epi32(__A, __B, __C, __D); 251 } 252 253 __m512i test_mm512_maskz_dpwusds_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 254 // CHECK-LABEL: @test_mm512_maskz_dpwusds_epi32( 255 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwusds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 256 // CHECK: zeroinitializer 257 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 258 return _mm512_maskz_dpwusds_epi32(__A, __B, __C, __D); 259 } 260 261 __m512i test_mm512_dpwuud_epi32(__m512i __A, __m512i __B, __m512i __C) { 262 // CHECK-LABEL: @test_mm512_dpwuud_epi32( 263 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwuud.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 264 return _mm512_dpwuud_epi32(__A, __B, __C); 265 } 266 267 __m512i test_mm512_mask_dpwuud_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 268 // CHECK-LABEL: @test_mm512_mask_dpwuud_epi32( 269 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwuud.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 270 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 271 return _mm512_mask_dpwuud_epi32(__A, __B, __C, __D); 272 } 273 274 __m512i test_mm512_maskz_dpwuud_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 275 // CHECK-LABEL: @test_mm512_maskz_dpwuud_epi32( 276 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwuud.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 277 // CHECK: zeroinitializer 278 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 279 return _mm512_maskz_dpwuud_epi32(__A, __B, __C, __D); 280 } 281 282 __m512i test_mm512_dpwuuds_epi32(__m512i __A, __m512i __B, __m512i __C) { 283 // CHECK-LABEL: @test_mm512_dpwuuds_epi32( 284 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwuuds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 285 return _mm512_dpwuuds_epi32(__A, __B, __C); 286 } 287 288 __m512i test_mm512_mask_dpwuuds_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 289 // CHECK-LABEL: @test_mm512_mask_dpwuuds_epi32( 290 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwuuds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 291 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 292 return _mm512_mask_dpwuuds_epi32(__A, __B, __C, __D); 293 } 294 295 __m512i test_mm512_maskz_dpwuuds_epi32(__m512i __A, __mmask16 __B, __m512i __C, __m512i __D) { 296 // CHECK-LABEL: @test_mm512_maskz_dpwuuds_epi32( 297 // CHECK: call <16 x i32> @llvm.x86.avx10.vpdpwuuds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) 298 // CHECK: zeroinitializer 299 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} 300 return _mm512_maskz_dpwuuds_epi32(__A, __B, __C, __D); 301 } 302