Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/LoongArch/ir-instruction/sdiv-udiv-srem-urem.ll
Show First 20 Lines • Show All 149 Lines • ▼ Show 20 Lines | |||||
define i64 @sdiv_i64(i64 %a, i64 %b) { | define i64 @sdiv_i64(i64 %a, i64 %b) { | ||||
; LA32-LABEL: sdiv_i64: | ; LA32-LABEL: sdiv_i64: | ||||
; LA32: # %bb.0: # %entry | ; LA32: # %bb.0: # %entry | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: .cfi_def_cfa_offset 16 | ; LA32-NEXT: .cfi_def_cfa_offset 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: .cfi_offset 1, -4 | ; LA32-NEXT: .cfi_offset 1, -4 | ||||
; LA32-NEXT: bl __divdi3 | ; LA32-NEXT: bl %plt(__divdi3) | ||||
; 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: sdiv_i64: | ; LA64-LABEL: sdiv_i64: | ||||
; LA64: # %bb.0: # %entry | ; LA64: # %bb.0: # %entry | ||||
; LA64-NEXT: div.d $a0, $a0, $a1 | ; LA64-NEXT: div.d $a0, $a0, $a1 | ||||
; LA64-NEXT: ret | ; LA64-NEXT: ret | ||||
; | ; | ||||
; LA32-TRAP-LABEL: sdiv_i64: | ; LA32-TRAP-LABEL: sdiv_i64: | ||||
; LA32-TRAP: # %bb.0: # %entry | ; LA32-TRAP: # %bb.0: # %entry | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ||||
; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ||||
; LA32-TRAP-NEXT: bl __divdi3 | ; LA32-TRAP-NEXT: bl %plt(__divdi3) | ||||
; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-TRAP-NEXT: ret | ; LA32-TRAP-NEXT: ret | ||||
; | ; | ||||
; LA64-TRAP-LABEL: sdiv_i64: | ; LA64-TRAP-LABEL: sdiv_i64: | ||||
; LA64-TRAP: # %bb.0: # %entry | ; LA64-TRAP: # %bb.0: # %entry | ||||
; LA64-TRAP-NEXT: div.d $a0, $a0, $a1 | ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1 | ||||
; LA64-TRAP-NEXT: bnez $a1, .LBB4_2 | ; LA64-TRAP-NEXT: bnez $a1, .LBB4_2 | ||||
▲ Show 20 Lines • Show All 148 Lines • ▼ Show 20 Lines | |||||
define i64 @udiv_i64(i64 %a, i64 %b) { | define i64 @udiv_i64(i64 %a, i64 %b) { | ||||
; LA32-LABEL: udiv_i64: | ; LA32-LABEL: udiv_i64: | ||||
; LA32: # %bb.0: # %entry | ; LA32: # %bb.0: # %entry | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: .cfi_def_cfa_offset 16 | ; LA32-NEXT: .cfi_def_cfa_offset 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: .cfi_offset 1, -4 | ; LA32-NEXT: .cfi_offset 1, -4 | ||||
; LA32-NEXT: bl __udivdi3 | ; LA32-NEXT: bl %plt(__udivdi3) | ||||
; 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: udiv_i64: | ; LA64-LABEL: udiv_i64: | ||||
; LA64: # %bb.0: # %entry | ; LA64: # %bb.0: # %entry | ||||
; LA64-NEXT: div.du $a0, $a0, $a1 | ; LA64-NEXT: div.du $a0, $a0, $a1 | ||||
; LA64-NEXT: ret | ; LA64-NEXT: ret | ||||
; | ; | ||||
; LA32-TRAP-LABEL: udiv_i64: | ; LA32-TRAP-LABEL: udiv_i64: | ||||
; LA32-TRAP: # %bb.0: # %entry | ; LA32-TRAP: # %bb.0: # %entry | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ||||
; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ||||
; LA32-TRAP-NEXT: bl __udivdi3 | ; LA32-TRAP-NEXT: bl %plt(__udivdi3) | ||||
; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-TRAP-NEXT: ret | ; LA32-TRAP-NEXT: ret | ||||
; | ; | ||||
; LA64-TRAP-LABEL: udiv_i64: | ; LA64-TRAP-LABEL: udiv_i64: | ||||
; LA64-TRAP: # %bb.0: # %entry | ; LA64-TRAP: # %bb.0: # %entry | ||||
; LA64-TRAP-NEXT: div.du $a0, $a0, $a1 | ; LA64-TRAP-NEXT: div.du $a0, $a0, $a1 | ||||
; LA64-TRAP-NEXT: bnez $a1, .LBB9_2 | ; LA64-TRAP-NEXT: bnez $a1, .LBB9_2 | ||||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | |||||
define i64 @srem_i64(i64 %a, i64 %b) { | define i64 @srem_i64(i64 %a, i64 %b) { | ||||
; LA32-LABEL: srem_i64: | ; LA32-LABEL: srem_i64: | ||||
; LA32: # %bb.0: # %entry | ; LA32: # %bb.0: # %entry | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: .cfi_def_cfa_offset 16 | ; LA32-NEXT: .cfi_def_cfa_offset 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: .cfi_offset 1, -4 | ; LA32-NEXT: .cfi_offset 1, -4 | ||||
; LA32-NEXT: bl __moddi3 | ; LA32-NEXT: bl %plt(__moddi3) | ||||
; 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: srem_i64: | ; LA64-LABEL: srem_i64: | ||||
; LA64: # %bb.0: # %entry | ; LA64: # %bb.0: # %entry | ||||
; LA64-NEXT: mod.d $a0, $a0, $a1 | ; LA64-NEXT: mod.d $a0, $a0, $a1 | ||||
; LA64-NEXT: ret | ; LA64-NEXT: ret | ||||
; | ; | ||||
; LA32-TRAP-LABEL: srem_i64: | ; LA32-TRAP-LABEL: srem_i64: | ||||
; LA32-TRAP: # %bb.0: # %entry | ; LA32-TRAP: # %bb.0: # %entry | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ||||
; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ||||
; LA32-TRAP-NEXT: bl __moddi3 | ; LA32-TRAP-NEXT: bl %plt(__moddi3) | ||||
; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-TRAP-NEXT: ret | ; LA32-TRAP-NEXT: ret | ||||
; | ; | ||||
; LA64-TRAP-LABEL: srem_i64: | ; LA64-TRAP-LABEL: srem_i64: | ||||
; LA64-TRAP: # %bb.0: # %entry | ; LA64-TRAP: # %bb.0: # %entry | ||||
; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1 | ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1 | ||||
; LA64-TRAP-NEXT: bnez $a1, .LBB14_2 | ; LA64-TRAP-NEXT: bnez $a1, .LBB14_2 | ||||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | |||||
define i64 @urem_i64(i64 %a, i64 %b) { | define i64 @urem_i64(i64 %a, i64 %b) { | ||||
; LA32-LABEL: urem_i64: | ; LA32-LABEL: urem_i64: | ||||
; LA32: # %bb.0: # %entry | ; LA32: # %bb.0: # %entry | ||||
; LA32-NEXT: addi.w $sp, $sp, -16 | ; LA32-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-NEXT: .cfi_def_cfa_offset 16 | ; LA32-NEXT: .cfi_def_cfa_offset 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: .cfi_offset 1, -4 | ; LA32-NEXT: .cfi_offset 1, -4 | ||||
; LA32-NEXT: bl __umoddi3 | ; LA32-NEXT: bl %plt(__umoddi3) | ||||
; 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: urem_i64: | ; LA64-LABEL: urem_i64: | ||||
; LA64: # %bb.0: # %entry | ; LA64: # %bb.0: # %entry | ||||
; LA64-NEXT: mod.du $a0, $a0, $a1 | ; LA64-NEXT: mod.du $a0, $a0, $a1 | ||||
; LA64-NEXT: ret | ; LA64-NEXT: ret | ||||
; | ; | ||||
; LA32-TRAP-LABEL: urem_i64: | ; LA32-TRAP-LABEL: urem_i64: | ||||
; LA32-TRAP: # %bb.0: # %entry | ; LA32-TRAP: # %bb.0: # %entry | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16 | ||||
; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16 | ||||
; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill | ||||
; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ; LA32-TRAP-NEXT: .cfi_offset 1, -4 | ||||
; LA32-TRAP-NEXT: bl __umoddi3 | ; LA32-TRAP-NEXT: bl %plt(__umoddi3) | ||||
; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload | ||||
; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16 | ||||
; LA32-TRAP-NEXT: ret | ; LA32-TRAP-NEXT: ret | ||||
; | ; | ||||
; LA64-TRAP-LABEL: urem_i64: | ; LA64-TRAP-LABEL: urem_i64: | ||||
; LA64-TRAP: # %bb.0: # %entry | ; LA64-TRAP: # %bb.0: # %entry | ||||
; LA64-TRAP-NEXT: mod.du $a0, $a0, $a1 | ; LA64-TRAP-NEXT: mod.du $a0, $a0, $a1 | ||||
; LA64-TRAP-NEXT: bnez $a1, .LBB19_2 | ; LA64-TRAP-NEXT: bnez $a1, .LBB19_2 | ||||
; LA64-TRAP-NEXT: # %bb.1: # %entry | ; LA64-TRAP-NEXT: # %bb.1: # %entry | ||||
; LA64-TRAP-NEXT: break 7 | ; LA64-TRAP-NEXT: break 7 | ||||
; LA64-TRAP-NEXT: .LBB19_2: # %entry | ; LA64-TRAP-NEXT: .LBB19_2: # %entry | ||||
; LA64-TRAP-NEXT: ret | ; LA64-TRAP-NEXT: ret | ||||
entry: | entry: | ||||
%r = urem i64 %a, %b | %r = urem i64 %a, %b | ||||
ret i64 %r | ret i64 %r | ||||
} | } |