160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 --mattr=-f < %s | FileCheck %s --check-prefix=LA644 5define i32 @fptosi_i32_fp128(fp128 %X) nounwind {6; LA32-LABEL: fptosi_i32_fp128:7; LA32: # %bb.0:8; LA32-NEXT: addi.w $sp, $sp, -329; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill10; LA32-NEXT: ld.w $a1, $a0, 011; LA32-NEXT: ld.w $a2, $a0, 412; LA32-NEXT: ld.w $a3, $a0, 813; LA32-NEXT: ld.w $a0, $a0, 1214; LA32-NEXT: st.w $a0, $sp, 2015; LA32-NEXT: st.w $a3, $sp, 1616; LA32-NEXT: st.w $a2, $sp, 1217; LA32-NEXT: addi.w $a0, $sp, 818; LA32-NEXT: st.w $a1, $sp, 819; LA32-NEXT: bl __fixtfsi20; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload21; LA32-NEXT: addi.w $sp, $sp, 3222; LA32-NEXT: ret23;24; LA64-LABEL: fptosi_i32_fp128:25; LA64: # %bb.0:26; LA64-NEXT: addi.d $sp, $sp, -1627; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill28; LA64-NEXT: pcaddu18i $ra, %call36(__fixtfsi)29; LA64-NEXT: jirl $ra, $ra, 030; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload31; LA64-NEXT: addi.d $sp, $sp, 1632; LA64-NEXT: ret33 %tmp = fptosi fp128 %X to i3234 ret i32 %tmp35}36 37define i32 @fptosi_i32_double(double %X) nounwind {38; LA32-LABEL: fptosi_i32_double:39; LA32: # %bb.0:40; LA32-NEXT: addi.w $sp, $sp, -1641; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill42; LA32-NEXT: bl __fixdfsi43; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload44; LA32-NEXT: addi.w $sp, $sp, 1645; LA32-NEXT: ret46;47; LA64-LABEL: fptosi_i32_double:48; LA64: # %bb.0:49; LA64-NEXT: addi.d $sp, $sp, -1650; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill51; LA64-NEXT: pcaddu18i $ra, %call36(__fixdfsi)52; LA64-NEXT: jirl $ra, $ra, 053; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload54; LA64-NEXT: addi.d $sp, $sp, 1655; LA64-NEXT: ret56 %tmp = fptosi double %X to i3257 ret i32 %tmp58}59 60define i32 @fptosi_i32_float(float %X) nounwind {61; LA32-LABEL: fptosi_i32_float:62; LA32: # %bb.0:63; LA32-NEXT: addi.w $sp, $sp, -1664; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill65; LA32-NEXT: bl __fixsfsi66; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload67; LA32-NEXT: addi.w $sp, $sp, 1668; LA32-NEXT: ret69;70; LA64-LABEL: fptosi_i32_float:71; LA64: # %bb.0:72; LA64-NEXT: addi.d $sp, $sp, -1673; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill74; LA64-NEXT: pcaddu18i $ra, %call36(__fixsfsi)75; LA64-NEXT: jirl $ra, $ra, 076; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload77; LA64-NEXT: addi.d $sp, $sp, 1678; LA64-NEXT: ret79 %tmp = fptosi float %X to i3280 ret i32 %tmp81}82 83define i64 @fptosi_i64_fp128(fp128 %X) nounwind {84; LA32-LABEL: fptosi_i64_fp128:85; LA32: # %bb.0:86; LA32-NEXT: addi.w $sp, $sp, -3287; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill88; LA32-NEXT: ld.w $a1, $a0, 089; LA32-NEXT: ld.w $a2, $a0, 490; LA32-NEXT: ld.w $a3, $a0, 891; LA32-NEXT: ld.w $a0, $a0, 1292; LA32-NEXT: st.w $a0, $sp, 1293; LA32-NEXT: st.w $a3, $sp, 894; LA32-NEXT: st.w $a2, $sp, 495; LA32-NEXT: addi.w $a0, $sp, 096; LA32-NEXT: st.w $a1, $sp, 097; LA32-NEXT: bl __fixtfdi98; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload99; LA32-NEXT: addi.w $sp, $sp, 32100; LA32-NEXT: ret101;102; LA64-LABEL: fptosi_i64_fp128:103; LA64: # %bb.0:104; LA64-NEXT: addi.d $sp, $sp, -16105; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill106; LA64-NEXT: pcaddu18i $ra, %call36(__fixtfdi)107; LA64-NEXT: jirl $ra, $ra, 0108; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload109; LA64-NEXT: addi.d $sp, $sp, 16110; LA64-NEXT: ret111 %tmp = fptosi fp128 %X to i64112 ret i64 %tmp113}114 115define i64 @fptosi_i64_double(double %X) nounwind {116; LA32-LABEL: fptosi_i64_double:117; LA32: # %bb.0:118; LA32-NEXT: addi.w $sp, $sp, -16119; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill120; LA32-NEXT: bl __fixdfdi121; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload122; LA32-NEXT: addi.w $sp, $sp, 16123; LA32-NEXT: ret124;125; LA64-LABEL: fptosi_i64_double:126; LA64: # %bb.0:127; LA64-NEXT: addi.d $sp, $sp, -16128; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill129; LA64-NEXT: pcaddu18i $ra, %call36(__fixdfdi)130; LA64-NEXT: jirl $ra, $ra, 0131; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload132; LA64-NEXT: addi.d $sp, $sp, 16133; LA64-NEXT: ret134 %tmp = fptosi double %X to i64135 ret i64 %tmp136}137 138define i64 @fptosi_i64_float(float %X) nounwind {139; LA32-LABEL: fptosi_i64_float:140; LA32: # %bb.0:141; LA32-NEXT: addi.w $sp, $sp, -16142; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill143; LA32-NEXT: bl __fixsfdi144; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload145; LA32-NEXT: addi.w $sp, $sp, 16146; LA32-NEXT: ret147;148; LA64-LABEL: fptosi_i64_float:149; LA64: # %bb.0:150; LA64-NEXT: addi.d $sp, $sp, -16151; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill152; LA64-NEXT: pcaddu18i $ra, %call36(__fixsfdi)153; LA64-NEXT: jirl $ra, $ra, 0154; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload155; LA64-NEXT: addi.d $sp, $sp, 16156; LA64-NEXT: ret157 %tmp = fptosi float %X to i64158 ret i64 %tmp159}160