brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.9 KiB · 49397ca Raw
332 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=thumbv7-unknown-linux < %s | FileCheck -check-prefixes=CHECK %s3 4declare half @llvm.exp10.f16(half)5declare <1 x half> @llvm.exp10.v1f16(<1 x half>)6declare <2 x half> @llvm.exp10.v2f16(<2 x half>)7declare <3 x half> @llvm.exp10.v3f16(<3 x half>)8declare <4 x half> @llvm.exp10.v4f16(<4 x half>)9declare float @llvm.exp10.f32(float)10declare <1 x float> @llvm.exp10.v1f32(<1 x float>)11declare <2 x float> @llvm.exp10.v2f32(<2 x float>)12declare <3 x float> @llvm.exp10.v3f32(<3 x float>)13declare <4 x float> @llvm.exp10.v4f32(<4 x float>)14declare double @llvm.exp10.f64(double)15declare <1 x double> @llvm.exp10.v1f64(<1 x double>)16declare <2 x double> @llvm.exp10.v2f64(<2 x double>)17declare <3 x double> @llvm.exp10.v3f64(<3 x double>)18declare <4 x double> @llvm.exp10.v4f64(<4 x double>)19 20define half @exp10_f16(half %x) {21; CHECK-LABEL: exp10_f16:22; CHECK:       @ %bb.0:23; CHECK-NEXT:    push {r7, lr}24; CHECK-NEXT:    bl __gnu_h2f_ieee25; CHECK-NEXT:    bl exp10f26; CHECK-NEXT:    bl __gnu_f2h_ieee27; CHECK-NEXT:    pop {r7, pc}28  %r = call half @llvm.exp10.f16(half %x)29  ret half %r30}31 32define <1 x half> @exp10_v1f16(<1 x half> %x) {33; CHECK-LABEL: exp10_v1f16:34; CHECK:       @ %bb.0:35; CHECK-NEXT:    push {r7, lr}36; CHECK-NEXT:    bl __gnu_f2h_ieee37; CHECK-NEXT:    bl __gnu_h2f_ieee38; CHECK-NEXT:    bl exp10f39; CHECK-NEXT:    bl __gnu_f2h_ieee40; CHECK-NEXT:    bl __gnu_h2f_ieee41; CHECK-NEXT:    pop {r7, pc}42  %r = call <1 x half> @llvm.exp10.v1f16(<1 x half> %x)43  ret <1 x half> %r44}45 46define <2 x half> @exp10_v2f16(<2 x half> %x) {47; CHECK-LABEL: exp10_v2f16:48; CHECK:       @ %bb.0:49; CHECK-NEXT:    push {r4, lr}50; CHECK-NEXT:    sub sp, #851; CHECK-NEXT:    mov r4, r052; CHECK-NEXT:    mov r0, r153; CHECK-NEXT:    bl __gnu_h2f_ieee54; CHECK-NEXT:    bl exp10f55; CHECK-NEXT:    bl __gnu_f2h_ieee56; CHECK-NEXT:    strh.w r0, [sp, #6]57; CHECK-NEXT:    mov r0, r458; CHECK-NEXT:    bl __gnu_h2f_ieee59; CHECK-NEXT:    bl exp10f60; CHECK-NEXT:    bl __gnu_f2h_ieee61; CHECK-NEXT:    strh.w r0, [sp, #4]62; CHECK-NEXT:    add r0, sp, #463; CHECK-NEXT:    vld1.32 {d16[0]}, [r0:32]64; CHECK-NEXT:    vmovl.u16 q8, d1665; CHECK-NEXT:    vmov.32 r0, d16[0]66; CHECK-NEXT:    vmov.32 r1, d16[1]67; CHECK-NEXT:    add sp, #868; CHECK-NEXT:    pop {r4, pc}69  %r = call <2 x half> @llvm.exp10.v2f16(<2 x half> %x)70  ret <2 x half> %r71}72 73define <3 x half> @exp10_v3f16(<3 x half> %x) {74; CHECK-LABEL: exp10_v3f16:75; CHECK:       @ %bb.0:76; CHECK-NEXT:    push {r4, r5, r6, lr}77; CHECK-NEXT:    mov r5, r078; CHECK-NEXT:    mov r0, r179; CHECK-NEXT:    mov r4, r280; CHECK-NEXT:    bl __gnu_h2f_ieee81; CHECK-NEXT:    bl exp10f82; CHECK-NEXT:    bl __gnu_f2h_ieee83; CHECK-NEXT:    mov r6, r084; CHECK-NEXT:    mov r0, r585; CHECK-NEXT:    bl __gnu_h2f_ieee86; CHECK-NEXT:    bl exp10f87; CHECK-NEXT:    bl __gnu_f2h_ieee88; CHECK-NEXT:    pkhbt r5, r0, r6, lsl #1689; CHECK-NEXT:    mov r0, r490; CHECK-NEXT:    bl __gnu_h2f_ieee91; CHECK-NEXT:    bl exp10f92; CHECK-NEXT:    bl __gnu_f2h_ieee93; CHECK-NEXT:    uxth r0, r094; CHECK-NEXT:    vmov d16, r5, r095; CHECK-NEXT:    vmov.u16 r0, d16[0]96; CHECK-NEXT:    vmov.u16 r1, d16[1]97; CHECK-NEXT:    vmov.u16 r2, d16[2]98; CHECK-NEXT:    pop {r4, r5, r6, pc}99  %r = call <3 x half> @llvm.exp10.v3f16(<3 x half> %x)100  ret <3 x half> %r101}102 103define <4 x half> @exp10_v4f16(<4 x half> %x) {104; CHECK-LABEL: exp10_v4f16:105; CHECK:       @ %bb.0:106; CHECK-NEXT:    push {r4, r5, r6, r7, lr}107; CHECK-NEXT:    sub sp, #4108; CHECK-NEXT:    mov r4, r0109; CHECK-NEXT:    mov r0, r3110; CHECK-NEXT:    mov r6, r2111; CHECK-NEXT:    mov r5, r1112; CHECK-NEXT:    bl __gnu_h2f_ieee113; CHECK-NEXT:    bl exp10f114; CHECK-NEXT:    bl __gnu_f2h_ieee115; CHECK-NEXT:    mov r7, r0116; CHECK-NEXT:    mov r0, r6117; CHECK-NEXT:    bl __gnu_h2f_ieee118; CHECK-NEXT:    bl exp10f119; CHECK-NEXT:    bl __gnu_f2h_ieee120; CHECK-NEXT:    pkhbt r6, r0, r7, lsl #16121; CHECK-NEXT:    mov r0, r5122; CHECK-NEXT:    bl __gnu_h2f_ieee123; CHECK-NEXT:    bl exp10f124; CHECK-NEXT:    bl __gnu_f2h_ieee125; CHECK-NEXT:    mov r5, r0126; CHECK-NEXT:    mov r0, r4127; CHECK-NEXT:    bl __gnu_h2f_ieee128; CHECK-NEXT:    bl exp10f129; CHECK-NEXT:    bl __gnu_f2h_ieee130; CHECK-NEXT:    pkhbt r0, r0, r5, lsl #16131; CHECK-NEXT:    vmov d16, r0, r6132; CHECK-NEXT:    vmov.u16 r0, d16[0]133; CHECK-NEXT:    vmov.u16 r1, d16[1]134; CHECK-NEXT:    vmov.u16 r2, d16[2]135; CHECK-NEXT:    vmov.u16 r3, d16[3]136; CHECK-NEXT:    add sp, #4137; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}138  %r = call <4 x half> @llvm.exp10.v4f16(<4 x half> %x)139  ret <4 x half> %r140}141 142define float @exp10_f32(float %x) {143; CHECK-LABEL: exp10_f32:144; CHECK:       @ %bb.0:145; CHECK-NEXT:    b exp10f146  %r = call float @llvm.exp10.f32(float %x)147  ret float %r148}149 150define <1 x float> @exp10_v1f32(<1 x float> %x) {151; CHECK-LABEL: exp10_v1f32:152; CHECK:       @ %bb.0:153; CHECK-NEXT:    push {r7, lr}154; CHECK-NEXT:    bl exp10f155; CHECK-NEXT:    pop {r7, pc}156  %r = call <1 x float> @llvm.exp10.v1f32(<1 x float> %x)157  ret <1 x float> %r158}159 160define <2 x float> @exp10_v2f32(<2 x float> %x) {161; CHECK-LABEL: exp10_v2f32:162; CHECK:       @ %bb.0:163; CHECK-NEXT:    push {r4, lr}164; CHECK-NEXT:    vpush {d8}165; CHECK-NEXT:    vmov d8, r0, r1166; CHECK-NEXT:    vmov r0, s17167; CHECK-NEXT:    bl exp10f168; CHECK-NEXT:    mov r4, r0169; CHECK-NEXT:    vmov r0, s16170; CHECK-NEXT:    bl exp10f171; CHECK-NEXT:    mov r1, r4172; CHECK-NEXT:    vpop {d8}173; CHECK-NEXT:    pop {r4, pc}174  %r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)175  ret <2 x float> %r176}177 178define <3 x float> @exp10_v3f32(<3 x float> %x) {179; CHECK-LABEL: exp10_v3f32:180; CHECK:       @ %bb.0:181; CHECK-NEXT:    push {r4, r5, r6, lr}182; CHECK-NEXT:    vpush {d8, d9}183; CHECK-NEXT:    vmov d1, r2, r3184; CHECK-NEXT:    mov r5, r0185; CHECK-NEXT:    vmov d0, r0, r1186; CHECK-NEXT:    mov r4, r1187; CHECK-NEXT:    vmov r0, s2188; CHECK-NEXT:    bl exp10f189; CHECK-NEXT:    mov r6, r0190; CHECK-NEXT:    mov r0, r4191; CHECK-NEXT:    bl exp10f192; CHECK-NEXT:    mov r4, r0193; CHECK-NEXT:    vmov s17, r0194; CHECK-NEXT:    mov r0, r5195; CHECK-NEXT:    bl exp10f196; CHECK-NEXT:    vmov s16, r0197; CHECK-NEXT:    mov r1, r4198; CHECK-NEXT:    vmov s18, r6199; CHECK-NEXT:    vmov r2, r3, d9200; CHECK-NEXT:    vpop {d8, d9}201; CHECK-NEXT:    pop {r4, r5, r6, pc}202  %r = call <3 x float> @llvm.exp10.v3f32(<3 x float> %x)203  ret <3 x float> %r204}205 206define <4 x float> @exp10_v4f32(<4 x float> %x) {207; CHECK-LABEL: exp10_v4f32:208; CHECK:       @ %bb.0:209; CHECK-NEXT:    push {r4, r5, r6, r7, lr}210; CHECK-NEXT:    sub sp, #4211; CHECK-NEXT:    mov r6, r0212; CHECK-NEXT:    mov r0, r1213; CHECK-NEXT:    mov r4, r3214; CHECK-NEXT:    mov r5, r2215; CHECK-NEXT:    bl exp10f216; CHECK-NEXT:    mov r7, r0217; CHECK-NEXT:    mov r0, r4218; CHECK-NEXT:    bl exp10f219; CHECK-NEXT:    mov r4, r0220; CHECK-NEXT:    mov r0, r5221; CHECK-NEXT:    bl exp10f222; CHECK-NEXT:    mov r5, r0223; CHECK-NEXT:    mov r0, r6224; CHECK-NEXT:    bl exp10f225; CHECK-NEXT:    mov r1, r7226; CHECK-NEXT:    mov r2, r5227; CHECK-NEXT:    mov r3, r4228; CHECK-NEXT:    add sp, #4229; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}230  %r = call <4 x float> @llvm.exp10.v4f32(<4 x float> %x)231  ret <4 x float> %r232}233 234define double @exp10_f64(double %x) {235; CHECK-LABEL: exp10_f64:236; CHECK:       @ %bb.0:237; CHECK-NEXT:    b exp10238  %r = call double @llvm.exp10.f64(double %x)239  ret double %r240}241 242; FIXME: Broken243; define <1 x double> @exp10_v1f64(<1 x double> %x) {244;   %r = call <1 x double> @llvm.exp10.v1f64(<1 x double> %x)245;   ret <1 x double> %r246; }247 248define <2 x double> @exp10_v2f64(<2 x double> %x) {249; CHECK-LABEL: exp10_v2f64:250; CHECK:       @ %bb.0:251; CHECK-NEXT:    push {r4, r5, r6, r7, lr}252; CHECK-NEXT:    sub sp, #4253; CHECK-NEXT:    mov r4, r3254; CHECK-NEXT:    mov r5, r2255; CHECK-NEXT:    bl exp10256; CHECK-NEXT:    mov r6, r0257; CHECK-NEXT:    mov r7, r1258; CHECK-NEXT:    mov r0, r5259; CHECK-NEXT:    mov r1, r4260; CHECK-NEXT:    bl exp10261; CHECK-NEXT:    mov r2, r0262; CHECK-NEXT:    mov r3, r1263; CHECK-NEXT:    mov r0, r6264; CHECK-NEXT:    mov r1, r7265; CHECK-NEXT:    add sp, #4266; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}267  %r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)268  ret <2 x double> %r269}270 271define <3 x double> @exp10_v3f64(<3 x double> %x) {272; CHECK-LABEL: exp10_v3f64:273; CHECK:       @ %bb.0:274; CHECK-NEXT:    push {r4, lr}275; CHECK-NEXT:    vpush {d8, d9}276; CHECK-NEXT:    mov r4, r0277; CHECK-NEXT:    mov r1, r3278; CHECK-NEXT:    mov r0, r2279; CHECK-NEXT:    bl exp10280; CHECK-NEXT:    ldrd r2, r3, [sp, #24]281; CHECK-NEXT:    vmov d8, r0, r1282; CHECK-NEXT:    mov r1, r3283; CHECK-NEXT:    mov r0, r2284; CHECK-NEXT:    bl exp10285; CHECK-NEXT:    ldrd r2, r3, [sp, #32]286; CHECK-NEXT:    vmov d9, r0, r1287; CHECK-NEXT:    mov r1, r3288; CHECK-NEXT:    vst1.64 {d8, d9}, [r4:128]!289; CHECK-NEXT:    mov r0, r2290; CHECK-NEXT:    bl exp10291; CHECK-NEXT:    strd r0, r1, [r4]292; CHECK-NEXT:    vpop {d8, d9}293; CHECK-NEXT:    pop {r4, pc}294  %r = call <3 x double> @llvm.exp10.v3f64(<3 x double> %x)295  ret <3 x double> %r296}297 298define <4 x double> @exp10_v4f64(<4 x double> %x) {299; CHECK-LABEL: exp10_v4f64:300; CHECK:       @ %bb.0:301; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, lr}302; CHECK-NEXT:    vpush {d8, d9, d10, d11}303; CHECK-NEXT:    mov r4, r0304; CHECK-NEXT:    mov r1, r3305; CHECK-NEXT:    mov r0, r2306; CHECK-NEXT:    bl exp10307; CHECK-NEXT:    add r2, sp, #64308; CHECK-NEXT:    vmov d8, r0, r1309; CHECK-NEXT:    vld1.64 {d16, d17}, [r2]310; CHECK-NEXT:    vmov r2, r3, d17311; CHECK-NEXT:    vmov r5, r8, d16312; CHECK-NEXT:    mov r0, r2313; CHECK-NEXT:    mov r1, r3314; CHECK-NEXT:    bl exp10315; CHECK-NEXT:    mov r7, r0316; CHECK-NEXT:    mov r6, r1317; CHECK-NEXT:    ldrd r0, r1, [sp, #56]318; CHECK-NEXT:    bl exp10319; CHECK-NEXT:    vmov d9, r0, r1320; CHECK-NEXT:    mov r0, r5321; CHECK-NEXT:    mov r1, r8322; CHECK-NEXT:    vmov d11, r7, r6323; CHECK-NEXT:    bl exp10324; CHECK-NEXT:    vmov d10, r0, r1325; CHECK-NEXT:    vst1.64 {d8, d9}, [r4:128]!326; CHECK-NEXT:    vst1.64 {d10, d11}, [r4:128]327; CHECK-NEXT:    vpop {d8, d9, d10, d11}328; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, pc}329  %r = call <4 x double> @llvm.exp10.v4f64(<4 x double> %x)330  ret <4 x double> %r331}332