140 lines · plain
1; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=infer-address-spaces %s | FileCheck %s2 3; Check that volatile users of addrspacecast are not replaced.4 5; CHECK-LABEL: @volatile_load_flat_from_global(6; CHECK: load volatile i32, ptr7; CHECK: store i32 %val, ptr addrspace(1)8define amdgpu_kernel void @volatile_load_flat_from_global(ptr addrspace(1) nocapture %input, ptr addrspace(1) nocapture %output) #0 {9 %tmp0 = addrspacecast ptr addrspace(1) %input to ptr10 %tmp1 = addrspacecast ptr addrspace(1) %output to ptr11 %val = load volatile i32, ptr %tmp0, align 412 store i32 %val, ptr %tmp1, align 413 ret void14}15 16; CHECK-LABEL: @volatile_load_flat_from_constant(17; CHECK: load volatile i32, ptr18; CHECK: store i32 %val, ptr addrspace(1)19define amdgpu_kernel void @volatile_load_flat_from_constant(ptr addrspace(4) nocapture %input, ptr addrspace(1) nocapture %output) #0 {20 %tmp0 = addrspacecast ptr addrspace(4) %input to ptr21 %tmp1 = addrspacecast ptr addrspace(1) %output to ptr22 %val = load volatile i32, ptr %tmp0, align 423 store i32 %val, ptr %tmp1, align 424 ret void25}26 27; CHECK-LABEL: @volatile_load_flat_from_group(28; CHECK: load volatile i32, ptr29; CHECK: store i32 %val, ptr addrspace(3)30define amdgpu_kernel void @volatile_load_flat_from_group(ptr addrspace(3) nocapture %input, ptr addrspace(3) nocapture %output) #0 {31 %tmp0 = addrspacecast ptr addrspace(3) %input to ptr32 %tmp1 = addrspacecast ptr addrspace(3) %output to ptr33 %val = load volatile i32, ptr %tmp0, align 434 store i32 %val, ptr %tmp1, align 435 ret void36}37 38; CHECK-LABEL: @volatile_load_flat_from_private(39; CHECK: load volatile i32, ptr40; CHECK: store i32 %val, ptr addrspace(5)41define amdgpu_kernel void @volatile_load_flat_from_private(ptr addrspace(5) nocapture %input, ptr addrspace(5) nocapture %output) #0 {42 %tmp0 = addrspacecast ptr addrspace(5) %input to ptr43 %tmp1 = addrspacecast ptr addrspace(5) %output to ptr44 %val = load volatile i32, ptr %tmp0, align 445 store i32 %val, ptr %tmp1, align 446 ret void47}48 49; CHECK-LABEL: @volatile_store_flat_to_global(50; CHECK: load i32, ptr addrspace(1)51; CHECK: store volatile i32 %val, ptr52define amdgpu_kernel void @volatile_store_flat_to_global(ptr addrspace(1) nocapture %input, ptr addrspace(1) nocapture %output) #0 {53 %tmp0 = addrspacecast ptr addrspace(1) %input to ptr54 %tmp1 = addrspacecast ptr addrspace(1) %output to ptr55 %val = load i32, ptr %tmp0, align 456 store volatile i32 %val, ptr %tmp1, align 457 ret void58}59 60; CHECK-LABEL: @volatile_store_flat_to_group(61; CHECK: load i32, ptr addrspace(3)62; CHECK: store volatile i32 %val, ptr63define amdgpu_kernel void @volatile_store_flat_to_group(ptr addrspace(3) nocapture %input, ptr addrspace(3) nocapture %output) #0 {64 %tmp0 = addrspacecast ptr addrspace(3) %input to ptr65 %tmp1 = addrspacecast ptr addrspace(3) %output to ptr66 %val = load i32, ptr %tmp0, align 467 store volatile i32 %val, ptr %tmp1, align 468 ret void69}70 71; CHECK-LABEL: @volatile_store_flat_to_private(72; CHECK: load i32, ptr addrspace(5)73; CHECK: store volatile i32 %val, ptr74define amdgpu_kernel void @volatile_store_flat_to_private(ptr addrspace(5) nocapture %input, ptr addrspace(5) nocapture %output) #0 {75 %tmp0 = addrspacecast ptr addrspace(5) %input to ptr76 %tmp1 = addrspacecast ptr addrspace(5) %output to ptr77 %val = load i32, ptr %tmp0, align 478 store volatile i32 %val, ptr %tmp1, align 479 ret void80}81 82; CHECK-LABEL: @volatile_atomicrmw_add_group_to_flat(83; CHECK: addrspacecast ptr addrspace(3) %group.ptr to ptr84; CHECK: atomicrmw volatile add ptr85define i32 @volatile_atomicrmw_add_group_to_flat(ptr addrspace(3) %group.ptr, i32 %y) #0 {86 %cast = addrspacecast ptr addrspace(3) %group.ptr to ptr87 %ret = atomicrmw volatile add ptr %cast, i32 %y seq_cst88 ret i32 %ret89}90 91; CHECK-LABEL: @volatile_atomicrmw_add_global_to_flat(92; CHECK: addrspacecast ptr addrspace(1) %global.ptr to ptr93; CHECK: %ret = atomicrmw volatile add ptr94define i32 @volatile_atomicrmw_add_global_to_flat(ptr addrspace(1) %global.ptr, i32 %y) #0 {95 %cast = addrspacecast ptr addrspace(1) %global.ptr to ptr96 %ret = atomicrmw volatile add ptr %cast, i32 %y seq_cst97 ret i32 %ret98}99 100; CHECK-LABEL: @volatile_cmpxchg_global_to_flat(101; CHECK: addrspacecast ptr addrspace(1) %global.ptr to ptr102; CHECK: cmpxchg volatile ptr103define { i32, i1 } @volatile_cmpxchg_global_to_flat(ptr addrspace(1) %global.ptr, i32 %cmp, i32 %val) #0 {104 %cast = addrspacecast ptr addrspace(1) %global.ptr to ptr105 %ret = cmpxchg volatile ptr %cast, i32 %cmp, i32 %val seq_cst monotonic106 ret { i32, i1 } %ret107}108 109; CHECK-LABEL: @volatile_cmpxchg_group_to_flat(110; CHECK: addrspacecast ptr addrspace(3) %group.ptr to ptr111; CHECK: cmpxchg volatile ptr112define { i32, i1 } @volatile_cmpxchg_group_to_flat(ptr addrspace(3) %group.ptr, i32 %cmp, i32 %val) #0 {113 %cast = addrspacecast ptr addrspace(3) %group.ptr to ptr114 %ret = cmpxchg volatile ptr %cast, i32 %cmp, i32 %val seq_cst monotonic115 ret { i32, i1 } %ret116}117 118; CHECK-LABEL: @volatile_memset_group_to_flat(119; CHECK: %cast = addrspacecast ptr addrspace(3) %group.ptr to ptr120; CHECK: call void @llvm.memset.p0.i64(ptr align 4 %cast, i8 4, i64 32, i1 true)121define amdgpu_kernel void @volatile_memset_group_to_flat(ptr addrspace(3) %group.ptr, i32 %y) #0 {122 %cast = addrspacecast ptr addrspace(3) %group.ptr to ptr123 call void @llvm.memset.p0.i64(ptr align 4 %cast, i8 4, i64 32, i1 true)124 ret void125}126 127; CHECK-LABEL: @volatile_memset_global_to_flat(128; CHECK: %cast = addrspacecast ptr addrspace(1) %global.ptr to ptr129; CHECK: call void @llvm.memset.p0.i64(ptr align 4 %cast, i8 4, i64 32, i1 true)130define amdgpu_kernel void @volatile_memset_global_to_flat(ptr addrspace(1) %global.ptr, i32 %y) #0 {131 %cast = addrspacecast ptr addrspace(1) %global.ptr to ptr132 call void @llvm.memset.p0.i64(ptr align 4 %cast, i8 4, i64 32, i1 true)133 ret void134}135 136declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1) #1137 138attributes #0 = { nounwind }139attributes #1 = { argmemonly nounwind }140