897 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd- -O0 -mcpu=gfx600 < %s | FileCheck --check-prefixes=GFX6 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx700 < %s | FileCheck --check-prefixes=GFX7 %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1010 < %s | FileCheck --check-prefixes=GFX10-WGP %s5; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1010 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX10-CU %s6; RUN: llc -mtriple=amdgcn-amd-amdpal -O0 -mcpu=gfx700 -amdgcn-skip-cache-invalidations < %s | FileCheck --check-prefixes=SKIP-CACHE-INV %s7; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GFX11-WGP %s8; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX11-CU %s9; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GFX12-WGP %s10; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX12-CU %s11; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1250 < %s | FileCheck --check-prefixes=GFX1250 %s12 13define amdgpu_kernel void @local_volatile_load_0(14; GFX6-LABEL: local_volatile_load_0:15; GFX6: ; %bb.0: ; %entry16; GFX6-NEXT: s_mov_b64 s[0:1], s[4:5]17; GFX6-NEXT: s_load_dword s4, s[0:1], 0x918; GFX6-NEXT: ; kill: def $sgpr2 killed $sgpr419; GFX6-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0xb20; GFX6-NEXT: s_waitcnt lgkmcnt(0)21; GFX6-NEXT: s_mov_b32 s7, s122; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr123; GFX6-NEXT: s_mov_b32 s5, 0xf00024; GFX6-NEXT: s_mov_b32 s6, -125; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr326; GFX6-NEXT: s_mov_b32 s1, s727; GFX6-NEXT: s_mov_b32 s2, s628; GFX6-NEXT: s_mov_b32 s3, s529; GFX6-NEXT: s_mov_b32 m0, -130; GFX6-NEXT: v_mov_b32_e32 v0, s431; GFX6-NEXT: ds_read_b32 v0, v032; GFX6-NEXT: s_waitcnt lgkmcnt(0)33; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 034; GFX6-NEXT: s_endpgm35;36; GFX7-LABEL: local_volatile_load_0:37; GFX7: ; %bb.0: ; %entry38; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s1339; GFX7-NEXT: s_add_i32 s12, s12, s1740; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 841; GFX7-NEXT: s_load_dword s6, s[8:9], 0x042; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x243; GFX7-NEXT: s_mov_b32 m0, -144; GFX7-NEXT: s_waitcnt lgkmcnt(0)45; GFX7-NEXT: v_mov_b32_e32 v0, s646; GFX7-NEXT: ds_read_b32 v2, v047; GFX7-NEXT: v_mov_b32_e32 v0, s448; GFX7-NEXT: v_mov_b32_e32 v1, s549; GFX7-NEXT: s_waitcnt lgkmcnt(0)50; GFX7-NEXT: flat_store_dword v[0:1], v251; GFX7-NEXT: s_endpgm52;53; GFX10-WGP-LABEL: local_volatile_load_0:54; GFX10-WGP: ; %bb.0: ; %entry55; GFX10-WGP-NEXT: s_load_dword s6, s[8:9], 0x056; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x857; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 058; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)59; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s660; GFX10-WGP-NEXT: ds_read_b32 v1, v161; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)62; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]63; GFX10-WGP-NEXT: s_endpgm64;65; GFX10-CU-LABEL: local_volatile_load_0:66; GFX10-CU: ; %bb.0: ; %entry67; GFX10-CU-NEXT: s_load_dword s6, s[8:9], 0x068; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x869; GFX10-CU-NEXT: v_mov_b32_e32 v0, 070; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)71; GFX10-CU-NEXT: v_mov_b32_e32 v1, s672; GFX10-CU-NEXT: ds_read_b32 v1, v173; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)74; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]75; GFX10-CU-NEXT: s_endpgm76;77; SKIP-CACHE-INV-LABEL: local_volatile_load_0:78; SKIP-CACHE-INV: ; %bb.0: ; %entry79; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]80; SKIP-CACHE-INV-NEXT: s_load_dword s4, s[0:1], 0x081; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x282; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)83; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, s184; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr185; SKIP-CACHE-INV-NEXT: s_mov_b32 s5, 0xf00086; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, -187; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr388; SKIP-CACHE-INV-NEXT: s_mov_b32 s1, s789; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s690; SKIP-CACHE-INV-NEXT: s_mov_b32 s3, s591; SKIP-CACHE-INV-NEXT: s_mov_b32 m0, -192; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s493; SKIP-CACHE-INV-NEXT: ds_read_b32 v0, v094; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)95; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, off, s[0:3], 096; SKIP-CACHE-INV-NEXT: s_endpgm97;98; GFX11-WGP-LABEL: local_volatile_load_0:99; GFX11-WGP: ; %bb.0: ; %entry100; GFX11-WGP-NEXT: s_load_b32 s2, s[4:5], 0x0101; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8102; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0103; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)104; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s2105; GFX11-WGP-NEXT: ds_load_b32 v1, v1106; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)107; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1]108; GFX11-WGP-NEXT: s_endpgm109;110; GFX11-CU-LABEL: local_volatile_load_0:111; GFX11-CU: ; %bb.0: ; %entry112; GFX11-CU-NEXT: s_load_b32 s2, s[4:5], 0x0113; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8114; GFX11-CU-NEXT: v_mov_b32_e32 v0, 0115; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)116; GFX11-CU-NEXT: v_mov_b32_e32 v1, s2117; GFX11-CU-NEXT: ds_load_b32 v1, v1118; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)119; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1]120; GFX11-CU-NEXT: s_endpgm121;122; GFX12-WGP-LABEL: local_volatile_load_0:123; GFX12-WGP: ; %bb.0: ; %entry124; GFX12-WGP-NEXT: s_load_b32 s2, s[4:5], 0x0125; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8126; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 0127; GFX12-WGP-NEXT: s_wait_kmcnt 0x0128; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s2129; GFX12-WGP-NEXT: ds_load_b32 v1, v1130; GFX12-WGP-NEXT: s_wait_dscnt 0x0131; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1]132; GFX12-WGP-NEXT: s_endpgm133;134; GFX12-CU-LABEL: local_volatile_load_0:135; GFX12-CU: ; %bb.0: ; %entry136; GFX12-CU-NEXT: s_load_b32 s2, s[4:5], 0x0137; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8138; GFX12-CU-NEXT: v_mov_b32_e32 v0, 0139; GFX12-CU-NEXT: s_wait_kmcnt 0x0140; GFX12-CU-NEXT: v_mov_b32_e32 v1, s2141; GFX12-CU-NEXT: ds_load_b32 v1, v1142; GFX12-CU-NEXT: s_wait_dscnt 0x0143; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1]144; GFX12-CU-NEXT: s_endpgm145;146; GFX1250-LABEL: local_volatile_load_0:147; GFX1250: ; %bb.0: ; %entry148; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1149; GFX1250-NEXT: s_load_b32 s2, s[4:5], 0x0150; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8151; GFX1250-NEXT: v_mov_b32_e32 v0, 0152; GFX1250-NEXT: s_wait_kmcnt 0x0153; GFX1250-NEXT: v_mov_b32_e32 v1, s2154; GFX1250-NEXT: ds_load_b32 v1, v1155; GFX1250-NEXT: s_wait_dscnt 0x0156; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1]157; GFX1250-NEXT: s_endpgm158 ptr addrspace(3) %in, ptr addrspace(1) %out) {159entry:160 %val = load volatile i32, ptr addrspace(3) %in, align 4161 store i32 %val, ptr addrspace(1) %out162 ret void163}164 165define amdgpu_kernel void @local_volatile_load_1(166; GFX6-LABEL: local_volatile_load_1:167; GFX6: ; %bb.0: ; %entry168; GFX6-NEXT: s_mov_b64 s[0:1], s[4:5]169; GFX6-NEXT: s_load_dword s4, s[0:1], 0x9170; GFX6-NEXT: ; kill: def $sgpr2 killed $sgpr4171; GFX6-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0xb172; GFX6-NEXT: s_waitcnt lgkmcnt(0)173; GFX6-NEXT: s_mov_b32 s7, s1174; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1175; GFX6-NEXT: s_mov_b32 s5, 0xf000176; GFX6-NEXT: s_mov_b32 s6, -1177; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3178; GFX6-NEXT: s_mov_b32 s1, s7179; GFX6-NEXT: s_mov_b32 s2, s6180; GFX6-NEXT: s_mov_b32 s3, s5181; GFX6-NEXT: s_mov_b32 s5, 2182; GFX6-NEXT: v_lshlrev_b32_e64 v0, s5, v0183; GFX6-NEXT: v_add_i32_e64 v0, s[4:5], s4, v0184; GFX6-NEXT: s_mov_b32 m0, -1185; GFX6-NEXT: ds_read_b32 v0, v0186; GFX6-NEXT: s_waitcnt lgkmcnt(0)187; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 0188; GFX6-NEXT: s_endpgm189;190; GFX7-LABEL: local_volatile_load_1:191; GFX7: ; %bb.0: ; %entry192; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13193; GFX7-NEXT: s_add_i32 s12, s12, s17194; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8195; GFX7-NEXT: s_load_dword s6, s[8:9], 0x0196; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x2197; GFX7-NEXT: s_mov_b32 s7, 2198; GFX7-NEXT: v_lshlrev_b32_e64 v0, s7, v0199; GFX7-NEXT: s_waitcnt lgkmcnt(0)200; GFX7-NEXT: v_add_i32_e64 v0, s[6:7], s6, v0201; GFX7-NEXT: s_mov_b32 m0, -1202; GFX7-NEXT: ds_read_b32 v2, v0203; GFX7-NEXT: v_mov_b32_e32 v0, s4204; GFX7-NEXT: v_mov_b32_e32 v1, s5205; GFX7-NEXT: s_waitcnt lgkmcnt(0)206; GFX7-NEXT: flat_store_dword v[0:1], v2207; GFX7-NEXT: s_endpgm208;209; GFX10-WGP-LABEL: local_volatile_load_1:210; GFX10-WGP: ; %bb.0: ; %entry211; GFX10-WGP-NEXT: v_mov_b32_e32 v1, v0212; GFX10-WGP-NEXT: s_load_dword s6, s[8:9], 0x0213; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8214; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 0215; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)216; GFX10-WGP-NEXT: v_lshl_add_u32 v1, v1, 2, s6217; GFX10-WGP-NEXT: ds_read_b32 v1, v1218; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)219; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]220; GFX10-WGP-NEXT: s_endpgm221;222; GFX10-CU-LABEL: local_volatile_load_1:223; GFX10-CU: ; %bb.0: ; %entry224; GFX10-CU-NEXT: v_mov_b32_e32 v1, v0225; GFX10-CU-NEXT: s_load_dword s6, s[8:9], 0x0226; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8227; GFX10-CU-NEXT: v_mov_b32_e32 v0, 0228; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)229; GFX10-CU-NEXT: v_lshl_add_u32 v1, v1, 2, s6230; GFX10-CU-NEXT: ds_read_b32 v1, v1231; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)232; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]233; GFX10-CU-NEXT: s_endpgm234;235; SKIP-CACHE-INV-LABEL: local_volatile_load_1:236; SKIP-CACHE-INV: ; %bb.0: ; %entry237; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]238; SKIP-CACHE-INV-NEXT: s_load_dword s4, s[0:1], 0x0239; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2240; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)241; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, s1242; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1243; SKIP-CACHE-INV-NEXT: s_mov_b32 s5, 0xf000244; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, -1245; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3246; SKIP-CACHE-INV-NEXT: s_mov_b32 s1, s7247; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s6248; SKIP-CACHE-INV-NEXT: s_mov_b32 s3, s5249; SKIP-CACHE-INV-NEXT: s_mov_b32 s5, 2250; SKIP-CACHE-INV-NEXT: v_lshlrev_b32_e64 v0, s5, v0251; SKIP-CACHE-INV-NEXT: v_add_i32_e64 v0, s[4:5], s4, v0252; SKIP-CACHE-INV-NEXT: s_mov_b32 m0, -1253; SKIP-CACHE-INV-NEXT: ds_read_b32 v0, v0254; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)255; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, off, s[0:3], 0256; SKIP-CACHE-INV-NEXT: s_endpgm257;258; GFX11-WGP-LABEL: local_volatile_load_1:259; GFX11-WGP: ; %bb.0: ; %entry260; GFX11-WGP-NEXT: v_mov_b32_e32 v1, v0261; GFX11-WGP-NEXT: s_load_b32 s2, s[4:5], 0x0262; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8263; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0264; GFX11-WGP-NEXT: s_mov_b32 s3, 0x3ff265; GFX11-WGP-NEXT: v_and_b32_e64 v1, v1, s3266; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)267; GFX11-WGP-NEXT: v_lshl_add_u32 v1, v1, 2, s2268; GFX11-WGP-NEXT: ds_load_b32 v1, v1269; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)270; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1]271; GFX11-WGP-NEXT: s_endpgm272;273; GFX11-CU-LABEL: local_volatile_load_1:274; GFX11-CU: ; %bb.0: ; %entry275; GFX11-CU-NEXT: v_mov_b32_e32 v1, v0276; GFX11-CU-NEXT: s_load_b32 s2, s[4:5], 0x0277; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8278; GFX11-CU-NEXT: v_mov_b32_e32 v0, 0279; GFX11-CU-NEXT: s_mov_b32 s3, 0x3ff280; GFX11-CU-NEXT: v_and_b32_e64 v1, v1, s3281; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)282; GFX11-CU-NEXT: v_lshl_add_u32 v1, v1, 2, s2283; GFX11-CU-NEXT: ds_load_b32 v1, v1284; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)285; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1]286; GFX11-CU-NEXT: s_endpgm287;288; GFX12-WGP-LABEL: local_volatile_load_1:289; GFX12-WGP: ; %bb.0: ; %entry290; GFX12-WGP-NEXT: v_mov_b32_e32 v1, v0291; GFX12-WGP-NEXT: s_load_b32 s2, s[4:5], 0x0292; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8293; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 0294; GFX12-WGP-NEXT: s_mov_b32 s3, 0x3ff295; GFX12-WGP-NEXT: v_and_b32_e64 v1, v1, s3296; GFX12-WGP-NEXT: s_wait_kmcnt 0x0297; GFX12-WGP-NEXT: v_lshl_add_u32 v1, v1, 2, s2298; GFX12-WGP-NEXT: ds_load_b32 v1, v1299; GFX12-WGP-NEXT: s_wait_dscnt 0x0300; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1]301; GFX12-WGP-NEXT: s_endpgm302;303; GFX12-CU-LABEL: local_volatile_load_1:304; GFX12-CU: ; %bb.0: ; %entry305; GFX12-CU-NEXT: v_mov_b32_e32 v1, v0306; GFX12-CU-NEXT: s_load_b32 s2, s[4:5], 0x0307; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8308; GFX12-CU-NEXT: v_mov_b32_e32 v0, 0309; GFX12-CU-NEXT: s_mov_b32 s3, 0x3ff310; GFX12-CU-NEXT: v_and_b32_e64 v1, v1, s3311; GFX12-CU-NEXT: s_wait_kmcnt 0x0312; GFX12-CU-NEXT: v_lshl_add_u32 v1, v1, 2, s2313; GFX12-CU-NEXT: ds_load_b32 v1, v1314; GFX12-CU-NEXT: s_wait_dscnt 0x0315; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1]316; GFX12-CU-NEXT: s_endpgm317;318; GFX1250-LABEL: local_volatile_load_1:319; GFX1250: ; %bb.0: ; %entry320; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1321; GFX1250-NEXT: v_mov_b32_e32 v1, v0322; GFX1250-NEXT: s_load_b32 s2, s[4:5], 0x0323; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8324; GFX1250-NEXT: v_mov_b32_e32 v0, 0325; GFX1250-NEXT: s_mov_b32 s3, 0x3ff326; GFX1250-NEXT: v_and_b32_e64 v1, v1, s3327; GFX1250-NEXT: s_wait_kmcnt 0x0328; GFX1250-NEXT: v_lshl_add_u32 v1, v1, 2, s2329; GFX1250-NEXT: ds_load_b32 v1, v1330; GFX1250-NEXT: s_wait_dscnt 0x0331; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1]332; GFX1250-NEXT: s_endpgm333 ptr addrspace(3) %in, ptr addrspace(1) %out) {334entry:335 %tid = call i32 @llvm.amdgcn.workitem.id.x()336 %val.gep = getelementptr inbounds i32, ptr addrspace(3) %in, i32 %tid337 %val = load volatile i32, ptr addrspace(3) %val.gep, align 4338 store i32 %val, ptr addrspace(1) %out339 ret void340}341 342define amdgpu_kernel void @local_volatile_store_0(343; GFX6-LABEL: local_volatile_store_0:344; GFX6: ; %bb.0: ; %entry345; GFX6-NEXT: s_load_dword s1, s[4:5], 0xb346; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr1347; GFX6-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x9348; GFX6-NEXT: s_waitcnt lgkmcnt(0)349; GFX6-NEXT: s_load_dword s0, s[2:3], 0x0350; GFX6-NEXT: s_mov_b32 m0, -1351; GFX6-NEXT: v_mov_b32_e32 v0, s1352; GFX6-NEXT: s_waitcnt lgkmcnt(0)353; GFX6-NEXT: v_mov_b32_e32 v1, s0354; GFX6-NEXT: ds_write_b32 v0, v1355; GFX6-NEXT: s_endpgm356;357; GFX7-LABEL: local_volatile_store_0:358; GFX7: ; %bb.0: ; %entry359; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0360; GFX7-NEXT: s_load_dword s5, s[8:9], 0x2361; GFX7-NEXT: s_waitcnt lgkmcnt(0)362; GFX7-NEXT: s_load_dword s4, s[6:7], 0x0363; GFX7-NEXT: s_mov_b32 m0, -1364; GFX7-NEXT: v_mov_b32_e32 v0, s5365; GFX7-NEXT: s_waitcnt lgkmcnt(0)366; GFX7-NEXT: v_mov_b32_e32 v1, s4367; GFX7-NEXT: ds_write_b32 v0, v1368; GFX7-NEXT: s_endpgm369;370; GFX10-WGP-LABEL: local_volatile_store_0:371; GFX10-WGP: ; %bb.0: ; %entry372; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0373; GFX10-WGP-NEXT: s_load_dword s5, s[8:9], 0x8374; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)375; GFX10-WGP-NEXT: s_load_dword s4, s[6:7], 0x0376; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s5377; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)378; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s4379; GFX10-WGP-NEXT: ds_write_b32 v0, v1380; GFX10-WGP-NEXT: s_endpgm381;382; GFX10-CU-LABEL: local_volatile_store_0:383; GFX10-CU: ; %bb.0: ; %entry384; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0385; GFX10-CU-NEXT: s_load_dword s5, s[8:9], 0x8386; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)387; GFX10-CU-NEXT: s_load_dword s4, s[6:7], 0x0388; GFX10-CU-NEXT: v_mov_b32_e32 v0, s5389; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)390; GFX10-CU-NEXT: v_mov_b32_e32 v1, s4391; GFX10-CU-NEXT: ds_write_b32 v0, v1392; GFX10-CU-NEXT: s_endpgm393;394; SKIP-CACHE-INV-LABEL: local_volatile_store_0:395; SKIP-CACHE-INV: ; %bb.0: ; %entry396; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0397; SKIP-CACHE-INV-NEXT: s_load_dword s1, s[4:5], 0x2398; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)399; SKIP-CACHE-INV-NEXT: s_load_dword s0, s[2:3], 0x0400; SKIP-CACHE-INV-NEXT: s_mov_b32 m0, -1401; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s1402; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)403; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s0404; SKIP-CACHE-INV-NEXT: ds_write_b32 v0, v1405; SKIP-CACHE-INV-NEXT: s_endpgm406;407; GFX11-WGP-LABEL: local_volatile_store_0:408; GFX11-WGP: ; %bb.0: ; %entry409; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0410; GFX11-WGP-NEXT: s_load_b32 s1, s[4:5], 0x8411; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)412; GFX11-WGP-NEXT: s_load_b32 s0, s[2:3], 0x0413; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s1414; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)415; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s0416; GFX11-WGP-NEXT: ds_store_b32 v0, v1417; GFX11-WGP-NEXT: s_endpgm418;419; GFX11-CU-LABEL: local_volatile_store_0:420; GFX11-CU: ; %bb.0: ; %entry421; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0422; GFX11-CU-NEXT: s_load_b32 s1, s[4:5], 0x8423; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)424; GFX11-CU-NEXT: s_load_b32 s0, s[2:3], 0x0425; GFX11-CU-NEXT: v_mov_b32_e32 v0, s1426; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)427; GFX11-CU-NEXT: v_mov_b32_e32 v1, s0428; GFX11-CU-NEXT: ds_store_b32 v0, v1429; GFX11-CU-NEXT: s_endpgm430;431; GFX12-WGP-LABEL: local_volatile_store_0:432; GFX12-WGP: ; %bb.0: ; %entry433; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0434; GFX12-WGP-NEXT: s_load_b32 s1, s[4:5], 0x8435; GFX12-WGP-NEXT: s_wait_kmcnt 0x0436; GFX12-WGP-NEXT: s_load_b32 s0, s[2:3], 0x0437; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s1438; GFX12-WGP-NEXT: s_wait_kmcnt 0x0439; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s0440; GFX12-WGP-NEXT: ds_store_b32 v0, v1441; GFX12-WGP-NEXT: s_endpgm442;443; GFX12-CU-LABEL: local_volatile_store_0:444; GFX12-CU: ; %bb.0: ; %entry445; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0446; GFX12-CU-NEXT: s_load_b32 s1, s[4:5], 0x8447; GFX12-CU-NEXT: s_wait_kmcnt 0x0448; GFX12-CU-NEXT: s_load_b32 s0, s[2:3], 0x0449; GFX12-CU-NEXT: v_mov_b32_e32 v0, s1450; GFX12-CU-NEXT: s_wait_kmcnt 0x0451; GFX12-CU-NEXT: v_mov_b32_e32 v1, s0452; GFX12-CU-NEXT: ds_store_b32 v0, v1453; GFX12-CU-NEXT: s_endpgm454;455; GFX1250-LABEL: local_volatile_store_0:456; GFX1250: ; %bb.0: ; %entry457; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1458; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0459; GFX1250-NEXT: s_load_b32 s1, s[4:5], 0x8460; GFX1250-NEXT: s_wait_kmcnt 0x0461; GFX1250-NEXT: s_load_b32 s0, s[2:3], 0x0462; GFX1250-NEXT: v_mov_b32_e32 v0, s1463; GFX1250-NEXT: s_wait_kmcnt 0x0464; GFX1250-NEXT: v_mov_b32_e32 v1, s0465; GFX1250-NEXT: ds_store_b32 v0, v1466; GFX1250-NEXT: s_endpgm467 ptr addrspace(1) %in, ptr addrspace(3) %out) {468entry:469 %val = load i32, ptr addrspace(1) %in, align 4470 store volatile i32 %val, ptr addrspace(3) %out471 ret void472}473 474define amdgpu_kernel void @local_volatile_store_1(475; GFX6-LABEL: local_volatile_store_1:476; GFX6: ; %bb.0: ; %entry477; GFX6-NEXT: s_load_dword s1, s[4:5], 0xb478; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr1479; GFX6-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x9480; GFX6-NEXT: s_waitcnt lgkmcnt(0)481; GFX6-NEXT: s_load_dword s0, s[2:3], 0x0482; GFX6-NEXT: s_mov_b32 s2, 2483; GFX6-NEXT: v_lshlrev_b32_e64 v0, s2, v0484; GFX6-NEXT: v_add_i32_e64 v0, s[2:3], s1, v0485; GFX6-NEXT: s_mov_b32 m0, -1486; GFX6-NEXT: s_waitcnt lgkmcnt(0)487; GFX6-NEXT: v_mov_b32_e32 v1, s0488; GFX6-NEXT: ds_write_b32 v0, v1489; GFX6-NEXT: s_endpgm490;491; GFX7-LABEL: local_volatile_store_1:492; GFX7: ; %bb.0: ; %entry493; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0494; GFX7-NEXT: s_load_dword s5, s[8:9], 0x2495; GFX7-NEXT: s_waitcnt lgkmcnt(0)496; GFX7-NEXT: s_load_dword s4, s[6:7], 0x0497; GFX7-NEXT: s_mov_b32 s6, 2498; GFX7-NEXT: v_lshlrev_b32_e64 v0, s6, v0499; GFX7-NEXT: v_add_i32_e64 v0, s[6:7], s5, v0500; GFX7-NEXT: s_mov_b32 m0, -1501; GFX7-NEXT: s_waitcnt lgkmcnt(0)502; GFX7-NEXT: v_mov_b32_e32 v1, s4503; GFX7-NEXT: ds_write_b32 v0, v1504; GFX7-NEXT: s_endpgm505;506; GFX10-WGP-LABEL: local_volatile_store_1:507; GFX10-WGP: ; %bb.0: ; %entry508; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0509; GFX10-WGP-NEXT: s_load_dword s5, s[8:9], 0x8510; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)511; GFX10-WGP-NEXT: s_load_dword s4, s[6:7], 0x0512; GFX10-WGP-NEXT: v_lshl_add_u32 v0, v0, 2, s5513; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)514; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s4515; GFX10-WGP-NEXT: ds_write_b32 v0, v1516; GFX10-WGP-NEXT: s_endpgm517;518; GFX10-CU-LABEL: local_volatile_store_1:519; GFX10-CU: ; %bb.0: ; %entry520; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0521; GFX10-CU-NEXT: s_load_dword s5, s[8:9], 0x8522; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)523; GFX10-CU-NEXT: s_load_dword s4, s[6:7], 0x0524; GFX10-CU-NEXT: v_lshl_add_u32 v0, v0, 2, s5525; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)526; GFX10-CU-NEXT: v_mov_b32_e32 v1, s4527; GFX10-CU-NEXT: ds_write_b32 v0, v1528; GFX10-CU-NEXT: s_endpgm529;530; SKIP-CACHE-INV-LABEL: local_volatile_store_1:531; SKIP-CACHE-INV: ; %bb.0: ; %entry532; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0533; SKIP-CACHE-INV-NEXT: s_load_dword s1, s[4:5], 0x2534; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)535; SKIP-CACHE-INV-NEXT: s_load_dword s0, s[2:3], 0x0536; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, 2537; SKIP-CACHE-INV-NEXT: v_lshlrev_b32_e64 v0, s2, v0538; SKIP-CACHE-INV-NEXT: v_add_i32_e64 v0, s[2:3], s1, v0539; SKIP-CACHE-INV-NEXT: s_mov_b32 m0, -1540; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)541; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s0542; SKIP-CACHE-INV-NEXT: ds_write_b32 v0, v1543; SKIP-CACHE-INV-NEXT: s_endpgm544;545; GFX11-WGP-LABEL: local_volatile_store_1:546; GFX11-WGP: ; %bb.0: ; %entry547; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0548; GFX11-WGP-NEXT: s_load_b32 s1, s[4:5], 0x8549; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)550; GFX11-WGP-NEXT: s_load_b32 s0, s[2:3], 0x0551; GFX11-WGP-NEXT: s_mov_b32 s2, 0x3ff552; GFX11-WGP-NEXT: v_and_b32_e64 v0, v0, s2553; GFX11-WGP-NEXT: v_lshl_add_u32 v0, v0, 2, s1554; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)555; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s0556; GFX11-WGP-NEXT: ds_store_b32 v0, v1557; GFX11-WGP-NEXT: s_endpgm558;559; GFX11-CU-LABEL: local_volatile_store_1:560; GFX11-CU: ; %bb.0: ; %entry561; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0562; GFX11-CU-NEXT: s_load_b32 s1, s[4:5], 0x8563; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)564; GFX11-CU-NEXT: s_load_b32 s0, s[2:3], 0x0565; GFX11-CU-NEXT: s_mov_b32 s2, 0x3ff566; GFX11-CU-NEXT: v_and_b32_e64 v0, v0, s2567; GFX11-CU-NEXT: v_lshl_add_u32 v0, v0, 2, s1568; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)569; GFX11-CU-NEXT: v_mov_b32_e32 v1, s0570; GFX11-CU-NEXT: ds_store_b32 v0, v1571; GFX11-CU-NEXT: s_endpgm572;573; GFX12-WGP-LABEL: local_volatile_store_1:574; GFX12-WGP: ; %bb.0: ; %entry575; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0576; GFX12-WGP-NEXT: s_load_b32 s1, s[4:5], 0x8577; GFX12-WGP-NEXT: s_wait_kmcnt 0x0578; GFX12-WGP-NEXT: s_load_b32 s0, s[2:3], 0x0579; GFX12-WGP-NEXT: s_mov_b32 s2, 0x3ff580; GFX12-WGP-NEXT: v_and_b32_e64 v0, v0, s2581; GFX12-WGP-NEXT: v_lshl_add_u32 v0, v0, 2, s1582; GFX12-WGP-NEXT: s_wait_kmcnt 0x0583; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s0584; GFX12-WGP-NEXT: ds_store_b32 v0, v1585; GFX12-WGP-NEXT: s_endpgm586;587; GFX12-CU-LABEL: local_volatile_store_1:588; GFX12-CU: ; %bb.0: ; %entry589; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0590; GFX12-CU-NEXT: s_load_b32 s1, s[4:5], 0x8591; GFX12-CU-NEXT: s_wait_kmcnt 0x0592; GFX12-CU-NEXT: s_load_b32 s0, s[2:3], 0x0593; GFX12-CU-NEXT: s_mov_b32 s2, 0x3ff594; GFX12-CU-NEXT: v_and_b32_e64 v0, v0, s2595; GFX12-CU-NEXT: v_lshl_add_u32 v0, v0, 2, s1596; GFX12-CU-NEXT: s_wait_kmcnt 0x0597; GFX12-CU-NEXT: v_mov_b32_e32 v1, s0598; GFX12-CU-NEXT: ds_store_b32 v0, v1599; GFX12-CU-NEXT: s_endpgm600;601; GFX1250-LABEL: local_volatile_store_1:602; GFX1250: ; %bb.0: ; %entry603; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1604; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0605; GFX1250-NEXT: s_load_b32 s1, s[4:5], 0x8606; GFX1250-NEXT: s_wait_kmcnt 0x0607; GFX1250-NEXT: s_load_b32 s0, s[2:3], 0x0608; GFX1250-NEXT: s_wait_xcnt 0x0609; GFX1250-NEXT: s_mov_b32 s2, 0x3ff610; GFX1250-NEXT: v_and_b32_e64 v0, v0, s2611; GFX1250-NEXT: v_lshl_add_u32 v0, v0, 2, s1612; GFX1250-NEXT: s_wait_kmcnt 0x0613; GFX1250-NEXT: v_mov_b32_e32 v1, s0614; GFX1250-NEXT: ds_store_b32 v0, v1615; GFX1250-NEXT: s_endpgm616 ptr addrspace(1) %in, ptr addrspace(3) %out) {617entry:618 %tid = call i32 @llvm.amdgcn.workitem.id.x()619 %val = load i32, ptr addrspace(1) %in, align 4620 %out.gep = getelementptr inbounds i32, ptr addrspace(3) %out, i32 %tid621 store volatile i32 %val, ptr addrspace(3) %out.gep622 ret void623}624 625define amdgpu_kernel void @local_volatile_workgroup_acquire_load(626; GFX6-LABEL: local_volatile_workgroup_acquire_load:627; GFX6: ; %bb.0: ; %entry628; GFX6-NEXT: s_load_dword s1, s[4:5], 0x9629; GFX6-NEXT: s_load_dword s0, s[4:5], 0xa630; GFX6-NEXT: ; kill: def $sgpr2 killed $sgpr0631; GFX6-NEXT: ; kill: def $sgpr2 killed $sgpr1632; GFX6-NEXT: s_mov_b32 m0, -1633; GFX6-NEXT: s_waitcnt lgkmcnt(0)634; GFX6-NEXT: v_mov_b32_e32 v0, s1635; GFX6-NEXT: ds_read_b32 v1, v0636; GFX6-NEXT: s_waitcnt lgkmcnt(0)637; GFX6-NEXT: s_mov_b32 m0, -1638; GFX6-NEXT: v_mov_b32_e32 v0, s0639; GFX6-NEXT: ds_write_b32 v0, v1640; GFX6-NEXT: s_endpgm641;642; GFX7-LABEL: local_volatile_workgroup_acquire_load:643; GFX7: ; %bb.0: ; %entry644; GFX7-NEXT: s_load_dword s5, s[8:9], 0x0645; GFX7-NEXT: s_load_dword s4, s[8:9], 0x1646; GFX7-NEXT: s_mov_b32 m0, -1647; GFX7-NEXT: s_waitcnt lgkmcnt(0)648; GFX7-NEXT: v_mov_b32_e32 v0, s5649; GFX7-NEXT: ds_read_b32 v1, v0650; GFX7-NEXT: s_waitcnt lgkmcnt(0)651; GFX7-NEXT: s_mov_b32 m0, -1652; GFX7-NEXT: v_mov_b32_e32 v0, s4653; GFX7-NEXT: ds_write_b32 v0, v1654; GFX7-NEXT: s_endpgm655;656; GFX10-WGP-LABEL: local_volatile_workgroup_acquire_load:657; GFX10-WGP: ; %bb.0: ; %entry658; GFX10-WGP-NEXT: s_load_dword s5, s[8:9], 0x0659; GFX10-WGP-NEXT: s_load_dword s4, s[8:9], 0x4660; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)661; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s5662; GFX10-WGP-NEXT: ds_read_b32 v1, v0663; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)664; GFX10-WGP-NEXT: buffer_gl0_inv665; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s4666; GFX10-WGP-NEXT: ds_write_b32 v0, v1667; GFX10-WGP-NEXT: s_endpgm668;669; GFX10-CU-LABEL: local_volatile_workgroup_acquire_load:670; GFX10-CU: ; %bb.0: ; %entry671; GFX10-CU-NEXT: s_load_dword s5, s[8:9], 0x0672; GFX10-CU-NEXT: s_load_dword s4, s[8:9], 0x4673; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)674; GFX10-CU-NEXT: v_mov_b32_e32 v0, s5675; GFX10-CU-NEXT: ds_read_b32 v1, v0676; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)677; GFX10-CU-NEXT: v_mov_b32_e32 v0, s4678; GFX10-CU-NEXT: ds_write_b32 v0, v1679; GFX10-CU-NEXT: s_endpgm680;681; SKIP-CACHE-INV-LABEL: local_volatile_workgroup_acquire_load:682; SKIP-CACHE-INV: ; %bb.0: ; %entry683; SKIP-CACHE-INV-NEXT: s_load_dword s1, s[4:5], 0x0684; SKIP-CACHE-INV-NEXT: s_load_dword s0, s[4:5], 0x1685; SKIP-CACHE-INV-NEXT: s_mov_b32 m0, -1686; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)687; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s1688; SKIP-CACHE-INV-NEXT: ds_read_b32 v1, v0689; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)690; SKIP-CACHE-INV-NEXT: s_mov_b32 m0, -1691; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s0692; SKIP-CACHE-INV-NEXT: ds_write_b32 v0, v1693; SKIP-CACHE-INV-NEXT: s_endpgm694;695; GFX11-WGP-LABEL: local_volatile_workgroup_acquire_load:696; GFX11-WGP: ; %bb.0: ; %entry697; GFX11-WGP-NEXT: s_load_b32 s1, s[4:5], 0x0698; GFX11-WGP-NEXT: s_load_b32 s0, s[4:5], 0x4699; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)700; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s1701; GFX11-WGP-NEXT: ds_load_b32 v1, v0702; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)703; GFX11-WGP-NEXT: buffer_gl0_inv704; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s0705; GFX11-WGP-NEXT: ds_store_b32 v0, v1706; GFX11-WGP-NEXT: s_endpgm707;708; GFX11-CU-LABEL: local_volatile_workgroup_acquire_load:709; GFX11-CU: ; %bb.0: ; %entry710; GFX11-CU-NEXT: s_load_b32 s1, s[4:5], 0x0711; GFX11-CU-NEXT: s_load_b32 s0, s[4:5], 0x4712; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)713; GFX11-CU-NEXT: v_mov_b32_e32 v0, s1714; GFX11-CU-NEXT: ds_load_b32 v1, v0715; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)716; GFX11-CU-NEXT: v_mov_b32_e32 v0, s0717; GFX11-CU-NEXT: ds_store_b32 v0, v1718; GFX11-CU-NEXT: s_endpgm719;720; GFX12-WGP-LABEL: local_volatile_workgroup_acquire_load:721; GFX12-WGP: ; %bb.0: ; %entry722; GFX12-WGP-NEXT: s_load_b32 s1, s[4:5], 0x0723; GFX12-WGP-NEXT: s_load_b32 s0, s[4:5], 0x4724; GFX12-WGP-NEXT: s_wait_kmcnt 0x0725; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s1726; GFX12-WGP-NEXT: ds_load_b32 v1, v0727; GFX12-WGP-NEXT: s_wait_dscnt 0x0728; GFX12-WGP-NEXT: global_inv scope:SCOPE_SE729; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s0730; GFX12-WGP-NEXT: ds_store_b32 v0, v1731; GFX12-WGP-NEXT: s_endpgm732;733; GFX12-CU-LABEL: local_volatile_workgroup_acquire_load:734; GFX12-CU: ; %bb.0: ; %entry735; GFX12-CU-NEXT: s_load_b32 s1, s[4:5], 0x0736; GFX12-CU-NEXT: s_load_b32 s0, s[4:5], 0x4737; GFX12-CU-NEXT: s_wait_kmcnt 0x0738; GFX12-CU-NEXT: v_mov_b32_e32 v0, s1739; GFX12-CU-NEXT: ds_load_b32 v1, v0740; GFX12-CU-NEXT: s_wait_dscnt 0x0741; GFX12-CU-NEXT: v_mov_b32_e32 v0, s0742; GFX12-CU-NEXT: ds_store_b32 v0, v1743; GFX12-CU-NEXT: s_endpgm744;745; GFX1250-LABEL: local_volatile_workgroup_acquire_load:746; GFX1250: ; %bb.0: ; %entry747; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1748; GFX1250-NEXT: s_load_b32 s1, s[4:5], 0x0749; GFX1250-NEXT: s_load_b32 s0, s[4:5], 0x4750; GFX1250-NEXT: s_wait_kmcnt 0x0751; GFX1250-NEXT: v_mov_b32_e32 v0, s1752; GFX1250-NEXT: ds_load_b32 v1, v0753; GFX1250-NEXT: s_wait_dscnt 0x0754; GFX1250-NEXT: v_mov_b32_e32 v0, s0755; GFX1250-NEXT: ds_store_b32 v0, v1756; GFX1250-NEXT: s_endpgm757 ptr addrspace(3) %in, ptr addrspace(3) %out) {758entry:759 %val = load atomic volatile i32, ptr addrspace(3) %in syncscope("workgroup") acquire, align 4760 store i32 %val, ptr addrspace(3) %out761 ret void762}763 764define amdgpu_kernel void @local_volatile_workgroup_release_store(765; GFX6-LABEL: local_volatile_workgroup_release_store:766; GFX6: ; %bb.0: ; %entry767; GFX6-NEXT: s_load_dword s1, s[4:5], 0xa768; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr1769; GFX6-NEXT: s_load_dword s0, s[4:5], 0x9770; GFX6-NEXT: s_mov_b32 m0, -1771; GFX6-NEXT: s_waitcnt lgkmcnt(0)772; GFX6-NEXT: v_mov_b32_e32 v0, s1773; GFX6-NEXT: v_mov_b32_e32 v1, s0774; GFX6-NEXT: s_waitcnt lgkmcnt(0)775; GFX6-NEXT: ds_write_b32 v0, v1776; GFX6-NEXT: s_endpgm777;778; GFX7-LABEL: local_volatile_workgroup_release_store:779; GFX7: ; %bb.0: ; %entry780; GFX7-NEXT: s_load_dword s4, s[8:9], 0x0781; GFX7-NEXT: s_load_dword s5, s[8:9], 0x1782; GFX7-NEXT: s_mov_b32 m0, -1783; GFX7-NEXT: s_waitcnt lgkmcnt(0)784; GFX7-NEXT: v_mov_b32_e32 v0, s5785; GFX7-NEXT: v_mov_b32_e32 v1, s4786; GFX7-NEXT: s_waitcnt lgkmcnt(0)787; GFX7-NEXT: ds_write_b32 v0, v1788; GFX7-NEXT: s_endpgm789;790; GFX10-WGP-LABEL: local_volatile_workgroup_release_store:791; GFX10-WGP: ; %bb.0: ; %entry792; GFX10-WGP-NEXT: s_load_dword s4, s[8:9], 0x0793; GFX10-WGP-NEXT: s_load_dword s5, s[8:9], 0x4794; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)795; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s5796; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s4797; GFX10-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)798; GFX10-WGP-NEXT: s_waitcnt_vscnt null, 0x0799; GFX10-WGP-NEXT: ds_write_b32 v0, v1800; GFX10-WGP-NEXT: s_endpgm801;802; GFX10-CU-LABEL: local_volatile_workgroup_release_store:803; GFX10-CU: ; %bb.0: ; %entry804; GFX10-CU-NEXT: s_load_dword s4, s[8:9], 0x0805; GFX10-CU-NEXT: s_load_dword s5, s[8:9], 0x4806; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)807; GFX10-CU-NEXT: v_mov_b32_e32 v0, s5808; GFX10-CU-NEXT: v_mov_b32_e32 v1, s4809; GFX10-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)810; GFX10-CU-NEXT: s_waitcnt_vscnt null, 0x0811; GFX10-CU-NEXT: ds_write_b32 v0, v1812; GFX10-CU-NEXT: s_endpgm813;814; SKIP-CACHE-INV-LABEL: local_volatile_workgroup_release_store:815; SKIP-CACHE-INV: ; %bb.0: ; %entry816; SKIP-CACHE-INV-NEXT: s_load_dword s0, s[4:5], 0x0817; SKIP-CACHE-INV-NEXT: s_load_dword s1, s[4:5], 0x1818; SKIP-CACHE-INV-NEXT: s_mov_b32 m0, -1819; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)820; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s1821; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s0822; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)823; SKIP-CACHE-INV-NEXT: ds_write_b32 v0, v1824; SKIP-CACHE-INV-NEXT: s_endpgm825;826; GFX11-WGP-LABEL: local_volatile_workgroup_release_store:827; GFX11-WGP: ; %bb.0: ; %entry828; GFX11-WGP-NEXT: s_load_b32 s0, s[4:5], 0x0829; GFX11-WGP-NEXT: s_load_b32 s1, s[4:5], 0x4830; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)831; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s1832; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s0833; GFX11-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)834; GFX11-WGP-NEXT: s_waitcnt_vscnt null, 0x0835; GFX11-WGP-NEXT: ds_store_b32 v0, v1836; GFX11-WGP-NEXT: s_endpgm837;838; GFX11-CU-LABEL: local_volatile_workgroup_release_store:839; GFX11-CU: ; %bb.0: ; %entry840; GFX11-CU-NEXT: s_load_b32 s0, s[4:5], 0x0841; GFX11-CU-NEXT: s_load_b32 s1, s[4:5], 0x4842; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)843; GFX11-CU-NEXT: v_mov_b32_e32 v0, s1844; GFX11-CU-NEXT: v_mov_b32_e32 v1, s0845; GFX11-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)846; GFX11-CU-NEXT: s_waitcnt_vscnt null, 0x0847; GFX11-CU-NEXT: ds_store_b32 v0, v1848; GFX11-CU-NEXT: s_endpgm849;850; GFX12-WGP-LABEL: local_volatile_workgroup_release_store:851; GFX12-WGP: ; %bb.0: ; %entry852; GFX12-WGP-NEXT: s_load_b32 s0, s[4:5], 0x0853; GFX12-WGP-NEXT: s_load_b32 s1, s[4:5], 0x4854; GFX12-WGP-NEXT: s_wait_kmcnt 0x0855; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s1856; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s0857; GFX12-WGP-NEXT: s_wait_bvhcnt 0x0858; GFX12-WGP-NEXT: s_wait_samplecnt 0x0859; GFX12-WGP-NEXT: s_wait_storecnt 0x0860; GFX12-WGP-NEXT: s_wait_loadcnt_dscnt 0x0861; GFX12-WGP-NEXT: ds_store_b32 v0, v1862; GFX12-WGP-NEXT: s_endpgm863;864; GFX12-CU-LABEL: local_volatile_workgroup_release_store:865; GFX12-CU: ; %bb.0: ; %entry866; GFX12-CU-NEXT: s_load_b32 s0, s[4:5], 0x0867; GFX12-CU-NEXT: s_load_b32 s1, s[4:5], 0x4868; GFX12-CU-NEXT: s_wait_kmcnt 0x0869; GFX12-CU-NEXT: v_mov_b32_e32 v0, s1870; GFX12-CU-NEXT: v_mov_b32_e32 v1, s0871; GFX12-CU-NEXT: s_wait_bvhcnt 0x0872; GFX12-CU-NEXT: s_wait_samplecnt 0x0873; GFX12-CU-NEXT: s_wait_storecnt 0x0874; GFX12-CU-NEXT: s_wait_loadcnt_dscnt 0x0875; GFX12-CU-NEXT: ds_store_b32 v0, v1876; GFX12-CU-NEXT: s_endpgm877;878; GFX1250-LABEL: local_volatile_workgroup_release_store:879; GFX1250: ; %bb.0: ; %entry880; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1881; GFX1250-NEXT: s_load_b32 s0, s[4:5], 0x0882; GFX1250-NEXT: s_load_b32 s1, s[4:5], 0x4883; GFX1250-NEXT: s_wait_kmcnt 0x0884; GFX1250-NEXT: v_mov_b32_e32 v0, s1885; GFX1250-NEXT: v_mov_b32_e32 v1, s0886; GFX1250-NEXT: s_wait_storecnt 0x0887; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0888; GFX1250-NEXT: ds_store_b32 v0, v1889; GFX1250-NEXT: s_endpgm890 i32 %in, ptr addrspace(3) %out) {891entry:892 store atomic volatile i32 %in, ptr addrspace(3) %out syncscope("workgroup") release, align 4893 ret void894}895 896declare i32 @llvm.amdgcn.workitem.id.x()897