1; RUN: llc -march=arm64 -aarch64-neon-syntax=apple < %s | FileCheck %s 2 3;;; Float vectors 4 5%v2f32 = type <2 x float> 6; CHECK: test_v2f32.sqrt: 7define %v2f32 @test_v2f32.sqrt(%v2f32 %a) { 8 ; CHECK: fsqrt.2s 9 %1 = call %v2f32 @llvm.sqrt.v2f32(%v2f32 %a) 10 ret %v2f32 %1 11} 12; CHECK: test_v2f32.powi: 13define %v2f32 @test_v2f32.powi(%v2f32 %a, i32 %b) { 14 ; CHECK: pow 15 %1 = call %v2f32 @llvm.powi.v2f32(%v2f32 %a, i32 %b) 16 ret %v2f32 %1 17} 18; CHECK: test_v2f32.sin: 19define %v2f32 @test_v2f32.sin(%v2f32 %a) { 20 ; CHECK: sin 21 %1 = call %v2f32 @llvm.sin.v2f32(%v2f32 %a) 22 ret %v2f32 %1 23} 24; CHECK: test_v2f32.cos: 25define %v2f32 @test_v2f32.cos(%v2f32 %a) { 26 ; CHECK: cos 27 %1 = call %v2f32 @llvm.cos.v2f32(%v2f32 %a) 28 ret %v2f32 %1 29} 30; CHECK: test_v2f32.pow: 31define %v2f32 @test_v2f32.pow(%v2f32 %a, %v2f32 %b) { 32 ; CHECK: pow 33 %1 = call %v2f32 @llvm.pow.v2f32(%v2f32 %a, %v2f32 %b) 34 ret %v2f32 %1 35} 36; CHECK: test_v2f32.exp: 37define %v2f32 @test_v2f32.exp(%v2f32 %a) { 38 ; CHECK: exp 39 %1 = call %v2f32 @llvm.exp.v2f32(%v2f32 %a) 40 ret %v2f32 %1 41} 42; CHECK: test_v2f32.exp2: 43define %v2f32 @test_v2f32.exp2(%v2f32 %a) { 44 ; CHECK: exp 45 %1 = call %v2f32 @llvm.exp2.v2f32(%v2f32 %a) 46 ret %v2f32 %1 47} 48; CHECK: test_v2f32.log: 49define %v2f32 @test_v2f32.log(%v2f32 %a) { 50 ; CHECK: log 51 %1 = call %v2f32 @llvm.log.v2f32(%v2f32 %a) 52 ret %v2f32 %1 53} 54; CHECK: test_v2f32.log10: 55define %v2f32 @test_v2f32.log10(%v2f32 %a) { 56 ; CHECK: log 57 %1 = call %v2f32 @llvm.log10.v2f32(%v2f32 %a) 58 ret %v2f32 %1 59} 60; CHECK: test_v2f32.log2: 61define %v2f32 @test_v2f32.log2(%v2f32 %a) { 62 ; CHECK: log 63 %1 = call %v2f32 @llvm.log2.v2f32(%v2f32 %a) 64 ret %v2f32 %1 65} 66; CHECK: test_v2f32.fma: 67define %v2f32 @test_v2f32.fma(%v2f32 %a, %v2f32 %b, %v2f32 %c) { 68 ; CHECK: fma 69 %1 = call %v2f32 @llvm.fma.v2f32(%v2f32 %a, %v2f32 %b, %v2f32 %c) 70 ret %v2f32 %1 71} 72; CHECK: test_v2f32.fabs: 73define %v2f32 @test_v2f32.fabs(%v2f32 %a) { 74 ; CHECK: fabs 75 %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a) 76 ret %v2f32 %1 77} 78; CHECK: test_v2f32.floor: 79define %v2f32 @test_v2f32.floor(%v2f32 %a) { 80 ; CHECK: frintm.2s 81 %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a) 82 ret %v2f32 %1 83} 84; CHECK: test_v2f32.ceil: 85define %v2f32 @test_v2f32.ceil(%v2f32 %a) { 86 ; CHECK: frintp.2s 87 %1 = call %v2f32 @llvm.ceil.v2f32(%v2f32 %a) 88 ret %v2f32 %1 89} 90; CHECK: test_v2f32.trunc: 91define %v2f32 @test_v2f32.trunc(%v2f32 %a) { 92 ; CHECK: frintz.2s 93 %1 = call %v2f32 @llvm.trunc.v2f32(%v2f32 %a) 94 ret %v2f32 %1 95} 96; CHECK: test_v2f32.rint: 97define %v2f32 @test_v2f32.rint(%v2f32 %a) { 98 ; CHECK: frintx.2s 99 %1 = call %v2f32 @llvm.rint.v2f32(%v2f32 %a) 100 ret %v2f32 %1 101} 102; CHECK: test_v2f32.nearbyint: 103define %v2f32 @test_v2f32.nearbyint(%v2f32 %a) { 104 ; CHECK: frinti.2s 105 %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a) 106 ret %v2f32 %1 107} 108 109declare %v2f32 @llvm.sqrt.v2f32(%v2f32) #0 110declare %v2f32 @llvm.powi.v2f32(%v2f32, i32) #0 111declare %v2f32 @llvm.sin.v2f32(%v2f32) #0 112declare %v2f32 @llvm.cos.v2f32(%v2f32) #0 113declare %v2f32 @llvm.pow.v2f32(%v2f32, %v2f32) #0 114declare %v2f32 @llvm.exp.v2f32(%v2f32) #0 115declare %v2f32 @llvm.exp2.v2f32(%v2f32) #0 116declare %v2f32 @llvm.log.v2f32(%v2f32) #0 117declare %v2f32 @llvm.log10.v2f32(%v2f32) #0 118declare %v2f32 @llvm.log2.v2f32(%v2f32) #0 119declare %v2f32 @llvm.fma.v2f32(%v2f32, %v2f32, %v2f32) #0 120declare %v2f32 @llvm.fabs.v2f32(%v2f32) #0 121declare %v2f32 @llvm.floor.v2f32(%v2f32) #0 122declare %v2f32 @llvm.ceil.v2f32(%v2f32) #0 123declare %v2f32 @llvm.trunc.v2f32(%v2f32) #0 124declare %v2f32 @llvm.rint.v2f32(%v2f32) #0 125declare %v2f32 @llvm.nearbyint.v2f32(%v2f32) #0 126 127;;; 128 129%v4f32 = type <4 x float> 130; CHECK: test_v4f32.sqrt: 131define %v4f32 @test_v4f32.sqrt(%v4f32 %a) { 132 ; CHECK: fsqrt.4s 133 %1 = call %v4f32 @llvm.sqrt.v4f32(%v4f32 %a) 134 ret %v4f32 %1 135} 136; CHECK: test_v4f32.powi: 137define %v4f32 @test_v4f32.powi(%v4f32 %a, i32 %b) { 138 ; CHECK: pow 139 %1 = call %v4f32 @llvm.powi.v4f32(%v4f32 %a, i32 %b) 140 ret %v4f32 %1 141} 142; CHECK: test_v4f32.sin: 143define %v4f32 @test_v4f32.sin(%v4f32 %a) { 144 ; CHECK: sin 145 %1 = call %v4f32 @llvm.sin.v4f32(%v4f32 %a) 146 ret %v4f32 %1 147} 148; CHECK: test_v4f32.cos: 149define %v4f32 @test_v4f32.cos(%v4f32 %a) { 150 ; CHECK: cos 151 %1 = call %v4f32 @llvm.cos.v4f32(%v4f32 %a) 152 ret %v4f32 %1 153} 154; CHECK: test_v4f32.pow: 155define %v4f32 @test_v4f32.pow(%v4f32 %a, %v4f32 %b) { 156 ; CHECK: pow 157 %1 = call %v4f32 @llvm.pow.v4f32(%v4f32 %a, %v4f32 %b) 158 ret %v4f32 %1 159} 160; CHECK: test_v4f32.exp: 161define %v4f32 @test_v4f32.exp(%v4f32 %a) { 162 ; CHECK: exp 163 %1 = call %v4f32 @llvm.exp.v4f32(%v4f32 %a) 164 ret %v4f32 %1 165} 166; CHECK: test_v4f32.exp2: 167define %v4f32 @test_v4f32.exp2(%v4f32 %a) { 168 ; CHECK: exp 169 %1 = call %v4f32 @llvm.exp2.v4f32(%v4f32 %a) 170 ret %v4f32 %1 171} 172; CHECK: test_v4f32.log: 173define %v4f32 @test_v4f32.log(%v4f32 %a) { 174 ; CHECK: log 175 %1 = call %v4f32 @llvm.log.v4f32(%v4f32 %a) 176 ret %v4f32 %1 177} 178; CHECK: test_v4f32.log10: 179define %v4f32 @test_v4f32.log10(%v4f32 %a) { 180 ; CHECK: log 181 %1 = call %v4f32 @llvm.log10.v4f32(%v4f32 %a) 182 ret %v4f32 %1 183} 184; CHECK: test_v4f32.log2: 185define %v4f32 @test_v4f32.log2(%v4f32 %a) { 186 ; CHECK: log 187 %1 = call %v4f32 @llvm.log2.v4f32(%v4f32 %a) 188 ret %v4f32 %1 189} 190; CHECK: test_v4f32.fma: 191define %v4f32 @test_v4f32.fma(%v4f32 %a, %v4f32 %b, %v4f32 %c) { 192 ; CHECK: fma 193 %1 = call %v4f32 @llvm.fma.v4f32(%v4f32 %a, %v4f32 %b, %v4f32 %c) 194 ret %v4f32 %1 195} 196; CHECK: test_v4f32.fabs: 197define %v4f32 @test_v4f32.fabs(%v4f32 %a) { 198 ; CHECK: fabs 199 %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a) 200 ret %v4f32 %1 201} 202; CHECK: test_v4f32.floor: 203define %v4f32 @test_v4f32.floor(%v4f32 %a) { 204 ; CHECK: frintm.4s 205 %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a) 206 ret %v4f32 %1 207} 208; CHECK: test_v4f32.ceil: 209define %v4f32 @test_v4f32.ceil(%v4f32 %a) { 210 ; CHECK: frintp.4s 211 %1 = call %v4f32 @llvm.ceil.v4f32(%v4f32 %a) 212 ret %v4f32 %1 213} 214; CHECK: test_v4f32.trunc: 215define %v4f32 @test_v4f32.trunc(%v4f32 %a) { 216 ; CHECK: frintz.4s 217 %1 = call %v4f32 @llvm.trunc.v4f32(%v4f32 %a) 218 ret %v4f32 %1 219} 220; CHECK: test_v4f32.rint: 221define %v4f32 @test_v4f32.rint(%v4f32 %a) { 222 ; CHECK: frintx.4s 223 %1 = call %v4f32 @llvm.rint.v4f32(%v4f32 %a) 224 ret %v4f32 %1 225} 226; CHECK: test_v4f32.nearbyint: 227define %v4f32 @test_v4f32.nearbyint(%v4f32 %a) { 228 ; CHECK: frinti.4s 229 %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a) 230 ret %v4f32 %1 231} 232 233declare %v4f32 @llvm.sqrt.v4f32(%v4f32) #0 234declare %v4f32 @llvm.powi.v4f32(%v4f32, i32) #0 235declare %v4f32 @llvm.sin.v4f32(%v4f32) #0 236declare %v4f32 @llvm.cos.v4f32(%v4f32) #0 237declare %v4f32 @llvm.pow.v4f32(%v4f32, %v4f32) #0 238declare %v4f32 @llvm.exp.v4f32(%v4f32) #0 239declare %v4f32 @llvm.exp2.v4f32(%v4f32) #0 240declare %v4f32 @llvm.log.v4f32(%v4f32) #0 241declare %v4f32 @llvm.log10.v4f32(%v4f32) #0 242declare %v4f32 @llvm.log2.v4f32(%v4f32) #0 243declare %v4f32 @llvm.fma.v4f32(%v4f32, %v4f32, %v4f32) #0 244declare %v4f32 @llvm.fabs.v4f32(%v4f32) #0 245declare %v4f32 @llvm.floor.v4f32(%v4f32) #0 246declare %v4f32 @llvm.ceil.v4f32(%v4f32) #0 247declare %v4f32 @llvm.trunc.v4f32(%v4f32) #0 248declare %v4f32 @llvm.rint.v4f32(%v4f32) #0 249declare %v4f32 @llvm.nearbyint.v4f32(%v4f32) #0 250 251;;; Double vector 252 253%v2f64 = type <2 x double> 254; CHECK: test_v2f64.sqrt: 255define %v2f64 @test_v2f64.sqrt(%v2f64 %a) { 256 ; CHECK: fsqrt.2d 257 %1 = call %v2f64 @llvm.sqrt.v2f64(%v2f64 %a) 258 ret %v2f64 %1 259} 260; CHECK: test_v2f64.powi: 261define %v2f64 @test_v2f64.powi(%v2f64 %a, i32 %b) { 262 ; CHECK: pow 263 %1 = call %v2f64 @llvm.powi.v2f64(%v2f64 %a, i32 %b) 264 ret %v2f64 %1 265} 266; CHECK: test_v2f64.sin: 267define %v2f64 @test_v2f64.sin(%v2f64 %a) { 268 ; CHECK: sin 269 %1 = call %v2f64 @llvm.sin.v2f64(%v2f64 %a) 270 ret %v2f64 %1 271} 272; CHECK: test_v2f64.cos: 273define %v2f64 @test_v2f64.cos(%v2f64 %a) { 274 ; CHECK: cos 275 %1 = call %v2f64 @llvm.cos.v2f64(%v2f64 %a) 276 ret %v2f64 %1 277} 278; CHECK: test_v2f64.pow: 279define %v2f64 @test_v2f64.pow(%v2f64 %a, %v2f64 %b) { 280 ; CHECK: pow 281 %1 = call %v2f64 @llvm.pow.v2f64(%v2f64 %a, %v2f64 %b) 282 ret %v2f64 %1 283} 284; CHECK: test_v2f64.exp: 285define %v2f64 @test_v2f64.exp(%v2f64 %a) { 286 ; CHECK: exp 287 %1 = call %v2f64 @llvm.exp.v2f64(%v2f64 %a) 288 ret %v2f64 %1 289} 290; CHECK: test_v2f64.exp2: 291define %v2f64 @test_v2f64.exp2(%v2f64 %a) { 292 ; CHECK: exp 293 %1 = call %v2f64 @llvm.exp2.v2f64(%v2f64 %a) 294 ret %v2f64 %1 295} 296; CHECK: test_v2f64.log: 297define %v2f64 @test_v2f64.log(%v2f64 %a) { 298 ; CHECK: log 299 %1 = call %v2f64 @llvm.log.v2f64(%v2f64 %a) 300 ret %v2f64 %1 301} 302; CHECK: test_v2f64.log10: 303define %v2f64 @test_v2f64.log10(%v2f64 %a) { 304 ; CHECK: log 305 %1 = call %v2f64 @llvm.log10.v2f64(%v2f64 %a) 306 ret %v2f64 %1 307} 308; CHECK: test_v2f64.log2: 309define %v2f64 @test_v2f64.log2(%v2f64 %a) { 310 ; CHECK: log 311 %1 = call %v2f64 @llvm.log2.v2f64(%v2f64 %a) 312 ret %v2f64 %1 313} 314; CHECK: test_v2f64.fma: 315define %v2f64 @test_v2f64.fma(%v2f64 %a, %v2f64 %b, %v2f64 %c) { 316 ; CHECK: fma 317 %1 = call %v2f64 @llvm.fma.v2f64(%v2f64 %a, %v2f64 %b, %v2f64 %c) 318 ret %v2f64 %1 319} 320; CHECK: test_v2f64.fabs: 321define %v2f64 @test_v2f64.fabs(%v2f64 %a) { 322 ; CHECK: fabs 323 %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a) 324 ret %v2f64 %1 325} 326; CHECK: test_v2f64.floor: 327define %v2f64 @test_v2f64.floor(%v2f64 %a) { 328 ; CHECK: frintm.2d 329 %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a) 330 ret %v2f64 %1 331} 332; CHECK: test_v2f64.ceil: 333define %v2f64 @test_v2f64.ceil(%v2f64 %a) { 334 ; CHECK: frintp.2d 335 %1 = call %v2f64 @llvm.ceil.v2f64(%v2f64 %a) 336 ret %v2f64 %1 337} 338; CHECK: test_v2f64.trunc: 339define %v2f64 @test_v2f64.trunc(%v2f64 %a) { 340 ; CHECK: frintz.2d 341 %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a) 342 ret %v2f64 %1 343} 344; CHECK: test_v2f64.rint: 345define %v2f64 @test_v2f64.rint(%v2f64 %a) { 346 ; CHECK: frintx.2d 347 %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a) 348 ret %v2f64 %1 349} 350; CHECK: test_v2f64.nearbyint: 351define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) { 352 ; CHECK: frinti.2d 353 %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a) 354 ret %v2f64 %1 355} 356 357declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0 358declare %v2f64 @llvm.powi.v2f64(%v2f64, i32) #0 359declare %v2f64 @llvm.sin.v2f64(%v2f64) #0 360declare %v2f64 @llvm.cos.v2f64(%v2f64) #0 361declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0 362declare %v2f64 @llvm.exp.v2f64(%v2f64) #0 363declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0 364declare %v2f64 @llvm.log.v2f64(%v2f64) #0 365declare %v2f64 @llvm.log10.v2f64(%v2f64) #0 366declare %v2f64 @llvm.log2.v2f64(%v2f64) #0 367declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0 368declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0 369declare %v2f64 @llvm.floor.v2f64(%v2f64) #0 370declare %v2f64 @llvm.ceil.v2f64(%v2f64) #0 371declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0 372declare %v2f64 @llvm.rint.v2f64(%v2f64) #0 373declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0 374 375attributes #0 = { nounwind readonly } 376