1061 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 @global_volatile_load_0(14; GFX6-LABEL: global_volatile_load_0:15; GFX6: ; %bb.0: ; %entry16; GFX6-NEXT: s_mov_b64 s[0:1], s[4:5]17; GFX6-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x918; GFX6-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0xb19; GFX6-NEXT: s_waitcnt lgkmcnt(0)20; GFX6-NEXT: s_mov_b32 s2, s521; GFX6-NEXT: ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr522; GFX6-NEXT: s_mov_b32 s8, 0xf00023; GFX6-NEXT: s_mov_b32 s9, -124; GFX6-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr725; GFX6-NEXT: s_mov_b32 s5, s226; GFX6-NEXT: s_mov_b32 s6, s927; GFX6-NEXT: s_mov_b32 s7, s828; GFX6-NEXT: s_mov_b32 s10, s129; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr130; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr331; GFX6-NEXT: s_mov_b32 s1, s1032; GFX6-NEXT: s_mov_b32 s2, s933; GFX6-NEXT: s_mov_b32 s3, s834; GFX6-NEXT: buffer_load_dword v0, off, s[4:7], 0 glc35; GFX6-NEXT: s_waitcnt vmcnt(0)36; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 037; GFX6-NEXT: s_endpgm38;39; GFX7-LABEL: global_volatile_load_0:40; GFX7: ; %bb.0: ; %entry41; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s1342; GFX7-NEXT: s_add_i32 s12, s12, s1743; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 844; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x045; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x246; GFX7-NEXT: s_waitcnt lgkmcnt(0)47; GFX7-NEXT: v_mov_b32_e32 v0, s648; GFX7-NEXT: v_mov_b32_e32 v1, s749; GFX7-NEXT: flat_load_dword v2, v[0:1] glc50; GFX7-NEXT: s_waitcnt vmcnt(0)51; GFX7-NEXT: v_mov_b32_e32 v0, s452; GFX7-NEXT: v_mov_b32_e32 v1, s553; GFX7-NEXT: flat_store_dword v[0:1], v254; GFX7-NEXT: s_endpgm55;56; GFX10-WGP-LABEL: global_volatile_load_0:57; GFX10-WGP: ; %bb.0: ; %entry58; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 059; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x060; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x861; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)62; GFX10-WGP-NEXT: global_load_dword v1, v0, s[6:7] glc dlc63; GFX10-WGP-NEXT: s_waitcnt vmcnt(0)64; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]65; GFX10-WGP-NEXT: s_endpgm66;67; GFX10-CU-LABEL: global_volatile_load_0:68; GFX10-CU: ; %bb.0: ; %entry69; GFX10-CU-NEXT: v_mov_b32_e32 v0, 070; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x071; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x872; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)73; GFX10-CU-NEXT: global_load_dword v1, v0, s[6:7] glc dlc74; GFX10-CU-NEXT: s_waitcnt vmcnt(0)75; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]76; GFX10-CU-NEXT: s_endpgm77;78; SKIP-CACHE-INV-LABEL: global_volatile_load_0:79; SKIP-CACHE-INV: ; %bb.0: ; %entry80; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]81; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x082; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x283; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)84; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s585; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr586; SKIP-CACHE-INV-NEXT: s_mov_b32 s8, 0xf00087; SKIP-CACHE-INV-NEXT: s_mov_b32 s9, -188; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr789; SKIP-CACHE-INV-NEXT: s_mov_b32 s5, s290; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, s991; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, s892; SKIP-CACHE-INV-NEXT: s_mov_b32 s10, s193; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr194; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr395; SKIP-CACHE-INV-NEXT: s_mov_b32 s1, s1096; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s997; SKIP-CACHE-INV-NEXT: s_mov_b32 s3, s898; SKIP-CACHE-INV-NEXT: buffer_load_dword v0, off, s[4:7], 0 glc99; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0)100; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, off, s[0:3], 0101; SKIP-CACHE-INV-NEXT: s_endpgm102;103; GFX11-WGP-LABEL: global_volatile_load_0:104; GFX11-WGP: ; %bb.0: ; %entry105; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0106; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0107; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8108; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)109; GFX11-WGP-NEXT: global_load_b32 v1, v0, s[2:3] glc dlc110; GFX11-WGP-NEXT: s_waitcnt vmcnt(0)111; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1]112; GFX11-WGP-NEXT: s_endpgm113;114; GFX11-CU-LABEL: global_volatile_load_0:115; GFX11-CU: ; %bb.0: ; %entry116; GFX11-CU-NEXT: v_mov_b32_e32 v0, 0117; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0118; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8119; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)120; GFX11-CU-NEXT: global_load_b32 v1, v0, s[2:3] glc dlc121; GFX11-CU-NEXT: s_waitcnt vmcnt(0)122; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1]123; GFX11-CU-NEXT: s_endpgm124;125; GFX12-WGP-LABEL: global_volatile_load_0:126; GFX12-WGP: ; %bb.0: ; %entry127; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 0128; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0129; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8130; GFX12-WGP-NEXT: s_wait_kmcnt 0x0131; GFX12-WGP-NEXT: global_load_b32 v1, v0, s[2:3] scope:SCOPE_SYS132; GFX12-WGP-NEXT: s_wait_bvhcnt 0x0133; GFX12-WGP-NEXT: s_wait_samplecnt 0x0134; GFX12-WGP-NEXT: s_wait_loadcnt 0x0135; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1]136; GFX12-WGP-NEXT: s_endpgm137;138; GFX12-CU-LABEL: global_volatile_load_0:139; GFX12-CU: ; %bb.0: ; %entry140; GFX12-CU-NEXT: v_mov_b32_e32 v0, 0141; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0142; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8143; GFX12-CU-NEXT: s_wait_kmcnt 0x0144; GFX12-CU-NEXT: global_load_b32 v1, v0, s[2:3] scope:SCOPE_SYS145; GFX12-CU-NEXT: s_wait_bvhcnt 0x0146; GFX12-CU-NEXT: s_wait_samplecnt 0x0147; GFX12-CU-NEXT: s_wait_loadcnt 0x0148; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1]149; GFX12-CU-NEXT: s_endpgm150;151; GFX1250-LABEL: global_volatile_load_0:152; GFX1250: ; %bb.0: ; %entry153; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1154; GFX1250-NEXT: v_mov_b32_e32 v0, 0155; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0156; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8157; GFX1250-NEXT: s_wait_xcnt 0x0158; GFX1250-NEXT: s_wait_kmcnt 0x0159; GFX1250-NEXT: global_load_b32 v1, v0, s[2:3] scope:SCOPE_SYS160; GFX1250-NEXT: s_wait_loadcnt 0x0161; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1]162; GFX1250-NEXT: s_endpgm163 ptr addrspace(1) %in, ptr addrspace(1) %out) {164entry:165 %val = load volatile i32, ptr addrspace(1) %in, align 4166 store i32 %val, ptr addrspace(1) %out167 ret void168}169 170define amdgpu_kernel void @global_volatile_load_1(171; GFX6-LABEL: global_volatile_load_1:172; GFX6: ; %bb.0: ; %entry173; GFX6-NEXT: s_mov_b64 s[0:1], s[4:5]174; GFX6-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x9175; GFX6-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0xb176; GFX6-NEXT: s_waitcnt lgkmcnt(0)177; GFX6-NEXT: s_mov_b32 s8, s1178; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1179; GFX6-NEXT: s_mov_b32 s6, 0xf000180; GFX6-NEXT: s_mov_b32 s7, -1181; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3182; GFX6-NEXT: s_mov_b32 s1, s8183; GFX6-NEXT: s_mov_b32 s2, s7184; GFX6-NEXT: s_mov_b32 s3, s6185; GFX6-NEXT: s_mov_b32 s8, 0186; GFX6-NEXT: ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9187; GFX6-NEXT: s_mov_b32 s9, s6188; GFX6-NEXT: ; kill: def $sgpr4_sgpr5 killed $sgpr4_sgpr5 def $sgpr4_sgpr5_sgpr6_sgpr7189; GFX6-NEXT: s_mov_b64 s[6:7], s[8:9]190; GFX6-NEXT: s_mov_b32 s8, 2191; GFX6-NEXT: v_lshlrev_b32_e64 v0, s8, v0192; GFX6-NEXT: v_mov_b32_e32 v2, 0193; GFX6-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec194; GFX6-NEXT: v_mov_b32_e32 v1, v2195; GFX6-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 glc196; GFX6-NEXT: s_waitcnt vmcnt(0)197; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 0198; GFX6-NEXT: s_endpgm199;200; GFX7-LABEL: global_volatile_load_1:201; GFX7: ; %bb.0: ; %entry202; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13203; GFX7-NEXT: s_add_i32 s12, s12, s17204; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8205; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]206; GFX7-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x0207; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x2208; GFX7-NEXT: s_mov_b32 s6, 2209; GFX7-NEXT: v_lshlrev_b32_e64 v1, s6, v0210; GFX7-NEXT: v_mov_b32_e32 v0, 0211; GFX7-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec212; GFX7-NEXT: v_mov_b32_e32 v2, v0213; GFX7-NEXT: s_waitcnt lgkmcnt(0)214; GFX7-NEXT: s_mov_b32 s6, s8215; GFX7-NEXT: v_mov_b32_e32 v0, v1216; GFX7-NEXT: s_mov_b32 s8, s9217; GFX7-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec218; GFX7-NEXT: v_add_i32_e64 v0, s[6:7], s6, v0219; GFX7-NEXT: v_mov_b32_e32 v1, s8220; GFX7-NEXT: v_addc_u32_e64 v2, s[6:7], v1, v2, s[6:7]221; GFX7-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec222; GFX7-NEXT: v_mov_b32_e32 v1, v2223; GFX7-NEXT: flat_load_dword v2, v[0:1] glc224; GFX7-NEXT: s_waitcnt vmcnt(0)225; GFX7-NEXT: v_mov_b32_e32 v0, s4226; GFX7-NEXT: v_mov_b32_e32 v1, s5227; GFX7-NEXT: flat_store_dword v[0:1], v2228; GFX7-NEXT: s_endpgm229;230; GFX10-WGP-LABEL: global_volatile_load_1:231; GFX10-WGP: ; %bb.0: ; %entry232; GFX10-WGP-NEXT: v_mov_b32_e32 v1, v0233; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0234; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8235; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 0236; GFX10-WGP-NEXT: s_mov_b32 s8, 2237; GFX10-WGP-NEXT: v_lshlrev_b32_e64 v1, s8, v1238; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)239; GFX10-WGP-NEXT: global_load_dword v1, v1, s[6:7] glc dlc240; GFX10-WGP-NEXT: s_waitcnt vmcnt(0)241; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]242; GFX10-WGP-NEXT: s_endpgm243;244; GFX10-CU-LABEL: global_volatile_load_1:245; GFX10-CU: ; %bb.0: ; %entry246; GFX10-CU-NEXT: v_mov_b32_e32 v1, v0247; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0248; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8249; GFX10-CU-NEXT: v_mov_b32_e32 v0, 0250; GFX10-CU-NEXT: s_mov_b32 s8, 2251; GFX10-CU-NEXT: v_lshlrev_b32_e64 v1, s8, v1252; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)253; GFX10-CU-NEXT: global_load_dword v1, v1, s[6:7] glc dlc254; GFX10-CU-NEXT: s_waitcnt vmcnt(0)255; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]256; GFX10-CU-NEXT: s_endpgm257;258; SKIP-CACHE-INV-LABEL: global_volatile_load_1:259; SKIP-CACHE-INV: ; %bb.0: ; %entry260; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]261; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0262; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2263; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)264; SKIP-CACHE-INV-NEXT: s_mov_b32 s8, s1265; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1266; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, 0xf000267; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, -1268; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3269; SKIP-CACHE-INV-NEXT: s_mov_b32 s1, s8270; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s7271; SKIP-CACHE-INV-NEXT: s_mov_b32 s3, s6272; SKIP-CACHE-INV-NEXT: s_mov_b32 s8, 0273; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9274; SKIP-CACHE-INV-NEXT: s_mov_b32 s9, s6275; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr4_sgpr5 killed $sgpr4_sgpr5 def $sgpr4_sgpr5_sgpr6_sgpr7276; SKIP-CACHE-INV-NEXT: s_mov_b64 s[6:7], s[8:9]277; SKIP-CACHE-INV-NEXT: s_mov_b32 s8, 2278; SKIP-CACHE-INV-NEXT: v_lshlrev_b32_e64 v0, s8, v0279; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v2, 0280; SKIP-CACHE-INV-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec281; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, v2282; SKIP-CACHE-INV-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 glc283; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0)284; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, off, s[0:3], 0285; SKIP-CACHE-INV-NEXT: s_endpgm286;287; GFX11-WGP-LABEL: global_volatile_load_1:288; GFX11-WGP: ; %bb.0: ; %entry289; GFX11-WGP-NEXT: v_mov_b32_e32 v1, v0290; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0291; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8292; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0293; GFX11-WGP-NEXT: s_mov_b32 s4, 0x3ff294; GFX11-WGP-NEXT: v_and_b32_e64 v1, v1, s4295; GFX11-WGP-NEXT: s_mov_b32 s4, 2296; GFX11-WGP-NEXT: v_lshlrev_b32_e64 v1, s4, v1297; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)298; GFX11-WGP-NEXT: global_load_b32 v1, v1, s[2:3] glc dlc299; GFX11-WGP-NEXT: s_waitcnt vmcnt(0)300; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1]301; GFX11-WGP-NEXT: s_endpgm302;303; GFX11-CU-LABEL: global_volatile_load_1:304; GFX11-CU: ; %bb.0: ; %entry305; GFX11-CU-NEXT: v_mov_b32_e32 v1, v0306; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0307; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8308; GFX11-CU-NEXT: v_mov_b32_e32 v0, 0309; GFX11-CU-NEXT: s_mov_b32 s4, 0x3ff310; GFX11-CU-NEXT: v_and_b32_e64 v1, v1, s4311; GFX11-CU-NEXT: s_mov_b32 s4, 2312; GFX11-CU-NEXT: v_lshlrev_b32_e64 v1, s4, v1313; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)314; GFX11-CU-NEXT: global_load_b32 v1, v1, s[2:3] glc dlc315; GFX11-CU-NEXT: s_waitcnt vmcnt(0)316; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1]317; GFX11-CU-NEXT: s_endpgm318;319; GFX12-WGP-LABEL: global_volatile_load_1:320; GFX12-WGP: ; %bb.0: ; %entry321; GFX12-WGP-NEXT: v_mov_b32_e32 v1, v0322; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0323; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8324; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 0325; GFX12-WGP-NEXT: s_mov_b32 s4, 0x3ff326; GFX12-WGP-NEXT: v_and_b32_e64 v1, v1, s4327; GFX12-WGP-NEXT: s_mov_b32 s4, 2328; GFX12-WGP-NEXT: s_wait_alu depctr_sa_sdst(0)329; GFX12-WGP-NEXT: v_lshlrev_b32_e64 v1, s4, v1330; GFX12-WGP-NEXT: s_wait_kmcnt 0x0331; GFX12-WGP-NEXT: global_load_b32 v1, v1, s[2:3] scope:SCOPE_SYS332; GFX12-WGP-NEXT: s_wait_bvhcnt 0x0333; GFX12-WGP-NEXT: s_wait_samplecnt 0x0334; GFX12-WGP-NEXT: s_wait_loadcnt 0x0335; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1]336; GFX12-WGP-NEXT: s_endpgm337;338; GFX12-CU-LABEL: global_volatile_load_1:339; GFX12-CU: ; %bb.0: ; %entry340; GFX12-CU-NEXT: v_mov_b32_e32 v1, v0341; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0342; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8343; GFX12-CU-NEXT: v_mov_b32_e32 v0, 0344; GFX12-CU-NEXT: s_mov_b32 s4, 0x3ff345; GFX12-CU-NEXT: v_and_b32_e64 v1, v1, s4346; GFX12-CU-NEXT: s_mov_b32 s4, 2347; GFX12-CU-NEXT: s_wait_alu depctr_sa_sdst(0)348; GFX12-CU-NEXT: v_lshlrev_b32_e64 v1, s4, v1349; GFX12-CU-NEXT: s_wait_kmcnt 0x0350; GFX12-CU-NEXT: global_load_b32 v1, v1, s[2:3] scope:SCOPE_SYS351; GFX12-CU-NEXT: s_wait_bvhcnt 0x0352; GFX12-CU-NEXT: s_wait_samplecnt 0x0353; GFX12-CU-NEXT: s_wait_loadcnt 0x0354; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1]355; GFX12-CU-NEXT: s_endpgm356;357; GFX1250-LABEL: global_volatile_load_1:358; GFX1250: ; %bb.0: ; %entry359; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1360; GFX1250-NEXT: v_mov_b32_e32 v1, v0361; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0362; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8363; GFX1250-NEXT: v_mov_b32_e32 v0, 0364; GFX1250-NEXT: s_wait_xcnt 0x0365; GFX1250-NEXT: s_mov_b32 s4, 0x3ff366; GFX1250-NEXT: v_and_b32_e64 v1, v1, s4367; GFX1250-NEXT: s_wait_xcnt 0x0368; GFX1250-NEXT: s_wait_kmcnt 0x0369; GFX1250-NEXT: global_load_b32 v1, v1, s[2:3] scale_offset scope:SCOPE_SYS370; GFX1250-NEXT: s_wait_loadcnt 0x0371; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1]372; GFX1250-NEXT: s_endpgm373 ptr addrspace(1) %in, ptr addrspace(1) %out) {374entry:375 %tid = call i32 @llvm.amdgcn.workitem.id.x()376 %val.gep = getelementptr inbounds i32, ptr addrspace(1) %in, i32 %tid377 %val = load volatile i32, ptr addrspace(1) %val.gep, align 4378 store i32 %val, ptr addrspace(1) %out379 ret void380}381 382define amdgpu_kernel void @global_volatile_store_0(383; GFX6-LABEL: global_volatile_store_0:384; GFX6: ; %bb.0: ; %entry385; GFX6-NEXT: s_mov_b64 s[0:1], s[4:5]386; GFX6-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x9387; GFX6-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0xb388; GFX6-NEXT: s_waitcnt lgkmcnt(0)389; GFX6-NEXT: s_mov_b32 s8, s1390; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1391; GFX6-NEXT: s_mov_b32 s6, 0xf000392; GFX6-NEXT: s_mov_b32 s7, -1393; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3394; GFX6-NEXT: s_mov_b32 s1, s8395; GFX6-NEXT: s_mov_b32 s2, s7396; GFX6-NEXT: s_mov_b32 s3, s6397; GFX6-NEXT: s_load_dword s4, s[4:5], 0x0398; GFX6-NEXT: s_waitcnt lgkmcnt(0)399; GFX6-NEXT: v_mov_b32_e32 v0, s4400; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 0401; GFX6-NEXT: s_waitcnt vmcnt(0)402; GFX6-NEXT: s_endpgm403;404; GFX7-LABEL: global_volatile_store_0:405; GFX7: ; %bb.0: ; %entry406; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13407; GFX7-NEXT: s_add_i32 s12, s12, s17408; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8409; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0410; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x2411; GFX7-NEXT: s_waitcnt lgkmcnt(0)412; GFX7-NEXT: s_load_dword s4, s[4:5], 0x0413; GFX7-NEXT: v_mov_b32_e32 v0, s6414; GFX7-NEXT: v_mov_b32_e32 v1, s7415; GFX7-NEXT: s_waitcnt lgkmcnt(0)416; GFX7-NEXT: v_mov_b32_e32 v2, s4417; GFX7-NEXT: flat_store_dword v[0:1], v2418; GFX7-NEXT: s_waitcnt vmcnt(0)419; GFX7-NEXT: s_endpgm420;421; GFX10-WGP-LABEL: global_volatile_store_0:422; GFX10-WGP: ; %bb.0: ; %entry423; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0424; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8425; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 0426; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)427; GFX10-WGP-NEXT: s_load_dword s6, s[6:7], 0x0428; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)429; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s6430; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]431; GFX10-WGP-NEXT: s_waitcnt_vscnt null, 0x0432; GFX10-WGP-NEXT: s_endpgm433;434; GFX10-CU-LABEL: global_volatile_store_0:435; GFX10-CU: ; %bb.0: ; %entry436; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0437; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8438; GFX10-CU-NEXT: v_mov_b32_e32 v0, 0439; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)440; GFX10-CU-NEXT: s_load_dword s6, s[6:7], 0x0441; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)442; GFX10-CU-NEXT: v_mov_b32_e32 v1, s6443; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]444; GFX10-CU-NEXT: s_waitcnt_vscnt null, 0x0445; GFX10-CU-NEXT: s_endpgm446;447; SKIP-CACHE-INV-LABEL: global_volatile_store_0:448; SKIP-CACHE-INV: ; %bb.0: ; %entry449; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]450; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0451; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2452; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)453; SKIP-CACHE-INV-NEXT: s_mov_b32 s8, s1454; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1455; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, 0xf000456; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, -1457; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3458; SKIP-CACHE-INV-NEXT: s_mov_b32 s1, s8459; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s7460; SKIP-CACHE-INV-NEXT: s_mov_b32 s3, s6461; SKIP-CACHE-INV-NEXT: s_load_dword s4, s[4:5], 0x0462; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)463; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s4464; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, off, s[0:3], 0465; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0)466; SKIP-CACHE-INV-NEXT: s_endpgm467;468; GFX11-WGP-LABEL: global_volatile_store_0:469; GFX11-WGP: ; %bb.0: ; %entry470; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0471; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8472; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0473; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)474; GFX11-WGP-NEXT: s_load_b32 s2, s[2:3], 0x0475; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)476; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s2477; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1] dlc478; GFX11-WGP-NEXT: s_waitcnt_vscnt null, 0x0479; GFX11-WGP-NEXT: s_endpgm480;481; GFX11-CU-LABEL: global_volatile_store_0:482; GFX11-CU: ; %bb.0: ; %entry483; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0484; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8485; GFX11-CU-NEXT: v_mov_b32_e32 v0, 0486; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)487; GFX11-CU-NEXT: s_load_b32 s2, s[2:3], 0x0488; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)489; GFX11-CU-NEXT: v_mov_b32_e32 v1, s2490; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1] dlc491; GFX11-CU-NEXT: s_waitcnt_vscnt null, 0x0492; GFX11-CU-NEXT: s_endpgm493;494; GFX12-WGP-LABEL: global_volatile_store_0:495; GFX12-WGP: ; %bb.0: ; %entry496; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0497; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8498; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 0499; GFX12-WGP-NEXT: s_wait_kmcnt 0x0500; GFX12-WGP-NEXT: s_load_b32 s2, s[2:3], 0x0501; GFX12-WGP-NEXT: s_wait_kmcnt 0x0502; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s2503; GFX12-WGP-NEXT: s_wait_loadcnt 0x0504; GFX12-WGP-NEXT: s_wait_samplecnt 0x0505; GFX12-WGP-NEXT: s_wait_bvhcnt 0x0506; GFX12-WGP-NEXT: s_wait_kmcnt 0x0507; GFX12-WGP-NEXT: s_wait_storecnt 0x0508; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1] scope:SCOPE_SYS509; GFX12-WGP-NEXT: s_wait_storecnt 0x0510; GFX12-WGP-NEXT: s_endpgm511;512; GFX12-CU-LABEL: global_volatile_store_0:513; GFX12-CU: ; %bb.0: ; %entry514; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0515; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8516; GFX12-CU-NEXT: v_mov_b32_e32 v0, 0517; GFX12-CU-NEXT: s_wait_kmcnt 0x0518; GFX12-CU-NEXT: s_load_b32 s2, s[2:3], 0x0519; GFX12-CU-NEXT: s_wait_kmcnt 0x0520; GFX12-CU-NEXT: v_mov_b32_e32 v1, s2521; GFX12-CU-NEXT: s_wait_loadcnt 0x0522; GFX12-CU-NEXT: s_wait_samplecnt 0x0523; GFX12-CU-NEXT: s_wait_bvhcnt 0x0524; GFX12-CU-NEXT: s_wait_kmcnt 0x0525; GFX12-CU-NEXT: s_wait_storecnt 0x0526; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1] scope:SCOPE_SYS527; GFX12-CU-NEXT: s_wait_storecnt 0x0528; GFX12-CU-NEXT: s_endpgm529;530; GFX1250-LABEL: global_volatile_store_0:531; GFX1250: ; %bb.0: ; %entry532; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1533; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0534; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8535; GFX1250-NEXT: v_mov_b32_e32 v0, 0536; GFX1250-NEXT: s_wait_kmcnt 0x0537; GFX1250-NEXT: s_load_b32 s2, s[2:3], 0x0538; GFX1250-NEXT: s_wait_kmcnt 0x0539; GFX1250-NEXT: v_mov_b32_e32 v1, s2540; GFX1250-NEXT: s_wait_xcnt 0x0541; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1] scope:SCOPE_SYS542; GFX1250-NEXT: s_wait_storecnt 0x0543; GFX1250-NEXT: s_endpgm544 ptr addrspace(1) %in, ptr addrspace(1) %out) {545entry:546 %val = load i32, ptr addrspace(1) %in, align 4547 store volatile i32 %val, ptr addrspace(1) %out548 ret void549}550 551define amdgpu_kernel void @global_volatile_store_1(552; GFX6-LABEL: global_volatile_store_1:553; GFX6: ; %bb.0: ; %entry554; GFX6-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x9555; GFX6-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xb556; GFX6-NEXT: s_waitcnt lgkmcnt(0)557; GFX6-NEXT: s_load_dword s4, s[2:3], 0x0558; GFX6-NEXT: s_mov_b32 s2, 0xf000559; GFX6-NEXT: s_mov_b32 s6, 0560; GFX6-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7561; GFX6-NEXT: s_mov_b32 s7, s2562; GFX6-NEXT: ; kill: def $sgpr0_sgpr1 killed $sgpr0_sgpr1 def $sgpr0_sgpr1_sgpr2_sgpr3563; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]564; GFX6-NEXT: s_mov_b32 s5, 2565; GFX6-NEXT: v_lshlrev_b32_e64 v1, s5, v0566; GFX6-NEXT: v_mov_b32_e32 v0, 0567; GFX6-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec568; GFX6-NEXT: v_mov_b32_e32 v2, v0569; GFX6-NEXT: s_waitcnt lgkmcnt(0)570; GFX6-NEXT: v_mov_b32_e32 v0, s4571; GFX6-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64572; GFX6-NEXT: s_waitcnt vmcnt(0)573; GFX6-NEXT: s_endpgm574;575; GFX7-LABEL: global_volatile_store_1:576; GFX7: ; %bb.0: ; %entry577; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13578; GFX7-NEXT: s_add_i32 s12, s12, s17579; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8580; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0581; GFX7-NEXT: s_load_dwordx2 s[8:9], s[8:9], 0x2582; GFX7-NEXT: s_waitcnt lgkmcnt(0)583; GFX7-NEXT: s_load_dword s4, s[4:5], 0x0584; GFX7-NEXT: s_mov_b32 s5, 2585; GFX7-NEXT: v_lshlrev_b32_e64 v1, s5, v0586; GFX7-NEXT: v_mov_b32_e32 v0, 0587; GFX7-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec588; GFX7-NEXT: v_mov_b32_e32 v2, v0589; GFX7-NEXT: s_mov_b32 s6, s8590; GFX7-NEXT: v_mov_b32_e32 v0, v1591; GFX7-NEXT: s_mov_b32 s5, s9592; GFX7-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec593; GFX7-NEXT: v_add_i32_e64 v0, s[6:7], s6, v0594; GFX7-NEXT: v_mov_b32_e32 v1, s5595; GFX7-NEXT: v_addc_u32_e64 v2, s[6:7], v1, v2, s[6:7]596; GFX7-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec597; GFX7-NEXT: v_mov_b32_e32 v1, v2598; GFX7-NEXT: s_waitcnt lgkmcnt(0)599; GFX7-NEXT: v_mov_b32_e32 v2, s4600; GFX7-NEXT: flat_store_dword v[0:1], v2601; GFX7-NEXT: s_waitcnt vmcnt(0)602; GFX7-NEXT: s_endpgm603;604; GFX10-WGP-LABEL: global_volatile_store_1:605; GFX10-WGP: ; %bb.0: ; %entry606; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0607; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8608; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)609; GFX10-WGP-NEXT: s_load_dword s6, s[6:7], 0x0610; GFX10-WGP-NEXT: s_mov_b32 s7, 2611; GFX10-WGP-NEXT: v_lshlrev_b32_e64 v0, s7, v0612; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)613; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s6614; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]615; GFX10-WGP-NEXT: s_waitcnt_vscnt null, 0x0616; GFX10-WGP-NEXT: s_endpgm617;618; GFX10-CU-LABEL: global_volatile_store_1:619; GFX10-CU: ; %bb.0: ; %entry620; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0621; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8622; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)623; GFX10-CU-NEXT: s_load_dword s6, s[6:7], 0x0624; GFX10-CU-NEXT: s_mov_b32 s7, 2625; GFX10-CU-NEXT: v_lshlrev_b32_e64 v0, s7, v0626; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)627; GFX10-CU-NEXT: v_mov_b32_e32 v1, s6628; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]629; GFX10-CU-NEXT: s_waitcnt_vscnt null, 0x0630; GFX10-CU-NEXT: s_endpgm631;632; SKIP-CACHE-INV-LABEL: global_volatile_store_1:633; SKIP-CACHE-INV: ; %bb.0: ; %entry634; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0635; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2636; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)637; SKIP-CACHE-INV-NEXT: s_load_dword s4, s[2:3], 0x0638; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, 0xf000639; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, 0640; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr7641; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, s2642; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0_sgpr1 killed $sgpr0_sgpr1 def $sgpr0_sgpr1_sgpr2_sgpr3643; SKIP-CACHE-INV-NEXT: s_mov_b64 s[2:3], s[6:7]644; SKIP-CACHE-INV-NEXT: s_mov_b32 s5, 2645; SKIP-CACHE-INV-NEXT: v_lshlrev_b32_e64 v1, s5, v0646; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, 0647; SKIP-CACHE-INV-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec648; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v2, v0649; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)650; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s4651; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64652; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0)653; SKIP-CACHE-INV-NEXT: s_endpgm654;655; GFX11-WGP-LABEL: global_volatile_store_1:656; GFX11-WGP: ; %bb.0: ; %entry657; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0658; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8659; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)660; GFX11-WGP-NEXT: s_load_b32 s2, s[2:3], 0x0661; GFX11-WGP-NEXT: s_mov_b32 s3, 0x3ff662; GFX11-WGP-NEXT: v_and_b32_e64 v0, v0, s3663; GFX11-WGP-NEXT: s_mov_b32 s3, 2664; GFX11-WGP-NEXT: v_lshlrev_b32_e64 v0, s3, v0665; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)666; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s2667; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1] dlc668; GFX11-WGP-NEXT: s_waitcnt_vscnt null, 0x0669; GFX11-WGP-NEXT: s_endpgm670;671; GFX11-CU-LABEL: global_volatile_store_1:672; GFX11-CU: ; %bb.0: ; %entry673; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0674; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8675; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)676; GFX11-CU-NEXT: s_load_b32 s2, s[2:3], 0x0677; GFX11-CU-NEXT: s_mov_b32 s3, 0x3ff678; GFX11-CU-NEXT: v_and_b32_e64 v0, v0, s3679; GFX11-CU-NEXT: s_mov_b32 s3, 2680; GFX11-CU-NEXT: v_lshlrev_b32_e64 v0, s3, v0681; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)682; GFX11-CU-NEXT: v_mov_b32_e32 v1, s2683; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1] dlc684; GFX11-CU-NEXT: s_waitcnt_vscnt null, 0x0685; GFX11-CU-NEXT: s_endpgm686;687; GFX12-WGP-LABEL: global_volatile_store_1:688; GFX12-WGP: ; %bb.0: ; %entry689; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0690; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8691; GFX12-WGP-NEXT: s_wait_kmcnt 0x0692; GFX12-WGP-NEXT: s_load_b32 s2, s[2:3], 0x0693; GFX12-WGP-NEXT: s_mov_b32 s3, 0x3ff694; GFX12-WGP-NEXT: v_and_b32_e64 v0, v0, s3695; GFX12-WGP-NEXT: s_mov_b32 s3, 2696; GFX12-WGP-NEXT: s_wait_alu depctr_sa_sdst(0)697; GFX12-WGP-NEXT: v_lshlrev_b32_e64 v0, s3, v0698; GFX12-WGP-NEXT: s_wait_kmcnt 0x0699; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s2700; GFX12-WGP-NEXT: s_wait_loadcnt 0x0701; GFX12-WGP-NEXT: s_wait_samplecnt 0x0702; GFX12-WGP-NEXT: s_wait_bvhcnt 0x0703; GFX12-WGP-NEXT: s_wait_kmcnt 0x0704; GFX12-WGP-NEXT: s_wait_storecnt 0x0705; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1] scope:SCOPE_SYS706; GFX12-WGP-NEXT: s_wait_storecnt 0x0707; GFX12-WGP-NEXT: s_endpgm708;709; GFX12-CU-LABEL: global_volatile_store_1:710; GFX12-CU: ; %bb.0: ; %entry711; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0712; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8713; GFX12-CU-NEXT: s_wait_kmcnt 0x0714; GFX12-CU-NEXT: s_load_b32 s2, s[2:3], 0x0715; GFX12-CU-NEXT: s_mov_b32 s3, 0x3ff716; GFX12-CU-NEXT: v_and_b32_e64 v0, v0, s3717; GFX12-CU-NEXT: s_mov_b32 s3, 2718; GFX12-CU-NEXT: s_wait_alu depctr_sa_sdst(0)719; GFX12-CU-NEXT: v_lshlrev_b32_e64 v0, s3, v0720; GFX12-CU-NEXT: s_wait_kmcnt 0x0721; GFX12-CU-NEXT: v_mov_b32_e32 v1, s2722; GFX12-CU-NEXT: s_wait_loadcnt 0x0723; GFX12-CU-NEXT: s_wait_samplecnt 0x0724; GFX12-CU-NEXT: s_wait_bvhcnt 0x0725; GFX12-CU-NEXT: s_wait_kmcnt 0x0726; GFX12-CU-NEXT: s_wait_storecnt 0x0727; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1] scope:SCOPE_SYS728; GFX12-CU-NEXT: s_wait_storecnt 0x0729; GFX12-CU-NEXT: s_endpgm730;731; GFX1250-LABEL: global_volatile_store_1:732; GFX1250: ; %bb.0: ; %entry733; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1734; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0735; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8736; GFX1250-NEXT: s_wait_kmcnt 0x0737; GFX1250-NEXT: s_load_b32 s2, s[2:3], 0x0738; GFX1250-NEXT: s_wait_xcnt 0x0739; GFX1250-NEXT: s_mov_b32 s3, 0x3ff740; GFX1250-NEXT: v_and_b32_e64 v0, v0, s3741; GFX1250-NEXT: s_wait_kmcnt 0x0742; GFX1250-NEXT: v_mov_b32_e32 v1, s2743; GFX1250-NEXT: s_wait_xcnt 0x0744; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1] scale_offset scope:SCOPE_SYS745; GFX1250-NEXT: s_wait_storecnt 0x0746; GFX1250-NEXT: s_endpgm747 ptr addrspace(1) %in, ptr addrspace(1) %out) {748entry:749 %tid = call i32 @llvm.amdgcn.workitem.id.x()750 %val = load i32, ptr addrspace(1) %in, align 4751 %out.gep = getelementptr inbounds i32, ptr addrspace(1) %out, i32 %tid752 store volatile i32 %val, ptr addrspace(1) %out.gep753 ret void754}755 756define amdgpu_kernel void @global_volatile_workgroup_acquire_load(757; GFX6-LABEL: global_volatile_workgroup_acquire_load:758; GFX6: ; %bb.0: ; %entry759; GFX6-NEXT: s_mov_b64 s[0:1], s[4:5]760; GFX6-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x9761; GFX6-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0xb762; GFX6-NEXT: s_waitcnt lgkmcnt(0)763; GFX6-NEXT: s_mov_b32 s2, s5764; GFX6-NEXT: ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5765; GFX6-NEXT: s_mov_b32 s8, 0xf000766; GFX6-NEXT: s_mov_b32 s9, -1767; GFX6-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7768; GFX6-NEXT: s_mov_b32 s5, s2769; GFX6-NEXT: s_mov_b32 s6, s9770; GFX6-NEXT: s_mov_b32 s7, s8771; GFX6-NEXT: s_mov_b32 s10, s1772; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1773; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3774; GFX6-NEXT: s_mov_b32 s1, s10775; GFX6-NEXT: s_mov_b32 s2, s9776; GFX6-NEXT: s_mov_b32 s3, s8777; GFX6-NEXT: buffer_load_dword v0, off, s[4:7], 0778; GFX6-NEXT: s_waitcnt vmcnt(0)779; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 0780; GFX6-NEXT: s_endpgm781;782; GFX7-LABEL: global_volatile_workgroup_acquire_load:783; GFX7: ; %bb.0: ; %entry784; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13785; GFX7-NEXT: s_add_i32 s12, s12, s17786; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8787; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0788; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x2789; GFX7-NEXT: s_waitcnt lgkmcnt(0)790; GFX7-NEXT: v_mov_b32_e32 v0, s6791; GFX7-NEXT: v_mov_b32_e32 v1, s7792; GFX7-NEXT: flat_load_dword v2, v[0:1]793; GFX7-NEXT: v_mov_b32_e32 v0, s4794; GFX7-NEXT: v_mov_b32_e32 v1, s5795; GFX7-NEXT: s_waitcnt vmcnt(0)796; GFX7-NEXT: flat_store_dword v[0:1], v2797; GFX7-NEXT: s_endpgm798;799; GFX10-WGP-LABEL: global_volatile_workgroup_acquire_load:800; GFX10-WGP: ; %bb.0: ; %entry801; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 0802; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0803; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8804; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)805; GFX10-WGP-NEXT: global_load_dword v1, v0, s[6:7] glc806; GFX10-WGP-NEXT: s_waitcnt vmcnt(0)807; GFX10-WGP-NEXT: buffer_gl0_inv808; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]809; GFX10-WGP-NEXT: s_endpgm810;811; GFX10-CU-LABEL: global_volatile_workgroup_acquire_load:812; GFX10-CU: ; %bb.0: ; %entry813; GFX10-CU-NEXT: v_mov_b32_e32 v0, 0814; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0815; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8816; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)817; GFX10-CU-NEXT: global_load_dword v1, v0, s[6:7]818; GFX10-CU-NEXT: s_waitcnt vmcnt(0)819; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]820; GFX10-CU-NEXT: s_endpgm821;822; SKIP-CACHE-INV-LABEL: global_volatile_workgroup_acquire_load:823; SKIP-CACHE-INV: ; %bb.0: ; %entry824; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]825; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0826; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2827; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)828; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s5829; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5830; SKIP-CACHE-INV-NEXT: s_mov_b32 s8, 0xf000831; SKIP-CACHE-INV-NEXT: s_mov_b32 s9, -1832; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7833; SKIP-CACHE-INV-NEXT: s_mov_b32 s5, s2834; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, s9835; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, s8836; SKIP-CACHE-INV-NEXT: s_mov_b32 s10, s1837; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1838; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3839; SKIP-CACHE-INV-NEXT: s_mov_b32 s1, s10840; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s9841; SKIP-CACHE-INV-NEXT: s_mov_b32 s3, s8842; SKIP-CACHE-INV-NEXT: buffer_load_dword v0, off, s[4:7], 0843; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0)844; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, off, s[0:3], 0845; SKIP-CACHE-INV-NEXT: s_endpgm846;847; GFX11-WGP-LABEL: global_volatile_workgroup_acquire_load:848; GFX11-WGP: ; %bb.0: ; %entry849; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0850; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0851; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8852; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)853; GFX11-WGP-NEXT: global_load_b32 v1, v0, s[2:3] glc854; GFX11-WGP-NEXT: s_waitcnt vmcnt(0)855; GFX11-WGP-NEXT: buffer_gl0_inv856; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1]857; GFX11-WGP-NEXT: s_endpgm858;859; GFX11-CU-LABEL: global_volatile_workgroup_acquire_load:860; GFX11-CU: ; %bb.0: ; %entry861; GFX11-CU-NEXT: v_mov_b32_e32 v0, 0862; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0863; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8864; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)865; GFX11-CU-NEXT: global_load_b32 v1, v0, s[2:3]866; GFX11-CU-NEXT: s_waitcnt vmcnt(0)867; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1]868; GFX11-CU-NEXT: s_endpgm869;870; GFX12-WGP-LABEL: global_volatile_workgroup_acquire_load:871; GFX12-WGP: ; %bb.0: ; %entry872; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 0873; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0874; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8875; GFX12-WGP-NEXT: s_wait_kmcnt 0x0876; GFX12-WGP-NEXT: global_load_b32 v1, v0, s[2:3] scope:SCOPE_SE877; GFX12-WGP-NEXT: s_wait_loadcnt 0x0878; GFX12-WGP-NEXT: global_inv scope:SCOPE_SE879; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1]880; GFX12-WGP-NEXT: s_endpgm881;882; GFX12-CU-LABEL: global_volatile_workgroup_acquire_load:883; GFX12-CU: ; %bb.0: ; %entry884; GFX12-CU-NEXT: v_mov_b32_e32 v0, 0885; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0886; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8887; GFX12-CU-NEXT: s_wait_kmcnt 0x0888; GFX12-CU-NEXT: global_load_b32 v1, v0, s[2:3]889; GFX12-CU-NEXT: s_wait_loadcnt 0x0890; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1]891; GFX12-CU-NEXT: s_endpgm892;893; GFX1250-LABEL: global_volatile_workgroup_acquire_load:894; GFX1250: ; %bb.0: ; %entry895; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1896; GFX1250-NEXT: v_mov_b32_e32 v0, 0897; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0898; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8899; GFX1250-NEXT: s_wait_kmcnt 0x0900; GFX1250-NEXT: global_load_b32 v1, v0, s[2:3]901; GFX1250-NEXT: s_wait_loadcnt 0x0902; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1]903; GFX1250-NEXT: s_endpgm904 ptr addrspace(1) %in, ptr addrspace(1) %out) {905entry:906 %val = load atomic volatile i32, ptr addrspace(1) %in syncscope("workgroup") acquire, align 4907 store i32 %val, ptr addrspace(1) %out908 ret void909}910 911define amdgpu_kernel void @global_volatile_workgroup_release_store(912; GFX6-LABEL: global_volatile_workgroup_release_store:913; GFX6: ; %bb.0: ; %entry914; GFX6-NEXT: s_mov_b64 s[0:1], s[4:5]915; GFX6-NEXT: s_load_dword s4, s[0:1], 0x9916; GFX6-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0xb917; GFX6-NEXT: s_waitcnt lgkmcnt(0)918; GFX6-NEXT: s_mov_b32 s7, s1919; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1920; GFX6-NEXT: s_mov_b32 s5, 0xf000921; GFX6-NEXT: s_mov_b32 s6, -1922; GFX6-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3923; GFX6-NEXT: s_mov_b32 s1, s7924; GFX6-NEXT: s_mov_b32 s2, s6925; GFX6-NEXT: s_mov_b32 s3, s5926; GFX6-NEXT: v_mov_b32_e32 v0, s4927; GFX6-NEXT: s_waitcnt lgkmcnt(0)928; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 0929; GFX6-NEXT: s_endpgm930;931; GFX7-LABEL: global_volatile_workgroup_release_store:932; GFX7: ; %bb.0: ; %entry933; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13934; GFX7-NEXT: s_add_i32 s12, s12, s17935; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8936; GFX7-NEXT: s_load_dword s4, s[8:9], 0x0937; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x2938; GFX7-NEXT: s_waitcnt lgkmcnt(0)939; GFX7-NEXT: v_mov_b32_e32 v0, s6940; GFX7-NEXT: v_mov_b32_e32 v1, s7941; GFX7-NEXT: v_mov_b32_e32 v2, s4942; GFX7-NEXT: s_waitcnt lgkmcnt(0)943; GFX7-NEXT: flat_store_dword v[0:1], v2944; GFX7-NEXT: s_endpgm945;946; GFX10-WGP-LABEL: global_volatile_workgroup_release_store:947; GFX10-WGP: ; %bb.0: ; %entry948; GFX10-WGP-NEXT: s_load_dword s6, s[8:9], 0x0949; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8950; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 0951; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)952; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s6953; GFX10-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)954; GFX10-WGP-NEXT: s_waitcnt_vscnt null, 0x0955; GFX10-WGP-NEXT: global_store_dword v0, v1, s[4:5]956; GFX10-WGP-NEXT: s_endpgm957;958; GFX10-CU-LABEL: global_volatile_workgroup_release_store:959; GFX10-CU: ; %bb.0: ; %entry960; GFX10-CU-NEXT: s_load_dword s6, s[8:9], 0x0961; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8962; GFX10-CU-NEXT: v_mov_b32_e32 v0, 0963; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)964; GFX10-CU-NEXT: v_mov_b32_e32 v1, s6965; GFX10-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)966; GFX10-CU-NEXT: s_waitcnt_vscnt null, 0x0967; GFX10-CU-NEXT: global_store_dword v0, v1, s[4:5]968; GFX10-CU-NEXT: s_endpgm969;970; SKIP-CACHE-INV-LABEL: global_volatile_workgroup_release_store:971; SKIP-CACHE-INV: ; %bb.0: ; %entry972; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]973; SKIP-CACHE-INV-NEXT: s_load_dword s4, s[0:1], 0x0974; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2975; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)976; SKIP-CACHE-INV-NEXT: s_mov_b32 s7, s1977; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1978; SKIP-CACHE-INV-NEXT: s_mov_b32 s5, 0xf000979; SKIP-CACHE-INV-NEXT: s_mov_b32 s6, -1980; SKIP-CACHE-INV-NEXT: ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3981; SKIP-CACHE-INV-NEXT: s_mov_b32 s1, s7982; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s6983; SKIP-CACHE-INV-NEXT: s_mov_b32 s3, s5984; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s4985; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)986; SKIP-CACHE-INV-NEXT: buffer_store_dword v0, off, s[0:3], 0987; SKIP-CACHE-INV-NEXT: s_endpgm988;989; GFX11-WGP-LABEL: global_volatile_workgroup_release_store:990; GFX11-WGP: ; %bb.0: ; %entry991; GFX11-WGP-NEXT: s_load_b32 s2, s[4:5], 0x0992; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8993; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0994; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)995; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s2996; GFX11-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)997; GFX11-WGP-NEXT: s_waitcnt_vscnt null, 0x0998; GFX11-WGP-NEXT: global_store_b32 v0, v1, s[0:1]999; GFX11-WGP-NEXT: s_endpgm1000;1001; GFX11-CU-LABEL: global_volatile_workgroup_release_store:1002; GFX11-CU: ; %bb.0: ; %entry1003; GFX11-CU-NEXT: s_load_b32 s2, s[4:5], 0x01004; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x81005; GFX11-CU-NEXT: v_mov_b32_e32 v0, 01006; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)1007; GFX11-CU-NEXT: v_mov_b32_e32 v1, s21008; GFX11-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1009; GFX11-CU-NEXT: s_waitcnt_vscnt null, 0x01010; GFX11-CU-NEXT: global_store_b32 v0, v1, s[0:1]1011; GFX11-CU-NEXT: s_endpgm1012;1013; GFX12-WGP-LABEL: global_volatile_workgroup_release_store:1014; GFX12-WGP: ; %bb.0: ; %entry1015; GFX12-WGP-NEXT: s_load_b32 s2, s[4:5], 0x01016; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x81017; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 01018; GFX12-WGP-NEXT: s_wait_kmcnt 0x01019; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s21020; GFX12-WGP-NEXT: s_wait_bvhcnt 0x01021; GFX12-WGP-NEXT: s_wait_samplecnt 0x01022; GFX12-WGP-NEXT: s_wait_storecnt 0x01023; GFX12-WGP-NEXT: s_wait_loadcnt_dscnt 0x01024; GFX12-WGP-NEXT: global_store_b32 v0, v1, s[0:1] scope:SCOPE_SE1025; GFX12-WGP-NEXT: s_endpgm1026;1027; GFX12-CU-LABEL: global_volatile_workgroup_release_store:1028; GFX12-CU: ; %bb.0: ; %entry1029; GFX12-CU-NEXT: s_load_b32 s2, s[4:5], 0x01030; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x81031; GFX12-CU-NEXT: v_mov_b32_e32 v0, 01032; GFX12-CU-NEXT: s_wait_kmcnt 0x01033; GFX12-CU-NEXT: v_mov_b32_e32 v1, s21034; GFX12-CU-NEXT: s_wait_bvhcnt 0x01035; GFX12-CU-NEXT: s_wait_samplecnt 0x01036; GFX12-CU-NEXT: s_wait_storecnt 0x01037; GFX12-CU-NEXT: s_wait_loadcnt_dscnt 0x01038; GFX12-CU-NEXT: global_store_b32 v0, v1, s[0:1]1039; GFX12-CU-NEXT: s_endpgm1040;1041; GFX1250-LABEL: global_volatile_workgroup_release_store:1042; GFX1250: ; %bb.0: ; %entry1043; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11044; GFX1250-NEXT: s_load_b32 s2, s[4:5], 0x01045; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x81046; GFX1250-NEXT: v_mov_b32_e32 v0, 01047; GFX1250-NEXT: s_wait_kmcnt 0x01048; GFX1250-NEXT: v_mov_b32_e32 v1, s21049; GFX1250-NEXT: s_wait_storecnt 0x01050; GFX1250-NEXT: s_wait_xcnt 0x01051; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01052; GFX1250-NEXT: global_store_b32 v0, v1, s[0:1]1053; GFX1250-NEXT: s_endpgm1054 i32 %in, ptr addrspace(1) %out) {1055entry:1056 store atomic volatile i32 %in, ptr addrspace(1) %out syncscope("workgroup") release, align 41057 ret void1058}1059 1060declare i32 @llvm.amdgcn.workitem.id.x()1061