1; RUN: llc -mcpu=swift < %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 = "arm-apple-ios6.1.0" 4 5;;; Float vectors 6 7%v2f32 = type <2 x float> 8; CHECK-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: test_v2f32.fabs:{{.*}} 75define %v2f32 @test_v2f32.fabs(%v2f32 %a) { 76 ; CHECK: vabs.f32 77 %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a) 78 ret %v2f32 %1 79} 80; CHECK-LABEL: test_v2f32.floor:{{.*}} 81define %v2f32 @test_v2f32.floor(%v2f32 %a) { 82 ; CHECK: _floorf 83 %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a) 84 ret %v2f32 %1 85} 86; CHECK-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: test_v4f32.fabs:{{.*}} 199define %v4f32 @test_v4f32.fabs(%v4f32 %a) { 200 ; CHECK: vabs.f32 201 %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a) 202 ret %v4f32 %1 203} 204; CHECK-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: test_v2f64.fabs:{{.*}} 323define %v2f64 @test_v2f64.fabs(%v2f64 %a) { 324 ; CHECK: bfc {{r[1,3]}}, #31, #1 325 ; CHECK: bfc {{r[1,3]}}, #31, #1 326 %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a) 327 ret %v2f64 %1 328} 329; CHECK-LABEL: test_v2f64.floor:{{.*}} 330define %v2f64 @test_v2f64.floor(%v2f64 %a) { 331 ; CHECK: floor 332 %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a) 333 ret %v2f64 %1 334} 335; CHECK-LABEL: test_v2f64.fceil:{{.*}} 336define %v2f64 @test_v2f64.fceil(%v2f64 %a) { 337 ; CHECK: ceil 338 %1 = call %v2f64 @llvm.fceil.v2f64(%v2f64 %a) 339 ret %v2f64 %1 340} 341; CHECK-LABEL: test_v2f64.trunc:{{.*}} 342define %v2f64 @test_v2f64.trunc(%v2f64 %a) { 343 ; CHECK: trunc 344 %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a) 345 ret %v2f64 %1 346} 347; CHECK-LABEL: test_v2f64.rint:{{.*}} 348define %v2f64 @test_v2f64.rint(%v2f64 %a) { 349 ; CHECK: rint 350 %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a) 351 ret %v2f64 %1 352} 353; CHECK-LABEL: test_v2f64.nearbyint:{{.*}} 354define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) { 355 ; CHECK: nearbyint 356 %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a) 357 ret %v2f64 %1 358} 359 360declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0 361declare %v2f64 @llvm.powi.v2f64(%v2f64, i32) #0 362declare %v2f64 @llvm.sin.v2f64(%v2f64) #0 363declare %v2f64 @llvm.cos.v2f64(%v2f64) #0 364declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0 365declare %v2f64 @llvm.exp.v2f64(%v2f64) #0 366declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0 367declare %v2f64 @llvm.log.v2f64(%v2f64) #0 368declare %v2f64 @llvm.log10.v2f64(%v2f64) #0 369declare %v2f64 @llvm.log2.v2f64(%v2f64) #0 370declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0 371declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0 372declare %v2f64 @llvm.floor.v2f64(%v2f64) #0 373declare %v2f64 @llvm.fceil.v2f64(%v2f64) #0 374declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0 375declare %v2f64 @llvm.rint.v2f64(%v2f64) #0 376declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0 377 378attributes #0 = { nounwind readonly } 379