brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · e3ed31f Raw
202 lines · plain
1; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck -check-prefix=LINUX %s2; RUN: llc -mtriple=s390x-ibm-zos < %s | FileCheck -check-prefix=ZOS %s3 4; FIXME: half cases split out since they are broken on zos5 6; FIXME: Check ZOS function content7 8define { float, float } @test_sincos_f32(float %a) #0 {9; LINUX-LABEL: test_sincos_f32:10; LINUX:       # %bb.0:11; LINUX-NEXT:    stmg %r14, %r15, 112(%r15)12; LINUX-NEXT:    aghi %r15, -16813; LINUX-NEXT:    la %r2, 164(%r15)14; LINUX-NEXT:    la %r3, 160(%r15)15; LINUX-NEXT:    brasl %r14, sincosf@PLT16; LINUX-NEXT:    le %f0, 164(%r15)17; LINUX-NEXT:    le %f2, 160(%r15)18; LINUX-NEXT:    lmg %r14, %r15, 280(%r15)19; LINUX-NEXT:    br %r1420  %result = call { float, float } @llvm.sincos.f32(float %a)21  ret { float, float } %result22}23 24define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) #0 {25; LINUX-LABEL: test_sincos_v2f32:26; LINUX:       # %bb.0:27; LINUX-NEXT:    stmg %r14, %r15, 112(%r15)28; LINUX-NEXT:    aghi %r15, -18429; LINUX-NEXT:    std %f8, 176(%r15) # 8-byte Spill30; LINUX-NEXT:    la %r2, 164(%r15)31; LINUX-NEXT:    la %r3, 160(%r15)32; LINUX-NEXT:    ler %f8, %f233; LINUX-NEXT:    brasl %r14, sincosf@PLT34; LINUX-NEXT:    la %r2, 172(%r15)35; LINUX-NEXT:    la %r3, 168(%r15)36; LINUX-NEXT:    ler %f0, %f837; LINUX-NEXT:    brasl %r14, sincosf@PLT38; LINUX-NEXT:    le %f0, 164(%r15)39; LINUX-NEXT:    le %f2, 172(%r15)40; LINUX-NEXT:    le %f4, 160(%r15)41; LINUX-NEXT:    le %f6, 168(%r15)42; LINUX-NEXT:    ld %f8, 176(%r15) # 8-byte Reload43; LINUX-NEXT:    lmg %r14, %r15, 296(%r15)44; LINUX-NEXT:    br %r1445  %result = call { <2 x float>, <2 x float> } @llvm.sincos.v2f32(<2 x float> %a)46  ret { <2 x float>, <2 x float> } %result47}48 49define { <3 x float>, <3 x float> } @test_sincos_v3f32(<3 x float> %a) #0 {50; LINUX-LABEL: test_sincos_v3f32:51; LINUX:       # %bb.0:52; LINUX-NEXT:    stmg %r13, %r15, 104(%r15)53; LINUX-NEXT:    aghi %r15, -19254; LINUX-NEXT:    std %f8, 184(%r15) # 8-byte Spill55; LINUX-NEXT:    std %f9, 176(%r15) # 8-byte Spill56; LINUX-NEXT:    lgr %r13, %r257; LINUX-NEXT:    la %r2, 164(%r15)58; LINUX-NEXT:    la %r3, 160(%r15)59; LINUX-NEXT:    ler %f8, %f460; LINUX-NEXT:    ler %f9, %f261; LINUX-NEXT:    brasl %r14, sincosf@PLT62; LINUX-NEXT:    la %r2, 172(%r15)63; LINUX-NEXT:    la %r3, 168(%r15)64; LINUX-NEXT:    ler %f0, %f965; LINUX-NEXT:    brasl %r14, sincosf@PLT66; LINUX-NEXT:    la %r2, 8(%r13)67; LINUX-NEXT:    la %r3, 24(%r13)68; LINUX-NEXT:    ler %f0, %f869; LINUX-NEXT:    brasl %r14, sincosf@PLT70; LINUX-NEXT:    le %f0, 164(%r15)71; LINUX-NEXT:    le %f1, 172(%r15)72; LINUX-NEXT:    le %f2, 160(%r15)73; LINUX-NEXT:    lgdr %r0, %f074; LINUX-NEXT:    lgdr %r1, %f175; LINUX-NEXT:    lgdr %r2, %f276; LINUX-NEXT:    le %f0, 168(%r15)77; LINUX-NEXT:    nilf %r0, 078; LINUX-NEXT:    srlg %r1, %r1, 3279; LINUX-NEXT:    nilf %r2, 080; LINUX-NEXT:    lgdr %r3, %f081; LINUX-NEXT:    srlg %r3, %r3, 3282; LINUX-NEXT:    lr %r0, %r183; LINUX-NEXT:    lr %r2, %r384; LINUX-NEXT:    stg %r2, 16(%r13)85; LINUX-NEXT:    stg %r0, 0(%r13)86; LINUX-NEXT:    ld %f8, 184(%r15) # 8-byte Reload87; LINUX-NEXT:    ld %f9, 176(%r15) # 8-byte Reload88; LINUX-NEXT:    lmg %r13, %r15, 296(%r15)89; LINUX-NEXT:    br %r1490  %result = call { <3 x float>, <3 x float> } @llvm.sincos.v3f32(<3 x float> %a)91  ret { <3 x float>, <3 x float> } %result92}93 94define { double, double } @test_sincos_f64(double %a) #0 {95; LINUX-LABEL: test_sincos_f64:96; LINUX:       # %bb.0:97; LINUX-NEXT:    stmg %r14, %r15, 112(%r15)98; LINUX-NEXT:    aghi %r15, -17699; LINUX-NEXT:    la %r2, 168(%r15)100; LINUX-NEXT:    la %r3, 160(%r15)101; LINUX-NEXT:    brasl %r14, sincos@PLT102; LINUX-NEXT:    ld %f0, 168(%r15)103; LINUX-NEXT:    ld %f2, 160(%r15)104; LINUX-NEXT:    lmg %r14, %r15, 288(%r15)105; LINUX-NEXT:    br %r14106  %result = call { double, double } @llvm.sincos.f64(double %a)107  ret { double, double } %result108}109 110define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) #0 {111; LINUX-LABEL: test_sincos_v2f64:112; LINUX:       # %bb.0:113; LINUX-NEXT:    stmg %r14, %r15, 112(%r15)114; LINUX-NEXT:    aghi %r15, -200115; LINUX-NEXT:    std %f8, 192(%r15) # 8-byte Spill116; LINUX-NEXT:    la %r2, 168(%r15)117; LINUX-NEXT:    la %r3, 160(%r15)118; LINUX-NEXT:    ldr %f8, %f2119; LINUX-NEXT:    brasl %r14, sincos@PLT120; LINUX-NEXT:    la %r2, 184(%r15)121; LINUX-NEXT:    la %r3, 176(%r15)122; LINUX-NEXT:    ldr %f0, %f8123; LINUX-NEXT:    brasl %r14, sincos@PLT124; LINUX-NEXT:    ld %f0, 168(%r15)125; LINUX-NEXT:    ld %f2, 184(%r15)126; LINUX-NEXT:    ld %f4, 160(%r15)127; LINUX-NEXT:    ld %f6, 176(%r15)128; LINUX-NEXT:    ld %f8, 192(%r15) # 8-byte Reload129; LINUX-NEXT:    lmg %r14, %r15, 312(%r15)130; LINUX-NEXT:    br %r14131  %result = call { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %a)132  ret { <2 x double>, <2 x double> } %result133}134 135define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 {136; LINUX-LABEL: test_sincos_f128:137; LINUX:       # %bb.0:138; LINUX-NEXT:    stmg %r14, %r15, 112(%r15)139; LINUX-NEXT:    aghi %r15, -176140; LINUX-NEXT:    ld %f0, 0(%r3)141; LINUX-NEXT:    ld %f2, 8(%r3)142; LINUX-NEXT:    lgr %r3, %r2143; LINUX-NEXT:    la %r4, 16(%r2)144; LINUX-NEXT:    la %r2, 160(%r15)145; LINUX-NEXT:    std %f0, 160(%r15)146; LINUX-NEXT:    std %f2, 168(%r15)147; LINUX-NEXT:    brasl %r14, sincosl@PLT148; LINUX-NEXT:    lmg %r14, %r15, 288(%r15)149; LINUX-NEXT:    br %r14150  %result = call { fp128, fp128 } @llvm.sincos.f128(fp128 %a)151  ret { fp128, fp128 } %result152}153 154define { <2 x fp128>, <2 x fp128> } @test_sincos_v2f128(<2 x fp128> %a) #0 {155; LINUX-LABEL: test_sincos_v2f128:156; LINUX:       # %bb.0:157; LINUX-NEXT:    stmg %r13, %r15, 104(%r15)158; LINUX-NEXT:    aghi %r15, -208159; LINUX-NEXT:    std %f8, 200(%r15) # 8-byte Spill160; LINUX-NEXT:    std %f10, 192(%r15) # 8-byte Spill161; LINUX-NEXT:    lgr %r13, %r2162; LINUX-NEXT:    ld %f8, 0(%r3)163; LINUX-NEXT:    ld %f10, 8(%r3)164; LINUX-NEXT:    ld %f0, 16(%r3)165; LINUX-NEXT:    ld %f2, 24(%r3)166; LINUX-NEXT:    la %r2, 176(%r15)167; LINUX-NEXT:    la %r3, 16(%r13)168; LINUX-NEXT:    la %r4, 48(%r13)169; LINUX-NEXT:    std %f0, 176(%r15)170; LINUX-NEXT:    std %f2, 184(%r15)171; LINUX-NEXT:    brasl %r14, sincosl@PLT172; LINUX-NEXT:    la %r4, 32(%r13)173; LINUX-NEXT:    la %r2, 160(%r15)174; LINUX-NEXT:    std %f8, 160(%r15)175; LINUX-NEXT:    std %f10, 168(%r15)176; LINUX-NEXT:    lgr %r3, %r13177; LINUX-NEXT:    brasl %r14, sincosl@PLT178; LINUX-NEXT:    ld %f8, 200(%r15) # 8-byte Reload179; LINUX-NEXT:    ld %f10, 192(%r15) # 8-byte Reload180; LINUX-NEXT:    lmg %r13, %r15, 312(%r15)181; LINUX-NEXT:    br %r14182  %result = call { <2 x fp128>, <2 x fp128> } @llvm.sincos.v2f128(<2 x fp128> %a)183  ret { <2 x fp128>, <2 x fp128> } %result184}185 186 187; ZOS: .quad	R(@@FSIN@B)                     * Offset 0 function descriptor of @@FSIN@B188; ZOS: .quad	V(@@FSIN@B)189; ZOS: .quad	R(@@FCOS@B)                     * Offset 16 function descriptor of @@FCOS@B190; ZOS: .quad	V(@@FCOS@B)191; ZOS: .quad	R(@@SSIN@B)                     * Offset 32 function descriptor of @@SSIN@B192; ZOS: .quad	V(@@SSIN@B)193; ZOS: .quad	R(@@SCOS@B)                     * Offset 48 function descriptor of @@SCOS@B194; ZOS: .quad	V(@@SCOS@B)195; ZOS: .quad	R(@@LSIN@B)                     * Offset 64 function descriptor of @@LSIN@B196; ZOS: .quad	V(@@LSIN@B)197; ZOS: .quad	R(@@LCOS@B)                     * Offset 80 function descriptor of @@LCOS@B198; ZOS: .quad	V(@@LCOS@B)199 200 201attributes #0 = { nounwind }202