[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fp-min-max-global-atomics-gfx10.ll
blob17bf2ea89c6ca36d7fa467b825579b8d38185f54
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs | FileCheck %s -check-prefix=GFX10
4 ; RUN: llc < %s -global-isel -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs | FileCheck %s -check-prefix=G_GFX10
6 declare double @llvm.amdgcn.global.atomic.fmin.f64.p1f64.f64(double addrspace(1)* %ptr, double %data)
7 declare double @llvm.amdgcn.global.atomic.fmax.f64.p1f64.f64(double addrspace(1)* %ptr, double %data)
8 declare float @llvm.amdgcn.global.atomic.fmin.f32.p1f32.f32(float addrspace(1)* %ptr, float %data)
9 declare float @llvm.amdgcn.global.atomic.fmax.f32.p1f32.f32(float addrspace(1)* %ptr, float %data)
11 define amdgpu_kernel void @global_atomic_fmin_f32_noret(float addrspace(1)* %ptr, float %data) {
12 ; GFX10-LABEL: global_atomic_fmin_f32_noret:
13 ; GFX10:       ; %bb.0: ; %main_body
14 ; GFX10-NEXT:    s_clause 0x1
15 ; GFX10-NEXT:    s_load_dword s4, s[0:1], 0x2c
16 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
17 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
18 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
19 ; GFX10-NEXT:    v_mov_b32_e32 v1, s4
20 ; GFX10-NEXT:    global_atomic_fmin v0, v1, s[2:3]
21 ; GFX10-NEXT:    s_endpgm
23 ; G_GFX10-LABEL: global_atomic_fmin_f32_noret:
24 ; G_GFX10:       ; %bb.0: ; %main_body
25 ; G_GFX10-NEXT:    s_clause 0x1
26 ; G_GFX10-NEXT:    s_load_dword s4, s[0:1], 0x2c
27 ; G_GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
28 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, 0
29 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
30 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s4
31 ; G_GFX10-NEXT:    global_atomic_fmin v1, v0, s[2:3]
32 ; G_GFX10-NEXT:    s_endpgm
33 main_body:
34   %ret = call float @llvm.amdgcn.global.atomic.fmin.f32.p1f32.f32(float addrspace(1)* %ptr, float %data)
35   ret void
38 define amdgpu_kernel void @global_atomic_fmax_f32_noret(float addrspace(1)* %ptr, float %data) {
39 ; GFX10-LABEL: global_atomic_fmax_f32_noret:
40 ; GFX10:       ; %bb.0: ; %main_body
41 ; GFX10-NEXT:    s_clause 0x1
42 ; GFX10-NEXT:    s_load_dword s4, s[0:1], 0x2c
43 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
44 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
45 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
46 ; GFX10-NEXT:    v_mov_b32_e32 v1, s4
47 ; GFX10-NEXT:    global_atomic_fmax v0, v1, s[2:3]
48 ; GFX10-NEXT:    s_endpgm
50 ; G_GFX10-LABEL: global_atomic_fmax_f32_noret:
51 ; G_GFX10:       ; %bb.0: ; %main_body
52 ; G_GFX10-NEXT:    s_clause 0x1
53 ; G_GFX10-NEXT:    s_load_dword s4, s[0:1], 0x2c
54 ; G_GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
55 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, 0
56 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
57 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s4
58 ; G_GFX10-NEXT:    global_atomic_fmax v1, v0, s[2:3]
59 ; G_GFX10-NEXT:    s_endpgm
60 main_body:
61   %ret = call float @llvm.amdgcn.global.atomic.fmax.f32.p1f32.f32(float addrspace(1)* %ptr, float %data)
62   ret void
65 define float @global_atomic_fmax_f32_rtn(float addrspace(1)* %ptr, float %data) {
66 ; GFX10-LABEL: global_atomic_fmax_f32_rtn:
67 ; GFX10:       ; %bb.0: ; %main_body
68 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
69 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
70 ; GFX10-NEXT:    global_atomic_fmax v0, v[0:1], v2, off glc
71 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
72 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
74 ; G_GFX10-LABEL: global_atomic_fmax_f32_rtn:
75 ; G_GFX10:       ; %bb.0: ; %main_body
76 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
77 ; G_GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
78 ; G_GFX10-NEXT:    global_atomic_fmax v0, v[0:1], v2, off glc
79 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
80 ; G_GFX10-NEXT:    s_setpc_b64 s[30:31]
81 main_body:
82   %ret = call float @llvm.amdgcn.global.atomic.fmax.f32.p1f32.f32(float addrspace(1)* %ptr, float %data)
83   ret float %ret
86 define float @global_atomic_fmin_f32_rtn(float addrspace(1)* %ptr, float %data) {
87 ; GFX10-LABEL: global_atomic_fmin_f32_rtn:
88 ; GFX10:       ; %bb.0: ; %main_body
89 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
90 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
91 ; GFX10-NEXT:    global_atomic_fmin v0, v[0:1], v2, off glc
92 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
93 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
95 ; G_GFX10-LABEL: global_atomic_fmin_f32_rtn:
96 ; G_GFX10:       ; %bb.0: ; %main_body
97 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
98 ; G_GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
99 ; G_GFX10-NEXT:    global_atomic_fmin v0, v[0:1], v2, off glc
100 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
101 ; G_GFX10-NEXT:    s_setpc_b64 s[30:31]
102 main_body:
103   %ret = call float @llvm.amdgcn.global.atomic.fmin.f32.p1f32.f32(float addrspace(1)* %ptr, float %data)
104   ret float %ret
107 define amdgpu_kernel void @global_atomic_fmin_f64_noret(double addrspace(1)* %ptr, double %data) {
108 ; GFX10-LABEL: global_atomic_fmin_f64_noret:
109 ; GFX10:       ; %bb.0: ; %main_body
110 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
111 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
112 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
113 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
114 ; GFX10-NEXT:    v_mov_b32_e32 v1, s3
115 ; GFX10-NEXT:    global_atomic_fmin_x2 v2, v[0:1], s[0:1]
116 ; GFX10-NEXT:    s_endpgm
118 ; G_GFX10-LABEL: global_atomic_fmin_f64_noret:
119 ; G_GFX10:       ; %bb.0: ; %main_body
120 ; G_GFX10-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
121 ; G_GFX10-NEXT:    v_mov_b32_e32 v2, 0
122 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
123 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s2
124 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, s3
125 ; G_GFX10-NEXT:    global_atomic_fmin_x2 v2, v[0:1], s[0:1]
126 ; G_GFX10-NEXT:    s_endpgm
127 main_body:
128   %ret = call double @llvm.amdgcn.global.atomic.fmin.f64.p1f64.f64(double addrspace(1)* %ptr, double %data)
129   ret void
132 define amdgpu_kernel void @global_atomic_fmax_f64_noret(double addrspace(1)* %ptr, double %data) {
133 ; GFX10-LABEL: global_atomic_fmax_f64_noret:
134 ; GFX10:       ; %bb.0: ; %main_body
135 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
136 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
137 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
138 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
139 ; GFX10-NEXT:    v_mov_b32_e32 v1, s3
140 ; GFX10-NEXT:    global_atomic_fmax_x2 v2, v[0:1], s[0:1]
141 ; GFX10-NEXT:    s_endpgm
143 ; G_GFX10-LABEL: global_atomic_fmax_f64_noret:
144 ; G_GFX10:       ; %bb.0: ; %main_body
145 ; G_GFX10-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
146 ; G_GFX10-NEXT:    v_mov_b32_e32 v2, 0
147 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
148 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s2
149 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, s3
150 ; G_GFX10-NEXT:    global_atomic_fmax_x2 v2, v[0:1], s[0:1]
151 ; G_GFX10-NEXT:    s_endpgm
152 main_body:
153   %ret = call double @llvm.amdgcn.global.atomic.fmax.f64.p1f64.f64(double addrspace(1)* %ptr, double %data)
154   ret void
157 define double @global_atomic_fmax_f64_rtn(double addrspace(1)* %ptr, double %data) {
158 ; GFX10-LABEL: global_atomic_fmax_f64_rtn:
159 ; GFX10:       ; %bb.0: ; %main_body
160 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
161 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
162 ; GFX10-NEXT:    global_atomic_fmax_x2 v[0:1], v[0:1], v[2:3], off glc
163 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
164 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
166 ; G_GFX10-LABEL: global_atomic_fmax_f64_rtn:
167 ; G_GFX10:       ; %bb.0: ; %main_body
168 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
169 ; G_GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
170 ; G_GFX10-NEXT:    global_atomic_fmax_x2 v[0:1], v[0:1], v[2:3], off glc
171 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
172 ; G_GFX10-NEXT:    s_setpc_b64 s[30:31]
173 main_body:
174   %ret = call double @llvm.amdgcn.global.atomic.fmax.f64.p1f64.f64(double addrspace(1)* %ptr, double %data)
175   ret double %ret
178 define double @global_atomic_fmin_f64_rtn(double addrspace(1)* %ptr, double %data) {
179 ; GFX10-LABEL: global_atomic_fmin_f64_rtn:
180 ; GFX10:       ; %bb.0: ; %main_body
181 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
182 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
183 ; GFX10-NEXT:    global_atomic_fmin_x2 v[0:1], v[0:1], v[2:3], off glc
184 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
185 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
187 ; G_GFX10-LABEL: global_atomic_fmin_f64_rtn:
188 ; G_GFX10:       ; %bb.0: ; %main_body
189 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
190 ; G_GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
191 ; G_GFX10-NEXT:    global_atomic_fmin_x2 v[0:1], v[0:1], v[2:3], off glc
192 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
193 ; G_GFX10-NEXT:    s_setpc_b64 s[30:31]
194 main_body:
195   %ret = call double @llvm.amdgcn.global.atomic.fmin.f64.p1f64.f64(double addrspace(1)* %ptr, double %data)
196   ret double %ret