brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · b6ebeaa Raw
365 lines · plain
1; RUN: llc -mtriple=arm-eabi -float-abi=soft -mcpu=cortex-a9 %s -o - | FileCheck %s2 3@A = global <4 x float> <float 0., float 1., float 2., float 3.>4 5define void @test_sqrt(ptr %X) nounwind {6 7; CHECK-LABEL: test_sqrt:8 9; CHECK:      movw    r1, :lower16:{{.*}}10; CHECK:      movt    r1, :upper16:{{.*}}11; CHECK:      vld1.64 {{.*}}, [r1:128]12; CHECK:      vsqrt.f32       {{s[0-9]+}}, {{s[0-9]+}}13; CHECK:      vsqrt.f32       {{s[0-9]+}}, {{s[0-9]+}}14; CHECK:      vsqrt.f32       {{s[0-9]+}}, {{s[0-9]+}}15; CHECK:      vsqrt.f32       {{s[0-9]+}}, {{s[0-9]+}}16; CHECK:      vst1.64  {{.*}}17 18L.entry:19  %0 = load <4 x float>, ptr @A, align 1620  %1 = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %0)21  store <4 x float> %1, ptr %X, align 1622  ret void23}24 25declare <4 x float> @llvm.sqrt.v4f32(<4 x float>) nounwind readonly26 27 28define void @test_cos(ptr %X) nounwind {29 30; CHECK-LABEL: test_cos:31 32; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}33; CHECK:      movt  [[reg0]], :upper16:{{.*}}34; CHECK:      vld1.6435 36; CHECK:      {{v?mov(.32)?}}  r0,37; CHECK:      bl  {{.*}}cosf38 39; CHECK:      {{v?mov(.32)?}}  r0,40; CHECK:      bl  {{.*}}cosf41 42; CHECK:      {{v?mov(.32)?}}  r0,43; CHECK:      bl  {{.*}}cosf44 45; CHECK:      {{v?mov(.32)?}}  r0,46; CHECK:      bl  {{.*}}cosf47 48; CHECK:      vst1.6449 50L.entry:51  %0 = load <4 x float>, ptr @A, align 1652  %1 = call <4 x float> @llvm.cos.v4f32(<4 x float> %0)53  store <4 x float> %1, ptr %X, align 1654  ret void55}56 57declare <4 x float> @llvm.cos.v4f32(<4 x float>) nounwind readonly58 59define void @test_tan(ptr %X) nounwind {60 61; CHECK-LABEL: test_tan:62 63; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}64; CHECK:      movt  [[reg0]], :upper16:{{.*}}65; CHECK:      vld1.6466 67; CHECK:      {{v?mov(.32)?}}  r0,68; CHECK:      bl  {{.*}}tanf69 70; CHECK:      {{v?mov(.32)?}}  r0,71; CHECK:      bl  {{.*}}tanf72 73; CHECK:      {{v?mov(.32)?}}  r0,74; CHECK:      bl  {{.*}}tanf75 76; CHECK:      {{v?mov(.32)?}}  r0,77; CHECK:      bl  {{.*}}tanf78 79; CHECK:      vst1.6480 81L.entry:82  %0 = load <4 x float>, ptr @A, align 1683  %1 = call <4 x float> @llvm.tan.v4f32(<4 x float> %0)84  store <4 x float> %1, ptr %X, align 1685  ret void86}87 88declare <4 x float> @llvm.tan.v4f32(<4 x float>) nounwind readonly89 90define void @test_exp(ptr %X) nounwind {91 92; CHECK-LABEL: test_exp:93 94; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}95; CHECK:      movt  [[reg0]], :upper16:{{.*}}96; CHECK:      vld1.6497 98; CHECK:      {{v?mov(.32)?}}  r0,99; CHECK:      bl  {{.*}}expf100 101; CHECK:      {{v?mov(.32)?}}  r0,102; CHECK:      bl  {{.*}}expf103 104; CHECK:      {{v?mov(.32)?}}  r0,105; CHECK:      bl  {{.*}}expf106 107; CHECK:      {{v?mov(.32)?}}  r0,108; CHECK:      bl  {{.*}}expf109 110; CHECK:      vst1.64111 112L.entry:113  %0 = load <4 x float>, ptr @A, align 16114  %1 = call <4 x float> @llvm.exp.v4f32(<4 x float> %0)115  store <4 x float> %1, ptr %X, align 16116  ret void117}118 119declare <4 x float> @llvm.exp.v4f32(<4 x float>) nounwind readonly120 121define void @test_exp2(ptr %X) nounwind {122 123; CHECK-LABEL: test_exp2:124 125; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}126; CHECK:      movt  [[reg0]], :upper16:{{.*}}127; CHECK:      vld1.64128 129; CHECK:      {{v?mov(.32)?}}  r0,130; CHECK:      bl  {{.*}}exp2f131 132; CHECK:      {{v?mov(.32)?}}  r0,133; CHECK:      bl  {{.*}}exp2f134 135; CHECK:      {{v?mov(.32)?}}  r0,136; CHECK:      bl  {{.*}}exp2f137 138; CHECK:      {{v?mov(.32)?}}  r0,139; CHECK:      bl  {{.*}}exp2f140 141; CHECK:      vst1.64142 143L.entry:144  %0 = load <4 x float>, ptr @A, align 16145  %1 = call <4 x float> @llvm.exp2.v4f32(<4 x float> %0)146  store <4 x float> %1, ptr %X, align 16147  ret void148}149 150declare <4 x float> @llvm.exp2.v4f32(<4 x float>) nounwind readonly151 152define void @test_log10(ptr %X) nounwind {153 154; CHECK-LABEL: test_log10:155 156; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}157; CHECK:      movt  [[reg0]], :upper16:{{.*}}158; CHECK:      vld1.64159 160; CHECK:      {{v?mov(.32)?}}  r0,161; CHECK:      bl  {{.*}}log10f162 163; CHECK:      {{v?mov(.32)?}}  r0,164; CHECK:      bl  {{.*}}log10f165 166; CHECK:      {{v?mov(.32)?}}  r0,167; CHECK:      bl  {{.*}}log10f168 169; CHECK:      {{v?mov(.32)?}}  r0,170; CHECK:      bl  {{.*}}log10f171 172; CHECK:      vst1.64173 174L.entry:175  %0 = load <4 x float>, ptr @A, align 16176  %1 = call <4 x float> @llvm.log10.v4f32(<4 x float> %0)177  store <4 x float> %1, ptr %X, align 16178  ret void179}180 181declare <4 x float> @llvm.log10.v4f32(<4 x float>) nounwind readonly182 183define void @test_log(ptr %X) nounwind {184 185; CHECK-LABEL: test_log:186 187; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}188; CHECK:      movt  [[reg0]], :upper16:{{.*}}189; CHECK:      vld1.64190 191; CHECK:      {{v?mov(.32)?}}  r0,192; CHECK:      bl  {{.*}}logf193 194; CHECK:      {{v?mov(.32)?}}  r0,195; CHECK:      bl  {{.*}}logf196 197; CHECK:      {{v?mov(.32)?}}  r0,198; CHECK:      bl  {{.*}}logf199 200; CHECK:      {{v?mov(.32)?}}  r0,201; CHECK:      bl  {{.*}}logf202 203; CHECK:      vst1.64204 205L.entry:206  %0 = load <4 x float>, ptr @A, align 16207  %1 = call <4 x float> @llvm.log.v4f32(<4 x float> %0)208  store <4 x float> %1, ptr %X, align 16209  ret void210}211 212declare <4 x float> @llvm.log.v4f32(<4 x float>) nounwind readonly213 214define void @test_log2(ptr %X) nounwind {215 216; CHECK-LABEL: test_log2:217 218; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}219; CHECK:      movt  [[reg0]], :upper16:{{.*}}220; CHECK:      vld1.64221 222; CHECK:      {{v?mov(.32)?}}  r0,223; CHECK:      bl  {{.*}}log2f224 225; CHECK:      {{v?mov(.32)?}}  r0,226; CHECK:      bl  {{.*}}log2f227 228; CHECK:      {{v?mov(.32)?}}  r0,229; CHECK:      bl  {{.*}}log2f230 231; CHECK:      {{v?mov(.32)?}}  r0,232; CHECK:      bl  {{.*}}log2f233 234; CHECK:      vst1.64235 236L.entry:237  %0 = load <4 x float>, ptr @A, align 16238  %1 = call <4 x float> @llvm.log2.v4f32(<4 x float> %0)239  store <4 x float> %1, ptr %X, align 16240  ret void241}242 243declare <4 x float> @llvm.log2.v4f32(<4 x float>) nounwind readonly244 245 246define void @test_pow(ptr %X) nounwind {247 248; CHECK-LABEL: test_pow:249 250; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}251; CHECK:      movt  [[reg0]], :upper16:{{.*}}252; CHECK:      vld1.64253 254; CHECK:      {{v?mov(.32)?}}  r0,255; CHECK:      bl  {{.*}}powf256 257; CHECK:      {{v?mov(.32)?}}  r0,258; CHECK:      bl  {{.*}}powf259 260; CHECK:      {{v?mov(.32)?}}  r0,261; CHECK:      bl  {{.*}}powf262 263; CHECK:      {{v?mov(.32)?}}  r0,264; CHECK:      bl  {{.*}}powf265 266; CHECK:      vst1.64267 268L.entry:269 270  %0 = load <4 x float>, ptr @A, align 16271  %1 = call <4 x float> @llvm.pow.v4f32(<4 x float> %0, <4 x float> <float 2., float 2., float 2., float 2.>)272 273  store <4 x float> %1, ptr %X, align 16274 275  ret void276}277 278declare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>) nounwind readonly279 280define void @test_powi(ptr %X) nounwind {281 282; CHECK-LABEL: test_powi:283 284; CHECK:       movw  [[reg0:r[0-9]+]], :lower16:{{.*}}285; CHECK:       movt  [[reg0]], :upper16:{{.*}}286; CHECK:       vld1.64 {{.*}}:128287; CHECK:       vmul.f32 {{.*}}288 289; CHECK:      vst1.64290 291L.entry:292 293  %0 = load <4 x float>, ptr @A, align 16294  %1 = call <4 x float> @llvm.powi.v4f32.i32(<4 x float> %0, i32 2)295 296  store <4 x float> %1, ptr %X, align 16297 298  ret void299}300 301declare <4 x float> @llvm.powi.v4f32.i32(<4 x float>, i32) nounwind readonly302 303define void @test_sin(ptr %X) nounwind {304 305; CHECK-LABEL: test_sin:306 307; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}308; CHECK:      movt  [[reg0]], :upper16:{{.*}}309; CHECK:      vld1.64310 311; CHECK:      {{v?mov(.32)?}}  r0,312; CHECK:      bl  {{.*}}sinf313 314; CHECK:      {{v?mov(.32)?}}  r0,315; CHECK:      bl  {{.*}}sinf316 317; CHECK:      {{v?mov(.32)?}}  r0,318; CHECK:      bl  {{.*}}sinf319 320; CHECK:      {{v?mov(.32)?}}  r0,321; CHECK:      bl  {{.*}}sinf322 323; CHECK:      vst1.64324 325L.entry:326  %0 = load <4 x float>, ptr @A, align 16327  %1 = call <4 x float> @llvm.sin.v4f32(<4 x float> %0)328  store <4 x float> %1, ptr %X, align 16329  ret void330}331 332declare <4 x float> @llvm.sin.v4f32(<4 x float>) nounwind readonly333 334define void @test_floor(ptr %X) nounwind {335 336; CHECK-LABEL: test_floor:337 338; CHECK:      movw  [[reg0:r[0-9]+]], :lower16:{{.*}}339; CHECK:      movt  [[reg0]], :upper16:{{.*}}340; CHECK:      vld1.64341 342; CHECK:      {{v?mov(.32)?}}  r0,343; CHECK:      bl  {{.*}}floorf344 345; CHECK:      {{v?mov(.32)?}}  r0,346; CHECK:      bl  {{.*}}floorf347 348; CHECK:      {{v?mov(.32)?}}  r0,349; CHECK:      bl  {{.*}}floorf350 351; CHECK:      {{v?mov(.32)?}}  r0,352; CHECK:      bl  {{.*}}floorf353 354; CHECK:      vst1.64355 356L.entry:357  %0 = load <4 x float>, ptr @A, align 16358  %1 = call <4 x float> @llvm.floor.v4f32(<4 x float> %0)359  store <4 x float> %1, ptr %X, align 16360  ret void361}362 363declare <4 x float> @llvm.floor.v4f32(<4 x float>) nounwind readonly364 365