1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Werror | FileCheck %s 2 3 // Don't include mm_malloc.h, it's system specific. 4 #define __MM_MALLOC_H 5 6 #include <x86intrin.h> 7 8 __m128i test_mm_maccs_epi16(__m128i a, __m128i b, __m128i c) { 9 // CHECK-LABEL: test_mm_maccs_epi16 10 // CHECK: @llvm.x86.xop.vpmacssww 11 return _mm_maccs_epi16(a, b, c); 12 } 13 14 __m128i test_mm_macc_epi16(__m128i a, __m128i b, __m128i c) { 15 // CHECK-LABEL: test_mm_macc_epi16 16 // CHECK: @llvm.x86.xop.vpmacsww 17 return _mm_macc_epi16(a, b, c); 18 } 19 20 __m128i test_mm_maccsd_epi16(__m128i a, __m128i b, __m128i c) { 21 // CHECK-LABEL: test_mm_maccsd_epi16 22 // CHECK: @llvm.x86.xop.vpmacsswd 23 return _mm_maccsd_epi16(a, b, c); 24 } 25 26 __m128i test_mm_maccd_epi16(__m128i a, __m128i b, __m128i c) { 27 // CHECK-LABEL: test_mm_maccd_epi16 28 // CHECK: @llvm.x86.xop.vpmacswd 29 return _mm_maccd_epi16(a, b, c); 30 } 31 32 __m128i test_mm_maccs_epi32(__m128i a, __m128i b, __m128i c) { 33 // CHECK-LABEL: test_mm_maccs_epi32 34 // CHECK: @llvm.x86.xop.vpmacssdd 35 return _mm_maccs_epi32(a, b, c); 36 } 37 38 __m128i test_mm_macc_epi32(__m128i a, __m128i b, __m128i c) { 39 // CHECK-LABEL: test_mm_macc_epi32 40 // CHECK: @llvm.x86.xop.vpmacsdd 41 return _mm_macc_epi32(a, b, c); 42 } 43 44 __m128i test_mm_maccslo_epi32(__m128i a, __m128i b, __m128i c) { 45 // CHECK-LABEL: test_mm_maccslo_epi32 46 // CHECK: @llvm.x86.xop.vpmacssdql 47 return _mm_maccslo_epi32(a, b, c); 48 } 49 50 __m128i test_mm_macclo_epi32(__m128i a, __m128i b, __m128i c) { 51 // CHECK-LABEL: test_mm_macclo_epi32 52 // CHECK: @llvm.x86.xop.vpmacsdql 53 return _mm_macclo_epi32(a, b, c); 54 } 55 56 __m128i test_mm_maccshi_epi32(__m128i a, __m128i b, __m128i c) { 57 // CHECK-LABEL: test_mm_maccshi_epi32 58 // CHECK: @llvm.x86.xop.vpmacssdqh 59 return _mm_maccshi_epi32(a, b, c); 60 } 61 62 __m128i test_mm_macchi_epi32(__m128i a, __m128i b, __m128i c) { 63 // CHECK-LABEL: test_mm_macchi_epi32 64 // CHECK: @llvm.x86.xop.vpmacsdqh 65 return _mm_macchi_epi32(a, b, c); 66 } 67 68 __m128i test_mm_maddsd_epi16(__m128i a, __m128i b, __m128i c) { 69 // CHECK-LABEL: test_mm_maddsd_epi16 70 // CHECK: @llvm.x86.xop.vpmadcsswd 71 return _mm_maddsd_epi16(a, b, c); 72 } 73 74 __m128i test_mm_maddd_epi16(__m128i a, __m128i b, __m128i c) { 75 // CHECK-LABEL: test_mm_maddd_epi16 76 // CHECK: @llvm.x86.xop.vpmadcswd 77 return _mm_maddd_epi16(a, b, c); 78 } 79 80 __m128i test_mm_haddw_epi8(__m128i a) { 81 // CHECK-LABEL: test_mm_haddw_epi8 82 // CHECK: @llvm.x86.xop.vphaddbw 83 return _mm_haddw_epi8(a); 84 } 85 86 __m128i test_mm_haddd_epi8(__m128i a) { 87 // CHECK-LABEL: test_mm_haddd_epi8 88 // CHECK: @llvm.x86.xop.vphaddbd 89 return _mm_haddd_epi8(a); 90 } 91 92 __m128i test_mm_haddq_epi8(__m128i a) { 93 // CHECK-LABEL: test_mm_haddq_epi8 94 // CHECK: @llvm.x86.xop.vphaddbq 95 return _mm_haddq_epi8(a); 96 } 97 98 __m128i test_mm_haddd_epi16(__m128i a) { 99 // CHECK-LABEL: test_mm_haddd_epi16 100 // CHECK: @llvm.x86.xop.vphaddwd 101 return _mm_haddd_epi16(a); 102 } 103 104 __m128i test_mm_haddq_epi16(__m128i a) { 105 // CHECK-LABEL: test_mm_haddq_epi16 106 // CHECK: @llvm.x86.xop.vphaddwq 107 return _mm_haddq_epi16(a); 108 } 109 110 __m128i test_mm_haddq_epi32(__m128i a) { 111 // CHECK-LABEL: test_mm_haddq_epi32 112 // CHECK: @llvm.x86.xop.vphadddq 113 return _mm_haddq_epi32(a); 114 } 115 116 __m128i test_mm_haddw_epu8(__m128i a) { 117 // CHECK-LABEL: test_mm_haddw_epu8 118 // CHECK: @llvm.x86.xop.vphaddubw 119 return _mm_haddw_epu8(a); 120 } 121 122 __m128i test_mm_haddd_epu8(__m128i a) { 123 // CHECK-LABEL: test_mm_haddd_epu8 124 // CHECK: @llvm.x86.xop.vphaddubd 125 return _mm_haddd_epu8(a); 126 } 127 128 __m128i test_mm_haddq_epu8(__m128i a) { 129 // CHECK-LABEL: test_mm_haddq_epu8 130 // CHECK: @llvm.x86.xop.vphaddubq 131 return _mm_haddq_epu8(a); 132 } 133 134 __m128i test_mm_haddd_epu16(__m128i a) { 135 // CHECK-LABEL: test_mm_haddd_epu16 136 // CHECK: @llvm.x86.xop.vphadduwd 137 return _mm_haddd_epu16(a); 138 } 139 140 __m128i test_mm_haddq_epu16(__m128i a) { 141 // CHECK-LABEL: test_mm_haddq_epu16 142 // CHECK: @llvm.x86.xop.vphadduwq 143 return _mm_haddq_epu16(a); 144 } 145 146 __m128i test_mm_haddq_epu32(__m128i a) { 147 // CHECK-LABEL: test_mm_haddq_epu32 148 // CHECK: @llvm.x86.xop.vphaddudq 149 return _mm_haddq_epu32(a); 150 } 151 152 __m128i test_mm_hsubw_epi8(__m128i a) { 153 // CHECK-LABEL: test_mm_hsubw_epi8 154 // CHECK: @llvm.x86.xop.vphsubbw 155 return _mm_hsubw_epi8(a); 156 } 157 158 __m128i test_mm_hsubd_epi16(__m128i a) { 159 // CHECK-LABEL: test_mm_hsubd_epi16 160 // CHECK: @llvm.x86.xop.vphsubwd 161 return _mm_hsubd_epi16(a); 162 } 163 164 __m128i test_mm_hsubq_epi32(__m128i a) { 165 // CHECK-LABEL: test_mm_hsubq_epi32 166 // CHECK: @llvm.x86.xop.vphsubdq 167 return _mm_hsubq_epi32(a); 168 } 169 170 __m128i test_mm_cmov_si128(__m128i a, __m128i b, __m128i c) { 171 // CHECK-LABEL: test_mm_cmov_si128 172 // CHECK: @llvm.x86.xop.vpcmov 173 return _mm_cmov_si128(a, b, c); 174 } 175 176 __m256i test_mm256_cmov_si256(__m256i a, __m256i b, __m256i c) { 177 // CHECK-LABEL: test_mm256_cmov_si256 178 // CHECK: @llvm.x86.xop.vpcmov.256 179 return _mm256_cmov_si256(a, b, c); 180 } 181 182 __m128i test_mm_perm_epi8(__m128i a, __m128i b, __m128i c) { 183 // CHECK-LABEL: test_mm_perm_epi8 184 // CHECK: @llvm.x86.xop.vpperm 185 return _mm_perm_epi8(a, b, c); 186 } 187 188 __m128i test_mm_rot_epi8(__m128i a, __m128i b) { 189 // CHECK-LABEL: test_mm_rot_epi8 190 // CHECK: @llvm.x86.xop.vprotb 191 return _mm_rot_epi8(a, b); 192 } 193 194 __m128i test_mm_rot_epi16(__m128i a, __m128i b) { 195 // CHECK-LABEL: test_mm_rot_epi16 196 // CHECK: @llvm.x86.xop.vprotw 197 return _mm_rot_epi16(a, b); 198 } 199 200 __m128i test_mm_rot_epi32(__m128i a, __m128i b) { 201 // CHECK-LABEL: test_mm_rot_epi32 202 // CHECK: @llvm.x86.xop.vprotd 203 return _mm_rot_epi32(a, b); 204 } 205 206 __m128i test_mm_rot_epi64(__m128i a, __m128i b) { 207 // CHECK-LABEL: test_mm_rot_epi64 208 // CHECK: @llvm.x86.xop.vprotq 209 return _mm_rot_epi64(a, b); 210 } 211 212 __m128i test_mm_roti_epi8(__m128i a) { 213 // CHECK-LABEL: test_mm_roti_epi8 214 // CHECK: @llvm.x86.xop.vprotbi 215 return _mm_roti_epi8(a, 1); 216 } 217 218 __m128i test_mm_roti_epi16(__m128i a) { 219 // CHECK-LABEL: test_mm_roti_epi16 220 // CHECK: @llvm.x86.xop.vprotwi 221 return _mm_roti_epi16(a, 50); 222 } 223 224 __m128i test_mm_roti_epi32(__m128i a) { 225 // CHECK-LABEL: test_mm_roti_epi32 226 // CHECK: @llvm.x86.xop.vprotdi 227 return _mm_roti_epi32(a, -30); 228 } 229 230 __m128i test_mm_roti_epi64(__m128i a) { 231 // CHECK-LABEL: test_mm_roti_epi64 232 // CHECK: @llvm.x86.xop.vprotqi 233 return _mm_roti_epi64(a, 100); 234 } 235 236 __m128i test_mm_shl_epi8(__m128i a, __m128i b) { 237 // CHECK-LABEL: test_mm_shl_epi8 238 // CHECK: @llvm.x86.xop.vpshlb 239 return _mm_shl_epi8(a, b); 240 } 241 242 __m128i test_mm_shl_epi16(__m128i a, __m128i b) { 243 // CHECK-LABEL: test_mm_shl_epi16 244 // CHECK: @llvm.x86.xop.vpshlw 245 return _mm_shl_epi16(a, b); 246 } 247 248 __m128i test_mm_shl_epi32(__m128i a, __m128i b) { 249 // CHECK-LABEL: test_mm_shl_epi32 250 // CHECK: @llvm.x86.xop.vpshld 251 return _mm_shl_epi32(a, b); 252 } 253 254 __m128i test_mm_shl_epi64(__m128i a, __m128i b) { 255 // CHECK-LABEL: test_mm_shl_epi64 256 // CHECK: @llvm.x86.xop.vpshlq 257 return _mm_shl_epi64(a, b); 258 } 259 260 __m128i test_mm_sha_epi8(__m128i a, __m128i b) { 261 // CHECK-LABEL: test_mm_sha_epi8 262 // CHECK: @llvm.x86.xop.vpshab 263 return _mm_sha_epi8(a, b); 264 } 265 266 __m128i test_mm_sha_epi16(__m128i a, __m128i b) { 267 // CHECK-LABEL: test_mm_sha_epi16 268 // CHECK: @llvm.x86.xop.vpshaw 269 return _mm_sha_epi16(a, b); 270 } 271 272 __m128i test_mm_sha_epi32(__m128i a, __m128i b) { 273 // CHECK-LABEL: test_mm_sha_epi32 274 // CHECK: @llvm.x86.xop.vpshad 275 return _mm_sha_epi32(a, b); 276 } 277 278 __m128i test_mm_sha_epi64(__m128i a, __m128i b) { 279 // CHECK-LABEL: test_mm_sha_epi64 280 // CHECK: @llvm.x86.xop.vpshaq 281 return _mm_sha_epi64(a, b); 282 } 283 284 __m128i test_mm_com_epu8(__m128i a, __m128i b) { 285 // CHECK-LABEL: test_mm_com_epu8 286 // CHECK: @llvm.x86.xop.vpcomub 287 return _mm_com_epu8(a, b, 0); 288 } 289 290 __m128i test_mm_com_epu16(__m128i a, __m128i b) { 291 // CHECK-LABEL: test_mm_com_epu16 292 // CHECK: @llvm.x86.xop.vpcomuw 293 return _mm_com_epu16(a, b, 0); 294 } 295 296 __m128i test_mm_com_epu32(__m128i a, __m128i b) { 297 // CHECK-LABEL: test_mm_com_epu32 298 // CHECK: @llvm.x86.xop.vpcomud 299 return _mm_com_epu32(a, b, 0); 300 } 301 302 __m128i test_mm_com_epu64(__m128i a, __m128i b) { 303 // CHECK-LABEL: test_mm_com_epu64 304 // CHECK: @llvm.x86.xop.vpcomuq 305 return _mm_com_epu64(a, b, 0); 306 } 307 308 __m128i test_mm_com_epi8(__m128i a, __m128i b) { 309 // CHECK-LABEL: test_mm_com_epi8 310 // CHECK: @llvm.x86.xop.vpcomb 311 return _mm_com_epi8(a, b, 0); 312 } 313 314 __m128i test_mm_com_epi16(__m128i a, __m128i b) { 315 // CHECK-LABEL: test_mm_com_epi16 316 // CHECK: @llvm.x86.xop.vpcomw 317 return _mm_com_epi16(a, b, 0); 318 } 319 320 __m128i test_mm_com_epi32(__m128i a, __m128i b) { 321 // CHECK-LABEL: test_mm_com_epi32 322 // CHECK: @llvm.x86.xop.vpcomd 323 return _mm_com_epi32(a, b, 0); 324 } 325 326 __m128i test_mm_com_epi64(__m128i a, __m128i b) { 327 // CHECK-LABEL: test_mm_com_epi64 328 // CHECK: @llvm.x86.xop.vpcomq 329 return _mm_com_epi64(a, b, 0); 330 } 331 332 __m128d test_mm_permute2_pd(__m128d a, __m128d b, __m128i c) { 333 // CHECK-LABEL: test_mm_permute2_pd 334 // CHECK: @llvm.x86.xop.vpermil2pd 335 return _mm_permute2_pd(a, b, c, 0); 336 } 337 338 __m256d test_mm256_permute2_pd(__m256d a, __m256d b, __m256i c) { 339 // CHECK-LABEL: test_mm256_permute2_pd 340 // CHECK: @llvm.x86.xop.vpermil2pd.256 341 return _mm256_permute2_pd(a, b, c, 0); 342 } 343 344 __m128 test_mm_permute2_ps(__m128 a, __m128 b, __m128i c) { 345 // CHECK-LABEL: test_mm_permute2_ps 346 // CHECK: @llvm.x86.xop.vpermil2ps 347 return _mm_permute2_ps(a, b, c, 0); 348 } 349 350 __m256 test_mm256_permute2_ps(__m256 a, __m256 b, __m256i c) { 351 // CHECK-LABEL: test_mm256_permute2_ps 352 // CHECK: @llvm.x86.xop.vpermil2ps.256 353 return _mm256_permute2_ps(a, b, c, 0); 354 } 355 356 __m128 test_mm_frcz_ss(__m128 a) { 357 // CHECK-LABEL: test_mm_frcz_ss 358 // CHECK: @llvm.x86.xop.vfrcz.ss 359 return _mm_frcz_ss(a); 360 } 361 362 __m128d test_mm_frcz_sd(__m128d a) { 363 // CHECK-LABEL: test_mm_frcz_sd 364 // CHECK: @llvm.x86.xop.vfrcz.sd 365 return _mm_frcz_sd(a); 366 } 367 368 __m128 test_mm_frcz_ps(__m128 a) { 369 // CHECK-LABEL: test_mm_frcz_ps 370 // CHECK: @llvm.x86.xop.vfrcz.ps 371 return _mm_frcz_ps(a); 372 } 373 374 __m128d test_mm_frcz_pd(__m128d a) { 375 // CHECK-LABEL: test_mm_frcz_pd 376 // CHECK: @llvm.x86.xop.vfrcz.pd 377 return _mm_frcz_pd(a); 378 } 379 380 __m256 test_mm256_frcz_ps(__m256 a) { 381 // CHECK-LABEL: test_mm256_frcz_ps 382 // CHECK: @llvm.x86.xop.vfrcz.ps.256 383 return _mm256_frcz_ps(a); 384 } 385 386 __m256d test_mm256_frcz_pd(__m256d a) { 387 // CHECK-LABEL: test_mm256_frcz_pd 388 // CHECK: @llvm.x86.xop.vfrcz.pd.256 389 return _mm256_frcz_pd(a); 390 } 391