1 // RUN: %clang_cc1 %s -O0 -triple=x86_64-apple-darwin -ffreestanding -target-feature +avx512f -target-feature +avx512er -emit-llvm -o - -Werror | FileCheck %s 2 3 #include <immintrin.h> 4 5 __m512d test_mm512_rsqrt28_round_pd(__m512d a) { 6 // CHECK-LABEL: @test_mm512_rsqrt28_round_pd 7 // CHECK: @llvm.x86.avx512.rsqrt28.pd 8 return _mm512_rsqrt28_round_pd(a, _MM_FROUND_TO_NEAREST_INT); 9 } 10 11 __m512d test_mm512_mask_rsqrt28_round_pd(__m512d s, __mmask8 m, __m512d a) { 12 // check-label: @test_mm512_mask_rsqrt28_round_pd 13 // check: @llvm.x86.avx512.rsqrt28.pd 14 return _mm512_mask_rsqrt28_round_pd(s, m, a, _MM_FROUND_TO_NEAREST_INT); 15 } 16 17 __m512d test_mm512_maskz_rsqrt28_round_pd(__mmask8 m, __m512d a) { 18 // check-label: @test_mm512_maskz_rsqrt28_round_pd 19 // check: @llvm.x86.avx512.rsqrt28.pd 20 return _mm512_maskz_rsqrt28_round_pd(m, a, _MM_FROUND_TO_NEAREST_INT); 21 } 22 23 __m512d test_mm512_rsqrt28_pd(__m512d a) { 24 // CHECK-LABEL: @test_mm512_rsqrt28_pd 25 // CHECK: @llvm.x86.avx512.rsqrt28.pd 26 return _mm512_rsqrt28_pd(a); 27 } 28 29 __m512d test_mm512_mask_rsqrt28_pd(__m512d s, __mmask8 m, __m512d a) { 30 // check-label: @test_mm512_mask_rsqrt28_pd 31 // check: @llvm.x86.avx512.rsqrt28.pd 32 return _mm512_mask_rsqrt28_pd(s, m, a); 33 } 34 35 __m512d test_mm512_maskz_rsqrt28_pd(__mmask8 m, __m512d a) { 36 // check-label: @test_mm512_maskz_rsqrt28_pd 37 // check: @llvm.x86.avx512.rsqrt28.pd 38 return _mm512_maskz_rsqrt28_pd(m, a); 39 } 40 41 __m512 test_mm512_rsqrt28_round_ps(__m512 a) { 42 // CHECK-LABEL: @test_mm512_rsqrt28_round_ps 43 // CHECK: @llvm.x86.avx512.rsqrt28.ps 44 return _mm512_rsqrt28_round_ps(a, _MM_FROUND_TO_NEAREST_INT); 45 } 46 47 __m512 test_mm512_mask_rsqrt28_round_ps(__m512 s, __mmask16 m, __m512 a) { 48 // CHECK-LABEL: @test_mm512_mask_rsqrt28_round_ps 49 // CHECK: @llvm.x86.avx512.rsqrt28.ps 50 return _mm512_mask_rsqrt28_round_ps(s, m, a, _MM_FROUND_TO_NEAREST_INT); 51 } 52 53 __m512 test_mm512_maskz_rsqrt28_round_ps(__mmask16 m, __m512 a) { 54 // CHECK-LABEL: @test_mm512_maskz_rsqrt28_round_ps 55 // CHECK: @llvm.x86.avx512.rsqrt28.ps 56 return _mm512_maskz_rsqrt28_round_ps(m, a, _MM_FROUND_TO_NEAREST_INT); 57 } 58 59 __m512 test_mm512_rsqrt28_ps(__m512 a) { 60 // CHECK-LABEL: @test_mm512_rsqrt28_ps 61 // CHECK: @llvm.x86.avx512.rsqrt28.ps 62 return _mm512_rsqrt28_ps(a); 63 } 64 65 __m512 test_mm512_mask_rsqrt28_ps(__m512 s, __mmask16 m, __m512 a) { 66 // CHECK-LABEL: @test_mm512_mask_rsqrt28_ps 67 // CHECK: @llvm.x86.avx512.rsqrt28.ps 68 return _mm512_mask_rsqrt28_ps(s, m, a); 69 } 70 71 __m512 test_mm512_maskz_rsqrt28_ps(__mmask16 m, __m512 a) { 72 // CHECK-LABEL: @test_mm512_maskz_rsqrt28_ps 73 // CHECK: @llvm.x86.avx512.rsqrt28.ps 74 return _mm512_maskz_rsqrt28_ps(m, a); 75 } 76 77 __m128 test_mm_rsqrt28_round_ss(__m128 a, __m128 b) { 78 // check-label: @test_mm_rsqrt28_round_ss 79 // check: @llvm.x86.avx512.rsqrt28.ss 80 return _mm_rsqrt28_round_ss(a, b, _MM_FROUND_TO_NEAREST_INT); 81 } 82 83 __m128 test_mm_mask_rsqrt28_round_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) { 84 // check-label: @test_mm_mask_rsqrt28_round_ss 85 // check: @llvm.x86.avx512.rsqrt28.ss 86 return _mm_mask_rsqrt28_round_ss(s, m, a, b, _MM_FROUND_TO_NEAREST_INT); 87 } 88 89 __m128 test_mm_maskz_rsqrt28_round_ss(__mmask16 m, __m128 a, __m128 b) { 90 // check-label: @test_mm_maskz_rsqrt28_round_ss 91 // check: @llvm.x86.avx512.rsqrt28.ss 92 return _mm_maskz_rsqrt28_round_ss(m, a, b, _MM_FROUND_TO_NEAREST_INT); 93 } 94 95 __m128 test_mm_rsqrt28_ss(__m128 a, __m128 b) { 96 // check-label: @test_mm_rsqrt28_ss 97 // check: @llvm.x86.avx512.rsqrt28.ss 98 return _mm_rsqrt28_ss(a, b); 99 } 100 101 __m128 test_mm_mask_rsqrt28_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) { 102 // check-label: @test_mm_mask_rsqrt28_ss 103 // check: @llvm.x86.avx512.rsqrt28.ss 104 return _mm_mask_rsqrt28_ss(s, m, a, b); 105 } 106 107 __m128 test_mm_maskz_rsqrt28_ss(__mmask16 m, __m128 a, __m128 b) { 108 // check-label: @test_mm_maskz_rsqrt28_ss 109 // check: @llvm.x86.avx512.rsqrt28.ss 110 return _mm_maskz_rsqrt28_ss(m, a, b); 111 } 112 113 __m128d test_mm_rsqrt28_round_sd(__m128d a, __m128d b) { 114 // CHECK-LABEL: @test_mm_rsqrt28_round_sd 115 // CHECK: @llvm.x86.avx512.rsqrt28.sd 116 return _mm_rsqrt28_round_sd(a, b, _MM_FROUND_TO_NEAREST_INT); 117 } 118 119 __m128d test_mm_mask_rsqrt28_round_sd(__m128d s, __mmask8 m, __m128d a, __m128d b) { 120 // CHECK-LABEL: @test_mm_mask_rsqrt28_round_sd 121 // CHECK: @llvm.x86.avx512.rsqrt28.sd 122 return _mm_mask_rsqrt28_round_sd(s, m, a, b, _MM_FROUND_TO_NEAREST_INT); 123 } 124 125 __m128d test_mm_maskz_rsqrt28_round_sd(__mmask8 m, __m128d a, __m128d b) { 126 // CHECK-LABEL: @test_mm_maskz_rsqrt28_round_sd 127 // CHECK: @llvm.x86.avx512.rsqrt28.sd 128 return _mm_maskz_rsqrt28_round_sd(m, a, b, _MM_FROUND_TO_NEAREST_INT); 129 } 130 131 __m512d test_mm512_rcp28_round_pd(__m512d a) { 132 // CHECK-LABEL: @test_mm512_rcp28_round_pd 133 // CHECK: @llvm.x86.avx512.rcp28.pd 134 return _mm512_rcp28_round_pd(a, _MM_FROUND_TO_NEAREST_INT); 135 } 136 137 __m512d test_mm512_mask_rcp28_round_pd(__m512d s, __mmask8 m, __m512d a) { 138 // check-label: @test_mm512_mask_rcp28_round_pd 139 // check: @llvm.x86.avx512.rcp28.pd 140 return _mm512_mask_rcp28_round_pd(s, m, a, _MM_FROUND_TO_NEAREST_INT); 141 } 142 143 __m512d test_mm512_maskz_rcp28_round_pd(__mmask8 m, __m512d a) { 144 // check-label: @test_mm512_maskz_rcp28_round_pd 145 // check: @llvm.x86.avx512.rcp28.pd 146 return _mm512_maskz_rcp28_round_pd(m, a, _MM_FROUND_TO_NEAREST_INT); 147 } 148 149 __m512d test_mm512_rcp28_pd(__m512d a) { 150 // CHECK-LABEL: @test_mm512_rcp28_pd 151 // CHECK: @llvm.x86.avx512.rcp28.pd 152 return _mm512_rcp28_pd(a); 153 } 154 155 __m512d test_mm512_mask_rcp28_pd(__m512d s, __mmask8 m, __m512d a) { 156 // check-label: @test_mm512_mask_rcp28_pd 157 // check: @llvm.x86.avx512.rcp28.pd 158 return _mm512_mask_rcp28_pd(s, m, a); 159 } 160 161 __m512d test_mm512_maskz_rcp28_pd(__mmask8 m, __m512d a) { 162 // check-label: @test_mm512_maskz_rcp28_pd 163 // check: @llvm.x86.avx512.rcp28.pd 164 return _mm512_maskz_rcp28_pd(m, a); 165 } 166 167 __m512 test_mm512_rcp28_round_ps(__m512 a) { 168 // CHECK-LABEL: @test_mm512_rcp28_round_ps 169 // CHECK: @llvm.x86.avx512.rcp28.ps 170 return _mm512_rcp28_round_ps(a, _MM_FROUND_TO_NEAREST_INT); 171 } 172 173 __m512 test_mm512_mask_rcp28_round_ps(__m512 s, __mmask16 m, __m512 a) { 174 // CHECK-LABEL: @test_mm512_mask_rcp28_round_ps 175 // CHECK: @llvm.x86.avx512.rcp28.ps 176 return _mm512_mask_rcp28_round_ps(s, m, a, _MM_FROUND_TO_NEAREST_INT); 177 } 178 179 __m512 test_mm512_maskz_rcp28_round_ps(__mmask16 m, __m512 a) { 180 // CHECK-LABEL: @test_mm512_maskz_rcp28_round_ps 181 // CHECK: @llvm.x86.avx512.rcp28.ps 182 return _mm512_maskz_rcp28_round_ps(m, a, _MM_FROUND_TO_NEAREST_INT); 183 } 184 185 __m512 test_mm512_rcp28_ps(__m512 a) { 186 // CHECK-LABEL: @test_mm512_rcp28_ps 187 // CHECK: @llvm.x86.avx512.rcp28.ps 188 return _mm512_rcp28_ps(a); 189 } 190 191 __m512 test_mm512_mask_rcp28_ps(__m512 s, __mmask16 m, __m512 a) { 192 // CHECK-LABEL: @test_mm512_mask_rcp28_ps 193 // CHECK: @llvm.x86.avx512.rcp28.ps 194 return _mm512_mask_rcp28_ps(s, m, a); 195 } 196 197 __m512 test_mm512_maskz_rcp28_ps(__mmask16 m, __m512 a) { 198 // CHECK-LABEL: @test_mm512_maskz_rcp28_ps 199 // CHECK: @llvm.x86.avx512.rcp28.ps 200 return _mm512_maskz_rcp28_ps(m, a); 201 } 202 203 __m128 test_mm_rcp28_round_ss(__m128 a, __m128 b) { 204 // check-label: @test_mm_rcp28_round_ss 205 // check: @llvm.x86.avx512.rcp28.ss 206 return _mm_rcp28_round_ss(a, b, _MM_FROUND_TO_NEAREST_INT); 207 } 208 209 __m128 test_mm_mask_rcp28_round_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) { 210 // check-label: @test_mm_mask_rcp28_round_ss 211 // check: @llvm.x86.avx512.rcp28.ss 212 return _mm_mask_rcp28_round_ss(s, m, a, b, _MM_FROUND_TO_NEAREST_INT); 213 } 214 215 __m128 test_mm_maskz_rcp28_round_ss(__mmask16 m, __m128 a, __m128 b) { 216 // check-label: @test_mm_maskz_rcp28_round_ss 217 // check: @llvm.x86.avx512.rcp28.ss 218 return _mm_maskz_rcp28_round_ss(m, a, b, _MM_FROUND_TO_NEAREST_INT); 219 } 220 221 __m128 test_mm_rcp28_ss(__m128 a, __m128 b) { 222 // check-label: @test_mm_rcp28_ss 223 // check: @llvm.x86.avx512.rcp28.ss 224 return _mm_rcp28_ss(a, b); 225 } 226 227 __m128 test_mm_mask_rcp28_ss(__m128 s, __mmask16 m, __m128 a, __m128 b) { 228 // check-label: @test_mm_mask_rcp28_ss 229 // check: @llvm.x86.avx512.rcp28.ss 230 return _mm_mask_rcp28_ss(s, m, a, b); 231 } 232 233 __m128 test_mm_maskz_rcp28_ss(__mmask16 m, __m128 a, __m128 b) { 234 // check-label: @test_mm_maskz_rcp28_ss 235 // check: @llvm.x86.avx512.rcp28.ss 236 return _mm_maskz_rcp28_ss(m, a, b); 237 } 238 239 __m128d test_mm_rcp28_round_sd(__m128d a, __m128d b) { 240 // CHECK-LABEL: @test_mm_rcp28_round_sd 241 // CHECK: @llvm.x86.avx512.rcp28.sd 242 return _mm_rcp28_round_sd(a, b, _MM_FROUND_TO_NEAREST_INT); 243 } 244 245 __m128d test_mm_mask_rcp28_round_sd(__m128d s, __mmask8 m, __m128d a, __m128d b) { 246 // CHECK-LABEL: @test_mm_mask_rcp28_round_sd 247 // CHECK: @llvm.x86.avx512.rcp28.sd 248 return _mm_mask_rcp28_round_sd(s, m, a, b, _MM_FROUND_TO_NEAREST_INT); 249 } 250 251 __m128d test_mm_maskz_rcp28_round_sd(__mmask8 m, __m128d a, __m128d b) { 252 // CHECK-LABEL: @test_mm_maskz_rcp28_round_sd 253 // CHECK: @llvm.x86.avx512.rcp28.sd 254 return _mm_maskz_rcp28_round_sd(m, a, b, _MM_FROUND_TO_NEAREST_INT); 255 } 256 257 __m128d test_mm_rcp28_sd(__m128d a, __m128d b) { 258 // CHECK-LABEL: @test_mm_rcp28_sd 259 // CHECK: @llvm.x86.avx512.rcp28.sd 260 return _mm_rcp28_sd(a, b); 261 } 262 263 __m128d test_mm_mask_rcp28_sd(__m128d s, __mmask8 m, __m128d a, __m128d b) { 264 // CHECK-LABEL: @test_mm_mask_rcp28_sd 265 // CHECK: @llvm.x86.avx512.rcp28.sd 266 return _mm_mask_rcp28_sd(s, m, a, b); 267 } 268 269 __m128d test_mm_maskz_rcp28_sd(__mmask8 m, __m128d a, __m128d b) { 270 // CHECK-LABEL: @test_mm_maskz_rcp28_sd 271 // CHECK: @llvm.x86.avx512.rcp28.sd 272 return _mm_maskz_rcp28_sd(m, a, b); 273 } 274 275 __m512d test_mm512_exp2a23_round_pd(__m512d a) { 276 // CHECK-LABEL: @test_mm512_exp2a23_round_pd 277 // CHECK: @llvm.x86.avx512.exp2.pd 278 return _mm512_exp2a23_round_pd(a, _MM_FROUND_TO_NEAREST_INT); 279 } 280 281 __m512d test_mm512_mask_exp2a23_round_pd(__m512d s, __mmask8 m, __m512d a) { 282 // check-label: @test_mm512_mask_exp2a23_round_pd 283 // check: @llvm.x86.avx512.exp2.pd 284 return _mm512_mask_exp2a23_round_pd(s, m, a, _MM_FROUND_TO_NEAREST_INT); 285 } 286 287 __m512d test_mm512_maskz_exp2a23_round_pd(__mmask8 m, __m512d a) { 288 // check-label: @test_mm512_maskz_exp2a23_round_pd 289 // check: @llvm.x86.avx512.exp2.pd 290 return _mm512_maskz_exp2a23_round_pd(m, a, _MM_FROUND_TO_NEAREST_INT); 291 } 292 293 __m512d test_mm512_exp2a23_pd(__m512d a) { 294 // CHECK-LABEL: @test_mm512_exp2a23_pd 295 // CHECK: @llvm.x86.avx512.exp2.pd 296 return _mm512_exp2a23_pd(a); 297 } 298 299 __m512d test_mm512_mask_exp2a23_pd(__m512d s, __mmask8 m, __m512d a) { 300 // check-label: @test_mm512_mask_exp2a23_pd 301 // check: @llvm.x86.avx512.exp2.pd 302 return _mm512_mask_exp2a23_pd(s, m, a); 303 } 304 305 __m512d test_mm512_maskz_exp2a23_pd(__mmask8 m, __m512d a) { 306 // check-label: @test_mm512_maskz_exp2a23_pd 307 // check: @llvm.x86.avx512.exp2.pd 308 return _mm512_maskz_exp2a23_pd(m, a); 309 } 310 311 __m512 test_mm512_exp2a23_round_ps(__m512 a) { 312 // CHECK-LABEL: @test_mm512_exp2a23_round_ps 313 // CHECK: @llvm.x86.avx512.exp2.ps 314 return _mm512_exp2a23_round_ps(a, _MM_FROUND_TO_NEAREST_INT); 315 } 316 317 __m512 test_mm512_mask_exp2a23_round_ps(__m512 s, __mmask16 m, __m512 a) { 318 // CHECK-LABEL: @test_mm512_mask_exp2a23_round_ps 319 // CHECK: @llvm.x86.avx512.exp2.ps 320 return _mm512_mask_exp2a23_round_ps(s, m, a, _MM_FROUND_TO_NEAREST_INT); 321 } 322 323 __m512 test_mm512_maskz_exp2a23_round_ps(__mmask16 m, __m512 a) { 324 // CHECK-LABEL: @test_mm512_maskz_exp2a23_round_ps 325 // CHECK: @llvm.x86.avx512.exp2.ps 326 return _mm512_maskz_exp2a23_round_ps(m, a, _MM_FROUND_TO_NEAREST_INT); 327 } 328 329 __m512 test_mm512_exp2a23_ps(__m512 a) { 330 // CHECK-LABEL: @test_mm512_exp2a23_ps 331 // CHECK: @llvm.x86.avx512.exp2.ps 332 return _mm512_exp2a23_ps(a); 333 } 334 335 __m512 test_mm512_mask_exp2a23_ps(__m512 s, __mmask16 m, __m512 a) { 336 // CHECK-LABEL: @test_mm512_mask_exp2a23_ps 337 // CHECK: @llvm.x86.avx512.exp2.ps 338 return _mm512_mask_exp2a23_ps(s, m, a); 339 } 340 341 __m512 test_mm512_maskz_exp2a23_ps(__mmask16 m, __m512 a) { 342 // CHECK-LABEL: @test_mm512_maskz_exp2a23_ps 343 // CHECK: @llvm.x86.avx512.exp2.ps 344 return _mm512_maskz_exp2a23_ps(m, a); 345 } 346 347