Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/LoongArch/ir-instruction/double-convert.ll
Show First 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | ; LA64-NEXT: ret | ||||
ret double %1 | ret double %1 | ||||
} | } | ||||
define double @convert_i64_to_double(i64 %a) nounwind { | define double @convert_i64_to_double(i64 %a) nounwind { | ||||
; LA32-LABEL: convert_i64_to_double: | ; LA32-LABEL: convert_i64_to_double: | ||||
; LA32: # %bb.0: | ; LA32: # %bb.0: | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-NEXT: bl __floatdidf | ; LA32-NEXT: bl %plt(__floatdidf) | ||||
; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-NEXT: addi.w $sp, $sp, 16 | ; LA32-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-NEXT: ret | ; LA32-NEXT: ret | ||||
; | ; | ||||
; LA64-LABEL: convert_i64_to_double: | ; LA64-LABEL: convert_i64_to_double: | ||||
; LA64: # %bb.0: | ; LA64: # %bb.0: | ||||
; LA64-NEXT: movgr2fr.d $fa0, $a0 | ; LA64-NEXT: movgr2fr.d $fa0, $a0 | ||||
; LA64-NEXT: ffint.d.l $fa0, $fa0 | ; LA64-NEXT: ffint.d.l $fa0, $fa0 | ||||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | ; LA64-NEXT: ret | ||||
ret i32 %1 | ret i32 %1 | ||||
} | } | ||||
define i64 @convert_double_to_i64(double %a) nounwind { | define i64 @convert_double_to_i64(double %a) nounwind { | ||||
; LA32-LABEL: convert_double_to_i64: | ; LA32-LABEL: convert_double_to_i64: | ||||
; LA32: # %bb.0: | ; LA32: # %bb.0: | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-NEXT: bl __fixdfdi | ; LA32-NEXT: bl %plt(__fixdfdi) | ||||
; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-NEXT: addi.w $sp, $sp, 16 | ; LA32-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-NEXT: ret | ; LA32-NEXT: ret | ||||
; | ; | ||||
; LA64-LABEL: convert_double_to_i64: | ; LA64-LABEL: convert_double_to_i64: | ||||
; LA64: # %bb.0: | ; LA64: # %bb.0: | ||||
; LA64-NEXT: ftintrz.l.d $fa0, $fa0 | ; LA64-NEXT: ftintrz.l.d $fa0, $fa0 | ||||
; LA64-NEXT: movfr2gr.d $a0, $fa0 | ; LA64-NEXT: movfr2gr.d $a0, $fa0 | ||||
; LA64-NEXT: ret | ; LA64-NEXT: ret | ||||
%1 = fptosi double %a to i64 | %1 = fptosi double %a to i64 | ||||
ret i64 %1 | ret i64 %1 | ||||
} | } | ||||
define i64 @convert_double_to_u64(double %a) nounwind { | define i64 @convert_double_to_u64(double %a) nounwind { | ||||
; LA32-LABEL: convert_double_to_u64: | ; LA32-LABEL: convert_double_to_u64: | ||||
; LA32: # %bb.0: | ; LA32: # %bb.0: | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-NEXT: bl __fixunsdfdi | ; LA32-NEXT: bl %plt(__fixunsdfdi) | ||||
; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-NEXT: addi.w $sp, $sp, 16 | ; LA32-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-NEXT: ret | ; LA32-NEXT: ret | ||||
; | ; | ||||
; LA64-LABEL: convert_double_to_u64: | ; LA64-LABEL: convert_double_to_u64: | ||||
; LA64: # %bb.0: | ; LA64: # %bb.0: | ||||
; LA64-NEXT: pcalau12i $a0, .LCPI9_0 | ; LA64-NEXT: pcalau12i $a0, .LCPI9_0 | ||||
; LA64-NEXT: addi.d $a0, $a0, .LCPI9_0 | ; LA64-NEXT: addi.d $a0, $a0, .LCPI9_0 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | ; LA64-NEXT: ret | ||||
ret double %1 | ret double %1 | ||||
} | } | ||||
define double @convert_u64_to_double(i64 %a) nounwind { | define double @convert_u64_to_double(i64 %a) nounwind { | ||||
; LA32-LABEL: convert_u64_to_double: | ; LA32-LABEL: convert_u64_to_double: | ||||
; LA32: # %bb.0: | ; LA32: # %bb.0: | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-NEXT: bl __floatundidf | ; LA32-NEXT: bl %plt(__floatundidf) | ||||
; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-NEXT: addi.w $sp, $sp, 16 | ; LA32-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-NEXT: ret | ; LA32-NEXT: ret | ||||
; | ; | ||||
; LA64-LABEL: convert_u64_to_double: | ; LA64-LABEL: convert_u64_to_double: | ||||
; LA64: # %bb.0: | ; LA64: # %bb.0: | ||||
; LA64-NEXT: srli.d $a1, $a0, 32 | ; LA64-NEXT: srli.d $a1, $a0, 32 | ||||
; LA64-NEXT: lu52i.d $a2, $zero, 1107 | ; LA64-NEXT: lu52i.d $a2, $zero, 1107 | ||||
▲ Show 20 Lines • Show All 50 Lines • Show Last 20 Lines |