155 lines · plain
1; RUN: llc -global-isel -new-reg-bank-select -global-isel-abort=0 -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri < %s | FileCheck -check-prefixes=GCN,CI %s2; RUN: llc -global-isel -new-reg-bank-select -global-isel-abort=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s3 4; GCN-LABEL: {{^}}atomic_load_monotonic_i8:5; GCN: s_waitcnt6; GFX9-NOT: s_mov_b32 m07; CI-NEXT: s_mov_b32 m08; GCN-NEXT: ds_read_u8 v0, v0{{$}}9; GCN-NEXT: s_waitcnt lgkmcnt(0)10; GCN-NEXT: s_setpc_b6411define i8 @atomic_load_monotonic_i8(ptr addrspace(3) %ptr) {12 %load = load atomic i8, ptr addrspace(3) %ptr monotonic, align 113 ret i8 %load14}15 16; GCN-LABEL: {{^}}atomic_load_monotonic_i8_offset:17; GCN: s_waitcnt18; GFX9-NOT: s_mov_b32 m019; CI-NEXT: s_mov_b32 m020; GCN-NEXT: ds_read_u8 v0, v0 offset:16{{$}}21; GCN-NEXT: s_waitcnt lgkmcnt(0)22; GCN-NEXT: s_setpc_b6423define i8 @atomic_load_monotonic_i8_offset(ptr addrspace(3) %ptr) {24 %gep = getelementptr inbounds i8, ptr addrspace(3) %ptr, i8 1625 %load = load atomic i8, ptr addrspace(3) %gep monotonic, align 126 ret i8 %load27}28 29; GCN-LABEL: {{^}}atomic_load_monotonic_i16:30; GCN: s_waitcnt31; GFX9-NOT: s_mov_b32 m032; CI-NEXT: s_mov_b32 m033; GCN-NEXT: ds_read_u16 v0, v0{{$}}34; GCN-NEXT: s_waitcnt lgkmcnt(0)35; GCN-NEXT: s_setpc_b6436define i16 @atomic_load_monotonic_i16(ptr addrspace(3) %ptr) {37 %load = load atomic i16, ptr addrspace(3) %ptr monotonic, align 238 ret i16 %load39}40 41; GCN-LABEL: {{^}}atomic_load_monotonic_i16_offset:42; GCN: s_waitcnt43; GFX9-NOT: s_mov_b32 m044; CI-NEXT: s_mov_b32 m045; GCN-NEXT: ds_read_u16 v0, v0 offset:32{{$}}46; GCN-NEXT: s_waitcnt lgkmcnt(0)47; GCN-NEXT: s_setpc_b6448define i16 @atomic_load_monotonic_i16_offset(ptr addrspace(3) %ptr) {49 %gep = getelementptr inbounds i16, ptr addrspace(3) %ptr, i16 1650 %load = load atomic i16, ptr addrspace(3) %gep monotonic, align 251 ret i16 %load52}53 54; GCN-LABEL: {{^}}atomic_load_monotonic_i32:55; GCN: s_waitcnt56; GFX9-NOT: s_mov_b32 m057; CI-NEXT: s_mov_b32 m058; GCN-NEXT: ds_read_b32 v0, v0{{$}}59; GCN-NEXT: s_waitcnt lgkmcnt(0)60; GCN-NEXT: s_setpc_b6461define i32 @atomic_load_monotonic_i32(ptr addrspace(3) %ptr) {62 %load = load atomic i32, ptr addrspace(3) %ptr monotonic, align 463 ret i32 %load64}65 66; GCN-LABEL: {{^}}atomic_load_monotonic_i32_offset:67; GCN: s_waitcnt68; GFX9-NOT: s_mov_b32 m069; CI-NEXT: s_mov_b32 m070; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}}71; GCN-NEXT: s_waitcnt lgkmcnt(0)72; GCN-NEXT: s_setpc_b6473define i32 @atomic_load_monotonic_i32_offset(ptr addrspace(3) %ptr) {74 %gep = getelementptr inbounds i32, ptr addrspace(3) %ptr, i32 1675 %load = load atomic i32, ptr addrspace(3) %gep monotonic, align 476 ret i32 %load77}78 79; GCN-LABEL: {{^}}atomic_load_monotonic_i64:80; GCN: s_waitcnt81; GFX9-NOT: s_mov_b32 m082; CI-NEXT: s_mov_b32 m083; GCN-NEXT: ds_read_b64 v[0:1], v0{{$}}84; GCN-NEXT: s_waitcnt lgkmcnt(0)85; GCN-NEXT: s_setpc_b6486define i64 @atomic_load_monotonic_i64(ptr addrspace(3) %ptr) {87 %load = load atomic i64, ptr addrspace(3) %ptr monotonic, align 888 ret i64 %load89}90 91; GCN-LABEL: {{^}}atomic_load_monotonic_i64_offset:92; GCN: s_waitcnt93; GFX9-NOT: s_mov_b32 m094; CI-NEXT: s_mov_b32 m095; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}}96; GCN-NEXT: s_waitcnt lgkmcnt(0)97; GCN-NEXT: s_setpc_b6498define i64 @atomic_load_monotonic_i64_offset(ptr addrspace(3) %ptr) {99 %gep = getelementptr inbounds i64, ptr addrspace(3) %ptr, i32 16100 %load = load atomic i64, ptr addrspace(3) %gep monotonic, align 8101 ret i64 %load102}103 104; GCN-LABEL: {{^}}atomic_load_monotonic_f32_offset:105; GCN: s_waitcnt106; GFX9-NOT: s_mov_b32 m0107; CI-NEXT: s_mov_b32 m0108; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}}109; GCN-NEXT: s_waitcnt lgkmcnt(0)110; GCN-NEXT: s_setpc_b64111define float @atomic_load_monotonic_f32_offset(ptr addrspace(3) %ptr) {112 %gep = getelementptr inbounds float, ptr addrspace(3) %ptr, i32 16113 %load = load atomic float, ptr addrspace(3) %gep monotonic, align 4114 ret float %load115}116 117; GCN-LABEL: {{^}}atomic_load_monotonic_f64_offset:118; GCN: s_waitcnt119; GFX9-NOT: s_mov_b32 m0120; CI-NEXT: s_mov_b32 m0121; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}}122; GCN-NEXT: s_waitcnt lgkmcnt(0)123; GCN-NEXT: s_setpc_b64124define double @atomic_load_monotonic_f64_offset(ptr addrspace(3) %ptr) {125 %gep = getelementptr inbounds double, ptr addrspace(3) %ptr, i32 16126 %load = load atomic double, ptr addrspace(3) %gep monotonic, align 8127 ret double %load128}129 130; GCN-LABEL: {{^}}atomic_load_monotonic_p0i8_offset:131; GCN: s_waitcnt132; GFX9-NOT: s_mov_b32 m0133; CI-NEXT: s_mov_b32 m0134; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}}135; GCN-NEXT: s_waitcnt lgkmcnt(0)136; GCN-NEXT: s_setpc_b64137define ptr @atomic_load_monotonic_p0i8_offset(ptr addrspace(3) %ptr) {138 %gep = getelementptr inbounds ptr, ptr addrspace(3) %ptr, i32 16139 %load = load atomic ptr, ptr addrspace(3) %gep monotonic, align 8140 ret ptr %load141}142 143; GCN-LABEL: {{^}}atomic_load_monotonic_p3i8_offset:144; GCN: s_waitcnt145; GFX9-NOT: s_mov_b32 m0146; CI-NEXT: s_mov_b32 m0147; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}}148; GCN-NEXT: s_waitcnt lgkmcnt(0)149; GCN-NEXT: s_setpc_b64150define ptr addrspace(3) @atomic_load_monotonic_p3i8_offset(ptr addrspace(3) %ptr) {151 %gep = getelementptr inbounds ptr addrspace(3), ptr addrspace(3) %ptr, i32 16152 %load = load atomic ptr addrspace(3), ptr addrspace(3) %gep monotonic, align 4153 ret ptr addrspace(3) %load154}155