| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ; RUN: llc -mtriple=csky -verify-machineinstrs -csky-no-aliases -mattr=+2e3 < %s \ | |
| ; RUN: | FileCheck -check-prefix=CSKY %s | |
| define i8 @atomicrmw_xchg_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI0_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI0_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_1 | |
| %1 = atomicrmw xchg ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xchg_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI1_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI1_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_1 | |
| %1 = atomicrmw xchg ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xchg_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI2_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI2_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_1 | |
| %1 = atomicrmw xchg ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xchg_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI3_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI3_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_1 | |
| %1 = atomicrmw xchg ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xchg_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI4_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI4_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_1 | |
| %1 = atomicrmw xchg ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_add_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI5_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI5_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_1 | |
| %1 = atomicrmw add ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_add_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI6_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI6_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_1 | |
| %1 = atomicrmw add ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_add_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI7_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI7_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_1 | |
| %1 = atomicrmw add ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_add_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI8_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI8_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_1 | |
| %1 = atomicrmw add ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_add_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI9_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI9_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_1 | |
| %1 = atomicrmw add ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_sub_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI10_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI10_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_1 | |
| %1 = atomicrmw sub ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_sub_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI11_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI11_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_1 | |
| %1 = atomicrmw sub ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_sub_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI12_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI12_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_1 | |
| %1 = atomicrmw sub ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_sub_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI13_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI13_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_1 | |
| %1 = atomicrmw sub ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_sub_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI14_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI14_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_1 | |
| %1 = atomicrmw sub ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_and_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI15_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI15_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_1 | |
| %1 = atomicrmw and ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_and_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI16_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI16_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_1 | |
| %1 = atomicrmw and ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_and_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI17_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI17_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_1 | |
| %1 = atomicrmw and ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_and_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI18_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI18_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_1 | |
| %1 = atomicrmw and ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_and_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI19_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI19_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_1 | |
| %1 = atomicrmw and ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_nand_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI20_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI20_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_1 | |
| %1 = atomicrmw nand ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_nand_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI21_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI21_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_1 | |
| %1 = atomicrmw nand ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_nand_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI22_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI22_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_1 | |
| %1 = atomicrmw nand ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_nand_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI23_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI23_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_1 | |
| %1 = atomicrmw nand ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_nand_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI24_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI24_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_1 | |
| %1 = atomicrmw nand ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_or_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI25_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI25_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_1 | |
| %1 = atomicrmw or ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_or_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI26_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI26_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_1 | |
| %1 = atomicrmw or ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_or_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI27_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI27_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_1 | |
| %1 = atomicrmw or ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_or_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI28_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI28_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_1 | |
| %1 = atomicrmw or ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_or_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI29_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI29_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_1 | |
| %1 = atomicrmw or ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xor_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI30_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI30_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_1 | |
| %1 = atomicrmw xor ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xor_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI31_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI31_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_1 | |
| %1 = atomicrmw xor ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xor_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI32_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI32_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_1 | |
| %1 = atomicrmw xor ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xor_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI33_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI33_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_1 | |
| %1 = atomicrmw xor ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_xor_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI34_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI34_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_1 | |
| %1 = atomicrmw xor ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_max_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI35_0] | |
| ; CSKY-NEXT: sextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB35_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI35_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB35_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI35_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI35_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw max ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_max_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI36_0] | |
| ; CSKY-NEXT: sextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB36_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI36_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB36_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI36_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI36_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw max ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_max_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI37_0] | |
| ; CSKY-NEXT: sextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB37_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI37_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB37_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI37_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI37_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw max ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_max_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI38_0] | |
| ; CSKY-NEXT: sextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB38_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI38_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB38_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI38_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI38_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw max ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_max_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI39_0] | |
| ; CSKY-NEXT: sextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB39_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI39_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB39_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI39_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI39_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw max ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_min_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI40_0] | |
| ; CSKY-NEXT: sextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB40_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI40_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB40_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI40_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI40_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw min ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_min_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI41_0] | |
| ; CSKY-NEXT: sextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB41_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI41_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB41_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI41_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI41_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw min ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_min_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI42_0] | |
| ; CSKY-NEXT: sextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB42_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI42_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB42_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI42_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI42_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw min ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_min_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI43_0] | |
| ; CSKY-NEXT: sextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB43_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI43_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB43_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI43_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI43_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw min ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_min_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI44_0] | |
| ; CSKY-NEXT: sextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB44_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sextb16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI44_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB44_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI44_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI44_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw min ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umax_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI45_0] | |
| ; CSKY-NEXT: zextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB45_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI45_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB45_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI45_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI45_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umax ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umax_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI46_0] | |
| ; CSKY-NEXT: zextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB46_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI46_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB46_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI46_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI46_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umax ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umax_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI47_0] | |
| ; CSKY-NEXT: zextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB47_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI47_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB47_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI47_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI47_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umax ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umax_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI48_0] | |
| ; CSKY-NEXT: zextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB48_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI48_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB48_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI48_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI48_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umax ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umax_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI49_0] | |
| ; CSKY-NEXT: zextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB49_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI49_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB49_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI49_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI49_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umax ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umin_i8_monotonic(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i8_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI50_0] | |
| ; CSKY-NEXT: zextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB50_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI50_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB50_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI50_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI50_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umin ptr %a, i8 %b monotonic | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umin_i8_acquire(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i8_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI51_0] | |
| ; CSKY-NEXT: zextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB51_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI51_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB51_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI51_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI51_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umin ptr %a, i8 %b acquire | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umin_i8_release(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i8_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI52_0] | |
| ; CSKY-NEXT: zextb16 l3, l0 | |
| ; CSKY-NEXT: .LBB52_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI52_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB52_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI52_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI52_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umin ptr %a, i8 %b release | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umin_i8_acq_rel(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i8_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI53_0] | |
| ; CSKY-NEXT: zextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB53_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI53_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB53_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI53_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI53_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umin ptr %a, i8 %b acq_rel | |
| ret i8 %1 | |
| } | |
| define i8 @atomicrmw_umin_i8_seq_cst(ptr %a, i8 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i8_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI54_0] | |
| ; CSKY-NEXT: zextb16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB54_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zextb16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.b a0, (sp, 7) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 7 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI54_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.b a0, (sp, 7) | |
| ; CSKY-NEXT: bez32 a1, .LBB54_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI54_0: | |
| ; CSKY-NEXT: .long __atomic_load_1 | |
| ; CSKY-NEXT: .LCPI54_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_1 | |
| %1 = atomicrmw umin ptr %a, i8 %b seq_cst | |
| ret i8 %1 | |
| } | |
| define i16 @atomicrmw_xchg_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI55_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI55_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_2 | |
| %1 = atomicrmw xchg ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xchg_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI56_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI56_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_2 | |
| %1 = atomicrmw xchg ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xchg_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI57_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI57_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_2 | |
| %1 = atomicrmw xchg ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xchg_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI58_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI58_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_2 | |
| %1 = atomicrmw xchg ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xchg_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI59_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI59_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_2 | |
| %1 = atomicrmw xchg ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_add_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI60_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI60_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_2 | |
| %1 = atomicrmw add ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_add_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI61_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI61_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_2 | |
| %1 = atomicrmw add ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_add_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI62_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI62_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_2 | |
| %1 = atomicrmw add ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_add_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI63_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI63_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_2 | |
| %1 = atomicrmw add ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_add_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI64_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI64_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_2 | |
| %1 = atomicrmw add ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_sub_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI65_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI65_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_2 | |
| %1 = atomicrmw sub ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_sub_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI66_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI66_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_2 | |
| %1 = atomicrmw sub ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_sub_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI67_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI67_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_2 | |
| %1 = atomicrmw sub ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_sub_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI68_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI68_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_2 | |
| %1 = atomicrmw sub ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_sub_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI69_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI69_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_2 | |
| %1 = atomicrmw sub ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_and_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI70_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI70_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_2 | |
| %1 = atomicrmw and ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_and_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI71_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI71_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_2 | |
| %1 = atomicrmw and ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_and_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI72_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI72_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_2 | |
| %1 = atomicrmw and ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_and_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI73_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI73_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_2 | |
| %1 = atomicrmw and ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_and_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI74_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI74_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_2 | |
| %1 = atomicrmw and ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_nand_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI75_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI75_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_2 | |
| %1 = atomicrmw nand ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_nand_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI76_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI76_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_2 | |
| %1 = atomicrmw nand ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_nand_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI77_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI77_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_2 | |
| %1 = atomicrmw nand ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_nand_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI78_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI78_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_2 | |
| %1 = atomicrmw nand ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_nand_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI79_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI79_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_2 | |
| %1 = atomicrmw nand ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_or_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI80_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI80_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_2 | |
| %1 = atomicrmw or ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_or_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI81_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI81_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_2 | |
| %1 = atomicrmw or ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_or_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI82_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI82_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_2 | |
| %1 = atomicrmw or ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_or_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI83_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI83_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_2 | |
| %1 = atomicrmw or ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_or_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI84_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI84_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_2 | |
| %1 = atomicrmw or ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xor_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI85_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI85_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_2 | |
| %1 = atomicrmw xor ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xor_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI86_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI86_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_2 | |
| %1 = atomicrmw xor ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xor_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI87_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI87_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_2 | |
| %1 = atomicrmw xor ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xor_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI88_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI88_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_2 | |
| %1 = atomicrmw xor ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_xor_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI89_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI89_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_2 | |
| %1 = atomicrmw xor ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_max_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI90_0] | |
| ; CSKY-NEXT: sexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB90_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI90_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB90_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI90_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI90_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw max ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_max_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI91_0] | |
| ; CSKY-NEXT: sexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB91_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI91_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB91_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI91_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI91_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw max ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_max_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI92_0] | |
| ; CSKY-NEXT: sexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB92_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI92_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB92_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI92_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI92_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw max ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_max_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI93_0] | |
| ; CSKY-NEXT: sexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB93_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI93_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB93_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI93_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI93_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw max ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_max_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI94_0] | |
| ; CSKY-NEXT: sexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB94_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI94_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB94_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI94_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI94_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw max ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_min_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI95_0] | |
| ; CSKY-NEXT: sexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB95_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI95_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB95_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI95_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI95_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw min ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_min_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI96_0] | |
| ; CSKY-NEXT: sexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB96_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI96_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB96_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI96_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI96_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw min ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_min_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI97_0] | |
| ; CSKY-NEXT: sexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB97_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI97_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB97_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI97_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI97_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw min ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_min_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI98_0] | |
| ; CSKY-NEXT: sexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB98_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI98_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB98_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI98_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI98_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw min ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_min_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI99_0] | |
| ; CSKY-NEXT: sexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB99_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: sexth16 a1, a0 | |
| ; CSKY-NEXT: cmplt16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI99_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB99_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI99_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI99_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw min ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umax_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI100_0] | |
| ; CSKY-NEXT: zexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB100_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI100_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB100_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI100_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI100_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umax ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umax_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI101_0] | |
| ; CSKY-NEXT: zexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB101_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI101_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB101_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI101_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI101_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umax ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umax_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI102_0] | |
| ; CSKY-NEXT: zexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB102_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI102_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB102_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI102_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI102_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umax ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umax_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI103_0] | |
| ; CSKY-NEXT: zexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB103_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI103_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB103_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI103_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI103_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umax ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umax_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI104_0] | |
| ; CSKY-NEXT: zexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB104_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI104_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB104_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI104_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI104_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umax ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umin_i16_monotonic(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i16_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI105_0] | |
| ; CSKY-NEXT: zexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB105_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI105_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB105_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI105_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI105_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umin ptr %a, i16 %b monotonic | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umin_i16_acquire(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i16_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI106_0] | |
| ; CSKY-NEXT: zexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB106_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI106_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB106_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI106_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI106_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umin ptr %a, i16 %b acquire | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umin_i16_release(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i16_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI107_0] | |
| ; CSKY-NEXT: zexth16 l3, l0 | |
| ; CSKY-NEXT: .LBB107_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l3, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI107_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB107_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI107_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI107_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umin ptr %a, i16 %b release | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umin_i16_acq_rel(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i16_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI108_0] | |
| ; CSKY-NEXT: zexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB108_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI108_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB108_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI108_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI108_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umin ptr %a, i16 %b acq_rel | |
| ret i16 %1 | |
| } | |
| define i16 @atomicrmw_umin_i16_seq_cst(ptr %a, i16 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i16_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI109_0] | |
| ; CSKY-NEXT: zexth16 l2, l0 | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB109_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: zexth16 a1, a0 | |
| ; CSKY-NEXT: cmphs16 l2, a1 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st32.h a0, (sp, 6) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi32 a1, sp, 6 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI109_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld32.h a0, (sp, 6) | |
| ; CSKY-NEXT: bez32 a1, .LBB109_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI109_0: | |
| ; CSKY-NEXT: .long __atomic_load_2 | |
| ; CSKY-NEXT: .LCPI109_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_2 | |
| %1 = atomicrmw umin ptr %a, i16 %b seq_cst | |
| ret i16 %1 | |
| } | |
| define i32 @atomicrmw_xchg_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI110_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI110_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_4 | |
| %1 = atomicrmw xchg ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xchg_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI111_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI111_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_4 | |
| %1 = atomicrmw xchg ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xchg_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI112_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI112_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_4 | |
| %1 = atomicrmw xchg ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xchg_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI113_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI113_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_4 | |
| %1 = atomicrmw xchg ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xchg_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI114_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI114_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_4 | |
| %1 = atomicrmw xchg ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_add_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI115_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI115_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_4 | |
| %1 = atomicrmw add ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_add_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI116_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI116_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_4 | |
| %1 = atomicrmw add ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_add_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI117_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI117_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_4 | |
| %1 = atomicrmw add ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_add_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI118_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI118_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_4 | |
| %1 = atomicrmw add ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_add_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI119_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI119_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_4 | |
| %1 = atomicrmw add ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_sub_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI120_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI120_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_4 | |
| %1 = atomicrmw sub ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_sub_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI121_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI121_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_4 | |
| %1 = atomicrmw sub ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_sub_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI122_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI122_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_4 | |
| %1 = atomicrmw sub ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_sub_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI123_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI123_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_4 | |
| %1 = atomicrmw sub ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_sub_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI124_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI124_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_4 | |
| %1 = atomicrmw sub ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_and_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI125_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI125_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_4 | |
| %1 = atomicrmw and ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_and_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI126_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI126_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_4 | |
| %1 = atomicrmw and ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_and_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI127_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI127_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_4 | |
| %1 = atomicrmw and ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_and_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI128_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI128_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_4 | |
| %1 = atomicrmw and ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_and_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI129_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI129_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_4 | |
| %1 = atomicrmw and ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_nand_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI130_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI130_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_4 | |
| %1 = atomicrmw nand ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_nand_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI131_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI131_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_4 | |
| %1 = atomicrmw nand ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_nand_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI132_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI132_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_4 | |
| %1 = atomicrmw nand ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_nand_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI133_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI133_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_4 | |
| %1 = atomicrmw nand ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_nand_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI134_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI134_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_4 | |
| %1 = atomicrmw nand ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_or_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI135_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI135_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_4 | |
| %1 = atomicrmw or ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_or_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI136_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI136_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_4 | |
| %1 = atomicrmw or ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_or_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI137_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI137_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_4 | |
| %1 = atomicrmw or ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_or_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI138_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI138_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_4 | |
| %1 = atomicrmw or ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_or_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI139_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI139_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_4 | |
| %1 = atomicrmw or ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xor_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI140_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI140_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_4 | |
| %1 = atomicrmw xor ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xor_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI141_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI141_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_4 | |
| %1 = atomicrmw xor ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xor_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI142_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI142_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_4 | |
| %1 = atomicrmw xor ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xor_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI143_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI143_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_4 | |
| %1 = atomicrmw xor ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_xor_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a2, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI144_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI144_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_4 | |
| %1 = atomicrmw xor ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_max_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI145_0] | |
| ; CSKY-NEXT: .LBB145_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI145_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB145_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI145_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI145_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw max ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_max_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI146_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB146_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI146_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB146_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI146_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI146_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw max ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_max_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI147_0] | |
| ; CSKY-NEXT: .LBB147_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI147_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB147_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI147_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI147_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw max ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_max_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI148_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB148_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI148_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB148_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI148_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI148_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw max ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_max_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI149_0] | |
| ; CSKY-NEXT: movi16 l2, 5 | |
| ; CSKY-NEXT: .LBB149_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI149_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB149_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI149_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI149_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw max ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_min_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI150_0] | |
| ; CSKY-NEXT: .LBB150_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI150_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB150_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI150_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI150_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw min ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_min_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI151_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB151_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI151_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB151_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI151_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI151_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw min ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_min_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI152_0] | |
| ; CSKY-NEXT: .LBB152_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI152_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB152_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI152_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI152_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw min ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_min_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI153_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB153_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI153_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB153_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI153_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI153_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw min ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_min_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI154_0] | |
| ; CSKY-NEXT: movi16 l2, 5 | |
| ; CSKY-NEXT: .LBB154_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI154_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB154_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI154_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI154_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw min ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umax_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI155_0] | |
| ; CSKY-NEXT: .LBB155_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI155_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB155_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI155_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI155_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umax ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umax_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI156_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB156_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI156_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB156_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI156_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI156_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umax ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umax_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI157_0] | |
| ; CSKY-NEXT: .LBB157_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI157_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB157_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI157_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI157_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umax ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umax_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI158_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB158_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI158_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB158_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI158_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI158_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umax ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umax_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI159_0] | |
| ; CSKY-NEXT: movi16 l2, 5 | |
| ; CSKY-NEXT: .LBB159_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movf32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI159_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB159_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI159_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI159_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umax ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umin_i32_monotonic(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i32_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI160_0] | |
| ; CSKY-NEXT: .LBB160_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI160_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB160_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI160_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI160_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umin ptr %a, i32 %b monotonic | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umin_i32_acquire(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i32_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI161_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB161_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI161_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB161_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI161_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI161_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umin ptr %a, i32 %b acquire | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umin_i32_release(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i32_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 l2, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI162_0] | |
| ; CSKY-NEXT: .LBB162_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI162_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB162_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI162_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI162_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umin ptr %a, i32 %b release | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umin_i32_acq_rel(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i32_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI163_0] | |
| ; CSKY-NEXT: movi16 l2, 2 | |
| ; CSKY-NEXT: .LBB163_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI163_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB163_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI163_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI163_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umin ptr %a, i32 %b acq_rel | |
| ret i32 %1 | |
| } | |
| define i32 @atomicrmw_umin_i32_seq_cst(ptr %a, i32 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i32_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 16 | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 8 | |
| ; CSKY-NEXT: mov16 l0, a1 | |
| ; CSKY-NEXT: mov16 l1, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI164_0] | |
| ; CSKY-NEXT: movi16 l2, 5 | |
| ; CSKY-NEXT: .LBB164_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l0, a0 | |
| ; CSKY-NEXT: mov16 a2, l0 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: st16.w a0, (sp, 4) | |
| ; CSKY-NEXT: st16.w l2, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l1 | |
| ; CSKY-NEXT: addi16 a1, sp, 4 | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI164_1] | |
| ; CSKY-NEXT: mov16 a1, a0 | |
| ; CSKY-NEXT: ld16.w a0, (sp, 4) | |
| ; CSKY-NEXT: bez32 a1, .LBB164_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 8 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 16 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI164_0: | |
| ; CSKY-NEXT: .long __atomic_load_4 | |
| ; CSKY-NEXT: .LCPI164_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_4 | |
| %1 = atomicrmw umin ptr %a, i32 %b seq_cst | |
| ret i32 %1 | |
| } | |
| define i64 @atomicrmw_xchg_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI165_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI165_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_8 | |
| %1 = atomicrmw xchg ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xchg_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI166_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI166_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_8 | |
| %1 = atomicrmw xchg ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xchg_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI167_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI167_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_8 | |
| %1 = atomicrmw xchg ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xchg_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI168_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI168_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_8 | |
| %1 = atomicrmw xchg ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xchg_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xchg_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI169_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI169_0: | |
| ; CSKY-NEXT: .long __atomic_exchange_8 | |
| %1 = atomicrmw xchg ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_add_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI170_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI170_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_8 | |
| %1 = atomicrmw add ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_add_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI171_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI171_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_8 | |
| %1 = atomicrmw add ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_add_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI172_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI172_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_8 | |
| %1 = atomicrmw add ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_add_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI173_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI173_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_8 | |
| %1 = atomicrmw add ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_add_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_add_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI174_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI174_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_add_8 | |
| %1 = atomicrmw add ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_sub_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI175_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI175_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_8 | |
| %1 = atomicrmw sub ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_sub_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI176_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI176_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_8 | |
| %1 = atomicrmw sub ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_sub_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI177_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI177_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_8 | |
| %1 = atomicrmw sub ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_sub_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI178_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI178_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_8 | |
| %1 = atomicrmw sub ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_sub_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_sub_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI179_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI179_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_sub_8 | |
| %1 = atomicrmw sub ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_and_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI180_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI180_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_8 | |
| %1 = atomicrmw and ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_and_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI181_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI181_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_8 | |
| %1 = atomicrmw and ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_and_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI182_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI182_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_8 | |
| %1 = atomicrmw and ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_and_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI183_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI183_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_8 | |
| %1 = atomicrmw and ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_and_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_and_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI184_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI184_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_and_8 | |
| %1 = atomicrmw and ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_nand_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI185_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI185_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_8 | |
| %1 = atomicrmw nand ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_nand_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI186_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI186_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_8 | |
| %1 = atomicrmw nand ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_nand_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI187_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI187_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_8 | |
| %1 = atomicrmw nand ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_nand_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI188_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI188_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_8 | |
| %1 = atomicrmw nand ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_nand_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_nand_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI189_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI189_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_nand_8 | |
| %1 = atomicrmw nand ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_or_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI190_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI190_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_8 | |
| %1 = atomicrmw or ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_or_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI191_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI191_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_8 | |
| %1 = atomicrmw or ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_or_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI192_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI192_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_8 | |
| %1 = atomicrmw or ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_or_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI193_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI193_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_8 | |
| %1 = atomicrmw or ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_or_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_or_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI194_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI194_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_or_8 | |
| %1 = atomicrmw or ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xor_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI195_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI195_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_8 | |
| %1 = atomicrmw xor ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xor_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 2 | |
| ; CSKY-NEXT: jsri32 [.LCPI196_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI196_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_8 | |
| %1 = atomicrmw xor ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xor_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 3 | |
| ; CSKY-NEXT: jsri32 [.LCPI197_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI197_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_8 | |
| %1 = atomicrmw xor ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xor_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 4 | |
| ; CSKY-NEXT: jsri32 [.LCPI198_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI198_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_8 | |
| %1 = atomicrmw xor ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_xor_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_xor_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 4 | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: movi16 a3, 5 | |
| ; CSKY-NEXT: jsri32 [.LCPI199_0] | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 4 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.1: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI199_0: | |
| ; CSKY-NEXT: .long __atomic_fetch_xor_8 | |
| %1 = atomicrmw xor ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_max_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI200_0] | |
| ; CSKY-NEXT: .LBB200_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI200_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB200_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI200_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI200_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw max ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_max_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI201_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB201_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI201_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB201_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI201_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI201_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw max ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_max_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI202_0] | |
| ; CSKY-NEXT: movi32 l4, 3 | |
| ; CSKY-NEXT: .LBB202_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI202_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB202_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI202_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI202_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw max ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_max_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI203_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: movi32 l4, 4 | |
| ; CSKY-NEXT: .LBB203_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI203_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB203_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI203_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI203_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw max ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_max_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_max_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI204_0] | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB204_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI204_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB204_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI204_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI204_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw max ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_min_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI205_0] | |
| ; CSKY-NEXT: .LBB205_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a2, a3 | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI205_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB205_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI205_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI205_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw min ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_min_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI206_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB206_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a2, a3 | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI206_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB206_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI206_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI206_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw min ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_min_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI207_0] | |
| ; CSKY-NEXT: movi32 l4, 3 | |
| ; CSKY-NEXT: .LBB207_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a2, a3 | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI207_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB207_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI207_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI207_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw min ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_min_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI208_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: movi32 l4, 4 | |
| ; CSKY-NEXT: .LBB208_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a2, a3 | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI208_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB208_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI208_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI208_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw min ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_min_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_min_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 28 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI209_0] | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB209_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmplt16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 16) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a2, a3 | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 20) | |
| ; CSKY-NEXT: st16.w a1, (sp, 24) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 20 | |
| ; CSKY-NEXT: jsri32 [.LCPI209_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 24) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 20) | |
| ; CSKY-NEXT: bez32 a2, .LBB209_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 28 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI209_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI209_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw min ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umax_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI210_0] | |
| ; CSKY-NEXT: .LBB210_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 12) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 16) | |
| ; CSKY-NEXT: st16.w a1, (sp, 20) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 16 | |
| ; CSKY-NEXT: jsri32 [.LCPI210_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 16) | |
| ; CSKY-NEXT: bez32 a2, .LBB210_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI210_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI210_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umax ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umax_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI211_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB211_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 12) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 16) | |
| ; CSKY-NEXT: st16.w a1, (sp, 20) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 16 | |
| ; CSKY-NEXT: jsri32 [.LCPI211_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 16) | |
| ; CSKY-NEXT: bez32 a2, .LBB211_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI211_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI211_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umax ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umax_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI212_0] | |
| ; CSKY-NEXT: movi32 l4, 3 | |
| ; CSKY-NEXT: .LBB212_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 12) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 16) | |
| ; CSKY-NEXT: st16.w a1, (sp, 20) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 16 | |
| ; CSKY-NEXT: jsri32 [.LCPI212_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 16) | |
| ; CSKY-NEXT: bez32 a2, .LBB212_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI212_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI212_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umax ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umax_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI213_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: movi32 l4, 4 | |
| ; CSKY-NEXT: .LBB213_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 12) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 16) | |
| ; CSKY-NEXT: st16.w a1, (sp, 20) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 16 | |
| ; CSKY-NEXT: jsri32 [.LCPI213_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 16) | |
| ; CSKY-NEXT: bez32 a2, .LBB213_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI213_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI213_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umax ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umax_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umax_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI214_0] | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB214_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvcv16 a2 | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvcv16 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 12) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 16) | |
| ; CSKY-NEXT: st16.w a1, (sp, 20) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 16 | |
| ; CSKY-NEXT: jsri32 [.LCPI214_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 16) | |
| ; CSKY-NEXT: bez32 a2, .LBB214_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI214_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI214_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umax ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umin_i64_monotonic(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i64_monotonic: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 32 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI215_0] | |
| ; CSKY-NEXT: .LBB215_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a2, (sp, 16) | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 20) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 24) | |
| ; CSKY-NEXT: st16.w a1, (sp, 28) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 24 | |
| ; CSKY-NEXT: jsri32 [.LCPI215_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 28) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 24) | |
| ; CSKY-NEXT: bez32 a2, .LBB215_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 32 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI215_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI215_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umin ptr %a, i64 %b monotonic | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umin_i64_acquire(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i64_acquire: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 32 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI216_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: .LBB216_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a2, (sp, 16) | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 20) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 24) | |
| ; CSKY-NEXT: st16.w a1, (sp, 28) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 24 | |
| ; CSKY-NEXT: jsri32 [.LCPI216_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 28) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 24) | |
| ; CSKY-NEXT: bez32 a2, .LBB216_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 32 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI216_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI216_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umin ptr %a, i64 %b acquire | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umin_i64_release(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i64_release: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 32 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 l3, 0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI217_0] | |
| ; CSKY-NEXT: movi32 l4, 3 | |
| ; CSKY-NEXT: .LBB217_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a2, (sp, 16) | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 20) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 24) | |
| ; CSKY-NEXT: st16.w a1, (sp, 28) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 24 | |
| ; CSKY-NEXT: jsri32 [.LCPI217_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 28) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 24) | |
| ; CSKY-NEXT: bez32 a2, .LBB217_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 32 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI217_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI217_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umin ptr %a, i64 %b release | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umin_i64_acq_rel(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i64_acq_rel: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 24 | |
| ; CSKY-NEXT: st16.w l3, (sp, 20) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 32 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI218_0] | |
| ; CSKY-NEXT: movi16 l3, 2 | |
| ; CSKY-NEXT: movi32 l4, 4 | |
| ; CSKY-NEXT: .LBB218_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a2, (sp, 16) | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 20) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 24) | |
| ; CSKY-NEXT: st16.w a1, (sp, 28) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st32.w l4, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 24 | |
| ; CSKY-NEXT: jsri32 [.LCPI218_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 28) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 24) | |
| ; CSKY-NEXT: bez32 a2, .LBB218_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 32 | |
| ; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 20) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 24 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI218_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI218_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umin ptr %a, i64 %b acq_rel | |
| ret i64 %1 | |
| } | |
| define i64 @atomicrmw_umin_i64_seq_cst(ptr %a, i64 %b) nounwind { | |
| ; CSKY-LABEL: atomicrmw_umin_i64_seq_cst: | |
| ; CSKY: # %bb.0: | |
| ; CSKY-NEXT: subi16 sp, sp, 20 | |
| ; CSKY-NEXT: st16.w l3, (sp, 16) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l2, (sp, 12) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l1, (sp, 8) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st16.w l0, (sp, 4) # 4-byte Folded Spill | |
| ; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill | |
| ; CSKY-NEXT: subi16 sp, sp, 32 | |
| ; CSKY-NEXT: mov16 l0, a2 | |
| ; CSKY-NEXT: mov16 l1, a1 | |
| ; CSKY-NEXT: mov16 l2, a0 | |
| ; CSKY-NEXT: movi16 a1, 0 | |
| ; CSKY-NEXT: jsri32 [.LCPI219_0] | |
| ; CSKY-NEXT: movi16 l3, 5 | |
| ; CSKY-NEXT: .LBB219_1: # %atomicrmw.start | |
| ; CSKY-NEXT: # =>This Inner Loop Header: Depth=1 | |
| ; CSKY-NEXT: cmphs16 l1, a0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 16) | |
| ; CSKY-NEXT: cmphs16 l0, a1 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 12) | |
| ; CSKY-NEXT: cmpne16 a1, l0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: st16.w a2, (sp, 20) | |
| ; CSKY-NEXT: ld16.w a2, (sp, 16) | |
| ; CSKY-NEXT: btsti16 a2, 0 | |
| ; CSKY-NEXT: mvc32 a2 | |
| ; CSKY-NEXT: ld16.w a3, (sp, 12) | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mvc32 a3 | |
| ; CSKY-NEXT: ld32.w t0, (sp, 20) | |
| ; CSKY-NEXT: btsti32 t0, 0 | |
| ; CSKY-NEXT: movf32 a3, a2 | |
| ; CSKY-NEXT: btsti16 a3, 0 | |
| ; CSKY-NEXT: mov16 a2, l1 | |
| ; CSKY-NEXT: movt32 a2, a0 | |
| ; CSKY-NEXT: mov16 a3, l0 | |
| ; CSKY-NEXT: movt32 a3, a1 | |
| ; CSKY-NEXT: st16.w a0, (sp, 24) | |
| ; CSKY-NEXT: st16.w a1, (sp, 28) | |
| ; CSKY-NEXT: st16.w l3, (sp, 4) | |
| ; CSKY-NEXT: st16.w l3, (sp, 0) | |
| ; CSKY-NEXT: mov16 a0, l2 | |
| ; CSKY-NEXT: addi16 a1, sp, 24 | |
| ; CSKY-NEXT: jsri32 [.LCPI219_1] | |
| ; CSKY-NEXT: mov16 a2, a0 | |
| ; CSKY-NEXT: ld16.w a1, (sp, 28) | |
| ; CSKY-NEXT: ld16.w a0, (sp, 24) | |
| ; CSKY-NEXT: bez32 a2, .LBB219_1 | |
| ; CSKY-NEXT: # %bb.2: # %atomicrmw.end | |
| ; CSKY-NEXT: addi16 sp, sp, 32 | |
| ; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l0, (sp, 4) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l1, (sp, 8) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l2, (sp, 12) # 4-byte Folded Reload | |
| ; CSKY-NEXT: ld16.w l3, (sp, 16) # 4-byte Folded Reload | |
| ; CSKY-NEXT: addi16 sp, sp, 20 | |
| ; CSKY-NEXT: rts16 | |
| ; CSKY-NEXT: .p2align 1 | |
| ; CSKY-NEXT: # %bb.3: | |
| ; CSKY-NEXT: .p2align 2, 0x0 | |
| ; CSKY-NEXT: .LCPI219_0: | |
| ; CSKY-NEXT: .long __atomic_load_8 | |
| ; CSKY-NEXT: .LCPI219_1: | |
| ; CSKY-NEXT: .long __atomic_compare_exchange_8 | |
| %1 = atomicrmw umin ptr %a, i64 %b seq_cst | |
| ret i64 %1 | |
| } |