1 ; RUN: llc -mcpu=swift -march=arm < %s | FileCheck %s 2 target 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" 3 target triple = "thumbv7-apple-ios6.1.0" 4 5 ;;; Float vectors 6 7 %v2f32 = type <2 x float> 8 ; CHECK: test_v2f32.sqrt: 9 define %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: 15 define %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: 21 define %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: 27 define %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: 33 define %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: 39 define %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: 45 define %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: 51 define %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: 57 define %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: 63 define %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: 69 define %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: 75 define %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: 81 define %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: 87 define %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: 93 define %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: 99 define %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: 105 define %v2f32 @test_v2f32.nearbyint(%v2f32 %a) { 106 ; CHECK: nearbyint 107 %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a) 108 ret %v2f32 %1 109 } 110 111 declare %v2f32 @llvm.sqrt.v2f32(%v2f32) #0 112 declare %v2f32 @llvm.powi.v2f32(%v2f32, i32) #0 113 declare %v2f32 @llvm.sin.v2f32(%v2f32) #0 114 declare %v2f32 @llvm.cos.v2f32(%v2f32) #0 115 declare %v2f32 @llvm.pow.v2f32(%v2f32, %v2f32) #0 116 declare %v2f32 @llvm.exp.v2f32(%v2f32) #0 117 declare %v2f32 @llvm.exp2.v2f32(%v2f32) #0 118 declare %v2f32 @llvm.log.v2f32(%v2f32) #0 119 declare %v2f32 @llvm.log10.v2f32(%v2f32) #0 120 declare %v2f32 @llvm.log2.v2f32(%v2f32) #0 121 declare %v2f32 @llvm.fma.v2f32(%v2f32, %v2f32, %v2f32) #0 122 declare %v2f32 @llvm.fabs.v2f32(%v2f32) #0 123 declare %v2f32 @llvm.floor.v2f32(%v2f32) #0 124 declare %v2f32 @llvm.fceil.v2f32(%v2f32) #0 125 declare %v2f32 @llvm.trunc.v2f32(%v2f32) #0 126 declare %v2f32 @llvm.rint.v2f32(%v2f32) #0 127 declare %v2f32 @llvm.nearbyint.v2f32(%v2f32) #0 128 129 ;;; 130 131 %v4f32 = type <4 x float> 132 ; CHECK: test_v4f32.sqrt: 133 define %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: 139 define %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: 145 define %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: 151 define %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: 157 define %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: 163 define %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: 169 define %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: 175 define %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: 181 define %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: 187 define %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: 193 define %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: 199 define %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: 205 define %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: 211 define %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: 217 define %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: 223 define %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: 229 define %v4f32 @test_v4f32.nearbyint(%v4f32 %a) { 230 ; CHECK: nearbyint 231 %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a) 232 ret %v4f32 %1 233 } 234 235 declare %v4f32 @llvm.sqrt.v4f32(%v4f32) #0 236 declare %v4f32 @llvm.powi.v4f32(%v4f32, i32) #0 237 declare %v4f32 @llvm.sin.v4f32(%v4f32) #0 238 declare %v4f32 @llvm.cos.v4f32(%v4f32) #0 239 declare %v4f32 @llvm.pow.v4f32(%v4f32, %v4f32) #0 240 declare %v4f32 @llvm.exp.v4f32(%v4f32) #0 241 declare %v4f32 @llvm.exp2.v4f32(%v4f32) #0 242 declare %v4f32 @llvm.log.v4f32(%v4f32) #0 243 declare %v4f32 @llvm.log10.v4f32(%v4f32) #0 244 declare %v4f32 @llvm.log2.v4f32(%v4f32) #0 245 declare %v4f32 @llvm.fma.v4f32(%v4f32, %v4f32, %v4f32) #0 246 declare %v4f32 @llvm.fabs.v4f32(%v4f32) #0 247 declare %v4f32 @llvm.floor.v4f32(%v4f32) #0 248 declare %v4f32 @llvm.fceil.v4f32(%v4f32) #0 249 declare %v4f32 @llvm.trunc.v4f32(%v4f32) #0 250 declare %v4f32 @llvm.rint.v4f32(%v4f32) #0 251 declare %v4f32 @llvm.nearbyint.v4f32(%v4f32) #0 252 253 ;;; Double vector 254 255 %v2f64 = type <2 x double> 256 ; CHECK: test_v2f64.sqrt: 257 define %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: 263 define %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: 269 define %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: 275 define %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: 281 define %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: 287 define %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: 293 define %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: 299 define %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: 305 define %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: 311 define %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: 317 define %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: 323 define %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: 329 define %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: 335 define %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: 341 define %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: 347 define %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: 353 define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) { 354 ; CHECK: nearbyint 355 %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a) 356 ret %v2f64 %1 357 } 358 359 declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0 360 declare %v2f64 @llvm.powi.v2f64(%v2f64, i32) #0 361 declare %v2f64 @llvm.sin.v2f64(%v2f64) #0 362 declare %v2f64 @llvm.cos.v2f64(%v2f64) #0 363 declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0 364 declare %v2f64 @llvm.exp.v2f64(%v2f64) #0 365 declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0 366 declare %v2f64 @llvm.log.v2f64(%v2f64) #0 367 declare %v2f64 @llvm.log10.v2f64(%v2f64) #0 368 declare %v2f64 @llvm.log2.v2f64(%v2f64) #0 369 declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0 370 declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0 371 declare %v2f64 @llvm.floor.v2f64(%v2f64) #0 372 declare %v2f64 @llvm.fceil.v2f64(%v2f64) #0 373 declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0 374 declare %v2f64 @llvm.rint.v2f64(%v2f64) #0 375 declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0 376 377 attributes #0 = { nounwind readonly } 378