aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/AMDGPU/atomics-cas-remarks-gfx90a.ll
blob: bc9008c6f1745b3cbd424a9def40b259b52f5636 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
; RUN: llc -mtriple=amdgcn -mcpu=gfx90a -verify-machineinstrs --pass-remarks=atomic-expand \
; RUN:      %s -o - 2>&1 | FileCheck %s --check-prefix=GFX90A-CAS

; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at system memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at agent memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at workgroup memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at wavefront memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at singlethread memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at one-as memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at agent-one-as memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at workgroup-one-as memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at wavefront-one-as memory scope
; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at singlethread-one-as memory scope

; GFX90A-CAS-LABEL: atomic_add_cas:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_agent:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_agent(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("agent") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_workgroup:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_workgroup(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("workgroup") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_wavefront:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_wavefront(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("wavefront") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_singlethread:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_singlethread(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("singlethread") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_one_as:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_one_as(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("one-as") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_agent_one_as:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_agent_one_as(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("agent-one-as") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_workgroup_one_as:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_workgroup_one_as(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("workgroup-one-as") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_wavefront_one_as:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_wavefront_one_as(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("wavefront-one-as") monotonic, align 4
  ret void
}

; GFX90A-CAS-LABEL: atomic_add_cas_singlethread_one_as:
; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc
; GFX90A-CAS: s_cbranch_execnz
define dso_local void @atomic_add_cas_singlethread_one_as(ptr %p, float %q) {
entry:
  %ret = atomicrmw fadd ptr %p, float %q syncscope("singlethread-one-as") monotonic, align 4
  ret void
}