Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/LoongArch/ir-instruction/float-convert.ll
Show First 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | ; LA64D-NEXT: ret | ||||
ret i32 %1 | ret i32 %1 | ||||
} | } | ||||
define i64 @convert_float_to_i64(float %a) nounwind { | define i64 @convert_float_to_i64(float %a) nounwind { | ||||
; LA32F-LABEL: convert_float_to_i64: | ; LA32F-LABEL: convert_float_to_i64: | ||||
; LA32F: # %bb.0: | ; LA32F: # %bb.0: | ||||
; LA32F-NEXT: addi.w $sp, $sp, -16 | ; LA32F-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32F-NEXT: bl __fixsfdi | ; LA32F-NEXT: bl %plt(__fixsfdi) | ||||
; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32F-NEXT: addi.w $sp, $sp, 16 | ; LA32F-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32F-NEXT: ret | ; LA32F-NEXT: ret | ||||
; | ; | ||||
; LA32D-LABEL: convert_float_to_i64: | ; LA32D-LABEL: convert_float_to_i64: | ||||
; LA32D: # %bb.0: | ; LA32D: # %bb.0: | ||||
; LA32D-NEXT: addi.w $sp, $sp, -16 | ; LA32D-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32D-NEXT: bl __fixsfdi | ; LA32D-NEXT: bl %plt(__fixsfdi) | ||||
; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32D-NEXT: addi.w $sp, $sp, 16 | ; LA32D-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32D-NEXT: ret | ; LA32D-NEXT: ret | ||||
; | ; | ||||
; LA64F-LABEL: convert_float_to_i64: | ; LA64F-LABEL: convert_float_to_i64: | ||||
; LA64F: # %bb.0: | ; LA64F: # %bb.0: | ||||
; LA64F-NEXT: ftintrz.w.s $fa0, $fa0 | ; LA64F-NEXT: ftintrz.w.s $fa0, $fa0 | ||||
; LA64F-NEXT: movfr2gr.s $a0, $fa0 | ; LA64F-NEXT: movfr2gr.s $a0, $fa0 | ||||
▲ Show 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | ; LA64D-NEXT: ret | ||||
ret i32 %1 | ret i32 %1 | ||||
} | } | ||||
define i64 @convert_float_to_u64(float %a) nounwind { | define i64 @convert_float_to_u64(float %a) nounwind { | ||||
; LA32F-LABEL: convert_float_to_u64: | ; LA32F-LABEL: convert_float_to_u64: | ||||
; LA32F: # %bb.0: | ; LA32F: # %bb.0: | ||||
; LA32F-NEXT: addi.w $sp, $sp, -16 | ; LA32F-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32F-NEXT: bl __fixunssfdi | ; LA32F-NEXT: bl %plt(__fixunssfdi) | ||||
; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32F-NEXT: addi.w $sp, $sp, 16 | ; LA32F-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32F-NEXT: ret | ; LA32F-NEXT: ret | ||||
; | ; | ||||
; LA32D-LABEL: convert_float_to_u64: | ; LA32D-LABEL: convert_float_to_u64: | ||||
; LA32D: # %bb.0: | ; LA32D: # %bb.0: | ||||
; LA32D-NEXT: addi.w $sp, $sp, -16 | ; LA32D-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32D-NEXT: bl __fixunssfdi | ; LA32D-NEXT: bl %plt(__fixunssfdi) | ||||
; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32D-NEXT: addi.w $sp, $sp, 16 | ; LA32D-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32D-NEXT: ret | ; LA32D-NEXT: ret | ||||
; | ; | ||||
; LA64F-LABEL: convert_float_to_u64: | ; LA64F-LABEL: convert_float_to_u64: | ||||
; LA64F: # %bb.0: | ; LA64F: # %bb.0: | ||||
; LA64F-NEXT: pcalau12i $a0, .LCPI7_0 | ; LA64F-NEXT: pcalau12i $a0, .LCPI7_0 | ||||
; LA64F-NEXT: addi.d $a0, $a0, .LCPI7_0 | ; LA64F-NEXT: addi.d $a0, $a0, .LCPI7_0 | ||||
▲ Show 20 Lines • Show All 120 Lines • ▼ Show 20 Lines | ; LA64D-NEXT: ret | ||||
ret float %1 | ret float %1 | ||||
} | } | ||||
define float @convert_i64_to_float(i64 %a) nounwind { | define float @convert_i64_to_float(i64 %a) nounwind { | ||||
; LA32F-LABEL: convert_i64_to_float: | ; LA32F-LABEL: convert_i64_to_float: | ||||
; LA32F: # %bb.0: | ; LA32F: # %bb.0: | ||||
; LA32F-NEXT: addi.w $sp, $sp, -16 | ; LA32F-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32F-NEXT: bl __floatdisf | ; LA32F-NEXT: bl %plt(__floatdisf) | ||||
; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32F-NEXT: addi.w $sp, $sp, 16 | ; LA32F-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32F-NEXT: ret | ; LA32F-NEXT: ret | ||||
; | ; | ||||
; LA32D-LABEL: convert_i64_to_float: | ; LA32D-LABEL: convert_i64_to_float: | ||||
; LA32D: # %bb.0: | ; LA32D: # %bb.0: | ||||
; LA32D-NEXT: addi.w $sp, $sp, -16 | ; LA32D-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32D-NEXT: bl __floatdisf | ; LA32D-NEXT: bl %plt(__floatdisf) | ||||
; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32D-NEXT: addi.w $sp, $sp, 16 | ; LA32D-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32D-NEXT: ret | ; LA32D-NEXT: ret | ||||
; | ; | ||||
; LA64F-LABEL: convert_i64_to_float: | ; LA64F-LABEL: convert_i64_to_float: | ||||
; LA64F: # %bb.0: | ; LA64F: # %bb.0: | ||||
; LA64F-NEXT: movgr2fr.w $fa0, $a0 | ; LA64F-NEXT: movgr2fr.w $fa0, $a0 | ||||
; LA64F-NEXT: ffint.s.w $fa0, $fa0 | ; LA64F-NEXT: ffint.s.w $fa0, $fa0 | ||||
▲ Show 20 Lines • Show All 130 Lines • ▼ Show 20 Lines | ; LA64D-NEXT: ret | ||||
ret float %1 | ret float %1 | ||||
} | } | ||||
define float @convert_u64_to_float(i64 %a) nounwind { | define float @convert_u64_to_float(i64 %a) nounwind { | ||||
; LA32F-LABEL: convert_u64_to_float: | ; LA32F-LABEL: convert_u64_to_float: | ||||
; LA32F: # %bb.0: | ; LA32F: # %bb.0: | ||||
; LA32F-NEXT: addi.w $sp, $sp, -16 | ; LA32F-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32F-NEXT: bl __floatundisf | ; LA32F-NEXT: bl %plt(__floatundisf) | ||||
; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32F-NEXT: addi.w $sp, $sp, 16 | ; LA32F-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32F-NEXT: ret | ; LA32F-NEXT: ret | ||||
; | ; | ||||
; LA32D-LABEL: convert_u64_to_float: | ; LA32D-LABEL: convert_u64_to_float: | ||||
; LA32D: # %bb.0: | ; LA32D: # %bb.0: | ||||
; LA32D-NEXT: addi.w $sp, $sp, -16 | ; LA32D-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32D-NEXT: bl __floatundisf | ; LA32D-NEXT: bl %plt(__floatundisf) | ||||
; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32D-NEXT: addi.w $sp, $sp, 16 | ; LA32D-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32D-NEXT: ret | ; LA32D-NEXT: ret | ||||
; | ; | ||||
; LA64F-LABEL: convert_u64_to_float: | ; LA64F-LABEL: convert_u64_to_float: | ||||
; LA64F: # %bb.0: | ; LA64F: # %bb.0: | ||||
; LA64F-NEXT: srli.d $a1, $a0, 1 | ; LA64F-NEXT: srli.d $a1, $a0, 1 | ||||
; LA64F-NEXT: andi $a2, $a0, 1 | ; LA64F-NEXT: andi $a2, $a0, 1 | ||||
▲ Show 20 Lines • Show All 76 Lines • Show Last 20 Lines |