127 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck -check-prefix=LINUX %s3 4; FIXME: Merge with llvm.sincos.ll when zos is fixed for half.5 6define { half, half } @test_sincos_f16(half %a) #0 {7; LINUX-LABEL: test_sincos_f16:8; LINUX: # %bb.0:9; LINUX-NEXT: stmg %r14, %r15, 112(%r15)10; LINUX-NEXT: .cfi_offset %r14, -4811; LINUX-NEXT: .cfi_offset %r15, -4012; LINUX-NEXT: aghi %r15, -17613; LINUX-NEXT: .cfi_def_cfa_offset 33614; LINUX-NEXT: std %f8, 168(%r15) # 8-byte Spill15; LINUX-NEXT: .cfi_offset %f8, -16816; LINUX-NEXT: brasl %r14, __extendhfsf2@PLT17; LINUX-NEXT: la %r2, 164(%r15)18; LINUX-NEXT: la %r3, 160(%r15)19; LINUX-NEXT: brasl %r14, sincosf@PLT20; LINUX-NEXT: le %f0, 164(%r15)21; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT22; LINUX-NEXT: le %f1, 160(%r15)23; LINUX-NEXT: ler %f8, %f024; LINUX-NEXT: ler %f0, %f125; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT26; LINUX-NEXT: ler %f2, %f027; LINUX-NEXT: ler %f0, %f828; LINUX-NEXT: ld %f8, 168(%r15) # 8-byte Reload29; LINUX-NEXT: lmg %r14, %r15, 288(%r15)30; LINUX-NEXT: br %r1431 %result = call { half, half } @llvm.sincos.f16(half %a)32 ret { half, half } %result33}34 35define half @test_sincos_f16_only_use_sin(half %a) #0 {36; LINUX-LABEL: test_sincos_f16_only_use_sin:37; LINUX: # %bb.0:38; LINUX-NEXT: stmg %r14, %r15, 112(%r15)39; LINUX-NEXT: .cfi_offset %r14, -4840; LINUX-NEXT: .cfi_offset %r15, -4041; LINUX-NEXT: aghi %r15, -16842; LINUX-NEXT: .cfi_def_cfa_offset 32843; LINUX-NEXT: brasl %r14, __extendhfsf2@PLT44; LINUX-NEXT: la %r2, 160(%r15)45; LINUX-NEXT: la %r3, 164(%r15)46; LINUX-NEXT: brasl %r14, sincosf@PLT47; LINUX-NEXT: le %f0, 160(%r15)48; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT49; LINUX-NEXT: lmg %r14, %r15, 280(%r15)50; LINUX-NEXT: br %r1451 %result = call { half, half } @llvm.sincos.f16(half %a)52 %result.0 = extractvalue { half, half } %result, 053 ret half %result.054}55 56define half @test_sincos_f16_only_use_cos(half %a) #0 {57; LINUX-LABEL: test_sincos_f16_only_use_cos:58; LINUX: # %bb.0:59; LINUX-NEXT: stmg %r14, %r15, 112(%r15)60; LINUX-NEXT: .cfi_offset %r14, -4861; LINUX-NEXT: .cfi_offset %r15, -4062; LINUX-NEXT: aghi %r15, -16863; LINUX-NEXT: .cfi_def_cfa_offset 32864; LINUX-NEXT: brasl %r14, __extendhfsf2@PLT65; LINUX-NEXT: la %r2, 164(%r15)66; LINUX-NEXT: la %r3, 160(%r15)67; LINUX-NEXT: brasl %r14, sincosf@PLT68; LINUX-NEXT: le %f0, 160(%r15)69; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT70; LINUX-NEXT: lmg %r14, %r15, 280(%r15)71; LINUX-NEXT: br %r1472 %result = call { half, half } @llvm.sincos.f16(half %a)73 %result.1 = extractvalue { half, half } %result, 174 ret half %result.175}76 77define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) #0 {78; LINUX-LABEL: test_sincos_v2f16:79; LINUX: # %bb.0:80; LINUX-NEXT: stmg %r14, %r15, 112(%r15)81; LINUX-NEXT: .cfi_offset %r14, -4882; LINUX-NEXT: .cfi_offset %r15, -4083; LINUX-NEXT: aghi %r15, -20084; LINUX-NEXT: .cfi_def_cfa_offset 36085; LINUX-NEXT: std %f8, 192(%r15) # 8-byte Spill86; LINUX-NEXT: std %f9, 184(%r15) # 8-byte Spill87; LINUX-NEXT: std %f10, 176(%r15) # 8-byte Spill88; LINUX-NEXT: .cfi_offset %f8, -16889; LINUX-NEXT: .cfi_offset %f9, -17690; LINUX-NEXT: .cfi_offset %f10, -18491; LINUX-NEXT: ler %f8, %f292; LINUX-NEXT: brasl %r14, __extendhfsf2@PLT93; LINUX-NEXT: la %r2, 172(%r15)94; LINUX-NEXT: la %r3, 168(%r15)95; LINUX-NEXT: brasl %r14, sincosf@PLT96; LINUX-NEXT: ler %f0, %f897; LINUX-NEXT: brasl %r14, __extendhfsf2@PLT98; LINUX-NEXT: la %r2, 164(%r15)99; LINUX-NEXT: la %r3, 160(%r15)100; LINUX-NEXT: brasl %r14, sincosf@PLT101; LINUX-NEXT: le %f0, 172(%r15)102; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT103; LINUX-NEXT: le %f1, 164(%r15)104; LINUX-NEXT: ler %f8, %f0105; LINUX-NEXT: ler %f0, %f1106; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT107; LINUX-NEXT: le %f1, 168(%r15)108; LINUX-NEXT: ler %f9, %f0109; LINUX-NEXT: ler %f0, %f1110; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT111; LINUX-NEXT: le %f1, 160(%r15)112; LINUX-NEXT: ler %f10, %f0113; LINUX-NEXT: ler %f0, %f1114; LINUX-NEXT: brasl %r14, __truncsfhf2@PLT115; LINUX-NEXT: ler %f6, %f0116; LINUX-NEXT: ler %f0, %f8117; LINUX-NEXT: ler %f2, %f9118; LINUX-NEXT: ler %f4, %f10119; LINUX-NEXT: ld %f8, 192(%r15) # 8-byte Reload120; LINUX-NEXT: ld %f9, 184(%r15) # 8-byte Reload121; LINUX-NEXT: ld %f10, 176(%r15) # 8-byte Reload122; LINUX-NEXT: lmg %r14, %r15, 312(%r15)123; LINUX-NEXT: br %r14124 %result = call { <2 x half>, <2 x half> } @llvm.sincos.v2f16(<2 x half> %a)125 ret { <2 x half>, <2 x half> } %result126}127