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