400 lines · plain
1; RUN: llc -mcpu=swift < %s | FileCheck %s2target 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 vectors6 7%v2f32 = type <2 x float>8; CHECK-LABEL: test_v2f32.sqrt:{{.*}}9define %v2f32 @test_v2f32.sqrt(%v2f32 %a) {10 ; CHECK: sqrt11 %1 = call %v2f32 @llvm.sqrt.v2f32(%v2f32 %a)12 ret %v2f32 %113}14; CHECK-LABEL: test_v2f32.powi:{{.*}}15define %v2f32 @test_v2f32.powi(%v2f32 %a, i32 %b) {16 ; CHECK: pow17 %1 = call %v2f32 @llvm.powi.v2f32.i32(%v2f32 %a, i32 %b)18 ret %v2f32 %119}20; CHECK-LABEL: test_v2f32.sin:{{.*}}21define %v2f32 @test_v2f32.sin(%v2f32 %a) {22 ; CHECK: sin23 %1 = call %v2f32 @llvm.sin.v2f32(%v2f32 %a)24 ret %v2f32 %125}26; CHECK-LABEL: test_v2f32.cos:{{.*}}27define %v2f32 @test_v2f32.cos(%v2f32 %a) {28 ; CHECK: cos29 %1 = call %v2f32 @llvm.cos.v2f32(%v2f32 %a)30 ret %v2f32 %131}32; CHECK-LABEL: test_v2f32.tan:{{.*}}33define %v2f32 @test_v2f32.tan(%v2f32 %a) {34 ; CHECK: tan35 %1 = call %v2f32 @llvm.tan.v2f32(%v2f32 %a)36 ret %v2f32 %137}38; CHECK-LABEL: test_v2f32.pow:{{.*}}39define %v2f32 @test_v2f32.pow(%v2f32 %a, %v2f32 %b) {40 ; CHECK: pow41 %1 = call %v2f32 @llvm.pow.v2f32(%v2f32 %a, %v2f32 %b)42 ret %v2f32 %143}44; CHECK-LABEL: test_v2f32.exp:{{.*}}45define %v2f32 @test_v2f32.exp(%v2f32 %a) {46 ; CHECK: exp47 %1 = call %v2f32 @llvm.exp.v2f32(%v2f32 %a)48 ret %v2f32 %149}50; CHECK-LABEL: test_v2f32.exp2:{{.*}}51define %v2f32 @test_v2f32.exp2(%v2f32 %a) {52 ; CHECK: exp53 %1 = call %v2f32 @llvm.exp2.v2f32(%v2f32 %a)54 ret %v2f32 %155}56; CHECK-LABEL: test_v2f32.log:{{.*}}57define %v2f32 @test_v2f32.log(%v2f32 %a) {58 ; CHECK: log59 %1 = call %v2f32 @llvm.log.v2f32(%v2f32 %a)60 ret %v2f32 %161}62; CHECK-LABEL: test_v2f32.log10:{{.*}}63define %v2f32 @test_v2f32.log10(%v2f32 %a) {64 ; CHECK: log65 %1 = call %v2f32 @llvm.log10.v2f32(%v2f32 %a)66 ret %v2f32 %167}68; CHECK-LABEL: test_v2f32.log2:{{.*}}69define %v2f32 @test_v2f32.log2(%v2f32 %a) {70 ; CHECK: log71 %1 = call %v2f32 @llvm.log2.v2f32(%v2f32 %a)72 ret %v2f32 %173}74; CHECK: test_v2f32.fma:{{.*}}75define %v2f32 @test_v2f32.fma(%v2f32 %a, %v2f32 %b, %v2f32 %c) {76 ; CHECK: fma77 %1 = call %v2f32 @llvm.fma.v2f32(%v2f32 %a, %v2f32 %b, %v2f32 %c)78 ret %v2f32 %179}80; CHECK-LABEL: test_v2f32.fabs:{{.*}}81define %v2f32 @test_v2f32.fabs(%v2f32 %a) {82 ; CHECK: vabs.f3283 %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a)84 ret %v2f32 %185}86; CHECK-LABEL: test_v2f32.floor:{{.*}}87define %v2f32 @test_v2f32.floor(%v2f32 %a) {88 ; CHECK: _floorf89 %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a)90 ret %v2f32 %191}92; CHECK-LABEL: test_v2f32.ceil:{{.*}}93define %v2f32 @test_v2f32.ceil(%v2f32 %a) {94 ; CHECK: _ceilf95 %1 = call %v2f32 @llvm.ceil.v2f32(%v2f32 %a)96 ret %v2f32 %197}98; CHECK-LABEL: test_v2f32.trunc:{{.*}}99define %v2f32 @test_v2f32.trunc(%v2f32 %a) {100 ; CHECK: trunc101 %1 = call %v2f32 @llvm.trunc.v2f32(%v2f32 %a)102 ret %v2f32 %1103}104; CHECK-LABEL: test_v2f32.rint:{{.*}}105define %v2f32 @test_v2f32.rint(%v2f32 %a) {106 ; CHECK: rint107 %1 = call %v2f32 @llvm.rint.v2f32(%v2f32 %a)108 ret %v2f32 %1109}110; CHECK-LABEL: test_v2f32.nearbyint:{{.*}}111define %v2f32 @test_v2f32.nearbyint(%v2f32 %a) {112 ; CHECK: nearbyint113 %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a)114 ret %v2f32 %1115}116 117declare %v2f32 @llvm.sqrt.v2f32(%v2f32) #0118declare %v2f32 @llvm.powi.v2f32.i32(%v2f32, i32) #0119declare %v2f32 @llvm.sin.v2f32(%v2f32) #0120declare %v2f32 @llvm.cos.v2f32(%v2f32) #0121declare %v2f32 @llvm.tan.v2f32(%v2f32) #0122declare %v2f32 @llvm.pow.v2f32(%v2f32, %v2f32) #0123declare %v2f32 @llvm.exp.v2f32(%v2f32) #0124declare %v2f32 @llvm.exp2.v2f32(%v2f32) #0125declare %v2f32 @llvm.log.v2f32(%v2f32) #0126declare %v2f32 @llvm.log10.v2f32(%v2f32) #0127declare %v2f32 @llvm.log2.v2f32(%v2f32) #0128declare %v2f32 @llvm.fma.v2f32(%v2f32, %v2f32, %v2f32) #0129declare %v2f32 @llvm.fabs.v2f32(%v2f32) #0130declare %v2f32 @llvm.floor.v2f32(%v2f32) #0131declare %v2f32 @llvm.ceil.v2f32(%v2f32) #0132declare %v2f32 @llvm.trunc.v2f32(%v2f32) #0133declare %v2f32 @llvm.rint.v2f32(%v2f32) #0134declare %v2f32 @llvm.nearbyint.v2f32(%v2f32) #0135 136;;;137 138%v4f32 = type <4 x float>139; CHECK-LABEL: test_v4f32.sqrt:{{.*}}140define %v4f32 @test_v4f32.sqrt(%v4f32 %a) {141 ; CHECK: sqrt142 %1 = call %v4f32 @llvm.sqrt.v4f32(%v4f32 %a)143 ret %v4f32 %1144}145; CHECK-LABEL: test_v4f32.powi:{{.*}}146define %v4f32 @test_v4f32.powi(%v4f32 %a, i32 %b) {147 ; CHECK: pow148 %1 = call %v4f32 @llvm.powi.v4f32.i32(%v4f32 %a, i32 %b)149 ret %v4f32 %1150}151; CHECK-LABEL: test_v4f32.sin:{{.*}}152define %v4f32 @test_v4f32.sin(%v4f32 %a) {153 ; CHECK: sin154 %1 = call %v4f32 @llvm.sin.v4f32(%v4f32 %a)155 ret %v4f32 %1156}157; CHECK-LABEL: test_v4f32.cos:{{.*}}158define %v4f32 @test_v4f32.cos(%v4f32 %a) {159 ; CHECK: cos160 %1 = call %v4f32 @llvm.cos.v4f32(%v4f32 %a)161 ret %v4f32 %1162}163; CHECK-LABEL: test_v4f32.tan:{{.*}}164define %v4f32 @test_v4f32.tan(%v4f32 %a) {165 ; CHECK: tan166 %1 = call %v4f32 @llvm.tan.v4f32(%v4f32 %a)167 ret %v4f32 %1168}169; CHECK-LABEL: test_v4f32.pow:{{.*}}170define %v4f32 @test_v4f32.pow(%v4f32 %a, %v4f32 %b) {171 ; CHECK: pow172 %1 = call %v4f32 @llvm.pow.v4f32(%v4f32 %a, %v4f32 %b)173 ret %v4f32 %1174}175; CHECK-LABEL: test_v4f32.exp:{{.*}}176define %v4f32 @test_v4f32.exp(%v4f32 %a) {177 ; CHECK: exp178 %1 = call %v4f32 @llvm.exp.v4f32(%v4f32 %a)179 ret %v4f32 %1180}181; CHECK-LABEL: test_v4f32.exp2:{{.*}}182define %v4f32 @test_v4f32.exp2(%v4f32 %a) {183 ; CHECK: exp184 %1 = call %v4f32 @llvm.exp2.v4f32(%v4f32 %a)185 ret %v4f32 %1186}187; CHECK-LABEL: test_v4f32.log:{{.*}}188define %v4f32 @test_v4f32.log(%v4f32 %a) {189 ; CHECK: log190 %1 = call %v4f32 @llvm.log.v4f32(%v4f32 %a)191 ret %v4f32 %1192}193; CHECK-LABEL: test_v4f32.log10:{{.*}}194define %v4f32 @test_v4f32.log10(%v4f32 %a) {195 ; CHECK: log196 %1 = call %v4f32 @llvm.log10.v4f32(%v4f32 %a)197 ret %v4f32 %1198}199; CHECK-LABEL: test_v4f32.log2:{{.*}}200define %v4f32 @test_v4f32.log2(%v4f32 %a) {201 ; CHECK: log202 %1 = call %v4f32 @llvm.log2.v4f32(%v4f32 %a)203 ret %v4f32 %1204}205; CHECK-LABEL: test_v4f32.fma:{{.*}}206define %v4f32 @test_v4f32.fma(%v4f32 %a, %v4f32 %b, %v4f32 %c) {207 ; CHECK: fma208 %1 = call %v4f32 @llvm.fma.v4f32(%v4f32 %a, %v4f32 %b, %v4f32 %c)209 ret %v4f32 %1210}211; CHECK-LABEL: test_v4f32.fabs:{{.*}}212define %v4f32 @test_v4f32.fabs(%v4f32 %a) {213 ; CHECK: vabs.f32214 %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a)215 ret %v4f32 %1216}217; CHECK-LABEL: test_v4f32.floor:{{.*}}218define %v4f32 @test_v4f32.floor(%v4f32 %a) {219 ; CHECK: floor220 %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a)221 ret %v4f32 %1222}223; CHECK-LABEL: test_v4f32.ceil:{{.*}}224define %v4f32 @test_v4f32.ceil(%v4f32 %a) {225 ; CHECK: _ceil226 %1 = call %v4f32 @llvm.ceil.v4f32(%v4f32 %a)227 ret %v4f32 %1228}229; CHECK-LABEL: test_v4f32.trunc:{{.*}}230define %v4f32 @test_v4f32.trunc(%v4f32 %a) {231 ; CHECK: trunc232 %1 = call %v4f32 @llvm.trunc.v4f32(%v4f32 %a)233 ret %v4f32 %1234}235; CHECK-LABEL: test_v4f32.rint:{{.*}}236define %v4f32 @test_v4f32.rint(%v4f32 %a) {237 ; CHECK: rint238 %1 = call %v4f32 @llvm.rint.v4f32(%v4f32 %a)239 ret %v4f32 %1240}241; CHECK-LABEL: test_v4f32.nearbyint:{{.*}}242define %v4f32 @test_v4f32.nearbyint(%v4f32 %a) {243 ; CHECK: nearbyint244 %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a)245 ret %v4f32 %1246}247 248declare %v4f32 @llvm.sqrt.v4f32(%v4f32) #0249declare %v4f32 @llvm.powi.v4f32.i32(%v4f32, i32) #0250declare %v4f32 @llvm.sin.v4f32(%v4f32) #0251declare %v4f32 @llvm.cos.v4f32(%v4f32) #0252declare %v4f32 @llvm.tan.v4f32(%v4f32) #0253declare %v4f32 @llvm.pow.v4f32(%v4f32, %v4f32) #0254declare %v4f32 @llvm.exp.v4f32(%v4f32) #0255declare %v4f32 @llvm.exp2.v4f32(%v4f32) #0256declare %v4f32 @llvm.log.v4f32(%v4f32) #0257declare %v4f32 @llvm.log10.v4f32(%v4f32) #0258declare %v4f32 @llvm.log2.v4f32(%v4f32) #0259declare %v4f32 @llvm.fma.v4f32(%v4f32, %v4f32, %v4f32) #0260declare %v4f32 @llvm.fabs.v4f32(%v4f32) #0261declare %v4f32 @llvm.floor.v4f32(%v4f32) #0262declare %v4f32 @llvm.ceil.v4f32(%v4f32) #0263declare %v4f32 @llvm.trunc.v4f32(%v4f32) #0264declare %v4f32 @llvm.rint.v4f32(%v4f32) #0265declare %v4f32 @llvm.nearbyint.v4f32(%v4f32) #0266 267;;; Double vector268 269%v2f64 = type <2 x double>270; CHECK-LABEL: test_v2f64.sqrt:{{.*}}271define %v2f64 @test_v2f64.sqrt(%v2f64 %a) {272 ; CHECK: sqrt273 %1 = call %v2f64 @llvm.sqrt.v2f64(%v2f64 %a)274 ret %v2f64 %1275}276; CHECK-LABEL: test_v2f64.powi:{{.*}}277define %v2f64 @test_v2f64.powi(%v2f64 %a, i32 %b) {278 ; CHECK: pow279 %1 = call %v2f64 @llvm.powi.v2f64.i32(%v2f64 %a, i32 %b)280 ret %v2f64 %1281}282; CHECK-LABEL: test_v2f64.sin:{{.*}}283define %v2f64 @test_v2f64.sin(%v2f64 %a) {284 ; CHECK: sin285 %1 = call %v2f64 @llvm.sin.v2f64(%v2f64 %a)286 ret %v2f64 %1287}288; CHECK-LABEL: test_v2f64.cos:{{.*}}289define %v2f64 @test_v2f64.cos(%v2f64 %a) {290 ; CHECK: cos291 %1 = call %v2f64 @llvm.cos.v2f64(%v2f64 %a)292 ret %v2f64 %1293}294; CHECK-LABEL: test_v2f64.tan:{{.*}}295define %v2f64 @test_v2f64.tan(%v2f64 %a) {296 ; CHECK: tan297 %1 = call %v2f64 @llvm.tan.v2f64(%v2f64 %a)298 ret %v2f64 %1299}300; CHECK-LABEL: test_v2f64.pow:{{.*}}301define %v2f64 @test_v2f64.pow(%v2f64 %a, %v2f64 %b) {302 ; CHECK: pow303 %1 = call %v2f64 @llvm.pow.v2f64(%v2f64 %a, %v2f64 %b)304 ret %v2f64 %1305}306; CHECK-LABEL: test_v2f64.exp:{{.*}}307define %v2f64 @test_v2f64.exp(%v2f64 %a) {308 ; CHECK: exp309 %1 = call %v2f64 @llvm.exp.v2f64(%v2f64 %a)310 ret %v2f64 %1311}312; CHECK-LABEL: test_v2f64.exp2:{{.*}}313define %v2f64 @test_v2f64.exp2(%v2f64 %a) {314 ; CHECK: exp315 %1 = call %v2f64 @llvm.exp2.v2f64(%v2f64 %a)316 ret %v2f64 %1317}318; CHECK-LABEL: test_v2f64.log:{{.*}}319define %v2f64 @test_v2f64.log(%v2f64 %a) {320 ; CHECK: log321 %1 = call %v2f64 @llvm.log.v2f64(%v2f64 %a)322 ret %v2f64 %1323}324; CHECK-LABEL: test_v2f64.log10:{{.*}}325define %v2f64 @test_v2f64.log10(%v2f64 %a) {326 ; CHECK: log327 %1 = call %v2f64 @llvm.log10.v2f64(%v2f64 %a)328 ret %v2f64 %1329}330; CHECK-LABEL: test_v2f64.log2:{{.*}}331define %v2f64 @test_v2f64.log2(%v2f64 %a) {332 ; CHECK: log333 %1 = call %v2f64 @llvm.log2.v2f64(%v2f64 %a)334 ret %v2f64 %1335}336; CHECK-LABEL: test_v2f64.fma:{{.*}}337define %v2f64 @test_v2f64.fma(%v2f64 %a, %v2f64 %b, %v2f64 %c) {338 ; CHECK: fma339 %1 = call %v2f64 @llvm.fma.v2f64(%v2f64 %a, %v2f64 %b, %v2f64 %c)340 ret %v2f64 %1341}342; CHECK-LABEL: test_v2f64.fabs:{{.*}}343define %v2f64 @test_v2f64.fabs(%v2f64 %a) {344 ; CHECK: bfc {{r[1,3]}}, #31, #1345 ; CHECK: bfc {{r[1,3]}}, #31, #1346 %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a)347 ret %v2f64 %1348}349; CHECK-LABEL: test_v2f64.floor:{{.*}}350define %v2f64 @test_v2f64.floor(%v2f64 %a) {351 ; CHECK: floor352 %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a)353 ret %v2f64 %1354}355; CHECK-LABEL: test_v2f64.ceil:{{.*}}356define %v2f64 @test_v2f64.ceil(%v2f64 %a) {357 ; CHECK: _ceil358 %1 = call %v2f64 @llvm.ceil.v2f64(%v2f64 %a)359 ret %v2f64 %1360}361; CHECK-LABEL: test_v2f64.trunc:{{.*}}362define %v2f64 @test_v2f64.trunc(%v2f64 %a) {363 ; CHECK: trunc364 %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a)365 ret %v2f64 %1366}367; CHECK-LABEL: test_v2f64.rint:{{.*}}368define %v2f64 @test_v2f64.rint(%v2f64 %a) {369 ; CHECK: rint370 %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a)371 ret %v2f64 %1372}373; CHECK-LABEL: test_v2f64.nearbyint:{{.*}}374define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) {375 ; CHECK: nearbyint376 %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a)377 ret %v2f64 %1378}379 380declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0381declare %v2f64 @llvm.powi.v2f64.i32(%v2f64, i32) #0382declare %v2f64 @llvm.sin.v2f64(%v2f64) #0383declare %v2f64 @llvm.cos.v2f64(%v2f64) #0384declare %v2f64 @llvm.tan.v2f64(%v2f64) #0385declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0386declare %v2f64 @llvm.exp.v2f64(%v2f64) #0387declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0388declare %v2f64 @llvm.log.v2f64(%v2f64) #0389declare %v2f64 @llvm.log10.v2f64(%v2f64) #0390declare %v2f64 @llvm.log2.v2f64(%v2f64) #0391declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0392declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0393declare %v2f64 @llvm.floor.v2f64(%v2f64) #0394declare %v2f64 @llvm.ceil.v2f64(%v2f64) #0395declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0396declare %v2f64 @llvm.rint.v2f64(%v2f64) #0397declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0398 399attributes #0 = { nounwind readonly }400