brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 6f37d67 Raw
179 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc -mtriple=riscv64-linux-gnu -mattr=+d -verify-machineinstrs -o - %s | FileCheck %s3 4; Test adapted from AArch64. Demonstrates the cases where sin and cos libcalls5; will be combined to a sincos libcall.6 7define float @test_sincos_f32(float %f) nounwind {8; CHECK-LABEL: test_sincos_f32:9; CHECK:       # %bb.0:10; CHECK-NEXT:    addi sp, sp, -3211; CHECK-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill12; CHECK-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill13; CHECK-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill14; CHECK-NEXT:    fmv.s fs0, fa015; CHECK-NEXT:    call sinf16; CHECK-NEXT:    fmv.s fs1, fa017; CHECK-NEXT:    fmv.s fa0, fs018; CHECK-NEXT:    call cosf19; CHECK-NEXT:    fadd.s fa0, fs1, fa020; CHECK-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload21; CHECK-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload22; CHECK-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload23; CHECK-NEXT:    addi sp, sp, 3224; CHECK-NEXT:    ret25  %sin = call float @sinf(float %f) readnone26  %cos = call float @cosf(float %f) readnone27  %val = fadd float %sin, %cos28  ret float %val29}30 31define float @test_sincos_f32_errno(float %f) nounwind {32; CHECK-LABEL: test_sincos_f32_errno:33; CHECK:       # %bb.0:34; CHECK-NEXT:    addi sp, sp, -3235; CHECK-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill36; CHECK-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill37; CHECK-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill38; CHECK-NEXT:    fmv.s fs0, fa039; CHECK-NEXT:    call sinf40; CHECK-NEXT:    fmv.s fs1, fa041; CHECK-NEXT:    fmv.s fa0, fs042; CHECK-NEXT:    call cosf43; CHECK-NEXT:    fadd.s fa0, fs1, fa044; CHECK-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload45; CHECK-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload46; CHECK-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload47; CHECK-NEXT:    addi sp, sp, 3248; CHECK-NEXT:    ret49  %sin = call float @sinf(float %f)50  %cos = call float @cosf(float %f)51  %val = fadd float %sin, %cos52  ret float %val53}54 55define double @test_sincos_f64(double %f) nounwind {56; CHECK-LABEL: test_sincos_f64:57; CHECK:       # %bb.0:58; CHECK-NEXT:    addi sp, sp, -3259; CHECK-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill60; CHECK-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill61; CHECK-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill62; CHECK-NEXT:    fmv.d fs0, fa063; CHECK-NEXT:    call sin64; CHECK-NEXT:    fmv.d fs1, fa065; CHECK-NEXT:    fmv.d fa0, fs066; CHECK-NEXT:    call cos67; CHECK-NEXT:    fadd.d fa0, fs1, fa068; CHECK-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload69; CHECK-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload70; CHECK-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload71; CHECK-NEXT:    addi sp, sp, 3272; CHECK-NEXT:    ret73  %sin = call double @sin(double %f) readnone74  %cos = call double @cos(double %f) readnone75  %val = fadd double %sin, %cos76  ret double %val77}78 79define double @test_sincos_f64_errno(double %f) nounwind {80; CHECK-LABEL: test_sincos_f64_errno:81; CHECK:       # %bb.0:82; CHECK-NEXT:    addi sp, sp, -3283; CHECK-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill84; CHECK-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill85; CHECK-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill86; CHECK-NEXT:    fmv.d fs0, fa087; CHECK-NEXT:    call sin88; CHECK-NEXT:    fmv.d fs1, fa089; CHECK-NEXT:    fmv.d fa0, fs090; CHECK-NEXT:    call cos91; CHECK-NEXT:    fadd.d fa0, fs1, fa092; CHECK-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload93; CHECK-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload94; CHECK-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload95; CHECK-NEXT:    addi sp, sp, 3296; CHECK-NEXT:    ret97  %sin = call double @sin(double %f)98  %cos = call double @cos(double %f)99  %val = fadd double %sin, %cos100  ret double %val101}102 103define fp128 @test_sincos_f128(fp128 %f) nounwind {104; CHECK-LABEL: test_sincos_f128:105; CHECK:       # %bb.0:106; CHECK-NEXT:    addi sp, sp, -48107; CHECK-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill108; CHECK-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill109; CHECK-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill110; CHECK-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill111; CHECK-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill112; CHECK-NEXT:    mv s0, a1113; CHECK-NEXT:    mv s1, a0114; CHECK-NEXT:    call sinl115; CHECK-NEXT:    mv s2, a0116; CHECK-NEXT:    mv s3, a1117; CHECK-NEXT:    mv a0, s1118; CHECK-NEXT:    mv a1, s0119; CHECK-NEXT:    call cosl120; CHECK-NEXT:    mv a2, a0121; CHECK-NEXT:    mv a3, a1122; CHECK-NEXT:    mv a0, s2123; CHECK-NEXT:    mv a1, s3124; CHECK-NEXT:    call __addtf3125; CHECK-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload126; CHECK-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload127; CHECK-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload128; CHECK-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload129; CHECK-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload130; CHECK-NEXT:    addi sp, sp, 48131; CHECK-NEXT:    ret132  %sin = call fp128 @sinl(fp128 %f) readnone133  %cos = call fp128 @cosl(fp128 %f) readnone134  %val = fadd fp128 %sin, %cos135  ret fp128 %val136}137 138define fp128 @test_sincos_f128_errno(fp128 %f) nounwind {139; CHECK-LABEL: test_sincos_f128_errno:140; CHECK:       # %bb.0:141; CHECK-NEXT:    addi sp, sp, -48142; CHECK-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill143; CHECK-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill144; CHECK-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill145; CHECK-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill146; CHECK-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill147; CHECK-NEXT:    mv s0, a1148; CHECK-NEXT:    mv s1, a0149; CHECK-NEXT:    call sinl150; CHECK-NEXT:    mv s2, a0151; CHECK-NEXT:    mv s3, a1152; CHECK-NEXT:    mv a0, s1153; CHECK-NEXT:    mv a1, s0154; CHECK-NEXT:    call cosl155; CHECK-NEXT:    mv a2, a0156; CHECK-NEXT:    mv a3, a1157; CHECK-NEXT:    mv a0, s2158; CHECK-NEXT:    mv a1, s3159; CHECK-NEXT:    call __addtf3160; CHECK-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload161; CHECK-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload162; CHECK-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload163; CHECK-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload164; CHECK-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload165; CHECK-NEXT:    addi sp, sp, 48166; CHECK-NEXT:    ret167  %sin = call fp128 @sinl(fp128 %f)168  %cos = call fp128 @cosl(fp128 %f)169  %val = fadd fp128 %sin, %cos170  ret fp128 %val171}172 173declare float @sinf(float)174declare double @sin(double)175declare fp128 @sinl(fp128)176declare float @cosf(float)177declare double @cos(double)178declare fp128 @cosl(fp128)179