brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 1598c0f Raw
102 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc --mtriple=loongarch64 --target-abi=lp64s --mattr=-f < %s | FileCheck %s3 4;; This file contains specific tests for the lp64s ABI.5 6define i64 @callee_float_in_regs(i64 %a, float %b) nounwind {7; CHECK-LABEL: callee_float_in_regs:8; CHECK:       # %bb.0:9; CHECK-NEXT:    addi.d $sp, $sp, -1610; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill11; CHECK-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill12; CHECK-NEXT:    move $fp, $a013; CHECK-NEXT:    move $a0, $a114; CHECK-NEXT:    pcaddu18i $ra, %call36(__fixsfdi)15; CHECK-NEXT:    jirl $ra, $ra, 016; CHECK-NEXT:    add.d $a0, $fp, $a017; CHECK-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload18; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload19; CHECK-NEXT:    addi.d $sp, $sp, 1620; CHECK-NEXT:    ret21  %b_fptosi = fptosi float %b to i6422  %1 = add i64 %a, %b_fptosi23  ret i64 %124}25 26define i64 @caller_float_in_regs() nounwind {27; CHECK-LABEL: caller_float_in_regs:28; CHECK:       # %bb.0:29; CHECK-NEXT:    addi.d $sp, $sp, -1630; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill31; CHECK-NEXT:    lu12i.w $a1, 26214432; CHECK-NEXT:    ori $a0, $zero, 133; CHECK-NEXT:    pcaddu18i $ra, %call36(callee_float_in_regs)34; CHECK-NEXT:    jirl $ra, $ra, 035; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload36; CHECK-NEXT:    addi.d $sp, $sp, 1637; CHECK-NEXT:    ret38  %1 = call i64 @callee_float_in_regs(i64 1, float 2.0)39  ret i64 %140}41 42define i64 @callee_float_on_stack(i128 %a, i128 %b, i128 %c, i128 %d, float %e) nounwind {43; CHECK-LABEL: callee_float_on_stack:44; CHECK:       # %bb.0:45; CHECK-NEXT:    ld.w $a0, $sp, 046; CHECK-NEXT:    ret47  %1 = trunc i128 %d to i6448  %2 = bitcast float %e to i3249  %3 = sext i32 %2 to i6450  %4 = add i64 %1, %351  ret i64 %352}53 54define i64 @caller_float_on_stack() nounwind {55; CHECK-LABEL: caller_float_on_stack:56; CHECK:       # %bb.0:57; CHECK-NEXT:    addi.d $sp, $sp, -1658; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill59; CHECK-NEXT:    lu12i.w $a1, 26470460; CHECK-NEXT:    ori $a0, $zero, 161; CHECK-NEXT:    ori $a2, $zero, 262; CHECK-NEXT:    ori $a4, $zero, 363; CHECK-NEXT:    ori $a6, $zero, 464; CHECK-NEXT:    st.d $a1, $sp, 065; CHECK-NEXT:    move $a1, $zero66; CHECK-NEXT:    move $a3, $zero67; CHECK-NEXT:    move $a5, $zero68; CHECK-NEXT:    move $a7, $zero69; CHECK-NEXT:    pcaddu18i $ra, %call36(callee_float_on_stack)70; CHECK-NEXT:    jirl $ra, $ra, 071; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload72; CHECK-NEXT:    addi.d $sp, $sp, 1673; CHECK-NEXT:    ret74  %1 = call i64 @callee_float_on_stack(i128 1, i128 2, i128 3, i128 4, float 5.0)75  ret i64 %176}77 78define float @callee_tiny_scalar_ret() nounwind {79; CHECK-LABEL: callee_tiny_scalar_ret:80; CHECK:       # %bb.0:81; CHECK-NEXT:    lu12i.w $a0, 26009682; CHECK-NEXT:    ret83  ret float 1.084}85 86define i64 @caller_tiny_scalar_ret() nounwind {87; CHECK-LABEL: caller_tiny_scalar_ret:88; CHECK:       # %bb.0:89; CHECK-NEXT:    addi.d $sp, $sp, -1690; CHECK-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill91; CHECK-NEXT:    pcaddu18i $ra, %call36(callee_tiny_scalar_ret)92; CHECK-NEXT:    jirl $ra, $ra, 093; CHECK-NEXT:    addi.w $a0, $a0, 094; CHECK-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload95; CHECK-NEXT:    addi.d $sp, $sp, 1696; CHECK-NEXT:    ret97  %1 = call float @callee_tiny_scalar_ret()98  %2 = bitcast float %1 to i3299  %3 = sext i32 %2 to i64100  ret i64 %3101}102