
For now, just support atomic operations by libcall. Further, should investigate atomic implementation in CSKY target and codegen with atomic and fence related instructions.
80 lines
2.2 KiB
LLVM
80 lines
2.2 KiB
LLVM
; 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 void @fence_acquire() nounwind {
|
|
; CSKY-LABEL: fence_acquire:
|
|
; CSKY: # %bb.0:
|
|
; CSKY-NEXT: subi16 sp, sp, 4
|
|
; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill
|
|
; 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
|
|
; CSKY-NEXT: .LCPI0_0:
|
|
; CSKY-NEXT: .long __sync_synchronize
|
|
;
|
|
fence acquire
|
|
ret void
|
|
}
|
|
|
|
define void @fence_release() nounwind {
|
|
; CSKY-LABEL: fence_release:
|
|
; CSKY: # %bb.0:
|
|
; CSKY-NEXT: subi16 sp, sp, 4
|
|
; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill
|
|
; 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
|
|
; CSKY-NEXT: .LCPI1_0:
|
|
; CSKY-NEXT: .long __sync_synchronize
|
|
;
|
|
fence release
|
|
ret void
|
|
}
|
|
|
|
define void @fence_acq_rel() nounwind {
|
|
; CSKY-LABEL: fence_acq_rel:
|
|
; CSKY: # %bb.0:
|
|
; CSKY-NEXT: subi16 sp, sp, 4
|
|
; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill
|
|
; 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
|
|
; CSKY-NEXT: .LCPI2_0:
|
|
; CSKY-NEXT: .long __sync_synchronize
|
|
;
|
|
fence acq_rel
|
|
ret void
|
|
}
|
|
|
|
define void @fence_seq_cst() nounwind {
|
|
; CSKY-LABEL: fence_seq_cst:
|
|
; CSKY: # %bb.0:
|
|
; CSKY-NEXT: subi16 sp, sp, 4
|
|
; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill
|
|
; 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
|
|
; CSKY-NEXT: .LCPI3_0:
|
|
; CSKY-NEXT: .long __sync_synchronize
|
|
;
|
|
fence seq_cst
|
|
ret void
|
|
}
|