125 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32,FP323; RUN: llc -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32,FP644 5define float @float_in_fpr(float %a, float %b) {6; MIPS32-LABEL: float_in_fpr:7; MIPS32: # %bb.0: # %entry8; MIPS32-NEXT: mov.s $f0, $f149; MIPS32-NEXT: jr $ra10; MIPS32-NEXT: nop11entry:12 ret float %b13}14 15define double @double_in_fpr(double %a, double %b) {16; MIPS32-LABEL: double_in_fpr:17; MIPS32: # %bb.0: # %entry18; MIPS32-NEXT: mov.d $f0, $f1419; MIPS32-NEXT: jr $ra20; MIPS32-NEXT: nop21entry:22 ret double %b23}24 25define float @float_in_gpr(i32 %a, float %b) {26; MIPS32-LABEL: float_in_gpr:27; MIPS32: # %bb.0: # %entry28; MIPS32-NEXT: mtc1 $5, $f029; MIPS32-NEXT: jr $ra30; MIPS32-NEXT: nop31entry:32 ret float %b33}34 35define double @double_in_gpr(i32 %a, double %b) {36; FP32-LABEL: double_in_gpr:37; FP32: # %bb.0: # %entry38; FP32-NEXT: mtc1 $6, $f039; FP32-NEXT: mtc1 $7, $f140; FP32-NEXT: jr $ra41; FP32-NEXT: nop42;43; FP64-LABEL: double_in_gpr:44; FP64: # %bb.0: # %entry45; FP64-NEXT: mtc1 $6, $f046; FP64-NEXT: mthc1 $7, $f047; FP64-NEXT: jr $ra48; FP64-NEXT: nop49entry:50 ret double %b51}52 53define float @call_float_in_fpr(float %a, float %b) {54; MIPS32-LABEL: call_float_in_fpr:55; MIPS32: # %bb.0: # %entry56; MIPS32-NEXT: addiu $sp, $sp, -2457; MIPS32-NEXT: .cfi_def_cfa_offset 2458; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill59; MIPS32-NEXT: .cfi_offset 31, -460; MIPS32-NEXT: jal float_in_fpr61; MIPS32-NEXT: nop62; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload63; MIPS32-NEXT: addiu $sp, $sp, 2464; MIPS32-NEXT: jr $ra65; MIPS32-NEXT: nop66entry:67 %call = call float @float_in_fpr(float %a, float %b)68 ret float %call69}70 71define double @call_double_in_fpr(double %a, double %b) {72; MIPS32-LABEL: call_double_in_fpr:73; MIPS32: # %bb.0: # %entry74; MIPS32-NEXT: addiu $sp, $sp, -2475; MIPS32-NEXT: .cfi_def_cfa_offset 2476; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill77; MIPS32-NEXT: .cfi_offset 31, -478; MIPS32-NEXT: jal double_in_fpr79; MIPS32-NEXT: nop80; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload81; MIPS32-NEXT: addiu $sp, $sp, 2482; MIPS32-NEXT: jr $ra83; MIPS32-NEXT: nop84entry:85 %call = call double @double_in_fpr(double %a, double %b)86 ret double %call87}88 89define float @call_float_in_gpr(i32 %a, float %b) {90; MIPS32-LABEL: call_float_in_gpr:91; MIPS32: # %bb.0: # %entry92; MIPS32-NEXT: addiu $sp, $sp, -2493; MIPS32-NEXT: .cfi_def_cfa_offset 2494; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill95; MIPS32-NEXT: .cfi_offset 31, -496; MIPS32-NEXT: jal float_in_gpr97; MIPS32-NEXT: nop98; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload99; MIPS32-NEXT: addiu $sp, $sp, 24100; MIPS32-NEXT: jr $ra101; MIPS32-NEXT: nop102entry:103 %call = call float @float_in_gpr(i32 %a, float %b)104 ret float %call105}106 107 108define double @call_double_in_gpr(i32 %a, double %b) {109; MIPS32-LABEL: call_double_in_gpr:110; MIPS32: # %bb.0: # %entry111; MIPS32-NEXT: addiu $sp, $sp, -24112; MIPS32-NEXT: .cfi_def_cfa_offset 24113; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill114; MIPS32-NEXT: .cfi_offset 31, -4115; MIPS32-NEXT: jal double_in_gpr116; MIPS32-NEXT: nop117; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload118; MIPS32-NEXT: addiu $sp, $sp, 24119; MIPS32-NEXT: jr $ra120; MIPS32-NEXT: nop121entry:122 %call = call double @double_in_gpr(i32 %a, double %b)123 ret double %call124}125