1d8699210SPiotr Sobczak; RUN: llc -global-isel -global-isel-abort=0 -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,CI %s 2d8699210SPiotr Sobczak; RUN: llc -global-isel -global-isel-abort=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s 3d8699210SPiotr Sobczak 4d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i8: 5d8699210SPiotr Sobczak; GCN: s_waitcnt 6d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 7d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 8d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u8 v0, v0{{$}} 9d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 10d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 11*8e0faddaSMatt Arsenaultdefine i8 @atomic_load_monotonic_i8(ptr addrspace(3) %ptr) { 12*8e0faddaSMatt Arsenault %load = load atomic i8, ptr addrspace(3) %ptr monotonic, align 1 13d8699210SPiotr Sobczak ret i8 %load 14d8699210SPiotr Sobczak} 15d8699210SPiotr Sobczak 16d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i8_offset: 17d8699210SPiotr Sobczak; GCN: s_waitcnt 18d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 19d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 20d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u8 v0, v0 offset:16{{$}} 21d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 22d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 23*8e0faddaSMatt Arsenaultdefine i8 @atomic_load_monotonic_i8_offset(ptr addrspace(3) %ptr) { 24*8e0faddaSMatt Arsenault %gep = getelementptr inbounds i8, ptr addrspace(3) %ptr, i8 16 25*8e0faddaSMatt Arsenault %load = load atomic i8, ptr addrspace(3) %gep monotonic, align 1 26d8699210SPiotr Sobczak ret i8 %load 27d8699210SPiotr Sobczak} 28d8699210SPiotr Sobczak 29d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i16: 30d8699210SPiotr Sobczak; GCN: s_waitcnt 31d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 32d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 33d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u16 v0, v0{{$}} 34d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 35d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 36*8e0faddaSMatt Arsenaultdefine i16 @atomic_load_monotonic_i16(ptr addrspace(3) %ptr) { 37*8e0faddaSMatt Arsenault %load = load atomic i16, ptr addrspace(3) %ptr monotonic, align 2 38d8699210SPiotr Sobczak ret i16 %load 39d8699210SPiotr Sobczak} 40d8699210SPiotr Sobczak 41d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i16_offset: 42d8699210SPiotr Sobczak; GCN: s_waitcnt 43d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 44d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 45d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u16 v0, v0 offset:32{{$}} 46d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 47d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 48*8e0faddaSMatt Arsenaultdefine i16 @atomic_load_monotonic_i16_offset(ptr addrspace(3) %ptr) { 49*8e0faddaSMatt Arsenault %gep = getelementptr inbounds i16, ptr addrspace(3) %ptr, i16 16 50*8e0faddaSMatt Arsenault %load = load atomic i16, ptr addrspace(3) %gep monotonic, align 2 51d8699210SPiotr Sobczak ret i16 %load 52d8699210SPiotr Sobczak} 53d8699210SPiotr Sobczak 54d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i32: 55d8699210SPiotr Sobczak; GCN: s_waitcnt 56d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 57d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 58d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0{{$}} 59d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 60d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 61*8e0faddaSMatt Arsenaultdefine i32 @atomic_load_monotonic_i32(ptr addrspace(3) %ptr) { 62*8e0faddaSMatt Arsenault %load = load atomic i32, ptr addrspace(3) %ptr monotonic, align 4 63d8699210SPiotr Sobczak ret i32 %load 64d8699210SPiotr Sobczak} 65d8699210SPiotr Sobczak 66d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i32_offset: 67d8699210SPiotr Sobczak; GCN: s_waitcnt 68d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 69d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 70d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}} 71d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 72d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 73*8e0faddaSMatt Arsenaultdefine i32 @atomic_load_monotonic_i32_offset(ptr addrspace(3) %ptr) { 74*8e0faddaSMatt Arsenault %gep = getelementptr inbounds i32, ptr addrspace(3) %ptr, i32 16 75*8e0faddaSMatt Arsenault %load = load atomic i32, ptr addrspace(3) %gep monotonic, align 4 76d8699210SPiotr Sobczak ret i32 %load 77d8699210SPiotr Sobczak} 78d8699210SPiotr Sobczak 79d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i64: 80d8699210SPiotr Sobczak; GCN: s_waitcnt 81d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 82d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 83d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0{{$}} 84d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 85d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 86*8e0faddaSMatt Arsenaultdefine i64 @atomic_load_monotonic_i64(ptr addrspace(3) %ptr) { 87*8e0faddaSMatt Arsenault %load = load atomic i64, ptr addrspace(3) %ptr monotonic, align 8 88d8699210SPiotr Sobczak ret i64 %load 89d8699210SPiotr Sobczak} 90d8699210SPiotr Sobczak 91d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i64_offset: 92d8699210SPiotr Sobczak; GCN: s_waitcnt 93d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 94d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 95d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}} 96d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 97d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 98*8e0faddaSMatt Arsenaultdefine i64 @atomic_load_monotonic_i64_offset(ptr addrspace(3) %ptr) { 99*8e0faddaSMatt Arsenault %gep = getelementptr inbounds i64, ptr addrspace(3) %ptr, i32 16 100*8e0faddaSMatt Arsenault %load = load atomic i64, ptr addrspace(3) %gep monotonic, align 8 101d8699210SPiotr Sobczak ret i64 %load 102d8699210SPiotr Sobczak} 103d8699210SPiotr Sobczak 104d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_f32_offset: 105d8699210SPiotr Sobczak; GCN: s_waitcnt 106d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 107d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 108d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}} 109d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 110d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 111*8e0faddaSMatt Arsenaultdefine float @atomic_load_monotonic_f32_offset(ptr addrspace(3) %ptr) { 112*8e0faddaSMatt Arsenault %gep = getelementptr inbounds float, ptr addrspace(3) %ptr, i32 16 113*8e0faddaSMatt Arsenault %load = load atomic float, ptr addrspace(3) %gep monotonic, align 4 114d8699210SPiotr Sobczak ret float %load 115d8699210SPiotr Sobczak} 116d8699210SPiotr Sobczak 117d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_f64_offset: 118d8699210SPiotr Sobczak; GCN: s_waitcnt 119d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 120d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 121d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}} 122d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 123d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 124*8e0faddaSMatt Arsenaultdefine double @atomic_load_monotonic_f64_offset(ptr addrspace(3) %ptr) { 125*8e0faddaSMatt Arsenault %gep = getelementptr inbounds double, ptr addrspace(3) %ptr, i32 16 126*8e0faddaSMatt Arsenault %load = load atomic double, ptr addrspace(3) %gep monotonic, align 8 127d8699210SPiotr Sobczak ret double %load 128d8699210SPiotr Sobczak} 129d8699210SPiotr Sobczak 130d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_p0i8_offset: 131d8699210SPiotr Sobczak; GCN: s_waitcnt 132d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 133d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 134d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}} 135d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 136d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 137*8e0faddaSMatt Arsenaultdefine ptr @atomic_load_monotonic_p0i8_offset(ptr addrspace(3) %ptr) { 138*8e0faddaSMatt Arsenault %gep = getelementptr inbounds ptr, ptr addrspace(3) %ptr, i32 16 139*8e0faddaSMatt Arsenault %load = load atomic ptr, ptr addrspace(3) %gep monotonic, align 8 140*8e0faddaSMatt Arsenault ret ptr %load 141d8699210SPiotr Sobczak} 142d8699210SPiotr Sobczak 143d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_p3i8_offset: 144d8699210SPiotr Sobczak; GCN: s_waitcnt 145d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0 146d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0 147d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}} 148d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0) 149d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64 150*8e0faddaSMatt Arsenaultdefine ptr addrspace(3) @atomic_load_monotonic_p3i8_offset(ptr addrspace(3) %ptr) { 151*8e0faddaSMatt Arsenault %gep = getelementptr inbounds ptr addrspace(3), ptr addrspace(3) %ptr, i32 16 152*8e0faddaSMatt Arsenault %load = load atomic ptr addrspace(3), ptr addrspace(3) %gep monotonic, align 4 153*8e0faddaSMatt Arsenault ret ptr addrspace(3) %load 154d8699210SPiotr Sobczak} 155