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