1 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -mattr=-fullfp16 | FileCheck %s 2 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -mattr=+fullfp16 | FileCheck %s --check-prefix=CHECK-FP16 3 4 ;;; Float vectors 5 6 %v2f32 = type <2 x float> 7 %v4f16 = type <4 x half> 8 %v8f16 = type <8 x half> 9 10 ; CHECK-LABEL: test_v2f32.sqrt: 11 define %v2f32 @test_v2f32.sqrt(%v2f32 %a) { 12 ; CHECK: fsqrt.2s 13 %1 = call %v2f32 @llvm.sqrt.v2f32(%v2f32 %a) 14 ret %v2f32 %1 15 } 16 define %v4f16 @test_v4f16.sqrt(%v4f16 %a) { 17 ; CHECK-LABEL: test_v4f16.sqrt: 18 ; CHECK: fsqrt s{{.}}, s{{.}} 19 ; CHECK: fsqrt s{{.}}, s{{.}} 20 ; CHECK: fsqrt s{{.}}, s{{.}} 21 ; CHECK: fsqrt s{{.}}, s{{.}} 22 23 ; CHECK-FP16-LABEL: test_v4f16.sqrt: 24 ; CHECK-FP16-NOT: fcvt 25 ; CHECK-FP16: fsqrt.4h 26 ; CHECK-FP16-NEXT: ret 27 %1 = call %v4f16 @llvm.sqrt.v4f16(%v4f16 %a) 28 ret %v4f16 %1 29 } 30 define %v8f16 @test_v8f16.sqrt(%v8f16 %a) { 31 ; Filechecks are unwieldy with 16 fcvt and 8 fsqrt tests, so skipped for -fullfp16. 32 33 ; CHECK-FP16-LABEL: test_v8f16.sqrt: 34 ; CHECK-FP16-NOT: fcvt 35 ; CHECK-FP16: fsqrt.8h 36 ; CHECK-FP16-NEXT: ret 37 %1 = call %v8f16 @llvm.sqrt.v8f16(%v8f16 %a) 38 ret %v8f16 %1 39 } 40 ; CHECK: test_v2f32.powi: 41 define %v2f32 @test_v2f32.powi(%v2f32 %a, i32 %b) { 42 ; CHECK: pow 43 %1 = call %v2f32 @llvm.powi.v2f32(%v2f32 %a, i32 %b) 44 ret %v2f32 %1 45 } 46 ; CHECK: test_v2f32.sin: 47 define %v2f32 @test_v2f32.sin(%v2f32 %a) { 48 ; CHECK: sin 49 %1 = call %v2f32 @llvm.sin.v2f32(%v2f32 %a) 50 ret %v2f32 %1 51 } 52 ; CHECK: test_v2f32.cos: 53 define %v2f32 @test_v2f32.cos(%v2f32 %a) { 54 ; CHECK: cos 55 %1 = call %v2f32 @llvm.cos.v2f32(%v2f32 %a) 56 ret %v2f32 %1 57 } 58 ; CHECK: test_v2f32.pow: 59 define %v2f32 @test_v2f32.pow(%v2f32 %a, %v2f32 %b) { 60 ; CHECK: pow 61 %1 = call %v2f32 @llvm.pow.v2f32(%v2f32 %a, %v2f32 %b) 62 ret %v2f32 %1 63 } 64 ; CHECK: test_v2f32.exp: 65 define %v2f32 @test_v2f32.exp(%v2f32 %a) { 66 ; CHECK: exp 67 %1 = call %v2f32 @llvm.exp.v2f32(%v2f32 %a) 68 ret %v2f32 %1 69 } 70 ; CHECK: test_v2f32.exp2: 71 define %v2f32 @test_v2f32.exp2(%v2f32 %a) { 72 ; CHECK: exp 73 %1 = call %v2f32 @llvm.exp2.v2f32(%v2f32 %a) 74 ret %v2f32 %1 75 } 76 ; CHECK: test_v2f32.log: 77 define %v2f32 @test_v2f32.log(%v2f32 %a) { 78 ; CHECK: log 79 %1 = call %v2f32 @llvm.log.v2f32(%v2f32 %a) 80 ret %v2f32 %1 81 } 82 ; CHECK: test_v2f32.log10: 83 define %v2f32 @test_v2f32.log10(%v2f32 %a) { 84 ; CHECK: log 85 %1 = call %v2f32 @llvm.log10.v2f32(%v2f32 %a) 86 ret %v2f32 %1 87 } 88 ; CHECK: test_v2f32.log2: 89 define %v2f32 @test_v2f32.log2(%v2f32 %a) { 90 ; CHECK: log 91 %1 = call %v2f32 @llvm.log2.v2f32(%v2f32 %a) 92 ret %v2f32 %1 93 } 94 ; CHECK-LABEL: test_v2f32.fma: 95 define %v2f32 @test_v2f32.fma(%v2f32 %a, %v2f32 %b, %v2f32 %c) { 96 ; CHECK: fmla.2s 97 %1 = call %v2f32 @llvm.fma.v2f32(%v2f32 %a, %v2f32 %b, %v2f32 %c) 98 ret %v2f32 %1 99 } 100 define %v4f16 @test_v4f16.fma(%v4f16 %a, %v4f16 %b, %v4f16 %c) { 101 ; CHECK-LABEL: test_v4f16.fma: 102 ; CHECK: fmadd s{{.}}, s{{.}}, s{{.}}, s{{.}} 103 ; CHECK: fmadd s{{.}}, s{{.}}, s{{.}}, s{{.}} 104 ; CHECK: fmadd s{{.}}, s{{.}}, s{{.}}, s{{.}} 105 ; CHECK: fmadd s{{.}}, s{{.}}, s{{.}}, s{{.}} 106 107 ; CHECK-FP16-LABEL: test_v4f16.fma: 108 ; CHECK-FP16-NOT: fcvt 109 ; CHECK-FP16: fmla.4h 110 %1 = call %v4f16 @llvm.fma.v4f16(%v4f16 %a, %v4f16 %b, %v4f16 %c) 111 ret %v4f16 %1 112 } 113 define %v8f16 @test_v8f16.fma(%v8f16 %a, %v8f16 %b, %v8f16 %c) { 114 ; Filechecks are unwieldy with 16 fcvt and 8 fma tests, so skipped for -fullfp16. 115 116 ; CHECK-FP16-LABEL: test_v8f16.fma: 117 ; CHECK-FP16-NOT: fcvt 118 ; CHECK-FP16: fmla.8h 119 %1 = call %v8f16 @llvm.fma.v8f16(%v8f16 %a, %v8f16 %b, %v8f16 %c) 120 ret %v8f16 %1 121 } 122 ; CHECK-LABEL: test_v2f32.fabs: 123 define %v2f32 @test_v2f32.fabs(%v2f32 %a) { 124 ; CHECK: fabs.2s 125 %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a) 126 ret %v2f32 %1 127 } 128 define %v4f16 @test_v4f16.fabs(%v4f16 %a) { 129 ; CHECK-LABEL: test_v4f16.fabs: 130 ; CHECK: fabs s{{.}}, s{{.}} 131 ; CHECK: fabs s{{.}}, s{{.}} 132 ; CHECK: fabs s{{.}}, s{{.}} 133 ; CHECK: fabs s{{.}}, s{{.}} 134 135 ; CHECK-FP16-LABEL: test_v4f16.fabs: 136 ; CHECK-FP16-NOT: fcvt 137 ; CHECK-FP16: fabs.4h 138 ; CHECK-FP16-NEXT: ret 139 %1 = call %v4f16 @llvm.fabs.v4f16(%v4f16 %a) 140 ret %v4f16 %1 141 } 142 define %v8f16 @test_v8f16.fabs(%v8f16 %a) { 143 ; Filechecks are unwieldy with 16 fcvt and 8 fabs tests, so skipped for -fullfp16. 144 145 ; CHECK-FP16-LABEL: test_v8f16.fabs: 146 ; CHECK-FP16-NOT: fcvt 147 ; CHECK-FP16: fabs.8h 148 ; CHECK-FP16-NEXT: ret 149 %1 = call %v8f16 @llvm.fabs.v8f16(%v8f16 %a) 150 ret %v8f16 %1 151 } 152 ; CHECK-LABEL: test_v2f32.floor: 153 define %v2f32 @test_v2f32.floor(%v2f32 %a) { 154 ; CHECK: frintm.2s 155 %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a) 156 ret %v2f32 %1 157 } 158 define %v4f16 @test_v4f16.floor(%v4f16 %a) { 159 ; CHECK-LABEL: test_v4f16.floor: 160 ; CHECK: frintm s{{.}}, s{{.}} 161 ; CHECK: frintm s{{.}}, s{{.}} 162 ; CHECK: frintm s{{.}}, s{{.}} 163 ; CHECK: frintm s{{.}}, s{{.}} 164 165 ; CHECK-FP16-LABEL: test_v4f16.floor: 166 ; CHECK-FP16-NOT: fcvt 167 ; CHECK-FP16: frintm.4h 168 ; CHECK-FP16-NEXT: ret 169 %1 = call %v4f16 @llvm.floor.v4f16(%v4f16 %a) 170 ret %v4f16 %1 171 } 172 define %v8f16 @test_v8f16.floor(%v8f16 %a) { 173 ; Filechecks are unwieldy with 16 fcvt and 8 frintm tests, so skipped for -fullfp16. 174 175 ; CHECK-FP16-LABEL: test_v8f16.floor: 176 ; CHECK-FP16-NOT: fcvt 177 ; CHECK-FP16: frintm.8h 178 ; CHECK-FP16-NEXT: ret 179 %1 = call %v8f16 @llvm.floor.v8f16(%v8f16 %a) 180 ret %v8f16 %1 181 } 182 ; CHECK-LABEL: test_v2f32.ceil: 183 define %v2f32 @test_v2f32.ceil(%v2f32 %a) { 184 ; CHECK: frintp.2s 185 %1 = call %v2f32 @llvm.ceil.v2f32(%v2f32 %a) 186 ret %v2f32 %1 187 } 188 define %v4f16 @test_v4f16.ceil(%v4f16 %a) { 189 ; CHECK-LABEL: test_v4f16.ceil: 190 ; CHECK: frintp s{{.}}, s{{.}} 191 ; CHECK: frintp s{{.}}, s{{.}} 192 ; CHECK: frintp s{{.}}, s{{.}} 193 ; CHECK: frintp s{{.}}, s{{.}} 194 195 ; CHECK-FP16-LABEL: test_v4f16.ceil: 196 ; CHECK-FP16-NOT: fcvt 197 ; CHECK-FP16: frintp.4h 198 ; CHECK-FP16-NEXT: ret 199 %1 = call %v4f16 @llvm.ceil.v4f16(%v4f16 %a) 200 ret %v4f16 %1 201 } 202 define %v8f16 @test_v8f16.ceil(%v8f16 %a) { 203 ; Filechecks are unwieldy with 16 fcvt and 8 frint tests, so skipped for -fullfp16. 204 205 ; CHECK-FP16-LABEL: test_v8f16.ceil: 206 ; CHECK-FP16-NOT: fcvt 207 ; CHECK-FP16: frintp.8h 208 ; CHECK-FP16-NEXT: ret 209 %1 = call %v8f16 @llvm.ceil.v8f16(%v8f16 %a) 210 ret %v8f16 %1 211 } 212 ; CHECK-LABEL: test_v2f32.trunc: 213 define %v2f32 @test_v2f32.trunc(%v2f32 %a) { 214 ; CHECK: frintz.2s 215 %1 = call %v2f32 @llvm.trunc.v2f32(%v2f32 %a) 216 ret %v2f32 %1 217 } 218 define %v4f16 @test_v4f16.trunc(%v4f16 %a) { 219 ; CHECK-LABEL: test_v4f16.trunc: 220 ; CHECK: frintz s{{.}}, s{{.}} 221 ; CHECK: frintz s{{.}}, s{{.}} 222 ; CHECK: frintz s{{.}}, s{{.}} 223 ; CHECK: frintz s{{.}}, s{{.}} 224 225 ; CHECK-FP16-LABEL: test_v4f16.trunc: 226 ; CHECK-FP16: frintz.4h 227 ; CHECK-FP16-NEXT: ret 228 %1 = call %v4f16 @llvm.trunc.v4f16(%v4f16 %a) 229 ret %v4f16 %1 230 } 231 define %v8f16 @test_v8f16.trunc(%v8f16 %a) { 232 ; Filechecks are unwieldy with 16 fcvt and 8 frint tests, so skipped for -fullfp16. 233 234 ; CHECK-FP16-LABEL: test_v8f16.trunc: 235 ; CHECK-FP16-NOT: fcvt 236 ; CHECK-FP16: frintz.8h 237 ; CHECK-FP16-NEXT: ret 238 %1 = call %v8f16 @llvm.trunc.v8f16(%v8f16 %a) 239 ret %v8f16 %1 240 } 241 ; CHECK-LABEL: test_v2f32.rint: 242 define %v2f32 @test_v2f32.rint(%v2f32 %a) { 243 ; CHECK: frintx.2s 244 %1 = call %v2f32 @llvm.rint.v2f32(%v2f32 %a) 245 ret %v2f32 %1 246 } 247 define %v4f16 @test_v4f16.rint(%v4f16 %a) { 248 ; CHECK-LABEL: test_v4f16.rint: 249 ; CHECK: frintx s{{.}}, s{{.}} 250 ; CHECK: frintx s{{.}}, s{{.}} 251 ; CHECK: frintx s{{.}}, s{{.}} 252 ; CHECK: frintx s{{.}}, s{{.}} 253 254 ; CHECK-FP16-LABEL: test_v4f16.rint: 255 ; CHECK-FP16-NOT: fcvt 256 ; CHECK-FP16: frintx.4h 257 ; CHECK-FP16-NEXT: ret 258 %1 = call %v4f16 @llvm.rint.v4f16(%v4f16 %a) 259 ret %v4f16 %1 260 } 261 define %v8f16 @test_v8f16.rint(%v8f16 %a) { 262 ; Filechecks are unwieldy with 16 fcvt and 8 frint tests, so skipped for -fullfp16. 263 264 ; CHECK-FP16-LABEL: test_v8f16.rint: 265 ; CHECK-FP16: frintx.8h 266 ; CHECK-FP16-NEXT: ret 267 %1 = call %v8f16 @llvm.rint.v8f16(%v8f16 %a) 268 ret %v8f16 %1 269 } 270 ; CHECK-LABEL: test_v2f32.nearbyint: 271 define %v2f32 @test_v2f32.nearbyint(%v2f32 %a) { 272 ; CHECK: frinti.2s 273 %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a) 274 ret %v2f32 %1 275 } 276 define %v4f16 @test_v4f16.nearbyint(%v4f16 %a) { 277 ; CHECK-LABEL: test_v4f16.nearbyint: 278 ; CHECK: frinti s{{.}}, s{{.}} 279 ; CHECK: frinti s{{.}}, s{{.}} 280 ; CHECK: frinti s{{.}}, s{{.}} 281 ; CHECK: frinti s{{.}}, s{{.}} 282 283 ; CHECK-FP16-LABEL: test_v4f16.nearbyint: 284 ; CHECK-FP16-NOT: fcvt 285 ; CHECK-FP16: frinti.4h 286 ; CHECK-FP16-NEXT: ret 287 %1 = call %v4f16 @llvm.nearbyint.v4f16(%v4f16 %a) 288 ret %v4f16 %1 289 } 290 define %v8f16 @test_v8f16.nearbyint(%v8f16 %a) { 291 ; Filechecks are unwieldy with 16 fcvt and 8 frint tests, so skipped for -fullfp16. 292 293 ; CHECK-FP16-LABEL: test_v8f16.nearbyint: 294 ; CHECK-FP16-NOT: fcvt 295 ; CHECK-FP16: frinti.8h 296 ; CHECK-FP16-NEXT: ret 297 %1 = call %v8f16 @llvm.nearbyint.v8f16(%v8f16 %a) 298 ret %v8f16 %1 299 } 300 301 declare %v2f32 @llvm.sqrt.v2f32(%v2f32) #0 302 declare %v4f16 @llvm.sqrt.v4f16(%v4f16) #0 303 declare %v8f16 @llvm.sqrt.v8f16(%v8f16) #0 304 305 declare %v2f32 @llvm.powi.v2f32(%v2f32, i32) #0 306 declare %v2f32 @llvm.sin.v2f32(%v2f32) #0 307 declare %v2f32 @llvm.cos.v2f32(%v2f32) #0 308 declare %v2f32 @llvm.pow.v2f32(%v2f32, %v2f32) #0 309 declare %v2f32 @llvm.exp.v2f32(%v2f32) #0 310 declare %v2f32 @llvm.exp2.v2f32(%v2f32) #0 311 declare %v2f32 @llvm.log.v2f32(%v2f32) #0 312 declare %v2f32 @llvm.log10.v2f32(%v2f32) #0 313 declare %v2f32 @llvm.log2.v2f32(%v2f32) #0 314 315 declare %v2f32 @llvm.fma.v2f32(%v2f32, %v2f32, %v2f32) #0 316 declare %v4f16 @llvm.fma.v4f16(%v4f16, %v4f16, %v4f16) #0 317 declare %v8f16 @llvm.fma.v8f16(%v8f16, %v8f16, %v8f16) #0 318 319 declare %v2f32 @llvm.fabs.v2f32(%v2f32) #0 320 declare %v4f16 @llvm.fabs.v4f16(%v4f16) #0 321 declare %v8f16 @llvm.fabs.v8f16(%v8f16) #0 322 323 declare %v2f32 @llvm.floor.v2f32(%v2f32) #0 324 declare %v4f16 @llvm.floor.v4f16(%v4f16) #0 325 declare %v8f16 @llvm.floor.v8f16(%v8f16) #0 326 327 declare %v2f32 @llvm.ceil.v2f32(%v2f32) #0 328 declare %v4f16 @llvm.ceil.v4f16(%v4f16) #0 329 declare %v8f16 @llvm.ceil.v8f16(%v8f16) #0 330 331 declare %v2f32 @llvm.trunc.v2f32(%v2f32) #0 332 declare %v4f16 @llvm.trunc.v4f16(%v4f16) #0 333 declare %v8f16 @llvm.trunc.v8f16(%v8f16) #0 334 335 declare %v2f32 @llvm.rint.v2f32(%v2f32) #0 336 declare %v4f16 @llvm.rint.v4f16(%v4f16) #0 337 declare %v8f16 @llvm.rint.v8f16(%v8f16) #0 338 339 declare %v2f32 @llvm.nearbyint.v2f32(%v2f32) #0 340 declare %v4f16 @llvm.nearbyint.v4f16(%v4f16) #0 341 declare %v8f16 @llvm.nearbyint.v8f16(%v8f16) #0 342 343 ;;; 344 345 %v4f32 = type <4 x float> 346 ; CHECK: test_v4f32.sqrt: 347 define %v4f32 @test_v4f32.sqrt(%v4f32 %a) { 348 ; CHECK: fsqrt.4s 349 %1 = call %v4f32 @llvm.sqrt.v4f32(%v4f32 %a) 350 ret %v4f32 %1 351 } 352 ; CHECK: test_v4f32.powi: 353 define %v4f32 @test_v4f32.powi(%v4f32 %a, i32 %b) { 354 ; CHECK: pow 355 %1 = call %v4f32 @llvm.powi.v4f32(%v4f32 %a, i32 %b) 356 ret %v4f32 %1 357 } 358 ; CHECK: test_v4f32.sin: 359 define %v4f32 @test_v4f32.sin(%v4f32 %a) { 360 ; CHECK: sin 361 %1 = call %v4f32 @llvm.sin.v4f32(%v4f32 %a) 362 ret %v4f32 %1 363 } 364 ; CHECK: test_v4f32.cos: 365 define %v4f32 @test_v4f32.cos(%v4f32 %a) { 366 ; CHECK: cos 367 %1 = call %v4f32 @llvm.cos.v4f32(%v4f32 %a) 368 ret %v4f32 %1 369 } 370 ; CHECK: test_v4f32.pow: 371 define %v4f32 @test_v4f32.pow(%v4f32 %a, %v4f32 %b) { 372 ; CHECK: pow 373 %1 = call %v4f32 @llvm.pow.v4f32(%v4f32 %a, %v4f32 %b) 374 ret %v4f32 %1 375 } 376 ; CHECK: test_v4f32.exp: 377 define %v4f32 @test_v4f32.exp(%v4f32 %a) { 378 ; CHECK: exp 379 %1 = call %v4f32 @llvm.exp.v4f32(%v4f32 %a) 380 ret %v4f32 %1 381 } 382 ; CHECK: test_v4f32.exp2: 383 define %v4f32 @test_v4f32.exp2(%v4f32 %a) { 384 ; CHECK: exp 385 %1 = call %v4f32 @llvm.exp2.v4f32(%v4f32 %a) 386 ret %v4f32 %1 387 } 388 ; CHECK: test_v4f32.log: 389 define %v4f32 @test_v4f32.log(%v4f32 %a) { 390 ; CHECK: log 391 %1 = call %v4f32 @llvm.log.v4f32(%v4f32 %a) 392 ret %v4f32 %1 393 } 394 ; CHECK: test_v4f32.log10: 395 define %v4f32 @test_v4f32.log10(%v4f32 %a) { 396 ; CHECK: log 397 %1 = call %v4f32 @llvm.log10.v4f32(%v4f32 %a) 398 ret %v4f32 %1 399 } 400 ; CHECK: test_v4f32.log2: 401 define %v4f32 @test_v4f32.log2(%v4f32 %a) { 402 ; CHECK: log 403 %1 = call %v4f32 @llvm.log2.v4f32(%v4f32 %a) 404 ret %v4f32 %1 405 } 406 ; CHECK: test_v4f32.fma: 407 define %v4f32 @test_v4f32.fma(%v4f32 %a, %v4f32 %b, %v4f32 %c) { 408 ; CHECK: fma 409 %1 = call %v4f32 @llvm.fma.v4f32(%v4f32 %a, %v4f32 %b, %v4f32 %c) 410 ret %v4f32 %1 411 } 412 ; CHECK: test_v4f32.fabs: 413 define %v4f32 @test_v4f32.fabs(%v4f32 %a) { 414 ; CHECK: fabs 415 %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a) 416 ret %v4f32 %1 417 } 418 ; CHECK: test_v4f32.floor: 419 define %v4f32 @test_v4f32.floor(%v4f32 %a) { 420 ; CHECK: frintm.4s 421 %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a) 422 ret %v4f32 %1 423 } 424 ; CHECK: test_v4f32.ceil: 425 define %v4f32 @test_v4f32.ceil(%v4f32 %a) { 426 ; CHECK: frintp.4s 427 %1 = call %v4f32 @llvm.ceil.v4f32(%v4f32 %a) 428 ret %v4f32 %1 429 } 430 ; CHECK: test_v4f32.trunc: 431 define %v4f32 @test_v4f32.trunc(%v4f32 %a) { 432 ; CHECK: frintz.4s 433 %1 = call %v4f32 @llvm.trunc.v4f32(%v4f32 %a) 434 ret %v4f32 %1 435 } 436 ; CHECK: test_v4f32.rint: 437 define %v4f32 @test_v4f32.rint(%v4f32 %a) { 438 ; CHECK: frintx.4s 439 %1 = call %v4f32 @llvm.rint.v4f32(%v4f32 %a) 440 ret %v4f32 %1 441 } 442 ; CHECK: test_v4f32.nearbyint: 443 define %v4f32 @test_v4f32.nearbyint(%v4f32 %a) { 444 ; CHECK: frinti.4s 445 %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a) 446 ret %v4f32 %1 447 } 448 449 declare %v4f32 @llvm.sqrt.v4f32(%v4f32) #0 450 declare %v4f32 @llvm.powi.v4f32(%v4f32, i32) #0 451 declare %v4f32 @llvm.sin.v4f32(%v4f32) #0 452 declare %v4f32 @llvm.cos.v4f32(%v4f32) #0 453 declare %v4f32 @llvm.pow.v4f32(%v4f32, %v4f32) #0 454 declare %v4f32 @llvm.exp.v4f32(%v4f32) #0 455 declare %v4f32 @llvm.exp2.v4f32(%v4f32) #0 456 declare %v4f32 @llvm.log.v4f32(%v4f32) #0 457 declare %v4f32 @llvm.log10.v4f32(%v4f32) #0 458 declare %v4f32 @llvm.log2.v4f32(%v4f32) #0 459 declare %v4f32 @llvm.fma.v4f32(%v4f32, %v4f32, %v4f32) #0 460 declare %v4f32 @llvm.fabs.v4f32(%v4f32) #0 461 declare %v4f32 @llvm.floor.v4f32(%v4f32) #0 462 declare %v4f32 @llvm.ceil.v4f32(%v4f32) #0 463 declare %v4f32 @llvm.trunc.v4f32(%v4f32) #0 464 declare %v4f32 @llvm.rint.v4f32(%v4f32) #0 465 declare %v4f32 @llvm.nearbyint.v4f32(%v4f32) #0 466 467 ;;; Double vector 468 469 %v2f64 = type <2 x double> 470 ; CHECK: test_v2f64.sqrt: 471 define %v2f64 @test_v2f64.sqrt(%v2f64 %a) { 472 ; CHECK: fsqrt.2d 473 %1 = call %v2f64 @llvm.sqrt.v2f64(%v2f64 %a) 474 ret %v2f64 %1 475 } 476 ; CHECK: test_v2f64.powi: 477 define %v2f64 @test_v2f64.powi(%v2f64 %a, i32 %b) { 478 ; CHECK: pow 479 %1 = call %v2f64 @llvm.powi.v2f64(%v2f64 %a, i32 %b) 480 ret %v2f64 %1 481 } 482 ; CHECK: test_v2f64.sin: 483 define %v2f64 @test_v2f64.sin(%v2f64 %a) { 484 ; CHECK: sin 485 %1 = call %v2f64 @llvm.sin.v2f64(%v2f64 %a) 486 ret %v2f64 %1 487 } 488 ; CHECK: test_v2f64.cos: 489 define %v2f64 @test_v2f64.cos(%v2f64 %a) { 490 ; CHECK: cos 491 %1 = call %v2f64 @llvm.cos.v2f64(%v2f64 %a) 492 ret %v2f64 %1 493 } 494 ; CHECK: test_v2f64.pow: 495 define %v2f64 @test_v2f64.pow(%v2f64 %a, %v2f64 %b) { 496 ; CHECK: pow 497 %1 = call %v2f64 @llvm.pow.v2f64(%v2f64 %a, %v2f64 %b) 498 ret %v2f64 %1 499 } 500 ; CHECK: test_v2f64.exp: 501 define %v2f64 @test_v2f64.exp(%v2f64 %a) { 502 ; CHECK: exp 503 %1 = call %v2f64 @llvm.exp.v2f64(%v2f64 %a) 504 ret %v2f64 %1 505 } 506 ; CHECK: test_v2f64.exp2: 507 define %v2f64 @test_v2f64.exp2(%v2f64 %a) { 508 ; CHECK: exp 509 %1 = call %v2f64 @llvm.exp2.v2f64(%v2f64 %a) 510 ret %v2f64 %1 511 } 512 ; CHECK: test_v2f64.log: 513 define %v2f64 @test_v2f64.log(%v2f64 %a) { 514 ; CHECK: log 515 %1 = call %v2f64 @llvm.log.v2f64(%v2f64 %a) 516 ret %v2f64 %1 517 } 518 ; CHECK: test_v2f64.log10: 519 define %v2f64 @test_v2f64.log10(%v2f64 %a) { 520 ; CHECK: log 521 %1 = call %v2f64 @llvm.log10.v2f64(%v2f64 %a) 522 ret %v2f64 %1 523 } 524 ; CHECK: test_v2f64.log2: 525 define %v2f64 @test_v2f64.log2(%v2f64 %a) { 526 ; CHECK: log 527 %1 = call %v2f64 @llvm.log2.v2f64(%v2f64 %a) 528 ret %v2f64 %1 529 } 530 ; CHECK: test_v2f64.fma: 531 define %v2f64 @test_v2f64.fma(%v2f64 %a, %v2f64 %b, %v2f64 %c) { 532 ; CHECK: fma 533 %1 = call %v2f64 @llvm.fma.v2f64(%v2f64 %a, %v2f64 %b, %v2f64 %c) 534 ret %v2f64 %1 535 } 536 ; CHECK: test_v2f64.fabs: 537 define %v2f64 @test_v2f64.fabs(%v2f64 %a) { 538 ; CHECK: fabs 539 %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a) 540 ret %v2f64 %1 541 } 542 ; CHECK: test_v2f64.floor: 543 define %v2f64 @test_v2f64.floor(%v2f64 %a) { 544 ; CHECK: frintm.2d 545 %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a) 546 ret %v2f64 %1 547 } 548 ; CHECK: test_v2f64.ceil: 549 define %v2f64 @test_v2f64.ceil(%v2f64 %a) { 550 ; CHECK: frintp.2d 551 %1 = call %v2f64 @llvm.ceil.v2f64(%v2f64 %a) 552 ret %v2f64 %1 553 } 554 ; CHECK: test_v2f64.trunc: 555 define %v2f64 @test_v2f64.trunc(%v2f64 %a) { 556 ; CHECK: frintz.2d 557 %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a) 558 ret %v2f64 %1 559 } 560 ; CHECK: test_v2f64.rint: 561 define %v2f64 @test_v2f64.rint(%v2f64 %a) { 562 ; CHECK: frintx.2d 563 %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a) 564 ret %v2f64 %1 565 } 566 ; CHECK: test_v2f64.nearbyint: 567 define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) { 568 ; CHECK: frinti.2d 569 %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a) 570 ret %v2f64 %1 571 } 572 573 declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0 574 declare %v2f64 @llvm.powi.v2f64(%v2f64, i32) #0 575 declare %v2f64 @llvm.sin.v2f64(%v2f64) #0 576 declare %v2f64 @llvm.cos.v2f64(%v2f64) #0 577 declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0 578 declare %v2f64 @llvm.exp.v2f64(%v2f64) #0 579 declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0 580 declare %v2f64 @llvm.log.v2f64(%v2f64) #0 581 declare %v2f64 @llvm.log10.v2f64(%v2f64) #0 582 declare %v2f64 @llvm.log2.v2f64(%v2f64) #0 583 declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0 584 declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0 585 declare %v2f64 @llvm.floor.v2f64(%v2f64) #0 586 declare %v2f64 @llvm.ceil.v2f64(%v2f64) #0 587 declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0 588 declare %v2f64 @llvm.rint.v2f64(%v2f64) #0 589 declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0 590 591 attributes #0 = { nounwind readonly } 592