brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · 985135a Raw
214 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -target-abi lp64e -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefix=RV64I-LP64E-FPELIM %s4; RUN: llc -mtriple=riscv64 -target-abi lp64e -verify-machineinstrs -frame-pointer=all < %s \5; RUN:   | FileCheck -check-prefix=RV64I-LP64E-WITHFP %s6 7; This file contains tests that will have differing output for the lp64e ABIs.8 9define i64 @callee_float_in_regs(i64 %a, float %b) nounwind {10; RV64I-LP64E-FPELIM-LABEL: callee_float_in_regs:11; RV64I-LP64E-FPELIM:       # %bb.0:12; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, -1613; RV64I-LP64E-FPELIM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill14; RV64I-LP64E-FPELIM-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill15; RV64I-LP64E-FPELIM-NEXT:    mv s0, a016; RV64I-LP64E-FPELIM-NEXT:    sext.w a0, a117; RV64I-LP64E-FPELIM-NEXT:    call __fixsfdi18; RV64I-LP64E-FPELIM-NEXT:    add a0, s0, a019; RV64I-LP64E-FPELIM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload20; RV64I-LP64E-FPELIM-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload21; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, 1622; RV64I-LP64E-FPELIM-NEXT:    ret23;24; RV64I-LP64E-WITHFP-LABEL: callee_float_in_regs:25; RV64I-LP64E-WITHFP:       # %bb.0:26; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, -2427; RV64I-LP64E-WITHFP-NEXT:    sd ra, 16(sp) # 8-byte Folded Spill28; RV64I-LP64E-WITHFP-NEXT:    sd s0, 8(sp) # 8-byte Folded Spill29; RV64I-LP64E-WITHFP-NEXT:    sd s1, 0(sp) # 8-byte Folded Spill30; RV64I-LP64E-WITHFP-NEXT:    addi s0, sp, 2431; RV64I-LP64E-WITHFP-NEXT:    mv s1, a032; RV64I-LP64E-WITHFP-NEXT:    sext.w a0, a133; RV64I-LP64E-WITHFP-NEXT:    call __fixsfdi34; RV64I-LP64E-WITHFP-NEXT:    add a0, s1, a035; RV64I-LP64E-WITHFP-NEXT:    ld ra, 16(sp) # 8-byte Folded Reload36; RV64I-LP64E-WITHFP-NEXT:    ld s0, 8(sp) # 8-byte Folded Reload37; RV64I-LP64E-WITHFP-NEXT:    ld s1, 0(sp) # 8-byte Folded Reload38; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, 2439; RV64I-LP64E-WITHFP-NEXT:    ret40  %b_fptosi = fptosi float %b to i6441  %1 = add i64 %a, %b_fptosi42  ret i64 %143}44 45define i64 @caller_float_in_regs() nounwind {46; RV64I-LP64E-FPELIM-LABEL: caller_float_in_regs:47; RV64I-LP64E-FPELIM:       # %bb.0:48; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, -849; RV64I-LP64E-FPELIM-NEXT:    sd ra, 0(sp) # 8-byte Folded Spill50; RV64I-LP64E-FPELIM-NEXT:    li a0, 151; RV64I-LP64E-FPELIM-NEXT:    lui a1, 26214452; RV64I-LP64E-FPELIM-NEXT:    call callee_float_in_regs53; RV64I-LP64E-FPELIM-NEXT:    ld ra, 0(sp) # 8-byte Folded Reload54; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, 855; RV64I-LP64E-FPELIM-NEXT:    ret56;57; RV64I-LP64E-WITHFP-LABEL: caller_float_in_regs:58; RV64I-LP64E-WITHFP:       # %bb.0:59; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, -1660; RV64I-LP64E-WITHFP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill61; RV64I-LP64E-WITHFP-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill62; RV64I-LP64E-WITHFP-NEXT:    addi s0, sp, 1663; RV64I-LP64E-WITHFP-NEXT:    li a0, 164; RV64I-LP64E-WITHFP-NEXT:    lui a1, 26214465; RV64I-LP64E-WITHFP-NEXT:    call callee_float_in_regs66; RV64I-LP64E-WITHFP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload67; RV64I-LP64E-WITHFP-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload68; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, 1669; RV64I-LP64E-WITHFP-NEXT:    ret70  %1 = call i64 @callee_float_in_regs(i64 1, float 2.0)71  ret i64 %172}73 74define i64 @callee_float_on_stack(i128 %a, i128 %b, i128 %c, i128 %d, float %e) nounwind {75; RV64I-LP64E-FPELIM-LABEL: callee_float_on_stack:76; RV64I-LP64E-FPELIM:       # %bb.0:77; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, -1678; RV64I-LP64E-FPELIM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill79; RV64I-LP64E-FPELIM-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill80; RV64I-LP64E-FPELIM-NEXT:    addi s0, sp, 1681; RV64I-LP64E-FPELIM-NEXT:    andi sp, sp, -1682; RV64I-LP64E-FPELIM-NEXT:    lw a0, 16(s0)83; RV64I-LP64E-FPELIM-NEXT:    addi sp, s0, -1684; RV64I-LP64E-FPELIM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload85; RV64I-LP64E-FPELIM-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload86; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, 1687; RV64I-LP64E-FPELIM-NEXT:    ret88;89; RV64I-LP64E-WITHFP-LABEL: callee_float_on_stack:90; RV64I-LP64E-WITHFP:       # %bb.0:91; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, -1692; RV64I-LP64E-WITHFP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill93; RV64I-LP64E-WITHFP-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill94; RV64I-LP64E-WITHFP-NEXT:    addi s0, sp, 1695; RV64I-LP64E-WITHFP-NEXT:    andi sp, sp, -1696; RV64I-LP64E-WITHFP-NEXT:    lw a0, 16(s0)97; RV64I-LP64E-WITHFP-NEXT:    addi sp, s0, -1698; RV64I-LP64E-WITHFP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload99; RV64I-LP64E-WITHFP-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload100; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, 16101; RV64I-LP64E-WITHFP-NEXT:    ret102  %1 = trunc i128 %d to i64103  %2 = bitcast float %e to i32104  %3 = sext i32 %2 to i64105  %4 = add i64 %1, %3106  ret i64 %3107}108 109define i64 @caller_float_on_stack() nounwind {110; RV64I-LP64E-FPELIM-LABEL: caller_float_on_stack:111; RV64I-LP64E-FPELIM:       # %bb.0:112; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, -48113; RV64I-LP64E-FPELIM-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill114; RV64I-LP64E-FPELIM-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill115; RV64I-LP64E-FPELIM-NEXT:    addi s0, sp, 48116; RV64I-LP64E-FPELIM-NEXT:    andi sp, sp, -16117; RV64I-LP64E-FPELIM-NEXT:    lui a1, 264704118; RV64I-LP64E-FPELIM-NEXT:    li a3, 4119; RV64I-LP64E-FPELIM-NEXT:    li a0, 1120; RV64I-LP64E-FPELIM-NEXT:    li a2, 2121; RV64I-LP64E-FPELIM-NEXT:    li a4, 3122; RV64I-LP64E-FPELIM-NEXT:    sd a3, 0(sp)123; RV64I-LP64E-FPELIM-NEXT:    sd zero, 8(sp)124; RV64I-LP64E-FPELIM-NEXT:    sd a1, 16(sp)125; RV64I-LP64E-FPELIM-NEXT:    li a1, 0126; RV64I-LP64E-FPELIM-NEXT:    li a3, 0127; RV64I-LP64E-FPELIM-NEXT:    li a5, 0128; RV64I-LP64E-FPELIM-NEXT:    call callee_float_on_stack129; RV64I-LP64E-FPELIM-NEXT:    addi sp, s0, -48130; RV64I-LP64E-FPELIM-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload131; RV64I-LP64E-FPELIM-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload132; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, 48133; RV64I-LP64E-FPELIM-NEXT:    ret134;135; RV64I-LP64E-WITHFP-LABEL: caller_float_on_stack:136; RV64I-LP64E-WITHFP:       # %bb.0:137; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, -48138; RV64I-LP64E-WITHFP-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill139; RV64I-LP64E-WITHFP-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill140; RV64I-LP64E-WITHFP-NEXT:    addi s0, sp, 48141; RV64I-LP64E-WITHFP-NEXT:    andi sp, sp, -16142; RV64I-LP64E-WITHFP-NEXT:    lui a1, 264704143; RV64I-LP64E-WITHFP-NEXT:    li a3, 4144; RV64I-LP64E-WITHFP-NEXT:    li a0, 1145; RV64I-LP64E-WITHFP-NEXT:    li a2, 2146; RV64I-LP64E-WITHFP-NEXT:    li a4, 3147; RV64I-LP64E-WITHFP-NEXT:    sd a3, 0(sp)148; RV64I-LP64E-WITHFP-NEXT:    sd zero, 8(sp)149; RV64I-LP64E-WITHFP-NEXT:    sd a1, 16(sp)150; RV64I-LP64E-WITHFP-NEXT:    li a1, 0151; RV64I-LP64E-WITHFP-NEXT:    li a3, 0152; RV64I-LP64E-WITHFP-NEXT:    li a5, 0153; RV64I-LP64E-WITHFP-NEXT:    call callee_float_on_stack154; RV64I-LP64E-WITHFP-NEXT:    addi sp, s0, -48155; RV64I-LP64E-WITHFP-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload156; RV64I-LP64E-WITHFP-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload157; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, 48158; RV64I-LP64E-WITHFP-NEXT:    ret159  %1 = call i64 @callee_float_on_stack(i128 1, i128 2, i128 3, i128 4, float 5.0)160  ret i64 %1161}162 163define float @callee_tiny_scalar_ret() nounwind {164; RV64I-LP64E-FPELIM-LABEL: callee_tiny_scalar_ret:165; RV64I-LP64E-FPELIM:       # %bb.0:166; RV64I-LP64E-FPELIM-NEXT:    lui a0, 260096167; RV64I-LP64E-FPELIM-NEXT:    ret168;169; RV64I-LP64E-WITHFP-LABEL: callee_tiny_scalar_ret:170; RV64I-LP64E-WITHFP:       # %bb.0:171; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, -16172; RV64I-LP64E-WITHFP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill173; RV64I-LP64E-WITHFP-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill174; RV64I-LP64E-WITHFP-NEXT:    addi s0, sp, 16175; RV64I-LP64E-WITHFP-NEXT:    lui a0, 260096176; RV64I-LP64E-WITHFP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload177; RV64I-LP64E-WITHFP-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload178; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, 16179; RV64I-LP64E-WITHFP-NEXT:    ret180  ret float 1.0181}182 183; The sign extension of the float return is necessary, as softened floats are184; passed anyext.185 186define i64 @caller_tiny_scalar_ret() nounwind {187; RV64I-LP64E-FPELIM-LABEL: caller_tiny_scalar_ret:188; RV64I-LP64E-FPELIM:       # %bb.0:189; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, -8190; RV64I-LP64E-FPELIM-NEXT:    sd ra, 0(sp) # 8-byte Folded Spill191; RV64I-LP64E-FPELIM-NEXT:    call callee_tiny_scalar_ret192; RV64I-LP64E-FPELIM-NEXT:    sext.w a0, a0193; RV64I-LP64E-FPELIM-NEXT:    ld ra, 0(sp) # 8-byte Folded Reload194; RV64I-LP64E-FPELIM-NEXT:    addi sp, sp, 8195; RV64I-LP64E-FPELIM-NEXT:    ret196;197; RV64I-LP64E-WITHFP-LABEL: caller_tiny_scalar_ret:198; RV64I-LP64E-WITHFP:       # %bb.0:199; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, -16200; RV64I-LP64E-WITHFP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill201; RV64I-LP64E-WITHFP-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill202; RV64I-LP64E-WITHFP-NEXT:    addi s0, sp, 16203; RV64I-LP64E-WITHFP-NEXT:    call callee_tiny_scalar_ret204; RV64I-LP64E-WITHFP-NEXT:    sext.w a0, a0205; RV64I-LP64E-WITHFP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload206; RV64I-LP64E-WITHFP-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload207; RV64I-LP64E-WITHFP-NEXT:    addi sp, sp, 16208; RV64I-LP64E-WITHFP-NEXT:    ret209  %1 = call float @callee_tiny_scalar_ret()210  %2 = bitcast float %1 to i32211  %3 = sext i32 %2 to i64212  ret i64 %3213}214