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