1; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=SI %s 2 3; FUNC-LABEL: {{^}}lds_atomic_xchg_ret_i64: 4; SI: ds_wrxchg_rtn_b64 5; SI: s_endpgm 6define void @lds_atomic_xchg_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 7 %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst 8 store i64 %result, i64 addrspace(1)* %out, align 8 9 ret void 10} 11 12; FUNC-LABEL: {{^}}lds_atomic_xchg_ret_i64_offset: 13; SI: ds_wrxchg_rtn_b64 {{.*}} offset:32 14; SI: s_endpgm 15define void @lds_atomic_xchg_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 16 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 17 %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst 18 store i64 %result, i64 addrspace(1)* %out, align 8 19 ret void 20} 21 22; FUNC-LABEL: {{^}}lds_atomic_add_ret_i64: 23; SI: ds_add_rtn_u64 24; SI: s_endpgm 25define void @lds_atomic_add_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 26 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst 27 store i64 %result, i64 addrspace(1)* %out, align 8 28 ret void 29} 30 31; FUNC-LABEL: {{^}}lds_atomic_add_ret_i64_offset: 32; SI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0xb 33; SI-DAG: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 9 34; SI-DAG: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0 35; SI-DAG: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]] 36; SI: ds_add_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32 [M0] 37; SI: buffer_store_dwordx2 [[RESULT]], 38; SI: s_endpgm 39define void @lds_atomic_add_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 40 %gep = getelementptr i64 addrspace(3)* %ptr, i64 4 41 %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst 42 store i64 %result, i64 addrspace(1)* %out, align 8 43 ret void 44} 45 46; FUNC-LABEL: {{^}}lds_atomic_inc_ret_i64: 47; SI: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1 48; SI: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1 49; SI: ds_inc_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} 50; SI: buffer_store_dwordx2 [[RESULT]], 51; SI: s_endpgm 52define void @lds_atomic_inc_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 53 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 1 seq_cst 54 store i64 %result, i64 addrspace(1)* %out, align 8 55 ret void 56} 57 58; FUNC-LABEL: {{^}}lds_atomic_inc_ret_i64_offset: 59; SI: ds_inc_rtn_u64 {{.*}} offset:32 60; SI: s_endpgm 61define void @lds_atomic_inc_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 62 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 63 %result = atomicrmw add i64 addrspace(3)* %gep, i64 1 seq_cst 64 store i64 %result, i64 addrspace(1)* %out, align 8 65 ret void 66} 67 68; FUNC-LABEL: {{^}}lds_atomic_sub_ret_i64: 69; SI: ds_sub_rtn_u64 70; SI: s_endpgm 71define void @lds_atomic_sub_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 72 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 4 seq_cst 73 store i64 %result, i64 addrspace(1)* %out, align 8 74 ret void 75} 76 77; FUNC-LABEL: {{^}}lds_atomic_sub_ret_i64_offset: 78; SI: ds_sub_rtn_u64 {{.*}} offset:32 79; SI: s_endpgm 80define void @lds_atomic_sub_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 81 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 82 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 4 seq_cst 83 store i64 %result, i64 addrspace(1)* %out, align 8 84 ret void 85} 86 87; FUNC-LABEL: {{^}}lds_atomic_dec_ret_i64: 88; SI: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1 89; SI: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1 90; SI: ds_dec_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} 91; SI: buffer_store_dwordx2 [[RESULT]], 92; SI: s_endpgm 93define void @lds_atomic_dec_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 94 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst 95 store i64 %result, i64 addrspace(1)* %out, align 8 96 ret void 97} 98 99; FUNC-LABEL: {{^}}lds_atomic_dec_ret_i64_offset: 100; SI: ds_dec_rtn_u64 {{.*}} offset:32 101; SI: s_endpgm 102define void @lds_atomic_dec_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 103 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 104 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst 105 store i64 %result, i64 addrspace(1)* %out, align 8 106 ret void 107} 108 109; FUNC-LABEL: {{^}}lds_atomic_and_ret_i64: 110; SI: ds_and_rtn_b64 111; SI: s_endpgm 112define void @lds_atomic_and_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 113 %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst 114 store i64 %result, i64 addrspace(1)* %out, align 8 115 ret void 116} 117 118; FUNC-LABEL: {{^}}lds_atomic_and_ret_i64_offset: 119; SI: ds_and_rtn_b64 {{.*}} offset:32 120; SI: s_endpgm 121define void @lds_atomic_and_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 122 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 123 %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst 124 store i64 %result, i64 addrspace(1)* %out, align 8 125 ret void 126} 127 128; FUNC-LABEL: {{^}}lds_atomic_or_ret_i64: 129; SI: ds_or_rtn_b64 130; SI: s_endpgm 131define void @lds_atomic_or_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 132 %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst 133 store i64 %result, i64 addrspace(1)* %out, align 8 134 ret void 135} 136 137; FUNC-LABEL: {{^}}lds_atomic_or_ret_i64_offset: 138; SI: ds_or_rtn_b64 {{.*}} offset:32 139; SI: s_endpgm 140define void @lds_atomic_or_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 141 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 142 %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst 143 store i64 %result, i64 addrspace(1)* %out, align 8 144 ret void 145} 146 147; FUNC-LABEL: {{^}}lds_atomic_xor_ret_i64: 148; SI: ds_xor_rtn_b64 149; SI: s_endpgm 150define void @lds_atomic_xor_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 151 %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst 152 store i64 %result, i64 addrspace(1)* %out, align 8 153 ret void 154} 155 156; FUNC-LABEL: {{^}}lds_atomic_xor_ret_i64_offset: 157; SI: ds_xor_rtn_b64 {{.*}} offset:32 158; SI: s_endpgm 159define void @lds_atomic_xor_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 160 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 161 %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst 162 store i64 %result, i64 addrspace(1)* %out, align 8 163 ret void 164} 165 166; FIXME: There is no atomic nand instr 167; XFUNC-LABEL: {{^}}lds_atomic_nand_ret_i64:uction, so we somehow need to expand this. 168; define void @lds_atomic_nand_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 169; %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst 170; store i64 %result, i64 addrspace(1)* %out, align 8 171; ret void 172; } 173 174; FUNC-LABEL: {{^}}lds_atomic_min_ret_i64: 175; SI: ds_min_rtn_i64 176; SI: s_endpgm 177define void @lds_atomic_min_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 178 %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst 179 store i64 %result, i64 addrspace(1)* %out, align 8 180 ret void 181} 182 183; FUNC-LABEL: {{^}}lds_atomic_min_ret_i64_offset: 184; SI: ds_min_rtn_i64 {{.*}} offset:32 185; SI: s_endpgm 186define void @lds_atomic_min_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 187 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 188 %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst 189 store i64 %result, i64 addrspace(1)* %out, align 8 190 ret void 191} 192 193; FUNC-LABEL: {{^}}lds_atomic_max_ret_i64: 194; SI: ds_max_rtn_i64 195; SI: s_endpgm 196define void @lds_atomic_max_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 197 %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst 198 store i64 %result, i64 addrspace(1)* %out, align 8 199 ret void 200} 201 202; FUNC-LABEL: {{^}}lds_atomic_max_ret_i64_offset: 203; SI: ds_max_rtn_i64 {{.*}} offset:32 204; SI: s_endpgm 205define void @lds_atomic_max_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 206 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 207 %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst 208 store i64 %result, i64 addrspace(1)* %out, align 8 209 ret void 210} 211 212; FUNC-LABEL: {{^}}lds_atomic_umin_ret_i64: 213; SI: ds_min_rtn_u64 214; SI: s_endpgm 215define void @lds_atomic_umin_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 216 %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst 217 store i64 %result, i64 addrspace(1)* %out, align 8 218 ret void 219} 220 221; FUNC-LABEL: {{^}}lds_atomic_umin_ret_i64_offset: 222; SI: ds_min_rtn_u64 {{.*}} offset:32 223; SI: s_endpgm 224define void @lds_atomic_umin_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 225 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 226 %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst 227 store i64 %result, i64 addrspace(1)* %out, align 8 228 ret void 229} 230 231; FUNC-LABEL: {{^}}lds_atomic_umax_ret_i64: 232; SI: ds_max_rtn_u64 233; SI: s_endpgm 234define void @lds_atomic_umax_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 235 %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst 236 store i64 %result, i64 addrspace(1)* %out, align 8 237 ret void 238} 239 240; FUNC-LABEL: {{^}}lds_atomic_umax_ret_i64_offset: 241; SI: ds_max_rtn_u64 {{.*}} offset:32 242; SI: s_endpgm 243define void @lds_atomic_umax_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind { 244 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 245 %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst 246 store i64 %result, i64 addrspace(1)* %out, align 8 247 ret void 248} 249 250; FUNC-LABEL: {{^}}lds_atomic_xchg_noret_i64: 251; SI: ds_wrxchg_rtn_b64 252; SI: s_endpgm 253define void @lds_atomic_xchg_noret_i64(i64 addrspace(3)* %ptr) nounwind { 254 %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst 255 ret void 256} 257 258; FUNC-LABEL: {{^}}lds_atomic_xchg_noret_i64_offset: 259; SI: ds_wrxchg_rtn_b64 {{.*}} offset:32 260; SI: s_endpgm 261define void @lds_atomic_xchg_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 262 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 263 %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst 264 ret void 265} 266 267; FUNC-LABEL: {{^}}lds_atomic_add_noret_i64: 268; SI: ds_add_u64 269; SI: s_endpgm 270define void @lds_atomic_add_noret_i64(i64 addrspace(3)* %ptr) nounwind { 271 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst 272 ret void 273} 274 275; FUNC-LABEL: {{^}}lds_atomic_add_noret_i64_offset: 276; SI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x9 277; SI: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]] 278; SI: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 9 279; SI: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0 280; SI: ds_add_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32 [M0] 281; SI: s_endpgm 282define void @lds_atomic_add_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 283 %gep = getelementptr i64 addrspace(3)* %ptr, i64 4 284 %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst 285 ret void 286} 287 288; FUNC-LABEL: {{^}}lds_atomic_inc_noret_i64: 289; SI: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1 290; SI: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1 291; SI: ds_inc_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} 292; SI: s_endpgm 293define void @lds_atomic_inc_noret_i64(i64 addrspace(3)* %ptr) nounwind { 294 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 1 seq_cst 295 ret void 296} 297 298; FUNC-LABEL: {{^}}lds_atomic_inc_noret_i64_offset: 299; SI: ds_inc_u64 {{.*}} offset:32 300; SI: s_endpgm 301define void @lds_atomic_inc_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 302 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 303 %result = atomicrmw add i64 addrspace(3)* %gep, i64 1 seq_cst 304 ret void 305} 306 307; FUNC-LABEL: {{^}}lds_atomic_sub_noret_i64: 308; SI: ds_sub_u64 309; SI: s_endpgm 310define void @lds_atomic_sub_noret_i64(i64 addrspace(3)* %ptr) nounwind { 311 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 4 seq_cst 312 ret void 313} 314 315; FUNC-LABEL: {{^}}lds_atomic_sub_noret_i64_offset: 316; SI: ds_sub_u64 {{.*}} offset:32 317; SI: s_endpgm 318define void @lds_atomic_sub_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 319 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 320 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 4 seq_cst 321 ret void 322} 323 324; FUNC-LABEL: {{^}}lds_atomic_dec_noret_i64: 325; SI: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1 326; SI: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1 327; SI: ds_dec_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} 328; SI: s_endpgm 329define void @lds_atomic_dec_noret_i64(i64 addrspace(3)* %ptr) nounwind { 330 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst 331 ret void 332} 333 334; FUNC-LABEL: {{^}}lds_atomic_dec_noret_i64_offset: 335; SI: ds_dec_u64 {{.*}} offset:32 336; SI: s_endpgm 337define void @lds_atomic_dec_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 338 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 339 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst 340 ret void 341} 342 343; FUNC-LABEL: {{^}}lds_atomic_and_noret_i64: 344; SI: ds_and_b64 345; SI: s_endpgm 346define void @lds_atomic_and_noret_i64(i64 addrspace(3)* %ptr) nounwind { 347 %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst 348 ret void 349} 350 351; FUNC-LABEL: {{^}}lds_atomic_and_noret_i64_offset: 352; SI: ds_and_b64 {{.*}} offset:32 353; SI: s_endpgm 354define void @lds_atomic_and_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 355 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 356 %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst 357 ret void 358} 359 360; FUNC-LABEL: {{^}}lds_atomic_or_noret_i64: 361; SI: ds_or_b64 362; SI: s_endpgm 363define void @lds_atomic_or_noret_i64(i64 addrspace(3)* %ptr) nounwind { 364 %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst 365 ret void 366} 367 368; FUNC-LABEL: {{^}}lds_atomic_or_noret_i64_offset: 369; SI: ds_or_b64 {{.*}} offset:32 370; SI: s_endpgm 371define void @lds_atomic_or_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 372 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 373 %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst 374 ret void 375} 376 377; FUNC-LABEL: {{^}}lds_atomic_xor_noret_i64: 378; SI: ds_xor_b64 379; SI: s_endpgm 380define void @lds_atomic_xor_noret_i64(i64 addrspace(3)* %ptr) nounwind { 381 %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst 382 ret void 383} 384 385; FUNC-LABEL: {{^}}lds_atomic_xor_noret_i64_offset: 386; SI: ds_xor_b64 {{.*}} offset:32 387; SI: s_endpgm 388define void @lds_atomic_xor_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 389 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 390 %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst 391 ret void 392} 393 394; FIXME: There is no atomic nand instr 395; XFUNC-LABEL: {{^}}lds_atomic_nand_noret_i64:uction, so we somehow need to expand this. 396; define void @lds_atomic_nand_noret_i64(i64 addrspace(3)* %ptr) nounwind { 397; %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst 398; ret void 399; } 400 401; FUNC-LABEL: {{^}}lds_atomic_min_noret_i64: 402; SI: ds_min_i64 403; SI: s_endpgm 404define void @lds_atomic_min_noret_i64(i64 addrspace(3)* %ptr) nounwind { 405 %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst 406 ret void 407} 408 409; FUNC-LABEL: {{^}}lds_atomic_min_noret_i64_offset: 410; SI: ds_min_i64 {{.*}} offset:32 411; SI: s_endpgm 412define void @lds_atomic_min_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 413 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 414 %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst 415 ret void 416} 417 418; FUNC-LABEL: {{^}}lds_atomic_max_noret_i64: 419; SI: ds_max_i64 420; SI: s_endpgm 421define void @lds_atomic_max_noret_i64(i64 addrspace(3)* %ptr) nounwind { 422 %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst 423 ret void 424} 425 426; FUNC-LABEL: {{^}}lds_atomic_max_noret_i64_offset: 427; SI: ds_max_i64 {{.*}} offset:32 428; SI: s_endpgm 429define void @lds_atomic_max_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 430 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 431 %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst 432 ret void 433} 434 435; FUNC-LABEL: {{^}}lds_atomic_umin_noret_i64: 436; SI: ds_min_u64 437; SI: s_endpgm 438define void @lds_atomic_umin_noret_i64(i64 addrspace(3)* %ptr) nounwind { 439 %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst 440 ret void 441} 442 443; FUNC-LABEL: {{^}}lds_atomic_umin_noret_i64_offset: 444; SI: ds_min_u64 {{.*}} offset:32 445; SI: s_endpgm 446define void @lds_atomic_umin_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 447 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 448 %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst 449 ret void 450} 451 452; FUNC-LABEL: {{^}}lds_atomic_umax_noret_i64: 453; SI: ds_max_u64 454; SI: s_endpgm 455define void @lds_atomic_umax_noret_i64(i64 addrspace(3)* %ptr) nounwind { 456 %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst 457 ret void 458} 459 460; FUNC-LABEL: {{^}}lds_atomic_umax_noret_i64_offset: 461; SI: ds_max_u64 {{.*}} offset:32 462; SI: s_endpgm 463define void @lds_atomic_umax_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind { 464 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4 465 %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst 466 ret void 467} 468