brintos

brintos / llvm-project-archived public Read only

0
0
Text · 958.1 KiB · 3e54b23 Raw
20890 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -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=gfx90a < %s | FileCheck -check-prefixes=GFX90A-NOTTGSPLIT %s8; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx90a -mattr=+tgsplit < %s | FileCheck -check-prefixes=GFX90A-TGSPLIT %s9; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX942-NOTTGSPLIT %s10; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx942 -mattr=+tgsplit < %s | FileCheck -check-prefixes=GFX942-TGSPLIT %s11; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GFX11-WGP %s12; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX11-CU %s13; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GFX12-WGP %s14; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX12-CU %s15; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1250 < %s | FileCheck --check-prefixes=GFX1250 %s16 17define amdgpu_kernel void @global_singlethread_unordered_load(18; GFX6-LABEL: global_singlethread_unordered_load:19; GFX6:       ; %bb.0: ; %entry20; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]21; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x022; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x223; GFX6-NEXT:    s_waitcnt lgkmcnt(0)24; GFX6-NEXT:    s_mov_b32 s6, s925; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr926; GFX6-NEXT:    s_mov_b32 s12, 0x100f00027; GFX6-NEXT:    s_mov_b32 s13, -128; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr1129; GFX6-NEXT:    s_mov_b32 s9, s630; GFX6-NEXT:    s_mov_b32 s10, s1331; GFX6-NEXT:    s_mov_b32 s11, s1232; GFX6-NEXT:    s_mov_b32 s14, s533; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr534; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr735; GFX6-NEXT:    s_mov_b32 s5, s1436; GFX6-NEXT:    s_mov_b32 s6, s1337; GFX6-NEXT:    s_mov_b32 s7, s1238; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 039; GFX6-NEXT:    s_waitcnt vmcnt(0)40; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 041; GFX6-NEXT:    s_endpgm42;43; GFX7-LABEL: global_singlethread_unordered_load:44; GFX7:       ; %bb.0: ; %entry45; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1346; GFX7-NEXT:    s_add_i32 s12, s12, s1747; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 848; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x049; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x250; GFX7-NEXT:    s_waitcnt lgkmcnt(0)51; GFX7-NEXT:    v_mov_b32_e32 v0, s652; GFX7-NEXT:    v_mov_b32_e32 v1, s753; GFX7-NEXT:    flat_load_dword v2, v[0:1]54; GFX7-NEXT:    v_mov_b32_e32 v0, s455; GFX7-NEXT:    v_mov_b32_e32 v1, s556; GFX7-NEXT:    s_waitcnt vmcnt(0)57; GFX7-NEXT:    flat_store_dword v[0:1], v258; GFX7-NEXT:    s_endpgm59;60; GFX10-WGP-LABEL: global_singlethread_unordered_load:61; GFX10-WGP:       ; %bb.0: ; %entry62; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 063; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x064; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x865; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)66; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]67; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)68; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]69; GFX10-WGP-NEXT:    s_endpgm70;71; GFX10-CU-LABEL: global_singlethread_unordered_load:72; GFX10-CU:       ; %bb.0: ; %entry73; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 074; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x075; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x876; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)77; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]78; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)79; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]80; GFX10-CU-NEXT:    s_endpgm81;82; SKIP-CACHE-INV-LABEL: global_singlethread_unordered_load:83; SKIP-CACHE-INV:       ; %bb.0: ; %entry84; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]85; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x086; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x287; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)88; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s589; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr590; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf00091; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -192; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr793; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s294; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s995; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s896; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s197; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr198; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr399; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s10100; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s9101; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s8102; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 0103; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)104; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0105; SKIP-CACHE-INV-NEXT:    s_endpgm106;107; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_unordered_load:108; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry109; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0110; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0111; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8112; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)113; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]114; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)115; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]116; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm117;118; GFX90A-TGSPLIT-LABEL: global_singlethread_unordered_load:119; GFX90A-TGSPLIT:       ; %bb.0: ; %entry120; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0121; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0122; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8123; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)124; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]125; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)126; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]127; GFX90A-TGSPLIT-NEXT:    s_endpgm128;129; GFX942-NOTTGSPLIT-LABEL: global_singlethread_unordered_load:130; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry131; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0132; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0133; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8134; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)135; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]136; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)137; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]138; GFX942-NOTTGSPLIT-NEXT:    s_endpgm139;140; GFX942-TGSPLIT-LABEL: global_singlethread_unordered_load:141; GFX942-TGSPLIT:       ; %bb.0: ; %entry142; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0143; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0144; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8145; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)146; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]147; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)148; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]149; GFX942-TGSPLIT-NEXT:    s_endpgm150;151; GFX11-WGP-LABEL: global_singlethread_unordered_load:152; GFX11-WGP:       ; %bb.0: ; %entry153; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0154; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0155; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8156; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)157; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]158; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)159; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]160; GFX11-WGP-NEXT:    s_endpgm161;162; GFX11-CU-LABEL: global_singlethread_unordered_load:163; GFX11-CU:       ; %bb.0: ; %entry164; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0165; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0166; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8167; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)168; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]169; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)170; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]171; GFX11-CU-NEXT:    s_endpgm172;173; GFX12-WGP-LABEL: global_singlethread_unordered_load:174; GFX12-WGP:       ; %bb.0: ; %entry175; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0176; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0177; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8178; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0179; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]180; GFX12-WGP-NEXT:    s_wait_loadcnt 0x0181; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]182; GFX12-WGP-NEXT:    s_endpgm183;184; GFX12-CU-LABEL: global_singlethread_unordered_load:185; GFX12-CU:       ; %bb.0: ; %entry186; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0187; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0188; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8189; GFX12-CU-NEXT:    s_wait_kmcnt 0x0190; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]191; GFX12-CU-NEXT:    s_wait_loadcnt 0x0192; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]193; GFX12-CU-NEXT:    s_endpgm194;195; GFX1250-LABEL: global_singlethread_unordered_load:196; GFX1250:       ; %bb.0: ; %entry197; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1198; GFX1250-NEXT:    v_mov_b32_e32 v0, 0199; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0200; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8201; GFX1250-NEXT:    s_wait_kmcnt 0x0202; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]203; GFX1250-NEXT:    s_wait_loadcnt 0x0204; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]205; GFX1250-NEXT:    s_endpgm206    ptr addrspace(1) %in, ptr addrspace(1) %out) {207entry:208  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread") unordered, align 4209  store i32 %val, ptr addrspace(1) %out210  ret void211}212 213define amdgpu_kernel void @global_singlethread_monotonic_load(214; GFX6-LABEL: global_singlethread_monotonic_load:215; GFX6:       ; %bb.0: ; %entry216; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]217; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x0218; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2219; GFX6-NEXT:    s_waitcnt lgkmcnt(0)220; GFX6-NEXT:    s_mov_b32 s6, s9221; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr9222; GFX6-NEXT:    s_mov_b32 s12, 0x100f000223; GFX6-NEXT:    s_mov_b32 s13, -1224; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11225; GFX6-NEXT:    s_mov_b32 s9, s6226; GFX6-NEXT:    s_mov_b32 s10, s13227; GFX6-NEXT:    s_mov_b32 s11, s12228; GFX6-NEXT:    s_mov_b32 s14, s5229; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5230; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7231; GFX6-NEXT:    s_mov_b32 s5, s14232; GFX6-NEXT:    s_mov_b32 s6, s13233; GFX6-NEXT:    s_mov_b32 s7, s12234; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 0235; GFX6-NEXT:    s_waitcnt vmcnt(0)236; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0237; GFX6-NEXT:    s_endpgm238;239; GFX7-LABEL: global_singlethread_monotonic_load:240; GFX7:       ; %bb.0: ; %entry241; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s13242; GFX7-NEXT:    s_add_i32 s12, s12, s17243; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8244; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0245; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2246; GFX7-NEXT:    s_waitcnt lgkmcnt(0)247; GFX7-NEXT:    v_mov_b32_e32 v0, s6248; GFX7-NEXT:    v_mov_b32_e32 v1, s7249; GFX7-NEXT:    flat_load_dword v2, v[0:1]250; GFX7-NEXT:    v_mov_b32_e32 v0, s4251; GFX7-NEXT:    v_mov_b32_e32 v1, s5252; GFX7-NEXT:    s_waitcnt vmcnt(0)253; GFX7-NEXT:    flat_store_dword v[0:1], v2254; GFX7-NEXT:    s_endpgm255;256; GFX10-WGP-LABEL: global_singlethread_monotonic_load:257; GFX10-WGP:       ; %bb.0: ; %entry258; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0259; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0260; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8261; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)262; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]263; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)264; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]265; GFX10-WGP-NEXT:    s_endpgm266;267; GFX10-CU-LABEL: global_singlethread_monotonic_load:268; GFX10-CU:       ; %bb.0: ; %entry269; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0270; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0271; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8272; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)273; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]274; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)275; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]276; GFX10-CU-NEXT:    s_endpgm277;278; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_load:279; SKIP-CACHE-INV:       ; %bb.0: ; %entry280; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]281; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0282; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2283; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)284; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s5285; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5286; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf000287; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -1288; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7289; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s2290; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s9291; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s8292; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s1293; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1294; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3295; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s10296; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s9297; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s8298; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 0299; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)300; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0301; SKIP-CACHE-INV-NEXT:    s_endpgm302;303; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_load:304; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry305; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0306; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0307; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8308; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)309; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]310; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)311; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]312; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm313;314; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_load:315; GFX90A-TGSPLIT:       ; %bb.0: ; %entry316; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0317; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0318; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8319; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)320; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]321; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)322; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]323; GFX90A-TGSPLIT-NEXT:    s_endpgm324;325; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_load:326; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry327; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0328; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0329; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8330; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)331; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]332; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)333; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]334; GFX942-NOTTGSPLIT-NEXT:    s_endpgm335;336; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_load:337; GFX942-TGSPLIT:       ; %bb.0: ; %entry338; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0339; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0340; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8341; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)342; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]343; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)344; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]345; GFX942-TGSPLIT-NEXT:    s_endpgm346;347; GFX11-WGP-LABEL: global_singlethread_monotonic_load:348; GFX11-WGP:       ; %bb.0: ; %entry349; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0350; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0351; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8352; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)353; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]354; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)355; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]356; GFX11-WGP-NEXT:    s_endpgm357;358; GFX11-CU-LABEL: global_singlethread_monotonic_load:359; GFX11-CU:       ; %bb.0: ; %entry360; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0361; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0362; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8363; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)364; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]365; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)366; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]367; GFX11-CU-NEXT:    s_endpgm368;369; GFX12-WGP-LABEL: global_singlethread_monotonic_load:370; GFX12-WGP:       ; %bb.0: ; %entry371; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0372; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0373; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8374; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0375; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]376; GFX12-WGP-NEXT:    s_wait_loadcnt 0x0377; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]378; GFX12-WGP-NEXT:    s_endpgm379;380; GFX12-CU-LABEL: global_singlethread_monotonic_load:381; GFX12-CU:       ; %bb.0: ; %entry382; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0383; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0384; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8385; GFX12-CU-NEXT:    s_wait_kmcnt 0x0386; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]387; GFX12-CU-NEXT:    s_wait_loadcnt 0x0388; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]389; GFX12-CU-NEXT:    s_endpgm390;391; GFX1250-LABEL: global_singlethread_monotonic_load:392; GFX1250:       ; %bb.0: ; %entry393; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1394; GFX1250-NEXT:    v_mov_b32_e32 v0, 0395; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0396; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8397; GFX1250-NEXT:    s_wait_kmcnt 0x0398; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]399; GFX1250-NEXT:    s_wait_loadcnt 0x0400; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]401; GFX1250-NEXT:    s_endpgm402    ptr addrspace(1) %in, ptr addrspace(1) %out) {403entry:404  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread") monotonic, align 4405  store i32 %val, ptr addrspace(1) %out406  ret void407}408 409define amdgpu_kernel void @global_singlethread_acquire_load(410; GFX6-LABEL: global_singlethread_acquire_load:411; GFX6:       ; %bb.0: ; %entry412; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]413; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x0414; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2415; GFX6-NEXT:    s_waitcnt lgkmcnt(0)416; GFX6-NEXT:    s_mov_b32 s6, s9417; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr9418; GFX6-NEXT:    s_mov_b32 s12, 0x100f000419; GFX6-NEXT:    s_mov_b32 s13, -1420; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11421; GFX6-NEXT:    s_mov_b32 s9, s6422; GFX6-NEXT:    s_mov_b32 s10, s13423; GFX6-NEXT:    s_mov_b32 s11, s12424; GFX6-NEXT:    s_mov_b32 s14, s5425; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5426; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7427; GFX6-NEXT:    s_mov_b32 s5, s14428; GFX6-NEXT:    s_mov_b32 s6, s13429; GFX6-NEXT:    s_mov_b32 s7, s12430; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 0431; GFX6-NEXT:    s_waitcnt vmcnt(0)432; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0433; GFX6-NEXT:    s_endpgm434;435; GFX7-LABEL: global_singlethread_acquire_load:436; GFX7:       ; %bb.0: ; %entry437; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s13438; GFX7-NEXT:    s_add_i32 s12, s12, s17439; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8440; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0441; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2442; GFX7-NEXT:    s_waitcnt lgkmcnt(0)443; GFX7-NEXT:    v_mov_b32_e32 v0, s6444; GFX7-NEXT:    v_mov_b32_e32 v1, s7445; GFX7-NEXT:    flat_load_dword v2, v[0:1]446; GFX7-NEXT:    v_mov_b32_e32 v0, s4447; GFX7-NEXT:    v_mov_b32_e32 v1, s5448; GFX7-NEXT:    s_waitcnt vmcnt(0)449; GFX7-NEXT:    flat_store_dword v[0:1], v2450; GFX7-NEXT:    s_endpgm451;452; GFX10-WGP-LABEL: global_singlethread_acquire_load:453; GFX10-WGP:       ; %bb.0: ; %entry454; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0455; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0456; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8457; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)458; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]459; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)460; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]461; GFX10-WGP-NEXT:    s_endpgm462;463; GFX10-CU-LABEL: global_singlethread_acquire_load:464; GFX10-CU:       ; %bb.0: ; %entry465; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0466; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0467; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8468; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)469; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]470; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)471; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]472; GFX10-CU-NEXT:    s_endpgm473;474; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_load:475; SKIP-CACHE-INV:       ; %bb.0: ; %entry476; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]477; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0478; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2479; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)480; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s5481; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5482; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf000483; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -1484; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7485; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s2486; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s9487; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s8488; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s1489; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1490; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3491; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s10492; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s9493; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s8494; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 0495; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)496; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0497; SKIP-CACHE-INV-NEXT:    s_endpgm498;499; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_load:500; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry501; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0502; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0503; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8504; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)505; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]506; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)507; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]508; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm509;510; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_load:511; GFX90A-TGSPLIT:       ; %bb.0: ; %entry512; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0513; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0514; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8515; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)516; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]517; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)518; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]519; GFX90A-TGSPLIT-NEXT:    s_endpgm520;521; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_load:522; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry523; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0524; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0525; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8526; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)527; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]528; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)529; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]530; GFX942-NOTTGSPLIT-NEXT:    s_endpgm531;532; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_load:533; GFX942-TGSPLIT:       ; %bb.0: ; %entry534; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0535; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0536; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8537; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)538; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]539; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)540; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]541; GFX942-TGSPLIT-NEXT:    s_endpgm542;543; GFX11-WGP-LABEL: global_singlethread_acquire_load:544; GFX11-WGP:       ; %bb.0: ; %entry545; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0546; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0547; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8548; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)549; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]550; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)551; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]552; GFX11-WGP-NEXT:    s_endpgm553;554; GFX11-CU-LABEL: global_singlethread_acquire_load:555; GFX11-CU:       ; %bb.0: ; %entry556; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0557; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0558; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8559; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)560; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]561; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)562; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]563; GFX11-CU-NEXT:    s_endpgm564;565; GFX12-WGP-LABEL: global_singlethread_acquire_load:566; GFX12-WGP:       ; %bb.0: ; %entry567; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0568; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0569; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8570; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0571; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]572; GFX12-WGP-NEXT:    s_wait_loadcnt 0x0573; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]574; GFX12-WGP-NEXT:    s_endpgm575;576; GFX12-CU-LABEL: global_singlethread_acquire_load:577; GFX12-CU:       ; %bb.0: ; %entry578; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0579; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0580; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8581; GFX12-CU-NEXT:    s_wait_kmcnt 0x0582; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]583; GFX12-CU-NEXT:    s_wait_loadcnt 0x0584; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]585; GFX12-CU-NEXT:    s_endpgm586;587; GFX1250-LABEL: global_singlethread_acquire_load:588; GFX1250:       ; %bb.0: ; %entry589; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1590; GFX1250-NEXT:    v_mov_b32_e32 v0, 0591; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0592; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8593; GFX1250-NEXT:    s_wait_kmcnt 0x0594; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]595; GFX1250-NEXT:    s_wait_loadcnt 0x0596; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]597; GFX1250-NEXT:    s_endpgm598    ptr addrspace(1) %in, ptr addrspace(1) %out) {599entry:600  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread") acquire, align 4601  store i32 %val, ptr addrspace(1) %out602  ret void603}604 605define amdgpu_kernel void @global_singlethread_seq_cst_load(606; GFX6-LABEL: global_singlethread_seq_cst_load:607; GFX6:       ; %bb.0: ; %entry608; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]609; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x0610; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2611; GFX6-NEXT:    s_waitcnt lgkmcnt(0)612; GFX6-NEXT:    s_mov_b32 s6, s9613; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr9614; GFX6-NEXT:    s_mov_b32 s12, 0x100f000615; GFX6-NEXT:    s_mov_b32 s13, -1616; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr11617; GFX6-NEXT:    s_mov_b32 s9, s6618; GFX6-NEXT:    s_mov_b32 s10, s13619; GFX6-NEXT:    s_mov_b32 s11, s12620; GFX6-NEXT:    s_mov_b32 s14, s5621; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5622; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7623; GFX6-NEXT:    s_mov_b32 s5, s14624; GFX6-NEXT:    s_mov_b32 s6, s13625; GFX6-NEXT:    s_mov_b32 s7, s12626; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 0627; GFX6-NEXT:    s_waitcnt vmcnt(0)628; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0629; GFX6-NEXT:    s_endpgm630;631; GFX7-LABEL: global_singlethread_seq_cst_load:632; GFX7:       ; %bb.0: ; %entry633; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s13634; GFX7-NEXT:    s_add_i32 s12, s12, s17635; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8636; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0637; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x2638; GFX7-NEXT:    s_waitcnt lgkmcnt(0)639; GFX7-NEXT:    v_mov_b32_e32 v0, s6640; GFX7-NEXT:    v_mov_b32_e32 v1, s7641; GFX7-NEXT:    flat_load_dword v2, v[0:1]642; GFX7-NEXT:    v_mov_b32_e32 v0, s4643; GFX7-NEXT:    v_mov_b32_e32 v1, s5644; GFX7-NEXT:    s_waitcnt vmcnt(0)645; GFX7-NEXT:    flat_store_dword v[0:1], v2646; GFX7-NEXT:    s_endpgm647;648; GFX10-WGP-LABEL: global_singlethread_seq_cst_load:649; GFX10-WGP:       ; %bb.0: ; %entry650; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0651; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0652; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8653; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)654; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]655; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)656; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]657; GFX10-WGP-NEXT:    s_endpgm658;659; GFX10-CU-LABEL: global_singlethread_seq_cst_load:660; GFX10-CU:       ; %bb.0: ; %entry661; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0662; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0663; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8664; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)665; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]666; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)667; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]668; GFX10-CU-NEXT:    s_endpgm669;670; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_load:671; SKIP-CACHE-INV:       ; %bb.0: ; %entry672; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]673; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0674; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2675; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)676; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s5677; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5678; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf000679; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -1680; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7681; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s2682; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s9683; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s8684; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s1685; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1686; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3687; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s10688; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s9689; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s8690; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 0691; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)692; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0693; SKIP-CACHE-INV-NEXT:    s_endpgm694;695; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_load:696; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry697; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0698; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0699; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8700; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)701; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]702; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)703; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]704; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm705;706; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_load:707; GFX90A-TGSPLIT:       ; %bb.0: ; %entry708; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0709; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x0710; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8711; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)712; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]713; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)714; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]715; GFX90A-TGSPLIT-NEXT:    s_endpgm716;717; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_load:718; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry719; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0720; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0721; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8722; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)723; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]724; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)725; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]726; GFX942-NOTTGSPLIT-NEXT:    s_endpgm727;728; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_load:729; GFX942-TGSPLIT:       ; %bb.0: ; %entry730; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0731; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x0732; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8733; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)734; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]735; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)736; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]737; GFX942-TGSPLIT-NEXT:    s_endpgm738;739; GFX11-WGP-LABEL: global_singlethread_seq_cst_load:740; GFX11-WGP:       ; %bb.0: ; %entry741; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0742; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0743; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8744; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)745; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]746; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)747; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]748; GFX11-WGP-NEXT:    s_endpgm749;750; GFX11-CU-LABEL: global_singlethread_seq_cst_load:751; GFX11-CU:       ; %bb.0: ; %entry752; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0753; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0754; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8755; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)756; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]757; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)758; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]759; GFX11-CU-NEXT:    s_endpgm760;761; GFX12-WGP-LABEL: global_singlethread_seq_cst_load:762; GFX12-WGP:       ; %bb.0: ; %entry763; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0764; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0765; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8766; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0767; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]768; GFX12-WGP-NEXT:    s_wait_loadcnt 0x0769; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]770; GFX12-WGP-NEXT:    s_endpgm771;772; GFX12-CU-LABEL: global_singlethread_seq_cst_load:773; GFX12-CU:       ; %bb.0: ; %entry774; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0775; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0776; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8777; GFX12-CU-NEXT:    s_wait_kmcnt 0x0778; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]779; GFX12-CU-NEXT:    s_wait_loadcnt 0x0780; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]781; GFX12-CU-NEXT:    s_endpgm782;783; GFX1250-LABEL: global_singlethread_seq_cst_load:784; GFX1250:       ; %bb.0: ; %entry785; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1786; GFX1250-NEXT:    v_mov_b32_e32 v0, 0787; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x0788; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8789; GFX1250-NEXT:    s_wait_kmcnt 0x0790; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]791; GFX1250-NEXT:    s_wait_loadcnt 0x0792; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]793; GFX1250-NEXT:    s_endpgm794    ptr addrspace(1) %in, ptr addrspace(1) %out) {795entry:796  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread") seq_cst, align 4797  store i32 %val, ptr addrspace(1) %out798  ret void799}800 801define amdgpu_kernel void @global_singlethread_unordered_store(802; GFX6-LABEL: global_singlethread_unordered_store:803; GFX6:       ; %bb.0: ; %entry804; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]805; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x0806; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2807; GFX6-NEXT:    s_waitcnt lgkmcnt(0)808; GFX6-NEXT:    s_mov_b32 s11, s5809; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5810; GFX6-NEXT:    s_mov_b32 s9, 0x100f000811; GFX6-NEXT:    s_mov_b32 s10, -1812; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7813; GFX6-NEXT:    s_mov_b32 s5, s11814; GFX6-NEXT:    s_mov_b32 s6, s10815; GFX6-NEXT:    s_mov_b32 s7, s9816; GFX6-NEXT:    v_mov_b32_e32 v0, s8817; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0818; GFX6-NEXT:    s_endpgm819;820; GFX7-LABEL: global_singlethread_unordered_store:821; GFX7:       ; %bb.0: ; %entry822; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s13823; GFX7-NEXT:    s_add_i32 s12, s12, s17824; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8825; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x0826; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x2827; GFX7-NEXT:    s_waitcnt lgkmcnt(0)828; GFX7-NEXT:    v_mov_b32_e32 v0, s6829; GFX7-NEXT:    v_mov_b32_e32 v1, s7830; GFX7-NEXT:    v_mov_b32_e32 v2, s4831; GFX7-NEXT:    flat_store_dword v[0:1], v2832; GFX7-NEXT:    s_endpgm833;834; GFX10-WGP-LABEL: global_singlethread_unordered_store:835; GFX10-WGP:       ; %bb.0: ; %entry836; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x0837; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8838; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 0839; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)840; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s6841; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]842; GFX10-WGP-NEXT:    s_endpgm843;844; GFX10-CU-LABEL: global_singlethread_unordered_store:845; GFX10-CU:       ; %bb.0: ; %entry846; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x0847; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8848; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 0849; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)850; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s6851; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]852; GFX10-CU-NEXT:    s_endpgm853;854; SKIP-CACHE-INV-LABEL: global_singlethread_unordered_store:855; SKIP-CACHE-INV:       ; %bb.0: ; %entry856; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]857; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x0858; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2859; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)860; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s1861; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr1862; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf000863; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -1864; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr3865; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s7866; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s6867; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s5868; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s4869; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0870; SKIP-CACHE-INV-NEXT:    s_endpgm871;872; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_unordered_store:873; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry874; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x0875; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8876; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0877; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)878; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s6879; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]880; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm881;882; GFX90A-TGSPLIT-LABEL: global_singlethread_unordered_store:883; GFX90A-TGSPLIT:       ; %bb.0: ; %entry884; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x0885; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x8886; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0887; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)888; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s6889; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]890; GFX90A-TGSPLIT-NEXT:    s_endpgm891;892; GFX942-NOTTGSPLIT-LABEL: global_singlethread_unordered_store:893; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry894; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x0895; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8896; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 0897; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)898; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s2899; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]900; GFX942-NOTTGSPLIT-NEXT:    s_endpgm901;902; GFX942-TGSPLIT-LABEL: global_singlethread_unordered_store:903; GFX942-TGSPLIT:       ; %bb.0: ; %entry904; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x0905; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8906; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 0907; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)908; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s2909; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]910; GFX942-TGSPLIT-NEXT:    s_endpgm911;912; GFX11-WGP-LABEL: global_singlethread_unordered_store:913; GFX11-WGP:       ; %bb.0: ; %entry914; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x0915; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8916; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 0917; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)918; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s2919; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]920; GFX11-WGP-NEXT:    s_endpgm921;922; GFX11-CU-LABEL: global_singlethread_unordered_store:923; GFX11-CU:       ; %bb.0: ; %entry924; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x0925; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8926; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 0927; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)928; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s2929; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]930; GFX11-CU-NEXT:    s_endpgm931;932; GFX12-WGP-LABEL: global_singlethread_unordered_store:933; GFX12-WGP:       ; %bb.0: ; %entry934; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x0935; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8936; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 0937; GFX12-WGP-NEXT:    s_wait_kmcnt 0x0938; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s2939; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]940; GFX12-WGP-NEXT:    s_endpgm941;942; GFX12-CU-LABEL: global_singlethread_unordered_store:943; GFX12-CU:       ; %bb.0: ; %entry944; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x0945; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8946; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 0947; GFX12-CU-NEXT:    s_wait_kmcnt 0x0948; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s2949; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]950; GFX12-CU-NEXT:    s_endpgm951;952; GFX1250-LABEL: global_singlethread_unordered_store:953; GFX1250:       ; %bb.0: ; %entry954; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1955; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x0956; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x8957; GFX1250-NEXT:    v_mov_b32_e32 v0, 0958; GFX1250-NEXT:    s_wait_kmcnt 0x0959; GFX1250-NEXT:    v_mov_b32_e32 v1, s2960; GFX1250-NEXT:    s_wait_xcnt 0x0961; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]962; GFX1250-NEXT:    s_endpgm963    i32 %in, ptr addrspace(1) %out) {964entry:965  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread") unordered, align 4966  ret void967}968 969define amdgpu_kernel void @global_singlethread_monotonic_store(970; GFX6-LABEL: global_singlethread_monotonic_store:971; GFX6:       ; %bb.0: ; %entry972; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]973; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x0974; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2975; GFX6-NEXT:    s_waitcnt lgkmcnt(0)976; GFX6-NEXT:    s_mov_b32 s11, s5977; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr5978; GFX6-NEXT:    s_mov_b32 s9, 0x100f000979; GFX6-NEXT:    s_mov_b32 s10, -1980; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr7981; GFX6-NEXT:    s_mov_b32 s5, s11982; GFX6-NEXT:    s_mov_b32 s6, s10983; GFX6-NEXT:    s_mov_b32 s7, s9984; GFX6-NEXT:    v_mov_b32_e32 v0, s8985; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0986; GFX6-NEXT:    s_endpgm987;988; GFX7-LABEL: global_singlethread_monotonic_store:989; GFX7:       ; %bb.0: ; %entry990; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s13991; GFX7-NEXT:    s_add_i32 s12, s12, s17992; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8993; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x0994; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x2995; GFX7-NEXT:    s_waitcnt lgkmcnt(0)996; GFX7-NEXT:    v_mov_b32_e32 v0, s6997; GFX7-NEXT:    v_mov_b32_e32 v1, s7998; GFX7-NEXT:    v_mov_b32_e32 v2, s4999; GFX7-NEXT:    flat_store_dword v[0:1], v21000; GFX7-NEXT:    s_endpgm1001;1002; GFX10-WGP-LABEL: global_singlethread_monotonic_store:1003; GFX10-WGP:       ; %bb.0: ; %entry1004; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x01005; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81006; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 01007; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)1008; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s61009; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]1010; GFX10-WGP-NEXT:    s_endpgm1011;1012; GFX10-CU-LABEL: global_singlethread_monotonic_store:1013; GFX10-CU:       ; %bb.0: ; %entry1014; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x01015; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81016; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 01017; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)1018; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s61019; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]1020; GFX10-CU-NEXT:    s_endpgm1021;1022; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_store:1023; SKIP-CACHE-INV:       ; %bb.0: ; %entry1024; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]1025; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x01026; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x21027; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)1028; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s11029; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11030; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0001031; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -11032; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31033; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s71034; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s61035; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s51036; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s41037; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 01038; SKIP-CACHE-INV-NEXT:    s_endpgm1039;1040; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_store:1041; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry1042; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x01043; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81044; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01045; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1046; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s61047; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]1048; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm1049;1050; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_store:1051; GFX90A-TGSPLIT:       ; %bb.0: ; %entry1052; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x01053; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81054; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01055; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1056; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s61057; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]1058; GFX90A-TGSPLIT-NEXT:    s_endpgm1059;1060; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_store:1061; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry1062; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x01063; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x81064; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01065; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1066; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s21067; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]1068; GFX942-NOTTGSPLIT-NEXT:    s_endpgm1069;1070; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_store:1071; GFX942-TGSPLIT:       ; %bb.0: ; %entry1072; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x01073; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x81074; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01075; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1076; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s21077; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]1078; GFX942-TGSPLIT-NEXT:    s_endpgm1079;1080; GFX11-WGP-LABEL: global_singlethread_monotonic_store:1081; GFX11-WGP:       ; %bb.0: ; %entry1082; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x01083; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81084; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 01085; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)1086; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s21087; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]1088; GFX11-WGP-NEXT:    s_endpgm1089;1090; GFX11-CU-LABEL: global_singlethread_monotonic_store:1091; GFX11-CU:       ; %bb.0: ; %entry1092; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x01093; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81094; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 01095; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)1096; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s21097; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]1098; GFX11-CU-NEXT:    s_endpgm1099;1100; GFX12-WGP-LABEL: global_singlethread_monotonic_store:1101; GFX12-WGP:       ; %bb.0: ; %entry1102; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x01103; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81104; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 01105; GFX12-WGP-NEXT:    s_wait_kmcnt 0x01106; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s21107; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]1108; GFX12-WGP-NEXT:    s_endpgm1109;1110; GFX12-CU-LABEL: global_singlethread_monotonic_store:1111; GFX12-CU:       ; %bb.0: ; %entry1112; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x01113; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81114; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 01115; GFX12-CU-NEXT:    s_wait_kmcnt 0x01116; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s21117; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]1118; GFX12-CU-NEXT:    s_endpgm1119;1120; GFX1250-LABEL: global_singlethread_monotonic_store:1121; GFX1250:       ; %bb.0: ; %entry1122; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11123; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x01124; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81125; GFX1250-NEXT:    v_mov_b32_e32 v0, 01126; GFX1250-NEXT:    s_wait_kmcnt 0x01127; GFX1250-NEXT:    v_mov_b32_e32 v1, s21128; GFX1250-NEXT:    s_wait_xcnt 0x01129; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]1130; GFX1250-NEXT:    s_endpgm1131    i32 %in, ptr addrspace(1) %out) {1132entry:1133  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread") monotonic, align 41134  ret void1135}1136 1137define amdgpu_kernel void @global_singlethread_release_store(1138; GFX6-LABEL: global_singlethread_release_store:1139; GFX6:       ; %bb.0: ; %entry1140; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]1141; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x01142; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x21143; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1144; GFX6-NEXT:    s_mov_b32 s11, s51145; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51146; GFX6-NEXT:    s_mov_b32 s9, 0x100f0001147; GFX6-NEXT:    s_mov_b32 s10, -11148; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr71149; GFX6-NEXT:    s_mov_b32 s5, s111150; GFX6-NEXT:    s_mov_b32 s6, s101151; GFX6-NEXT:    s_mov_b32 s7, s91152; GFX6-NEXT:    v_mov_b32_e32 v0, s81153; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 01154; GFX6-NEXT:    s_endpgm1155;1156; GFX7-LABEL: global_singlethread_release_store:1157; GFX7:       ; %bb.0: ; %entry1158; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s131159; GFX7-NEXT:    s_add_i32 s12, s12, s171160; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81161; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x01162; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x21163; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1164; GFX7-NEXT:    v_mov_b32_e32 v0, s61165; GFX7-NEXT:    v_mov_b32_e32 v1, s71166; GFX7-NEXT:    v_mov_b32_e32 v2, s41167; GFX7-NEXT:    flat_store_dword v[0:1], v21168; GFX7-NEXT:    s_endpgm1169;1170; GFX10-WGP-LABEL: global_singlethread_release_store:1171; GFX10-WGP:       ; %bb.0: ; %entry1172; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x01173; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81174; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 01175; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)1176; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s61177; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]1178; GFX10-WGP-NEXT:    s_endpgm1179;1180; GFX10-CU-LABEL: global_singlethread_release_store:1181; GFX10-CU:       ; %bb.0: ; %entry1182; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x01183; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81184; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 01185; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)1186; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s61187; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]1188; GFX10-CU-NEXT:    s_endpgm1189;1190; SKIP-CACHE-INV-LABEL: global_singlethread_release_store:1191; SKIP-CACHE-INV:       ; %bb.0: ; %entry1192; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]1193; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x01194; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x21195; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)1196; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s11197; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11198; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0001199; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -11200; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31201; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s71202; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s61203; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s51204; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s41205; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 01206; SKIP-CACHE-INV-NEXT:    s_endpgm1207;1208; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_store:1209; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry1210; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x01211; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81212; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01213; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1214; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s61215; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]1216; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm1217;1218; GFX90A-TGSPLIT-LABEL: global_singlethread_release_store:1219; GFX90A-TGSPLIT:       ; %bb.0: ; %entry1220; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x01221; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81222; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01223; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1224; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s61225; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]1226; GFX90A-TGSPLIT-NEXT:    s_endpgm1227;1228; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_store:1229; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry1230; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x01231; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x81232; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01233; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1234; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s21235; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]1236; GFX942-NOTTGSPLIT-NEXT:    s_endpgm1237;1238; GFX942-TGSPLIT-LABEL: global_singlethread_release_store:1239; GFX942-TGSPLIT:       ; %bb.0: ; %entry1240; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x01241; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x81242; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01243; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1244; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s21245; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]1246; GFX942-TGSPLIT-NEXT:    s_endpgm1247;1248; GFX11-WGP-LABEL: global_singlethread_release_store:1249; GFX11-WGP:       ; %bb.0: ; %entry1250; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x01251; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81252; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 01253; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)1254; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s21255; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]1256; GFX11-WGP-NEXT:    s_endpgm1257;1258; GFX11-CU-LABEL: global_singlethread_release_store:1259; GFX11-CU:       ; %bb.0: ; %entry1260; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x01261; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81262; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 01263; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)1264; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s21265; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]1266; GFX11-CU-NEXT:    s_endpgm1267;1268; GFX12-WGP-LABEL: global_singlethread_release_store:1269; GFX12-WGP:       ; %bb.0: ; %entry1270; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x01271; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81272; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 01273; GFX12-WGP-NEXT:    s_wait_kmcnt 0x01274; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s21275; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]1276; GFX12-WGP-NEXT:    s_endpgm1277;1278; GFX12-CU-LABEL: global_singlethread_release_store:1279; GFX12-CU:       ; %bb.0: ; %entry1280; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x01281; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81282; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 01283; GFX12-CU-NEXT:    s_wait_kmcnt 0x01284; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s21285; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]1286; GFX12-CU-NEXT:    s_endpgm1287;1288; GFX1250-LABEL: global_singlethread_release_store:1289; GFX1250:       ; %bb.0: ; %entry1290; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11291; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x01292; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81293; GFX1250-NEXT:    v_mov_b32_e32 v0, 01294; GFX1250-NEXT:    s_wait_kmcnt 0x01295; GFX1250-NEXT:    v_mov_b32_e32 v1, s21296; GFX1250-NEXT:    s_wait_xcnt 0x01297; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]1298; GFX1250-NEXT:    s_endpgm1299    i32 %in, ptr addrspace(1) %out) {1300entry:1301  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread") release, align 41302  ret void1303}1304 1305define amdgpu_kernel void @global_singlethread_seq_cst_store(1306; GFX6-LABEL: global_singlethread_seq_cst_store:1307; GFX6:       ; %bb.0: ; %entry1308; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]1309; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x01310; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x21311; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1312; GFX6-NEXT:    s_mov_b32 s11, s51313; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51314; GFX6-NEXT:    s_mov_b32 s9, 0x100f0001315; GFX6-NEXT:    s_mov_b32 s10, -11316; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr71317; GFX6-NEXT:    s_mov_b32 s5, s111318; GFX6-NEXT:    s_mov_b32 s6, s101319; GFX6-NEXT:    s_mov_b32 s7, s91320; GFX6-NEXT:    v_mov_b32_e32 v0, s81321; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 01322; GFX6-NEXT:    s_endpgm1323;1324; GFX7-LABEL: global_singlethread_seq_cst_store:1325; GFX7:       ; %bb.0: ; %entry1326; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s131327; GFX7-NEXT:    s_add_i32 s12, s12, s171328; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81329; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x01330; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x21331; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1332; GFX7-NEXT:    v_mov_b32_e32 v0, s61333; GFX7-NEXT:    v_mov_b32_e32 v1, s71334; GFX7-NEXT:    v_mov_b32_e32 v2, s41335; GFX7-NEXT:    flat_store_dword v[0:1], v21336; GFX7-NEXT:    s_endpgm1337;1338; GFX10-WGP-LABEL: global_singlethread_seq_cst_store:1339; GFX10-WGP:       ; %bb.0: ; %entry1340; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x01341; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81342; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 01343; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)1344; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s61345; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]1346; GFX10-WGP-NEXT:    s_endpgm1347;1348; GFX10-CU-LABEL: global_singlethread_seq_cst_store:1349; GFX10-CU:       ; %bb.0: ; %entry1350; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x01351; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81352; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 01353; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)1354; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s61355; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]1356; GFX10-CU-NEXT:    s_endpgm1357;1358; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_store:1359; SKIP-CACHE-INV:       ; %bb.0: ; %entry1360; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]1361; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x01362; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x21363; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)1364; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s11365; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11366; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0001367; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -11368; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31369; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s71370; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s61371; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s51372; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s41373; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 01374; SKIP-CACHE-INV-NEXT:    s_endpgm1375;1376; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_store:1377; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry1378; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x01379; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81380; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01381; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1382; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s61383; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]1384; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm1385;1386; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_store:1387; GFX90A-TGSPLIT:       ; %bb.0: ; %entry1388; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x01389; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x81390; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01391; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1392; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s61393; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]1394; GFX90A-TGSPLIT-NEXT:    s_endpgm1395;1396; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_store:1397; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry1398; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x01399; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x81400; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01401; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1402; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s21403; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]1404; GFX942-NOTTGSPLIT-NEXT:    s_endpgm1405;1406; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_store:1407; GFX942-TGSPLIT:       ; %bb.0: ; %entry1408; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x01409; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x81410; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01411; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1412; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s21413; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]1414; GFX942-TGSPLIT-NEXT:    s_endpgm1415;1416; GFX11-WGP-LABEL: global_singlethread_seq_cst_store:1417; GFX11-WGP:       ; %bb.0: ; %entry1418; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x01419; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81420; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 01421; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)1422; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s21423; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]1424; GFX11-WGP-NEXT:    s_endpgm1425;1426; GFX11-CU-LABEL: global_singlethread_seq_cst_store:1427; GFX11-CU:       ; %bb.0: ; %entry1428; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x01429; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81430; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 01431; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)1432; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s21433; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]1434; GFX11-CU-NEXT:    s_endpgm1435;1436; GFX12-WGP-LABEL: global_singlethread_seq_cst_store:1437; GFX12-WGP:       ; %bb.0: ; %entry1438; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x01439; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81440; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 01441; GFX12-WGP-NEXT:    s_wait_kmcnt 0x01442; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s21443; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]1444; GFX12-WGP-NEXT:    s_endpgm1445;1446; GFX12-CU-LABEL: global_singlethread_seq_cst_store:1447; GFX12-CU:       ; %bb.0: ; %entry1448; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x01449; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81450; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 01451; GFX12-CU-NEXT:    s_wait_kmcnt 0x01452; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s21453; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]1454; GFX12-CU-NEXT:    s_endpgm1455;1456; GFX1250-LABEL: global_singlethread_seq_cst_store:1457; GFX1250:       ; %bb.0: ; %entry1458; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11459; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x01460; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x81461; GFX1250-NEXT:    v_mov_b32_e32 v0, 01462; GFX1250-NEXT:    s_wait_kmcnt 0x01463; GFX1250-NEXT:    v_mov_b32_e32 v1, s21464; GFX1250-NEXT:    s_wait_xcnt 0x01465; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]1466; GFX1250-NEXT:    s_endpgm1467    i32 %in, ptr addrspace(1) %out) {1468entry:1469  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread") seq_cst, align 41470  ret void1471}1472 1473define amdgpu_kernel void @global_singlethread_monotonic_atomicrmw(1474; GFX6-LABEL: global_singlethread_monotonic_atomicrmw:1475; GFX6:       ; %bb.0: ; %entry1476; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01477; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x21478; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1479; GFX6-NEXT:    s_mov_b32 s11, s51480; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51481; GFX6-NEXT:    s_mov_b32 s9, 0x100f0001482; GFX6-NEXT:    s_mov_b32 s10, -11483; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr71484; GFX6-NEXT:    s_mov_b32 s5, s111485; GFX6-NEXT:    s_mov_b32 s6, s101486; GFX6-NEXT:    s_mov_b32 s7, s91487; GFX6-NEXT:    v_mov_b32_e32 v0, s81488; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 01489; GFX6-NEXT:    s_endpgm1490;1491; GFX7-LABEL: global_singlethread_monotonic_atomicrmw:1492; GFX7:       ; %bb.0: ; %entry1493; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s131494; GFX7-NEXT:    s_add_i32 s12, s12, s171495; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81496; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x01497; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x21498; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1499; GFX7-NEXT:    v_mov_b32_e32 v0, s61500; GFX7-NEXT:    v_mov_b32_e32 v1, s71501; GFX7-NEXT:    v_mov_b32_e32 v2, s41502; GFX7-NEXT:    flat_atomic_swap v[0:1], v21503; GFX7-NEXT:    s_endpgm1504;1505; GFX10-WGP-LABEL: global_singlethread_monotonic_atomicrmw:1506; GFX10-WGP:       ; %bb.0: ; %entry1507; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 01508; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01509; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x81510; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)1511; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s61512; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]1513; GFX10-WGP-NEXT:    s_endpgm1514;1515; GFX10-CU-LABEL: global_singlethread_monotonic_atomicrmw:1516; GFX10-CU:       ; %bb.0: ; %entry1517; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 01518; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01519; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x81520; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)1521; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s61522; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]1523; GFX10-CU-NEXT:    s_endpgm1524;1525; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_atomicrmw:1526; SKIP-CACHE-INV:       ; %bb.0: ; %entry1527; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01528; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x21529; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)1530; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s11531; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11532; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0001533; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -11534; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31535; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s71536; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s61537; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s51538; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s41539; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 01540; SKIP-CACHE-INV-NEXT:    s_endpgm1541;1542; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_atomicrmw:1543; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry1544; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01545; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01546; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x81547; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1548; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s61549; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]1550; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm1551;1552; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_atomicrmw:1553; GFX90A-TGSPLIT:       ; %bb.0: ; %entry1554; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01555; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01556; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x81557; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1558; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s61559; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]1560; GFX90A-TGSPLIT-NEXT:    s_endpgm1561;1562; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_atomicrmw:1563; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry1564; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01565; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01566; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x81567; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1568; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s21569; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]1570; GFX942-NOTTGSPLIT-NEXT:    s_endpgm1571;1572; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_atomicrmw:1573; GFX942-TGSPLIT:       ; %bb.0: ; %entry1574; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01575; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01576; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x81577; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1578; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s21579; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]1580; GFX942-TGSPLIT-NEXT:    s_endpgm1581;1582; GFX11-WGP-LABEL: global_singlethread_monotonic_atomicrmw:1583; GFX11-WGP:       ; %bb.0: ; %entry1584; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 01585; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01586; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x81587; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)1588; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s21589; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1590; GFX11-WGP-NEXT:    s_endpgm1591;1592; GFX11-CU-LABEL: global_singlethread_monotonic_atomicrmw:1593; GFX11-CU:       ; %bb.0: ; %entry1594; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 01595; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01596; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x81597; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)1598; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s21599; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1600; GFX11-CU-NEXT:    s_endpgm1601;1602; GFX12-WGP-LABEL: global_singlethread_monotonic_atomicrmw:1603; GFX12-WGP:       ; %bb.0: ; %entry1604; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 01605; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01606; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x81607; GFX12-WGP-NEXT:    s_wait_kmcnt 0x01608; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s21609; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1610; GFX12-WGP-NEXT:    s_endpgm1611;1612; GFX12-CU-LABEL: global_singlethread_monotonic_atomicrmw:1613; GFX12-CU:       ; %bb.0: ; %entry1614; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 01615; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01616; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x81617; GFX12-CU-NEXT:    s_wait_kmcnt 0x01618; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s21619; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1620; GFX12-CU-NEXT:    s_endpgm1621;1622; GFX1250-LABEL: global_singlethread_monotonic_atomicrmw:1623; GFX1250:       ; %bb.0: ; %entry1624; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11625; GFX1250-NEXT:    v_mov_b32_e32 v0, 01626; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01627; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x81628; GFX1250-NEXT:    s_wait_kmcnt 0x01629; GFX1250-NEXT:    v_mov_b32_e32 v1, s21630; GFX1250-NEXT:    s_wait_xcnt 0x01631; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1632; GFX1250-NEXT:    s_endpgm1633    ptr addrspace(1) %out, i32 %in) {1634entry:1635  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") monotonic1636  ret void1637}1638 1639define amdgpu_kernel void @global_singlethread_acquire_atomicrmw(1640; GFX6-LABEL: global_singlethread_acquire_atomicrmw:1641; GFX6:       ; %bb.0: ; %entry1642; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01643; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x21644; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1645; GFX6-NEXT:    s_mov_b32 s11, s51646; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51647; GFX6-NEXT:    s_mov_b32 s9, 0x100f0001648; GFX6-NEXT:    s_mov_b32 s10, -11649; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr71650; GFX6-NEXT:    s_mov_b32 s5, s111651; GFX6-NEXT:    s_mov_b32 s6, s101652; GFX6-NEXT:    s_mov_b32 s7, s91653; GFX6-NEXT:    v_mov_b32_e32 v0, s81654; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 01655; GFX6-NEXT:    s_endpgm1656;1657; GFX7-LABEL: global_singlethread_acquire_atomicrmw:1658; GFX7:       ; %bb.0: ; %entry1659; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s131660; GFX7-NEXT:    s_add_i32 s12, s12, s171661; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81662; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x01663; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x21664; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1665; GFX7-NEXT:    v_mov_b32_e32 v0, s61666; GFX7-NEXT:    v_mov_b32_e32 v1, s71667; GFX7-NEXT:    v_mov_b32_e32 v2, s41668; GFX7-NEXT:    flat_atomic_swap v[0:1], v21669; GFX7-NEXT:    s_endpgm1670;1671; GFX10-WGP-LABEL: global_singlethread_acquire_atomicrmw:1672; GFX10-WGP:       ; %bb.0: ; %entry1673; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 01674; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01675; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x81676; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)1677; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s61678; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]1679; GFX10-WGP-NEXT:    s_endpgm1680;1681; GFX10-CU-LABEL: global_singlethread_acquire_atomicrmw:1682; GFX10-CU:       ; %bb.0: ; %entry1683; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 01684; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01685; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x81686; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)1687; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s61688; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]1689; GFX10-CU-NEXT:    s_endpgm1690;1691; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_atomicrmw:1692; SKIP-CACHE-INV:       ; %bb.0: ; %entry1693; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01694; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x21695; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)1696; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s11697; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11698; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0001699; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -11700; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31701; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s71702; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s61703; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s51704; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s41705; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 01706; SKIP-CACHE-INV-NEXT:    s_endpgm1707;1708; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_atomicrmw:1709; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry1710; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01711; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01712; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x81713; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1714; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s61715; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]1716; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm1717;1718; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_atomicrmw:1719; GFX90A-TGSPLIT:       ; %bb.0: ; %entry1720; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01721; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01722; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x81723; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1724; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s61725; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]1726; GFX90A-TGSPLIT-NEXT:    s_endpgm1727;1728; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_atomicrmw:1729; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry1730; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01731; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01732; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x81733; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1734; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s21735; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]1736; GFX942-NOTTGSPLIT-NEXT:    s_endpgm1737;1738; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_atomicrmw:1739; GFX942-TGSPLIT:       ; %bb.0: ; %entry1740; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01741; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01742; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x81743; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1744; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s21745; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]1746; GFX942-TGSPLIT-NEXT:    s_endpgm1747;1748; GFX11-WGP-LABEL: global_singlethread_acquire_atomicrmw:1749; GFX11-WGP:       ; %bb.0: ; %entry1750; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 01751; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01752; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x81753; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)1754; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s21755; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1756; GFX11-WGP-NEXT:    s_endpgm1757;1758; GFX11-CU-LABEL: global_singlethread_acquire_atomicrmw:1759; GFX11-CU:       ; %bb.0: ; %entry1760; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 01761; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01762; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x81763; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)1764; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s21765; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1766; GFX11-CU-NEXT:    s_endpgm1767;1768; GFX12-WGP-LABEL: global_singlethread_acquire_atomicrmw:1769; GFX12-WGP:       ; %bb.0: ; %entry1770; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 01771; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01772; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x81773; GFX12-WGP-NEXT:    s_wait_kmcnt 0x01774; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s21775; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1776; GFX12-WGP-NEXT:    s_endpgm1777;1778; GFX12-CU-LABEL: global_singlethread_acquire_atomicrmw:1779; GFX12-CU:       ; %bb.0: ; %entry1780; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 01781; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01782; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x81783; GFX12-CU-NEXT:    s_wait_kmcnt 0x01784; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s21785; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1786; GFX12-CU-NEXT:    s_endpgm1787;1788; GFX1250-LABEL: global_singlethread_acquire_atomicrmw:1789; GFX1250:       ; %bb.0: ; %entry1790; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11791; GFX1250-NEXT:    v_mov_b32_e32 v0, 01792; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01793; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x81794; GFX1250-NEXT:    s_wait_kmcnt 0x01795; GFX1250-NEXT:    v_mov_b32_e32 v1, s21796; GFX1250-NEXT:    s_wait_xcnt 0x01797; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1798; GFX1250-NEXT:    s_endpgm1799    ptr addrspace(1) %out, i32 %in) {1800entry:1801  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") acquire1802  ret void1803}1804 1805define amdgpu_kernel void @global_singlethread_release_atomicrmw(1806; GFX6-LABEL: global_singlethread_release_atomicrmw:1807; GFX6:       ; %bb.0: ; %entry1808; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01809; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x21810; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1811; GFX6-NEXT:    s_mov_b32 s11, s51812; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51813; GFX6-NEXT:    s_mov_b32 s9, 0x100f0001814; GFX6-NEXT:    s_mov_b32 s10, -11815; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr71816; GFX6-NEXT:    s_mov_b32 s5, s111817; GFX6-NEXT:    s_mov_b32 s6, s101818; GFX6-NEXT:    s_mov_b32 s7, s91819; GFX6-NEXT:    v_mov_b32_e32 v0, s81820; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 01821; GFX6-NEXT:    s_endpgm1822;1823; GFX7-LABEL: global_singlethread_release_atomicrmw:1824; GFX7:       ; %bb.0: ; %entry1825; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s131826; GFX7-NEXT:    s_add_i32 s12, s12, s171827; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81828; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x01829; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x21830; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1831; GFX7-NEXT:    v_mov_b32_e32 v0, s61832; GFX7-NEXT:    v_mov_b32_e32 v1, s71833; GFX7-NEXT:    v_mov_b32_e32 v2, s41834; GFX7-NEXT:    flat_atomic_swap v[0:1], v21835; GFX7-NEXT:    s_endpgm1836;1837; GFX10-WGP-LABEL: global_singlethread_release_atomicrmw:1838; GFX10-WGP:       ; %bb.0: ; %entry1839; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 01840; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01841; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x81842; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)1843; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s61844; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]1845; GFX10-WGP-NEXT:    s_endpgm1846;1847; GFX10-CU-LABEL: global_singlethread_release_atomicrmw:1848; GFX10-CU:       ; %bb.0: ; %entry1849; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 01850; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01851; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x81852; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)1853; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s61854; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]1855; GFX10-CU-NEXT:    s_endpgm1856;1857; SKIP-CACHE-INV-LABEL: global_singlethread_release_atomicrmw:1858; SKIP-CACHE-INV:       ; %bb.0: ; %entry1859; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01860; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x21861; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)1862; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s11863; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr11864; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0001865; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -11866; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr31867; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s71868; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s61869; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s51870; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s41871; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 01872; SKIP-CACHE-INV-NEXT:    s_endpgm1873;1874; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_atomicrmw:1875; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry1876; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01877; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01878; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x81879; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1880; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s61881; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]1882; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm1883;1884; GFX90A-TGSPLIT-LABEL: global_singlethread_release_atomicrmw:1885; GFX90A-TGSPLIT:       ; %bb.0: ; %entry1886; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01887; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01888; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x81889; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1890; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s61891; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]1892; GFX90A-TGSPLIT-NEXT:    s_endpgm1893;1894; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_atomicrmw:1895; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry1896; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 01897; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01898; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x81899; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1900; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s21901; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]1902; GFX942-NOTTGSPLIT-NEXT:    s_endpgm1903;1904; GFX942-TGSPLIT-LABEL: global_singlethread_release_atomicrmw:1905; GFX942-TGSPLIT:       ; %bb.0: ; %entry1906; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 01907; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x01908; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x81909; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)1910; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s21911; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]1912; GFX942-TGSPLIT-NEXT:    s_endpgm1913;1914; GFX11-WGP-LABEL: global_singlethread_release_atomicrmw:1915; GFX11-WGP:       ; %bb.0: ; %entry1916; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 01917; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01918; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x81919; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)1920; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s21921; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1922; GFX11-WGP-NEXT:    s_endpgm1923;1924; GFX11-CU-LABEL: global_singlethread_release_atomicrmw:1925; GFX11-CU:       ; %bb.0: ; %entry1926; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 01927; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01928; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x81929; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)1930; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s21931; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1932; GFX11-CU-NEXT:    s_endpgm1933;1934; GFX12-WGP-LABEL: global_singlethread_release_atomicrmw:1935; GFX12-WGP:       ; %bb.0: ; %entry1936; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 01937; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01938; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x81939; GFX12-WGP-NEXT:    s_wait_kmcnt 0x01940; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s21941; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1942; GFX12-WGP-NEXT:    s_endpgm1943;1944; GFX12-CU-LABEL: global_singlethread_release_atomicrmw:1945; GFX12-CU:       ; %bb.0: ; %entry1946; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 01947; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01948; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x81949; GFX12-CU-NEXT:    s_wait_kmcnt 0x01950; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s21951; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1952; GFX12-CU-NEXT:    s_endpgm1953;1954; GFX1250-LABEL: global_singlethread_release_atomicrmw:1955; GFX1250:       ; %bb.0: ; %entry1956; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11957; GFX1250-NEXT:    v_mov_b32_e32 v0, 01958; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01959; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x81960; GFX1250-NEXT:    s_wait_kmcnt 0x01961; GFX1250-NEXT:    v_mov_b32_e32 v1, s21962; GFX1250-NEXT:    s_wait_xcnt 0x01963; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]1964; GFX1250-NEXT:    s_endpgm1965    ptr addrspace(1) %out, i32 %in) {1966entry:1967  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") release1968  ret void1969}1970 1971define amdgpu_kernel void @global_singlethread_acq_rel_atomicrmw(1972; GFX6-LABEL: global_singlethread_acq_rel_atomicrmw:1973; GFX6:       ; %bb.0: ; %entry1974; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x01975; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x21976; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1977; GFX6-NEXT:    s_mov_b32 s11, s51978; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr51979; GFX6-NEXT:    s_mov_b32 s9, 0x100f0001980; GFX6-NEXT:    s_mov_b32 s10, -11981; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr71982; GFX6-NEXT:    s_mov_b32 s5, s111983; GFX6-NEXT:    s_mov_b32 s6, s101984; GFX6-NEXT:    s_mov_b32 s7, s91985; GFX6-NEXT:    v_mov_b32_e32 v0, s81986; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 01987; GFX6-NEXT:    s_endpgm1988;1989; GFX7-LABEL: global_singlethread_acq_rel_atomicrmw:1990; GFX7:       ; %bb.0: ; %entry1991; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s131992; GFX7-NEXT:    s_add_i32 s12, s12, s171993; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81994; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x01995; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x21996; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1997; GFX7-NEXT:    v_mov_b32_e32 v0, s61998; GFX7-NEXT:    v_mov_b32_e32 v1, s71999; GFX7-NEXT:    v_mov_b32_e32 v2, s42000; GFX7-NEXT:    flat_atomic_swap v[0:1], v22001; GFX7-NEXT:    s_endpgm2002;2003; GFX10-WGP-LABEL: global_singlethread_acq_rel_atomicrmw:2004; GFX10-WGP:       ; %bb.0: ; %entry2005; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 02006; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02007; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x82008; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)2009; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s62010; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]2011; GFX10-WGP-NEXT:    s_endpgm2012;2013; GFX10-CU-LABEL: global_singlethread_acq_rel_atomicrmw:2014; GFX10-CU:       ; %bb.0: ; %entry2015; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 02016; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02017; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x82018; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)2019; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s62020; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]2021; GFX10-CU-NEXT:    s_endpgm2022;2023; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_atomicrmw:2024; SKIP-CACHE-INV:       ; %bb.0: ; %entry2025; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02026; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x22027; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)2028; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s12029; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12030; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0002031; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -12032; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32033; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s72034; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s62035; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s52036; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s42037; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 02038; SKIP-CACHE-INV-NEXT:    s_endpgm2039;2040; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_atomicrmw:2041; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry2042; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02043; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02044; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82045; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2046; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s62047; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]2048; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm2049;2050; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_atomicrmw:2051; GFX90A-TGSPLIT:       ; %bb.0: ; %entry2052; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02053; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02054; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82055; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2056; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s62057; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]2058; GFX90A-TGSPLIT-NEXT:    s_endpgm2059;2060; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_atomicrmw:2061; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry2062; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02063; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02064; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82065; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2066; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s22067; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]2068; GFX942-NOTTGSPLIT-NEXT:    s_endpgm2069;2070; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_atomicrmw:2071; GFX942-TGSPLIT:       ; %bb.0: ; %entry2072; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02073; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02074; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82075; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2076; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s22077; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]2078; GFX942-TGSPLIT-NEXT:    s_endpgm2079;2080; GFX11-WGP-LABEL: global_singlethread_acq_rel_atomicrmw:2081; GFX11-WGP:       ; %bb.0: ; %entry2082; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 02083; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02084; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82085; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)2086; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s22087; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2088; GFX11-WGP-NEXT:    s_endpgm2089;2090; GFX11-CU-LABEL: global_singlethread_acq_rel_atomicrmw:2091; GFX11-CU:       ; %bb.0: ; %entry2092; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 02093; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02094; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82095; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)2096; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s22097; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2098; GFX11-CU-NEXT:    s_endpgm2099;2100; GFX12-WGP-LABEL: global_singlethread_acq_rel_atomicrmw:2101; GFX12-WGP:       ; %bb.0: ; %entry2102; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 02103; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02104; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82105; GFX12-WGP-NEXT:    s_wait_kmcnt 0x02106; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s22107; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2108; GFX12-WGP-NEXT:    s_endpgm2109;2110; GFX12-CU-LABEL: global_singlethread_acq_rel_atomicrmw:2111; GFX12-CU:       ; %bb.0: ; %entry2112; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 02113; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02114; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82115; GFX12-CU-NEXT:    s_wait_kmcnt 0x02116; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s22117; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2118; GFX12-CU-NEXT:    s_endpgm2119;2120; GFX1250-LABEL: global_singlethread_acq_rel_atomicrmw:2121; GFX1250:       ; %bb.0: ; %entry2122; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12123; GFX1250-NEXT:    v_mov_b32_e32 v0, 02124; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02125; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x82126; GFX1250-NEXT:    s_wait_kmcnt 0x02127; GFX1250-NEXT:    v_mov_b32_e32 v1, s22128; GFX1250-NEXT:    s_wait_xcnt 0x02129; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2130; GFX1250-NEXT:    s_endpgm2131    ptr addrspace(1) %out, i32 %in) {2132entry:2133  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") acq_rel2134  ret void2135}2136 2137define amdgpu_kernel void @global_singlethread_seq_cst_atomicrmw(2138; GFX6-LABEL: global_singlethread_seq_cst_atomicrmw:2139; GFX6:       ; %bb.0: ; %entry2140; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02141; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x22142; GFX6-NEXT:    s_waitcnt lgkmcnt(0)2143; GFX6-NEXT:    s_mov_b32 s11, s52144; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr52145; GFX6-NEXT:    s_mov_b32 s9, 0x100f0002146; GFX6-NEXT:    s_mov_b32 s10, -12147; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr72148; GFX6-NEXT:    s_mov_b32 s5, s112149; GFX6-NEXT:    s_mov_b32 s6, s102150; GFX6-NEXT:    s_mov_b32 s7, s92151; GFX6-NEXT:    v_mov_b32_e32 v0, s82152; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 02153; GFX6-NEXT:    s_endpgm2154;2155; GFX7-LABEL: global_singlethread_seq_cst_atomicrmw:2156; GFX7:       ; %bb.0: ; %entry2157; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s132158; GFX7-NEXT:    s_add_i32 s12, s12, s172159; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82160; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x02161; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x22162; GFX7-NEXT:    s_waitcnt lgkmcnt(0)2163; GFX7-NEXT:    v_mov_b32_e32 v0, s62164; GFX7-NEXT:    v_mov_b32_e32 v1, s72165; GFX7-NEXT:    v_mov_b32_e32 v2, s42166; GFX7-NEXT:    flat_atomic_swap v[0:1], v22167; GFX7-NEXT:    s_endpgm2168;2169; GFX10-WGP-LABEL: global_singlethread_seq_cst_atomicrmw:2170; GFX10-WGP:       ; %bb.0: ; %entry2171; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 02172; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02173; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x82174; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)2175; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s62176; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]2177; GFX10-WGP-NEXT:    s_endpgm2178;2179; GFX10-CU-LABEL: global_singlethread_seq_cst_atomicrmw:2180; GFX10-CU:       ; %bb.0: ; %entry2181; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 02182; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02183; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x82184; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)2185; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s62186; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]2187; GFX10-CU-NEXT:    s_endpgm2188;2189; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_atomicrmw:2190; SKIP-CACHE-INV:       ; %bb.0: ; %entry2191; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02192; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x22193; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)2194; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s12195; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12196; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0002197; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -12198; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32199; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s72200; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s62201; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s52202; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s42203; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 02204; SKIP-CACHE-INV-NEXT:    s_endpgm2205;2206; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_atomicrmw:2207; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry2208; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02209; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02210; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82211; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2212; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s62213; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]2214; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm2215;2216; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_atomicrmw:2217; GFX90A-TGSPLIT:       ; %bb.0: ; %entry2218; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02219; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02220; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82221; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2222; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s62223; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]2224; GFX90A-TGSPLIT-NEXT:    s_endpgm2225;2226; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_atomicrmw:2227; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry2228; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02229; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02230; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82231; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2232; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s22233; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]2234; GFX942-NOTTGSPLIT-NEXT:    s_endpgm2235;2236; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_atomicrmw:2237; GFX942-TGSPLIT:       ; %bb.0: ; %entry2238; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02239; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02240; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82241; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2242; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s22243; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]2244; GFX942-TGSPLIT-NEXT:    s_endpgm2245;2246; GFX11-WGP-LABEL: global_singlethread_seq_cst_atomicrmw:2247; GFX11-WGP:       ; %bb.0: ; %entry2248; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 02249; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02250; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82251; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)2252; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s22253; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2254; GFX11-WGP-NEXT:    s_endpgm2255;2256; GFX11-CU-LABEL: global_singlethread_seq_cst_atomicrmw:2257; GFX11-CU:       ; %bb.0: ; %entry2258; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 02259; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02260; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82261; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)2262; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s22263; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2264; GFX11-CU-NEXT:    s_endpgm2265;2266; GFX12-WGP-LABEL: global_singlethread_seq_cst_atomicrmw:2267; GFX12-WGP:       ; %bb.0: ; %entry2268; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 02269; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02270; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82271; GFX12-WGP-NEXT:    s_wait_kmcnt 0x02272; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s22273; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2274; GFX12-WGP-NEXT:    s_endpgm2275;2276; GFX12-CU-LABEL: global_singlethread_seq_cst_atomicrmw:2277; GFX12-CU:       ; %bb.0: ; %entry2278; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 02279; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02280; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82281; GFX12-CU-NEXT:    s_wait_kmcnt 0x02282; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s22283; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2284; GFX12-CU-NEXT:    s_endpgm2285;2286; GFX1250-LABEL: global_singlethread_seq_cst_atomicrmw:2287; GFX1250:       ; %bb.0: ; %entry2288; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12289; GFX1250-NEXT:    v_mov_b32_e32 v0, 02290; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02291; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x82292; GFX1250-NEXT:    s_wait_kmcnt 0x02293; GFX1250-NEXT:    v_mov_b32_e32 v1, s22294; GFX1250-NEXT:    s_wait_xcnt 0x02295; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]2296; GFX1250-NEXT:    s_endpgm2297    ptr addrspace(1) %out, i32 %in) {2298entry:2299  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") seq_cst2300  ret void2301}2302 2303define amdgpu_kernel void @global_singlethread_acquire_ret_atomicrmw(2304; GFX6-LABEL: global_singlethread_acquire_ret_atomicrmw:2305; GFX6:       ; %bb.0: ; %entry2306; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02307; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x22308; GFX6-NEXT:    s_waitcnt lgkmcnt(0)2309; GFX6-NEXT:    s_mov_b32 s11, s52310; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr52311; GFX6-NEXT:    s_mov_b32 s9, 0x100f0002312; GFX6-NEXT:    s_mov_b32 s10, -12313; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr72314; GFX6-NEXT:    s_mov_b32 s5, s112315; GFX6-NEXT:    s_mov_b32 s6, s102316; GFX6-NEXT:    s_mov_b32 s7, s92317; GFX6-NEXT:    v_mov_b32_e32 v0, s82318; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 0 glc2319; GFX6-NEXT:    s_waitcnt vmcnt(0)2320; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 02321; GFX6-NEXT:    s_endpgm2322;2323; GFX7-LABEL: global_singlethread_acquire_ret_atomicrmw:2324; GFX7:       ; %bb.0: ; %entry2325; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s132326; GFX7-NEXT:    s_add_i32 s12, s12, s172327; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82328; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02329; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x22330; GFX7-NEXT:    s_waitcnt lgkmcnt(0)2331; GFX7-NEXT:    v_mov_b32_e32 v0, s42332; GFX7-NEXT:    v_mov_b32_e32 v1, s52333; GFX7-NEXT:    v_mov_b32_e32 v2, s62334; GFX7-NEXT:    flat_atomic_swap v2, v[0:1], v2 glc2335; GFX7-NEXT:    v_mov_b32_e32 v0, s42336; GFX7-NEXT:    v_mov_b32_e32 v1, s52337; GFX7-NEXT:    s_waitcnt vmcnt(0)2338; GFX7-NEXT:    flat_store_dword v[0:1], v22339; GFX7-NEXT:    s_endpgm2340;2341; GFX10-WGP-LABEL: global_singlethread_acquire_ret_atomicrmw:2342; GFX10-WGP:       ; %bb.0: ; %entry2343; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 02344; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02345; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x82346; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)2347; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s62348; GFX10-WGP-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2349; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)2350; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]2351; GFX10-WGP-NEXT:    s_endpgm2352;2353; GFX10-CU-LABEL: global_singlethread_acquire_ret_atomicrmw:2354; GFX10-CU:       ; %bb.0: ; %entry2355; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 02356; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02357; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x82358; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)2359; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s62360; GFX10-CU-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2361; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)2362; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]2363; GFX10-CU-NEXT:    s_endpgm2364;2365; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_ret_atomicrmw:2366; SKIP-CACHE-INV:       ; %bb.0: ; %entry2367; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02368; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x22369; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)2370; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s12371; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12372; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0002373; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -12374; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32375; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s72376; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s62377; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s52378; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s42379; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 0 glc2380; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)2381; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 02382; SKIP-CACHE-INV-NEXT:    s_endpgm2383;2384; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_ret_atomicrmw:2385; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry2386; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02387; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02388; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82389; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2390; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s62391; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2392; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)2393; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]2394; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm2395;2396; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_ret_atomicrmw:2397; GFX90A-TGSPLIT:       ; %bb.0: ; %entry2398; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02399; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02400; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82401; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2402; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s62403; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2404; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)2405; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]2406; GFX90A-TGSPLIT-NEXT:    s_endpgm2407;2408; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_ret_atomicrmw:2409; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry2410; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02411; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02412; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82413; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2414; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s22415; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc02416; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)2417; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]2418; GFX942-NOTTGSPLIT-NEXT:    s_endpgm2419;2420; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_ret_atomicrmw:2421; GFX942-TGSPLIT:       ; %bb.0: ; %entry2422; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02423; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02424; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82425; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2426; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s22427; GFX942-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc02428; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)2429; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]2430; GFX942-TGSPLIT-NEXT:    s_endpgm2431;2432; GFX11-WGP-LABEL: global_singlethread_acquire_ret_atomicrmw:2433; GFX11-WGP:       ; %bb.0: ; %entry2434; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 02435; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02436; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82437; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)2438; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s22439; GFX11-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc2440; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)2441; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]2442; GFX11-WGP-NEXT:    s_endpgm2443;2444; GFX11-CU-LABEL: global_singlethread_acquire_ret_atomicrmw:2445; GFX11-CU:       ; %bb.0: ; %entry2446; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 02447; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02448; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82449; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)2450; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s22451; GFX11-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc2452; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)2453; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]2454; GFX11-CU-NEXT:    s_endpgm2455;2456; GFX12-WGP-LABEL: global_singlethread_acquire_ret_atomicrmw:2457; GFX12-WGP:       ; %bb.0: ; %entry2458; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 02459; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02460; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82461; GFX12-WGP-NEXT:    s_wait_kmcnt 0x02462; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s22463; GFX12-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2464; GFX12-WGP-NEXT:    s_wait_loadcnt 0x02465; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]2466; GFX12-WGP-NEXT:    s_endpgm2467;2468; GFX12-CU-LABEL: global_singlethread_acquire_ret_atomicrmw:2469; GFX12-CU:       ; %bb.0: ; %entry2470; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 02471; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02472; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82473; GFX12-CU-NEXT:    s_wait_kmcnt 0x02474; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s22475; GFX12-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2476; GFX12-CU-NEXT:    s_wait_loadcnt 0x02477; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]2478; GFX12-CU-NEXT:    s_endpgm2479;2480; GFX1250-LABEL: global_singlethread_acquire_ret_atomicrmw:2481; GFX1250:       ; %bb.0: ; %entry2482; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12483; GFX1250-NEXT:    v_mov_b32_e32 v0, 02484; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02485; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x82486; GFX1250-NEXT:    s_wait_kmcnt 0x02487; GFX1250-NEXT:    v_mov_b32_e32 v1, s22488; GFX1250-NEXT:    s_wait_xcnt 0x02489; GFX1250-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2490; GFX1250-NEXT:    s_wait_loadcnt 0x02491; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]2492; GFX1250-NEXT:    s_endpgm2493    ptr addrspace(1) %out, i32 %in) {2494entry:2495  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") acquire2496  store i32 %val, ptr addrspace(1) %out, align 42497  ret void2498}2499 2500define amdgpu_kernel void @global_singlethread_acq_rel_ret_atomicrmw(2501; GFX6-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2502; GFX6:       ; %bb.0: ; %entry2503; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02504; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x22505; GFX6-NEXT:    s_waitcnt lgkmcnt(0)2506; GFX6-NEXT:    s_mov_b32 s11, s52507; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr52508; GFX6-NEXT:    s_mov_b32 s9, 0x100f0002509; GFX6-NEXT:    s_mov_b32 s10, -12510; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr72511; GFX6-NEXT:    s_mov_b32 s5, s112512; GFX6-NEXT:    s_mov_b32 s6, s102513; GFX6-NEXT:    s_mov_b32 s7, s92514; GFX6-NEXT:    v_mov_b32_e32 v0, s82515; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 0 glc2516; GFX6-NEXT:    s_waitcnt vmcnt(0)2517; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 02518; GFX6-NEXT:    s_endpgm2519;2520; GFX7-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2521; GFX7:       ; %bb.0: ; %entry2522; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s132523; GFX7-NEXT:    s_add_i32 s12, s12, s172524; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82525; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02526; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x22527; GFX7-NEXT:    s_waitcnt lgkmcnt(0)2528; GFX7-NEXT:    v_mov_b32_e32 v0, s42529; GFX7-NEXT:    v_mov_b32_e32 v1, s52530; GFX7-NEXT:    v_mov_b32_e32 v2, s62531; GFX7-NEXT:    flat_atomic_swap v2, v[0:1], v2 glc2532; GFX7-NEXT:    v_mov_b32_e32 v0, s42533; GFX7-NEXT:    v_mov_b32_e32 v1, s52534; GFX7-NEXT:    s_waitcnt vmcnt(0)2535; GFX7-NEXT:    flat_store_dword v[0:1], v22536; GFX7-NEXT:    s_endpgm2537;2538; GFX10-WGP-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2539; GFX10-WGP:       ; %bb.0: ; %entry2540; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 02541; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02542; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x82543; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)2544; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s62545; GFX10-WGP-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2546; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)2547; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]2548; GFX10-WGP-NEXT:    s_endpgm2549;2550; GFX10-CU-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2551; GFX10-CU:       ; %bb.0: ; %entry2552; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 02553; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02554; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x82555; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)2556; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s62557; GFX10-CU-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2558; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)2559; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]2560; GFX10-CU-NEXT:    s_endpgm2561;2562; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2563; SKIP-CACHE-INV:       ; %bb.0: ; %entry2564; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02565; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x22566; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)2567; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s12568; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12569; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0002570; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -12571; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32572; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s72573; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s62574; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s52575; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s42576; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 0 glc2577; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)2578; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 02579; SKIP-CACHE-INV-NEXT:    s_endpgm2580;2581; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2582; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry2583; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02584; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02585; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82586; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2587; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s62588; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2589; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)2590; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]2591; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm2592;2593; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2594; GFX90A-TGSPLIT:       ; %bb.0: ; %entry2595; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02596; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02597; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82598; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2599; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s62600; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2601; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)2602; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]2603; GFX90A-TGSPLIT-NEXT:    s_endpgm2604;2605; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2606; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry2607; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02608; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02609; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82610; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2611; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s22612; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc02613; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)2614; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]2615; GFX942-NOTTGSPLIT-NEXT:    s_endpgm2616;2617; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2618; GFX942-TGSPLIT:       ; %bb.0: ; %entry2619; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02620; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02621; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82622; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2623; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s22624; GFX942-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc02625; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)2626; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]2627; GFX942-TGSPLIT-NEXT:    s_endpgm2628;2629; GFX11-WGP-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2630; GFX11-WGP:       ; %bb.0: ; %entry2631; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 02632; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02633; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82634; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)2635; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s22636; GFX11-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc2637; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)2638; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]2639; GFX11-WGP-NEXT:    s_endpgm2640;2641; GFX11-CU-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2642; GFX11-CU:       ; %bb.0: ; %entry2643; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 02644; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02645; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82646; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)2647; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s22648; GFX11-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc2649; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)2650; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]2651; GFX11-CU-NEXT:    s_endpgm2652;2653; GFX12-WGP-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2654; GFX12-WGP:       ; %bb.0: ; %entry2655; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 02656; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02657; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82658; GFX12-WGP-NEXT:    s_wait_kmcnt 0x02659; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s22660; GFX12-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2661; GFX12-WGP-NEXT:    s_wait_loadcnt 0x02662; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]2663; GFX12-WGP-NEXT:    s_endpgm2664;2665; GFX12-CU-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2666; GFX12-CU:       ; %bb.0: ; %entry2667; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 02668; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02669; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82670; GFX12-CU-NEXT:    s_wait_kmcnt 0x02671; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s22672; GFX12-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2673; GFX12-CU-NEXT:    s_wait_loadcnt 0x02674; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]2675; GFX12-CU-NEXT:    s_endpgm2676;2677; GFX1250-LABEL: global_singlethread_acq_rel_ret_atomicrmw:2678; GFX1250:       ; %bb.0: ; %entry2679; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12680; GFX1250-NEXT:    v_mov_b32_e32 v0, 02681; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02682; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x82683; GFX1250-NEXT:    s_wait_kmcnt 0x02684; GFX1250-NEXT:    v_mov_b32_e32 v1, s22685; GFX1250-NEXT:    s_wait_xcnt 0x02686; GFX1250-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2687; GFX1250-NEXT:    s_wait_loadcnt 0x02688; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]2689; GFX1250-NEXT:    s_endpgm2690    ptr addrspace(1) %out, i32 %in) {2691entry:2692  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") acq_rel2693  store i32 %val, ptr addrspace(1) %out, align 42694  ret void2695}2696 2697define amdgpu_kernel void @global_singlethread_seq_cst_ret_atomicrmw(2698; GFX6-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2699; GFX6:       ; %bb.0: ; %entry2700; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02701; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x22702; GFX6-NEXT:    s_waitcnt lgkmcnt(0)2703; GFX6-NEXT:    s_mov_b32 s11, s52704; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr52705; GFX6-NEXT:    s_mov_b32 s9, 0x100f0002706; GFX6-NEXT:    s_mov_b32 s10, -12707; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr72708; GFX6-NEXT:    s_mov_b32 s5, s112709; GFX6-NEXT:    s_mov_b32 s6, s102710; GFX6-NEXT:    s_mov_b32 s7, s92711; GFX6-NEXT:    v_mov_b32_e32 v0, s82712; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 0 glc2713; GFX6-NEXT:    s_waitcnt vmcnt(0)2714; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 02715; GFX6-NEXT:    s_endpgm2716;2717; GFX7-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2718; GFX7:       ; %bb.0: ; %entry2719; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s132720; GFX7-NEXT:    s_add_i32 s12, s12, s172721; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82722; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02723; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x22724; GFX7-NEXT:    s_waitcnt lgkmcnt(0)2725; GFX7-NEXT:    v_mov_b32_e32 v0, s42726; GFX7-NEXT:    v_mov_b32_e32 v1, s52727; GFX7-NEXT:    v_mov_b32_e32 v2, s62728; GFX7-NEXT:    flat_atomic_swap v2, v[0:1], v2 glc2729; GFX7-NEXT:    v_mov_b32_e32 v0, s42730; GFX7-NEXT:    v_mov_b32_e32 v1, s52731; GFX7-NEXT:    s_waitcnt vmcnt(0)2732; GFX7-NEXT:    flat_store_dword v[0:1], v22733; GFX7-NEXT:    s_endpgm2734;2735; GFX10-WGP-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2736; GFX10-WGP:       ; %bb.0: ; %entry2737; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 02738; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02739; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x82740; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)2741; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s62742; GFX10-WGP-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2743; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)2744; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]2745; GFX10-WGP-NEXT:    s_endpgm2746;2747; GFX10-CU-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2748; GFX10-CU:       ; %bb.0: ; %entry2749; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 02750; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02751; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x82752; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)2753; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s62754; GFX10-CU-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2755; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)2756; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]2757; GFX10-CU-NEXT:    s_endpgm2758;2759; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2760; SKIP-CACHE-INV:       ; %bb.0: ; %entry2761; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02762; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x22763; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)2764; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s12765; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12766; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf0002767; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -12768; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32769; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s72770; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s62771; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s52772; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s42773; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 0 glc2774; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)2775; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 02776; SKIP-CACHE-INV-NEXT:    s_endpgm2777;2778; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2779; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry2780; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02781; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02782; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82783; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2784; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s62785; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2786; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)2787; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]2788; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm2789;2790; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2791; GFX90A-TGSPLIT:       ; %bb.0: ; %entry2792; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02793; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02794; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x82795; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2796; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s62797; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc2798; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)2799; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]2800; GFX90A-TGSPLIT-NEXT:    s_endpgm2801;2802; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2803; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry2804; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02805; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02806; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82807; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2808; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s22809; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc02810; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)2811; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]2812; GFX942-NOTTGSPLIT-NEXT:    s_endpgm2813;2814; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2815; GFX942-TGSPLIT:       ; %bb.0: ; %entry2816; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 02817; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x02818; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x82819; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)2820; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s22821; GFX942-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc02822; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)2823; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]2824; GFX942-TGSPLIT-NEXT:    s_endpgm2825;2826; GFX11-WGP-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2827; GFX11-WGP:       ; %bb.0: ; %entry2828; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 02829; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02830; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82831; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)2832; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s22833; GFX11-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc2834; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)2835; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]2836; GFX11-WGP-NEXT:    s_endpgm2837;2838; GFX11-CU-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2839; GFX11-CU:       ; %bb.0: ; %entry2840; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 02841; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02842; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82843; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)2844; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s22845; GFX11-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc2846; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)2847; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]2848; GFX11-CU-NEXT:    s_endpgm2849;2850; GFX12-WGP-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2851; GFX12-WGP:       ; %bb.0: ; %entry2852; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 02853; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02854; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x82855; GFX12-WGP-NEXT:    s_wait_kmcnt 0x02856; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s22857; GFX12-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2858; GFX12-WGP-NEXT:    s_wait_loadcnt 0x02859; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]2860; GFX12-WGP-NEXT:    s_endpgm2861;2862; GFX12-CU-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2863; GFX12-CU:       ; %bb.0: ; %entry2864; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 02865; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02866; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x82867; GFX12-CU-NEXT:    s_wait_kmcnt 0x02868; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s22869; GFX12-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2870; GFX12-CU-NEXT:    s_wait_loadcnt 0x02871; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]2872; GFX12-CU-NEXT:    s_endpgm2873;2874; GFX1250-LABEL: global_singlethread_seq_cst_ret_atomicrmw:2875; GFX1250:       ; %bb.0: ; %entry2876; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 12877; GFX1250-NEXT:    v_mov_b32_e32 v0, 02878; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x02879; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x82880; GFX1250-NEXT:    s_wait_kmcnt 0x02881; GFX1250-NEXT:    v_mov_b32_e32 v1, s22882; GFX1250-NEXT:    s_wait_xcnt 0x02883; GFX1250-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN2884; GFX1250-NEXT:    s_wait_loadcnt 0x02885; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]2886; GFX1250-NEXT:    s_endpgm2887    ptr addrspace(1) %out, i32 %in) {2888entry:2889  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread") seq_cst2890  store i32 %val, ptr addrspace(1) %out, align 42891  ret void2892}2893 2894define amdgpu_kernel void @global_singlethread_monotonic_monotonic_cmpxchg(2895; GFX6-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:2896; GFX6:       ; %bb.0: ; %entry2897; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]2898; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x02899; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x22900; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x32901; GFX6-NEXT:    s_waitcnt lgkmcnt(0)2902; GFX6-NEXT:    s_mov_b32 s12, s52903; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr52904; GFX6-NEXT:    s_mov_b32 s10, 0x100f0002905; GFX6-NEXT:    s_mov_b32 s11, -12906; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr72907; GFX6-NEXT:    s_mov_b32 s5, s122908; GFX6-NEXT:    s_mov_b32 s6, s112909; GFX6-NEXT:    s_mov_b32 s7, s102910; GFX6-NEXT:    v_mov_b32_e32 v0, s92911; GFX6-NEXT:    v_mov_b32_e32 v2, s82912; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec2913; GFX6-NEXT:    v_mov_b32_e32 v1, v22914; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:162915; GFX6-NEXT:    s_endpgm2916;2917; GFX7-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:2918; GFX7:       ; %bb.0: ; %entry2919; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s132920; GFX7-NEXT:    s_add_i32 s12, s12, s172921; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82922; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]2923; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x02924; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x22925; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x32926; GFX7-NEXT:    s_mov_b64 s[10:11], 162927; GFX7-NEXT:    s_waitcnt lgkmcnt(0)2928; GFX7-NEXT:    s_mov_b32 s4, s82929; GFX7-NEXT:    s_mov_b32 s5, s92930; GFX7-NEXT:    s_mov_b32 s9, s102931; GFX7-NEXT:    s_mov_b32 s8, s112932; GFX7-NEXT:    s_add_u32 s4, s4, s92933; GFX7-NEXT:    s_addc_u32 s8, s5, s82934; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr52935; GFX7-NEXT:    s_mov_b32 s5, s82936; GFX7-NEXT:    v_mov_b32_e32 v2, s72937; GFX7-NEXT:    v_mov_b32_e32 v0, s62938; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec2939; GFX7-NEXT:    v_mov_b32_e32 v3, v02940; GFX7-NEXT:    v_mov_b32_e32 v0, s42941; GFX7-NEXT:    v_mov_b32_e32 v1, s52942; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]2943; GFX7-NEXT:    s_endpgm2944;2945; GFX10-WGP-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:2946; GFX10-WGP:       ; %bb.0: ; %entry2947; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 02948; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02949; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x82950; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc2951; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)2952; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s72953; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s62954; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec2955; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v32956; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:162957; GFX10-WGP-NEXT:    s_endpgm2958;2959; GFX10-CU-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:2960; GFX10-CU:       ; %bb.0: ; %entry2961; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 02962; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02963; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x82964; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc2965; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)2966; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s72967; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s62968; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec2969; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v32970; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:162971; GFX10-CU-NEXT:    s_endpgm2972;2973; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:2974; SKIP-CACHE-INV:       ; %bb.0: ; %entry2975; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]2976; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x02977; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x22978; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x32979; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)2980; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s12981; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr12982; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0002983; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -12984; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr32985; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s82986; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s72987; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s62988; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s52989; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s42990; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec2991; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v22992; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:162993; SKIP-CACHE-INV-NEXT:    s_endpgm2994;2995; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:2996; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry2997; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 02998; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x02999; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83000; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3001; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3002; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s73003; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s63004; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3005; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13006; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163007; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm3008;3009; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3010; GFX90A-TGSPLIT:       ; %bb.0: ; %entry3011; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03012; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03013; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83014; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3015; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3016; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s73017; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s63018; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3019; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13020; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163021; GFX90A-TGSPLIT-NEXT:    s_endpgm3022;3023; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3024; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry3025; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03026; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03027; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83028; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3029; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3030; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s33031; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s23032; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3033; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13034; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163035; GFX942-NOTTGSPLIT-NEXT:    s_endpgm3036;3037; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3038; GFX942-TGSPLIT:       ; %bb.0: ; %entry3039; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03040; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03041; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83042; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3043; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3044; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s33045; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s23046; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3047; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13048; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163049; GFX942-TGSPLIT-NEXT:    s_endpgm3050;3051; GFX11-WGP-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3052; GFX11-WGP:       ; %bb.0: ; %entry3053; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 03054; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03055; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83056; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3057; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)3058; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s33059; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s23060; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3061; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v33062; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163063; GFX11-WGP-NEXT:    s_endpgm3064;3065; GFX11-CU-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3066; GFX11-CU:       ; %bb.0: ; %entry3067; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 03068; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03069; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83070; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3071; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)3072; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s33073; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s23074; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3075; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v33076; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163077; GFX11-CU-NEXT:    s_endpgm3078;3079; GFX12-WGP-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3080; GFX12-WGP:       ; %bb.0: ; %entry3081; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 03082; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03083; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83084; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3085; GFX12-WGP-NEXT:    s_wait_kmcnt 0x03086; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s33087; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s23088; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3089; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v33090; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163091; GFX12-WGP-NEXT:    s_endpgm3092;3093; GFX12-CU-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3094; GFX12-CU:       ; %bb.0: ; %entry3095; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 03096; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03097; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83098; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3099; GFX12-CU-NEXT:    s_wait_kmcnt 0x03100; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s33101; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s23102; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3103; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v33104; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163105; GFX12-CU-NEXT:    s_endpgm3106;3107; GFX1250-LABEL: global_singlethread_monotonic_monotonic_cmpxchg:3108; GFX1250:       ; %bb.0: ; %entry3109; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13110; GFX1250-NEXT:    v_mov_b32_e32 v0, 03111; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03112; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x83113; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc3114; GFX1250-NEXT:    s_wait_kmcnt 0x03115; GFX1250-NEXT:    v_mov_b32_e32 v2, s33116; GFX1250-NEXT:    v_mov_b32_e32 v1, s23117; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3118; GFX1250-NEXT:    v_mov_b32_e32 v3, v13119; GFX1250-NEXT:    s_wait_xcnt 0x03120; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:163121; GFX1250-NEXT:    s_endpgm3122    ptr addrspace(1) %out, i32 %in, i32 %old) {3123entry:3124  %gep = getelementptr i32, ptr addrspace(1) %out, i32 43125  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") monotonic monotonic3126  ret void3127}3128 3129define amdgpu_kernel void @global_singlethread_acquire_monotonic_cmpxchg(3130; GFX6-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3131; GFX6:       ; %bb.0: ; %entry3132; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]3133; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x03134; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x23135; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x33136; GFX6-NEXT:    s_waitcnt lgkmcnt(0)3137; GFX6-NEXT:    s_mov_b32 s12, s53138; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr53139; GFX6-NEXT:    s_mov_b32 s10, 0x100f0003140; GFX6-NEXT:    s_mov_b32 s11, -13141; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr73142; GFX6-NEXT:    s_mov_b32 s5, s123143; GFX6-NEXT:    s_mov_b32 s6, s113144; GFX6-NEXT:    s_mov_b32 s7, s103145; GFX6-NEXT:    v_mov_b32_e32 v0, s93146; GFX6-NEXT:    v_mov_b32_e32 v2, s83147; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3148; GFX6-NEXT:    v_mov_b32_e32 v1, v23149; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:163150; GFX6-NEXT:    s_endpgm3151;3152; GFX7-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3153; GFX7:       ; %bb.0: ; %entry3154; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s133155; GFX7-NEXT:    s_add_i32 s12, s12, s173156; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83157; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]3158; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x03159; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x23160; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x33161; GFX7-NEXT:    s_mov_b64 s[10:11], 163162; GFX7-NEXT:    s_waitcnt lgkmcnt(0)3163; GFX7-NEXT:    s_mov_b32 s4, s83164; GFX7-NEXT:    s_mov_b32 s5, s93165; GFX7-NEXT:    s_mov_b32 s9, s103166; GFX7-NEXT:    s_mov_b32 s8, s113167; GFX7-NEXT:    s_add_u32 s4, s4, s93168; GFX7-NEXT:    s_addc_u32 s8, s5, s83169; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr53170; GFX7-NEXT:    s_mov_b32 s5, s83171; GFX7-NEXT:    v_mov_b32_e32 v2, s73172; GFX7-NEXT:    v_mov_b32_e32 v0, s63173; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3174; GFX7-NEXT:    v_mov_b32_e32 v3, v03175; GFX7-NEXT:    v_mov_b32_e32 v0, s43176; GFX7-NEXT:    v_mov_b32_e32 v1, s53177; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]3178; GFX7-NEXT:    s_endpgm3179;3180; GFX10-WGP-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3181; GFX10-WGP:       ; %bb.0: ; %entry3182; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 03183; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03184; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x83185; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc3186; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)3187; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s73188; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s63189; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3190; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v33191; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163192; GFX10-WGP-NEXT:    s_endpgm3193;3194; GFX10-CU-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3195; GFX10-CU:       ; %bb.0: ; %entry3196; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 03197; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03198; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x83199; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc3200; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)3201; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s73202; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s63203; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3204; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v33205; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163206; GFX10-CU-NEXT:    s_endpgm3207;3208; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3209; SKIP-CACHE-INV:       ; %bb.0: ; %entry3210; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]3211; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x03212; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x23213; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x33214; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)3215; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s13216; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr13217; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0003218; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -13219; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr33220; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s83221; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s73222; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s63223; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s53224; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s43225; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3226; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v23227; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:163228; SKIP-CACHE-INV-NEXT:    s_endpgm3229;3230; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3231; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry3232; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03233; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03234; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83235; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3236; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3237; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s73238; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s63239; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3240; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13241; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163242; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm3243;3244; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3245; GFX90A-TGSPLIT:       ; %bb.0: ; %entry3246; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03247; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03248; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83249; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3250; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3251; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s73252; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s63253; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3254; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13255; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163256; GFX90A-TGSPLIT-NEXT:    s_endpgm3257;3258; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3259; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry3260; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03261; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03262; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83263; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3264; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3265; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s33266; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s23267; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3268; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13269; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163270; GFX942-NOTTGSPLIT-NEXT:    s_endpgm3271;3272; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3273; GFX942-TGSPLIT:       ; %bb.0: ; %entry3274; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03275; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03276; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83277; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3278; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3279; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s33280; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s23281; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3282; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13283; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163284; GFX942-TGSPLIT-NEXT:    s_endpgm3285;3286; GFX11-WGP-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3287; GFX11-WGP:       ; %bb.0: ; %entry3288; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 03289; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03290; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83291; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3292; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)3293; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s33294; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s23295; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3296; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v33297; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163298; GFX11-WGP-NEXT:    s_endpgm3299;3300; GFX11-CU-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3301; GFX11-CU:       ; %bb.0: ; %entry3302; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 03303; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03304; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83305; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3306; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)3307; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s33308; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s23309; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3310; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v33311; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163312; GFX11-CU-NEXT:    s_endpgm3313;3314; GFX12-WGP-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3315; GFX12-WGP:       ; %bb.0: ; %entry3316; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 03317; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03318; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83319; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3320; GFX12-WGP-NEXT:    s_wait_kmcnt 0x03321; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s33322; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s23323; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3324; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v33325; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163326; GFX12-WGP-NEXT:    s_endpgm3327;3328; GFX12-CU-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3329; GFX12-CU:       ; %bb.0: ; %entry3330; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 03331; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03332; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83333; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3334; GFX12-CU-NEXT:    s_wait_kmcnt 0x03335; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s33336; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s23337; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3338; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v33339; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163340; GFX12-CU-NEXT:    s_endpgm3341;3342; GFX1250-LABEL: global_singlethread_acquire_monotonic_cmpxchg:3343; GFX1250:       ; %bb.0: ; %entry3344; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13345; GFX1250-NEXT:    v_mov_b32_e32 v0, 03346; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03347; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x83348; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc3349; GFX1250-NEXT:    s_wait_kmcnt 0x03350; GFX1250-NEXT:    v_mov_b32_e32 v2, s33351; GFX1250-NEXT:    v_mov_b32_e32 v1, s23352; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3353; GFX1250-NEXT:    v_mov_b32_e32 v3, v13354; GFX1250-NEXT:    s_wait_xcnt 0x03355; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:163356; GFX1250-NEXT:    s_endpgm3357    ptr addrspace(1) %out, i32 %in, i32 %old) {3358entry:3359  %gep = getelementptr i32, ptr addrspace(1) %out, i32 43360  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acquire monotonic3361  ret void3362}3363 3364define amdgpu_kernel void @global_singlethread_release_monotonic_cmpxchg(3365; GFX6-LABEL: global_singlethread_release_monotonic_cmpxchg:3366; GFX6:       ; %bb.0: ; %entry3367; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]3368; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x03369; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x23370; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x33371; GFX6-NEXT:    s_waitcnt lgkmcnt(0)3372; GFX6-NEXT:    s_mov_b32 s12, s53373; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr53374; GFX6-NEXT:    s_mov_b32 s10, 0x100f0003375; GFX6-NEXT:    s_mov_b32 s11, -13376; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr73377; GFX6-NEXT:    s_mov_b32 s5, s123378; GFX6-NEXT:    s_mov_b32 s6, s113379; GFX6-NEXT:    s_mov_b32 s7, s103380; GFX6-NEXT:    v_mov_b32_e32 v0, s93381; GFX6-NEXT:    v_mov_b32_e32 v2, s83382; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3383; GFX6-NEXT:    v_mov_b32_e32 v1, v23384; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:163385; GFX6-NEXT:    s_endpgm3386;3387; GFX7-LABEL: global_singlethread_release_monotonic_cmpxchg:3388; GFX7:       ; %bb.0: ; %entry3389; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s133390; GFX7-NEXT:    s_add_i32 s12, s12, s173391; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83392; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]3393; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x03394; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x23395; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x33396; GFX7-NEXT:    s_mov_b64 s[10:11], 163397; GFX7-NEXT:    s_waitcnt lgkmcnt(0)3398; GFX7-NEXT:    s_mov_b32 s4, s83399; GFX7-NEXT:    s_mov_b32 s5, s93400; GFX7-NEXT:    s_mov_b32 s9, s103401; GFX7-NEXT:    s_mov_b32 s8, s113402; GFX7-NEXT:    s_add_u32 s4, s4, s93403; GFX7-NEXT:    s_addc_u32 s8, s5, s83404; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr53405; GFX7-NEXT:    s_mov_b32 s5, s83406; GFX7-NEXT:    v_mov_b32_e32 v2, s73407; GFX7-NEXT:    v_mov_b32_e32 v0, s63408; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3409; GFX7-NEXT:    v_mov_b32_e32 v3, v03410; GFX7-NEXT:    v_mov_b32_e32 v0, s43411; GFX7-NEXT:    v_mov_b32_e32 v1, s53412; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]3413; GFX7-NEXT:    s_endpgm3414;3415; GFX10-WGP-LABEL: global_singlethread_release_monotonic_cmpxchg:3416; GFX10-WGP:       ; %bb.0: ; %entry3417; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 03418; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03419; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x83420; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc3421; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)3422; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s73423; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s63424; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3425; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v33426; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163427; GFX10-WGP-NEXT:    s_endpgm3428;3429; GFX10-CU-LABEL: global_singlethread_release_monotonic_cmpxchg:3430; GFX10-CU:       ; %bb.0: ; %entry3431; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 03432; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03433; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x83434; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc3435; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)3436; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s73437; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s63438; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3439; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v33440; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163441; GFX10-CU-NEXT:    s_endpgm3442;3443; SKIP-CACHE-INV-LABEL: global_singlethread_release_monotonic_cmpxchg:3444; SKIP-CACHE-INV:       ; %bb.0: ; %entry3445; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]3446; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x03447; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x23448; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x33449; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)3450; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s13451; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr13452; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0003453; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -13454; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr33455; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s83456; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s73457; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s63458; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s53459; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s43460; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3461; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v23462; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:163463; SKIP-CACHE-INV-NEXT:    s_endpgm3464;3465; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_monotonic_cmpxchg:3466; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry3467; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03468; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03469; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83470; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3471; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3472; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s73473; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s63474; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3475; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13476; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163477; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm3478;3479; GFX90A-TGSPLIT-LABEL: global_singlethread_release_monotonic_cmpxchg:3480; GFX90A-TGSPLIT:       ; %bb.0: ; %entry3481; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03482; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03483; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83484; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3485; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3486; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s73487; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s63488; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3489; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13490; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163491; GFX90A-TGSPLIT-NEXT:    s_endpgm3492;3493; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_monotonic_cmpxchg:3494; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry3495; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03496; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03497; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83498; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3499; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3500; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s33501; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s23502; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3503; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13504; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163505; GFX942-NOTTGSPLIT-NEXT:    s_endpgm3506;3507; GFX942-TGSPLIT-LABEL: global_singlethread_release_monotonic_cmpxchg:3508; GFX942-TGSPLIT:       ; %bb.0: ; %entry3509; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03510; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03511; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83512; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3513; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3514; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s33515; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s23516; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3517; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13518; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163519; GFX942-TGSPLIT-NEXT:    s_endpgm3520;3521; GFX11-WGP-LABEL: global_singlethread_release_monotonic_cmpxchg:3522; GFX11-WGP:       ; %bb.0: ; %entry3523; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 03524; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03525; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83526; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3527; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)3528; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s33529; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s23530; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3531; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v33532; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163533; GFX11-WGP-NEXT:    s_endpgm3534;3535; GFX11-CU-LABEL: global_singlethread_release_monotonic_cmpxchg:3536; GFX11-CU:       ; %bb.0: ; %entry3537; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 03538; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03539; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83540; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3541; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)3542; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s33543; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s23544; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3545; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v33546; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163547; GFX11-CU-NEXT:    s_endpgm3548;3549; GFX12-WGP-LABEL: global_singlethread_release_monotonic_cmpxchg:3550; GFX12-WGP:       ; %bb.0: ; %entry3551; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 03552; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03553; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83554; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3555; GFX12-WGP-NEXT:    s_wait_kmcnt 0x03556; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s33557; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s23558; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3559; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v33560; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163561; GFX12-WGP-NEXT:    s_endpgm3562;3563; GFX12-CU-LABEL: global_singlethread_release_monotonic_cmpxchg:3564; GFX12-CU:       ; %bb.0: ; %entry3565; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 03566; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03567; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83568; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3569; GFX12-CU-NEXT:    s_wait_kmcnt 0x03570; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s33571; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s23572; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3573; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v33574; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163575; GFX12-CU-NEXT:    s_endpgm3576;3577; GFX1250-LABEL: global_singlethread_release_monotonic_cmpxchg:3578; GFX1250:       ; %bb.0: ; %entry3579; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13580; GFX1250-NEXT:    v_mov_b32_e32 v0, 03581; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03582; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x83583; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc3584; GFX1250-NEXT:    s_wait_kmcnt 0x03585; GFX1250-NEXT:    v_mov_b32_e32 v2, s33586; GFX1250-NEXT:    v_mov_b32_e32 v1, s23587; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3588; GFX1250-NEXT:    v_mov_b32_e32 v3, v13589; GFX1250-NEXT:    s_wait_xcnt 0x03590; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:163591; GFX1250-NEXT:    s_endpgm3592    ptr addrspace(1) %out, i32 %in, i32 %old) {3593entry:3594  %gep = getelementptr i32, ptr addrspace(1) %out, i32 43595  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") release monotonic3596  ret void3597}3598 3599define amdgpu_kernel void @global_singlethread_acq_rel_monotonic_cmpxchg(3600; GFX6-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3601; GFX6:       ; %bb.0: ; %entry3602; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]3603; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x03604; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x23605; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x33606; GFX6-NEXT:    s_waitcnt lgkmcnt(0)3607; GFX6-NEXT:    s_mov_b32 s12, s53608; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr53609; GFX6-NEXT:    s_mov_b32 s10, 0x100f0003610; GFX6-NEXT:    s_mov_b32 s11, -13611; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr73612; GFX6-NEXT:    s_mov_b32 s5, s123613; GFX6-NEXT:    s_mov_b32 s6, s113614; GFX6-NEXT:    s_mov_b32 s7, s103615; GFX6-NEXT:    v_mov_b32_e32 v0, s93616; GFX6-NEXT:    v_mov_b32_e32 v2, s83617; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3618; GFX6-NEXT:    v_mov_b32_e32 v1, v23619; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:163620; GFX6-NEXT:    s_endpgm3621;3622; GFX7-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3623; GFX7:       ; %bb.0: ; %entry3624; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s133625; GFX7-NEXT:    s_add_i32 s12, s12, s173626; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83627; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]3628; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x03629; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x23630; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x33631; GFX7-NEXT:    s_mov_b64 s[10:11], 163632; GFX7-NEXT:    s_waitcnt lgkmcnt(0)3633; GFX7-NEXT:    s_mov_b32 s4, s83634; GFX7-NEXT:    s_mov_b32 s5, s93635; GFX7-NEXT:    s_mov_b32 s9, s103636; GFX7-NEXT:    s_mov_b32 s8, s113637; GFX7-NEXT:    s_add_u32 s4, s4, s93638; GFX7-NEXT:    s_addc_u32 s8, s5, s83639; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr53640; GFX7-NEXT:    s_mov_b32 s5, s83641; GFX7-NEXT:    v_mov_b32_e32 v2, s73642; GFX7-NEXT:    v_mov_b32_e32 v0, s63643; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3644; GFX7-NEXT:    v_mov_b32_e32 v3, v03645; GFX7-NEXT:    v_mov_b32_e32 v0, s43646; GFX7-NEXT:    v_mov_b32_e32 v1, s53647; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]3648; GFX7-NEXT:    s_endpgm3649;3650; GFX10-WGP-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3651; GFX10-WGP:       ; %bb.0: ; %entry3652; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 03653; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03654; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x83655; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc3656; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)3657; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s73658; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s63659; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3660; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v33661; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163662; GFX10-WGP-NEXT:    s_endpgm3663;3664; GFX10-CU-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3665; GFX10-CU:       ; %bb.0: ; %entry3666; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 03667; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03668; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x83669; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc3670; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)3671; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s73672; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s63673; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3674; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v33675; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163676; GFX10-CU-NEXT:    s_endpgm3677;3678; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3679; SKIP-CACHE-INV:       ; %bb.0: ; %entry3680; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]3681; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x03682; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x23683; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x33684; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)3685; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s13686; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr13687; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0003688; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -13689; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr33690; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s83691; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s73692; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s63693; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s53694; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s43695; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3696; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v23697; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:163698; SKIP-CACHE-INV-NEXT:    s_endpgm3699;3700; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3701; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry3702; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03703; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03704; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83705; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3706; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3707; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s73708; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s63709; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3710; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13711; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163712; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm3713;3714; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3715; GFX90A-TGSPLIT:       ; %bb.0: ; %entry3716; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03717; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03718; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83719; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3720; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3721; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s73722; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s63723; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3724; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13725; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163726; GFX90A-TGSPLIT-NEXT:    s_endpgm3727;3728; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3729; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry3730; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03731; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03732; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83733; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3734; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3735; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s33736; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s23737; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3738; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13739; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163740; GFX942-NOTTGSPLIT-NEXT:    s_endpgm3741;3742; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3743; GFX942-TGSPLIT:       ; %bb.0: ; %entry3744; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03745; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03746; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83747; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3748; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3749; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s33750; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s23751; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3752; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13753; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163754; GFX942-TGSPLIT-NEXT:    s_endpgm3755;3756; GFX11-WGP-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3757; GFX11-WGP:       ; %bb.0: ; %entry3758; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 03759; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03760; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83761; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3762; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)3763; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s33764; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s23765; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3766; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v33767; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163768; GFX11-WGP-NEXT:    s_endpgm3769;3770; GFX11-CU-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3771; GFX11-CU:       ; %bb.0: ; %entry3772; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 03773; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03774; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83775; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3776; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)3777; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s33778; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s23779; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3780; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v33781; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163782; GFX11-CU-NEXT:    s_endpgm3783;3784; GFX12-WGP-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3785; GFX12-WGP:       ; %bb.0: ; %entry3786; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 03787; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03788; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83789; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3790; GFX12-WGP-NEXT:    s_wait_kmcnt 0x03791; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s33792; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s23793; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3794; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v33795; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163796; GFX12-WGP-NEXT:    s_endpgm3797;3798; GFX12-CU-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3799; GFX12-CU:       ; %bb.0: ; %entry3800; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 03801; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03802; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x83803; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc3804; GFX12-CU-NEXT:    s_wait_kmcnt 0x03805; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s33806; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s23807; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3808; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v33809; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:163810; GFX12-CU-NEXT:    s_endpgm3811;3812; GFX1250-LABEL: global_singlethread_acq_rel_monotonic_cmpxchg:3813; GFX1250:       ; %bb.0: ; %entry3814; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 13815; GFX1250-NEXT:    v_mov_b32_e32 v0, 03816; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03817; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x83818; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc3819; GFX1250-NEXT:    s_wait_kmcnt 0x03820; GFX1250-NEXT:    v_mov_b32_e32 v2, s33821; GFX1250-NEXT:    v_mov_b32_e32 v1, s23822; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3823; GFX1250-NEXT:    v_mov_b32_e32 v3, v13824; GFX1250-NEXT:    s_wait_xcnt 0x03825; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:163826; GFX1250-NEXT:    s_endpgm3827    ptr addrspace(1) %out, i32 %in, i32 %old) {3828entry:3829  %gep = getelementptr i32, ptr addrspace(1) %out, i32 43830  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acq_rel monotonic3831  ret void3832}3833 3834define amdgpu_kernel void @global_singlethread_seq_cst_monotonic_cmpxchg(3835; GFX6-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3836; GFX6:       ; %bb.0: ; %entry3837; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]3838; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x03839; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x23840; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x33841; GFX6-NEXT:    s_waitcnt lgkmcnt(0)3842; GFX6-NEXT:    s_mov_b32 s12, s53843; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr53844; GFX6-NEXT:    s_mov_b32 s10, 0x100f0003845; GFX6-NEXT:    s_mov_b32 s11, -13846; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr73847; GFX6-NEXT:    s_mov_b32 s5, s123848; GFX6-NEXT:    s_mov_b32 s6, s113849; GFX6-NEXT:    s_mov_b32 s7, s103850; GFX6-NEXT:    v_mov_b32_e32 v0, s93851; GFX6-NEXT:    v_mov_b32_e32 v2, s83852; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3853; GFX6-NEXT:    v_mov_b32_e32 v1, v23854; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:163855; GFX6-NEXT:    s_endpgm3856;3857; GFX7-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3858; GFX7:       ; %bb.0: ; %entry3859; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s133860; GFX7-NEXT:    s_add_i32 s12, s12, s173861; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 83862; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]3863; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x03864; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x23865; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x33866; GFX7-NEXT:    s_mov_b64 s[10:11], 163867; GFX7-NEXT:    s_waitcnt lgkmcnt(0)3868; GFX7-NEXT:    s_mov_b32 s4, s83869; GFX7-NEXT:    s_mov_b32 s5, s93870; GFX7-NEXT:    s_mov_b32 s9, s103871; GFX7-NEXT:    s_mov_b32 s8, s113872; GFX7-NEXT:    s_add_u32 s4, s4, s93873; GFX7-NEXT:    s_addc_u32 s8, s5, s83874; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr53875; GFX7-NEXT:    s_mov_b32 s5, s83876; GFX7-NEXT:    v_mov_b32_e32 v2, s73877; GFX7-NEXT:    v_mov_b32_e32 v0, s63878; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3879; GFX7-NEXT:    v_mov_b32_e32 v3, v03880; GFX7-NEXT:    v_mov_b32_e32 v0, s43881; GFX7-NEXT:    v_mov_b32_e32 v1, s53882; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]3883; GFX7-NEXT:    s_endpgm3884;3885; GFX10-WGP-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3886; GFX10-WGP:       ; %bb.0: ; %entry3887; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 03888; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03889; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x83890; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc3891; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)3892; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s73893; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s63894; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3895; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v33896; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163897; GFX10-WGP-NEXT:    s_endpgm3898;3899; GFX10-CU-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3900; GFX10-CU:       ; %bb.0: ; %entry3901; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 03902; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03903; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x83904; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc3905; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)3906; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s73907; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s63908; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec3909; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v33910; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:163911; GFX10-CU-NEXT:    s_endpgm3912;3913; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3914; SKIP-CACHE-INV:       ; %bb.0: ; %entry3915; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]3916; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x03917; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x23918; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x33919; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)3920; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s13921; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr13922; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0003923; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -13924; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr33925; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s83926; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s73927; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s63928; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s53929; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s43930; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec3931; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v23932; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:163933; SKIP-CACHE-INV-NEXT:    s_endpgm3934;3935; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3936; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry3937; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03938; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03939; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83940; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3941; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3942; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s73943; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s63944; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3945; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13946; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163947; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm3948;3949; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3950; GFX90A-TGSPLIT:       ; %bb.0: ; %entry3951; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03952; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x03953; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x83954; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc3955; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3956; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s73957; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s63958; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3959; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13960; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:163961; GFX90A-TGSPLIT-NEXT:    s_endpgm3962;3963; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3964; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry3965; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 03966; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03967; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83968; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3969; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3970; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s33971; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s23972; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3973; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v13974; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163975; GFX942-NOTTGSPLIT-NEXT:    s_endpgm3976;3977; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3978; GFX942-TGSPLIT:       ; %bb.0: ; %entry3979; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 03980; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x03981; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x83982; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc3983; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)3984; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s33985; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s23986; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec3987; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v13988; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:163989; GFX942-TGSPLIT-NEXT:    s_endpgm3990;3991; GFX11-WGP-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:3992; GFX11-WGP:       ; %bb.0: ; %entry3993; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 03994; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x03995; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x83996; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc3997; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)3998; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s33999; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s24000; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4001; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v34002; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164003; GFX11-WGP-NEXT:    s_endpgm4004;4005; GFX11-CU-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:4006; GFX11-CU:       ; %bb.0: ; %entry4007; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 04008; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04009; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84010; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4011; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)4012; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s34013; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s24014; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4015; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v34016; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164017; GFX11-CU-NEXT:    s_endpgm4018;4019; GFX12-WGP-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:4020; GFX12-WGP:       ; %bb.0: ; %entry4021; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 04022; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04023; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84024; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4025; GFX12-WGP-NEXT:    s_wait_kmcnt 0x04026; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s34027; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s24028; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4029; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v34030; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164031; GFX12-WGP-NEXT:    s_endpgm4032;4033; GFX12-CU-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:4034; GFX12-CU:       ; %bb.0: ; %entry4035; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 04036; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04037; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84038; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4039; GFX12-CU-NEXT:    s_wait_kmcnt 0x04040; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s34041; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s24042; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4043; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v34044; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164045; GFX12-CU-NEXT:    s_endpgm4046;4047; GFX1250-LABEL: global_singlethread_seq_cst_monotonic_cmpxchg:4048; GFX1250:       ; %bb.0: ; %entry4049; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14050; GFX1250-NEXT:    v_mov_b32_e32 v0, 04051; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04052; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x84053; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc4054; GFX1250-NEXT:    s_wait_kmcnt 0x04055; GFX1250-NEXT:    v_mov_b32_e32 v2, s34056; GFX1250-NEXT:    v_mov_b32_e32 v1, s24057; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4058; GFX1250-NEXT:    v_mov_b32_e32 v3, v14059; GFX1250-NEXT:    s_wait_xcnt 0x04060; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:164061; GFX1250-NEXT:    s_endpgm4062    ptr addrspace(1) %out, i32 %in, i32 %old) {4063entry:4064  %gep = getelementptr i32, ptr addrspace(1) %out, i32 44065  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") seq_cst monotonic4066  ret void4067}4068 4069define amdgpu_kernel void @global_singlethread_monotonic_acquire_cmpxchg(4070; GFX6-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4071; GFX6:       ; %bb.0: ; %entry4072; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]4073; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x04074; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x24075; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x34076; GFX6-NEXT:    s_waitcnt lgkmcnt(0)4077; GFX6-NEXT:    s_mov_b32 s12, s54078; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr54079; GFX6-NEXT:    s_mov_b32 s10, 0x100f0004080; GFX6-NEXT:    s_mov_b32 s11, -14081; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr74082; GFX6-NEXT:    s_mov_b32 s5, s124083; GFX6-NEXT:    s_mov_b32 s6, s114084; GFX6-NEXT:    s_mov_b32 s7, s104085; GFX6-NEXT:    v_mov_b32_e32 v0, s94086; GFX6-NEXT:    v_mov_b32_e32 v2, s84087; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4088; GFX6-NEXT:    v_mov_b32_e32 v1, v24089; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:164090; GFX6-NEXT:    s_endpgm4091;4092; GFX7-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4093; GFX7:       ; %bb.0: ; %entry4094; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s134095; GFX7-NEXT:    s_add_i32 s12, s12, s174096; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 84097; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]4098; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x04099; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x24100; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x34101; GFX7-NEXT:    s_mov_b64 s[10:11], 164102; GFX7-NEXT:    s_waitcnt lgkmcnt(0)4103; GFX7-NEXT:    s_mov_b32 s4, s84104; GFX7-NEXT:    s_mov_b32 s5, s94105; GFX7-NEXT:    s_mov_b32 s9, s104106; GFX7-NEXT:    s_mov_b32 s8, s114107; GFX7-NEXT:    s_add_u32 s4, s4, s94108; GFX7-NEXT:    s_addc_u32 s8, s5, s84109; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr54110; GFX7-NEXT:    s_mov_b32 s5, s84111; GFX7-NEXT:    v_mov_b32_e32 v2, s74112; GFX7-NEXT:    v_mov_b32_e32 v0, s64113; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4114; GFX7-NEXT:    v_mov_b32_e32 v3, v04115; GFX7-NEXT:    v_mov_b32_e32 v0, s44116; GFX7-NEXT:    v_mov_b32_e32 v1, s54117; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]4118; GFX7-NEXT:    s_endpgm4119;4120; GFX10-WGP-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4121; GFX10-WGP:       ; %bb.0: ; %entry4122; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 04123; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04124; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x84125; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc4126; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)4127; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s74128; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s64129; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4130; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v34131; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164132; GFX10-WGP-NEXT:    s_endpgm4133;4134; GFX10-CU-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4135; GFX10-CU:       ; %bb.0: ; %entry4136; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 04137; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04138; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x84139; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc4140; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)4141; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s74142; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s64143; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4144; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v34145; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164146; GFX10-CU-NEXT:    s_endpgm4147;4148; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4149; SKIP-CACHE-INV:       ; %bb.0: ; %entry4150; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]4151; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x04152; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x24153; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x34154; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)4155; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s14156; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr14157; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0004158; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -14159; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr34160; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s84161; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s74162; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s64163; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s54164; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s44165; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4166; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v24167; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:164168; SKIP-CACHE-INV-NEXT:    s_endpgm4169;4170; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4171; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry4172; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04173; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04174; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84175; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4176; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4177; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s74178; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s64179; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4180; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14181; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164182; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm4183;4184; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4185; GFX90A-TGSPLIT:       ; %bb.0: ; %entry4186; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04187; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04188; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84189; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4190; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4191; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s74192; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s64193; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4194; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14195; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164196; GFX90A-TGSPLIT-NEXT:    s_endpgm4197;4198; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4199; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry4200; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04201; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04202; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84203; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4204; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4205; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s34206; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s24207; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4208; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14209; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164210; GFX942-NOTTGSPLIT-NEXT:    s_endpgm4211;4212; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4213; GFX942-TGSPLIT:       ; %bb.0: ; %entry4214; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04215; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04216; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84217; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4218; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4219; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s34220; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s24221; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4222; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14223; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164224; GFX942-TGSPLIT-NEXT:    s_endpgm4225;4226; GFX11-WGP-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4227; GFX11-WGP:       ; %bb.0: ; %entry4228; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 04229; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04230; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84231; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4232; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)4233; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s34234; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s24235; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4236; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v34237; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164238; GFX11-WGP-NEXT:    s_endpgm4239;4240; GFX11-CU-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4241; GFX11-CU:       ; %bb.0: ; %entry4242; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 04243; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04244; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84245; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4246; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)4247; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s34248; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s24249; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4250; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v34251; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164252; GFX11-CU-NEXT:    s_endpgm4253;4254; GFX12-WGP-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4255; GFX12-WGP:       ; %bb.0: ; %entry4256; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 04257; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04258; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84259; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4260; GFX12-WGP-NEXT:    s_wait_kmcnt 0x04261; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s34262; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s24263; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4264; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v34265; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164266; GFX12-WGP-NEXT:    s_endpgm4267;4268; GFX12-CU-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4269; GFX12-CU:       ; %bb.0: ; %entry4270; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 04271; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04272; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84273; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4274; GFX12-CU-NEXT:    s_wait_kmcnt 0x04275; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s34276; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s24277; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4278; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v34279; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164280; GFX12-CU-NEXT:    s_endpgm4281;4282; GFX1250-LABEL: global_singlethread_monotonic_acquire_cmpxchg:4283; GFX1250:       ; %bb.0: ; %entry4284; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14285; GFX1250-NEXT:    v_mov_b32_e32 v0, 04286; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04287; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x84288; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc4289; GFX1250-NEXT:    s_wait_kmcnt 0x04290; GFX1250-NEXT:    v_mov_b32_e32 v2, s34291; GFX1250-NEXT:    v_mov_b32_e32 v1, s24292; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4293; GFX1250-NEXT:    v_mov_b32_e32 v3, v14294; GFX1250-NEXT:    s_wait_xcnt 0x04295; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:164296; GFX1250-NEXT:    s_endpgm4297    ptr addrspace(1) %out, i32 %in, i32 %old) {4298entry:4299  %gep = getelementptr i32, ptr addrspace(1) %out, i32 44300  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") monotonic acquire4301  ret void4302}4303 4304define amdgpu_kernel void @global_singlethread_acquire_acquire_cmpxchg(4305; GFX6-LABEL: global_singlethread_acquire_acquire_cmpxchg:4306; GFX6:       ; %bb.0: ; %entry4307; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]4308; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x04309; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x24310; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x34311; GFX6-NEXT:    s_waitcnt lgkmcnt(0)4312; GFX6-NEXT:    s_mov_b32 s12, s54313; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr54314; GFX6-NEXT:    s_mov_b32 s10, 0x100f0004315; GFX6-NEXT:    s_mov_b32 s11, -14316; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr74317; GFX6-NEXT:    s_mov_b32 s5, s124318; GFX6-NEXT:    s_mov_b32 s6, s114319; GFX6-NEXT:    s_mov_b32 s7, s104320; GFX6-NEXT:    v_mov_b32_e32 v0, s94321; GFX6-NEXT:    v_mov_b32_e32 v2, s84322; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4323; GFX6-NEXT:    v_mov_b32_e32 v1, v24324; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:164325; GFX6-NEXT:    s_endpgm4326;4327; GFX7-LABEL: global_singlethread_acquire_acquire_cmpxchg:4328; GFX7:       ; %bb.0: ; %entry4329; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s134330; GFX7-NEXT:    s_add_i32 s12, s12, s174331; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 84332; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]4333; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x04334; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x24335; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x34336; GFX7-NEXT:    s_mov_b64 s[10:11], 164337; GFX7-NEXT:    s_waitcnt lgkmcnt(0)4338; GFX7-NEXT:    s_mov_b32 s4, s84339; GFX7-NEXT:    s_mov_b32 s5, s94340; GFX7-NEXT:    s_mov_b32 s9, s104341; GFX7-NEXT:    s_mov_b32 s8, s114342; GFX7-NEXT:    s_add_u32 s4, s4, s94343; GFX7-NEXT:    s_addc_u32 s8, s5, s84344; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr54345; GFX7-NEXT:    s_mov_b32 s5, s84346; GFX7-NEXT:    v_mov_b32_e32 v2, s74347; GFX7-NEXT:    v_mov_b32_e32 v0, s64348; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4349; GFX7-NEXT:    v_mov_b32_e32 v3, v04350; GFX7-NEXT:    v_mov_b32_e32 v0, s44351; GFX7-NEXT:    v_mov_b32_e32 v1, s54352; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]4353; GFX7-NEXT:    s_endpgm4354;4355; GFX10-WGP-LABEL: global_singlethread_acquire_acquire_cmpxchg:4356; GFX10-WGP:       ; %bb.0: ; %entry4357; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 04358; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04359; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x84360; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc4361; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)4362; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s74363; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s64364; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4365; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v34366; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164367; GFX10-WGP-NEXT:    s_endpgm4368;4369; GFX10-CU-LABEL: global_singlethread_acquire_acquire_cmpxchg:4370; GFX10-CU:       ; %bb.0: ; %entry4371; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 04372; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04373; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x84374; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc4375; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)4376; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s74377; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s64378; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4379; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v34380; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164381; GFX10-CU-NEXT:    s_endpgm4382;4383; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_acquire_cmpxchg:4384; SKIP-CACHE-INV:       ; %bb.0: ; %entry4385; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]4386; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x04387; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x24388; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x34389; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)4390; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s14391; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr14392; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0004393; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -14394; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr34395; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s84396; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s74397; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s64398; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s54399; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s44400; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4401; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v24402; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:164403; SKIP-CACHE-INV-NEXT:    s_endpgm4404;4405; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_acquire_cmpxchg:4406; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry4407; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04408; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04409; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84410; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4411; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4412; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s74413; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s64414; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4415; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14416; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164417; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm4418;4419; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_acquire_cmpxchg:4420; GFX90A-TGSPLIT:       ; %bb.0: ; %entry4421; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04422; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04423; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84424; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4425; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4426; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s74427; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s64428; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4429; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14430; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164431; GFX90A-TGSPLIT-NEXT:    s_endpgm4432;4433; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_acquire_cmpxchg:4434; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry4435; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04436; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04437; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84438; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4439; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4440; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s34441; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s24442; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4443; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14444; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164445; GFX942-NOTTGSPLIT-NEXT:    s_endpgm4446;4447; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_acquire_cmpxchg:4448; GFX942-TGSPLIT:       ; %bb.0: ; %entry4449; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04450; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04451; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84452; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4453; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4454; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s34455; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s24456; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4457; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14458; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164459; GFX942-TGSPLIT-NEXT:    s_endpgm4460;4461; GFX11-WGP-LABEL: global_singlethread_acquire_acquire_cmpxchg:4462; GFX11-WGP:       ; %bb.0: ; %entry4463; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 04464; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04465; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84466; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4467; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)4468; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s34469; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s24470; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4471; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v34472; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164473; GFX11-WGP-NEXT:    s_endpgm4474;4475; GFX11-CU-LABEL: global_singlethread_acquire_acquire_cmpxchg:4476; GFX11-CU:       ; %bb.0: ; %entry4477; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 04478; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04479; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84480; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4481; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)4482; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s34483; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s24484; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4485; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v34486; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164487; GFX11-CU-NEXT:    s_endpgm4488;4489; GFX12-WGP-LABEL: global_singlethread_acquire_acquire_cmpxchg:4490; GFX12-WGP:       ; %bb.0: ; %entry4491; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 04492; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04493; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84494; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4495; GFX12-WGP-NEXT:    s_wait_kmcnt 0x04496; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s34497; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s24498; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4499; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v34500; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164501; GFX12-WGP-NEXT:    s_endpgm4502;4503; GFX12-CU-LABEL: global_singlethread_acquire_acquire_cmpxchg:4504; GFX12-CU:       ; %bb.0: ; %entry4505; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 04506; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04507; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84508; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4509; GFX12-CU-NEXT:    s_wait_kmcnt 0x04510; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s34511; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s24512; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4513; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v34514; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164515; GFX12-CU-NEXT:    s_endpgm4516;4517; GFX1250-LABEL: global_singlethread_acquire_acquire_cmpxchg:4518; GFX1250:       ; %bb.0: ; %entry4519; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14520; GFX1250-NEXT:    v_mov_b32_e32 v0, 04521; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04522; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x84523; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc4524; GFX1250-NEXT:    s_wait_kmcnt 0x04525; GFX1250-NEXT:    v_mov_b32_e32 v2, s34526; GFX1250-NEXT:    v_mov_b32_e32 v1, s24527; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4528; GFX1250-NEXT:    v_mov_b32_e32 v3, v14529; GFX1250-NEXT:    s_wait_xcnt 0x04530; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:164531; GFX1250-NEXT:    s_endpgm4532    ptr addrspace(1) %out, i32 %in, i32 %old) {4533entry:4534  %gep = getelementptr i32, ptr addrspace(1) %out, i32 44535  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acquire acquire4536  ret void4537}4538 4539define amdgpu_kernel void @global_singlethread_release_acquire_cmpxchg(4540; GFX6-LABEL: global_singlethread_release_acquire_cmpxchg:4541; GFX6:       ; %bb.0: ; %entry4542; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]4543; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x04544; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x24545; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x34546; GFX6-NEXT:    s_waitcnt lgkmcnt(0)4547; GFX6-NEXT:    s_mov_b32 s12, s54548; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr54549; GFX6-NEXT:    s_mov_b32 s10, 0x100f0004550; GFX6-NEXT:    s_mov_b32 s11, -14551; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr74552; GFX6-NEXT:    s_mov_b32 s5, s124553; GFX6-NEXT:    s_mov_b32 s6, s114554; GFX6-NEXT:    s_mov_b32 s7, s104555; GFX6-NEXT:    v_mov_b32_e32 v0, s94556; GFX6-NEXT:    v_mov_b32_e32 v2, s84557; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4558; GFX6-NEXT:    v_mov_b32_e32 v1, v24559; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:164560; GFX6-NEXT:    s_endpgm4561;4562; GFX7-LABEL: global_singlethread_release_acquire_cmpxchg:4563; GFX7:       ; %bb.0: ; %entry4564; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s134565; GFX7-NEXT:    s_add_i32 s12, s12, s174566; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 84567; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]4568; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x04569; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x24570; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x34571; GFX7-NEXT:    s_mov_b64 s[10:11], 164572; GFX7-NEXT:    s_waitcnt lgkmcnt(0)4573; GFX7-NEXT:    s_mov_b32 s4, s84574; GFX7-NEXT:    s_mov_b32 s5, s94575; GFX7-NEXT:    s_mov_b32 s9, s104576; GFX7-NEXT:    s_mov_b32 s8, s114577; GFX7-NEXT:    s_add_u32 s4, s4, s94578; GFX7-NEXT:    s_addc_u32 s8, s5, s84579; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr54580; GFX7-NEXT:    s_mov_b32 s5, s84581; GFX7-NEXT:    v_mov_b32_e32 v2, s74582; GFX7-NEXT:    v_mov_b32_e32 v0, s64583; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4584; GFX7-NEXT:    v_mov_b32_e32 v3, v04585; GFX7-NEXT:    v_mov_b32_e32 v0, s44586; GFX7-NEXT:    v_mov_b32_e32 v1, s54587; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]4588; GFX7-NEXT:    s_endpgm4589;4590; GFX10-WGP-LABEL: global_singlethread_release_acquire_cmpxchg:4591; GFX10-WGP:       ; %bb.0: ; %entry4592; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 04593; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04594; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x84595; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc4596; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)4597; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s74598; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s64599; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4600; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v34601; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164602; GFX10-WGP-NEXT:    s_endpgm4603;4604; GFX10-CU-LABEL: global_singlethread_release_acquire_cmpxchg:4605; GFX10-CU:       ; %bb.0: ; %entry4606; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 04607; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04608; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x84609; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc4610; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)4611; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s74612; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s64613; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4614; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v34615; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164616; GFX10-CU-NEXT:    s_endpgm4617;4618; SKIP-CACHE-INV-LABEL: global_singlethread_release_acquire_cmpxchg:4619; SKIP-CACHE-INV:       ; %bb.0: ; %entry4620; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]4621; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x04622; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x24623; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x34624; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)4625; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s14626; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr14627; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0004628; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -14629; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr34630; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s84631; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s74632; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s64633; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s54634; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s44635; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4636; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v24637; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:164638; SKIP-CACHE-INV-NEXT:    s_endpgm4639;4640; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_acquire_cmpxchg:4641; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry4642; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04643; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04644; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84645; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4646; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4647; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s74648; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s64649; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4650; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14651; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164652; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm4653;4654; GFX90A-TGSPLIT-LABEL: global_singlethread_release_acquire_cmpxchg:4655; GFX90A-TGSPLIT:       ; %bb.0: ; %entry4656; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04657; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04658; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84659; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4660; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4661; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s74662; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s64663; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4664; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14665; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164666; GFX90A-TGSPLIT-NEXT:    s_endpgm4667;4668; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_acquire_cmpxchg:4669; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry4670; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04671; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04672; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84673; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4674; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4675; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s34676; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s24677; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4678; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14679; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164680; GFX942-NOTTGSPLIT-NEXT:    s_endpgm4681;4682; GFX942-TGSPLIT-LABEL: global_singlethread_release_acquire_cmpxchg:4683; GFX942-TGSPLIT:       ; %bb.0: ; %entry4684; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04685; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04686; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84687; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4688; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4689; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s34690; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s24691; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4692; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14693; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164694; GFX942-TGSPLIT-NEXT:    s_endpgm4695;4696; GFX11-WGP-LABEL: global_singlethread_release_acquire_cmpxchg:4697; GFX11-WGP:       ; %bb.0: ; %entry4698; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 04699; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04700; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84701; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4702; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)4703; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s34704; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s24705; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4706; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v34707; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164708; GFX11-WGP-NEXT:    s_endpgm4709;4710; GFX11-CU-LABEL: global_singlethread_release_acquire_cmpxchg:4711; GFX11-CU:       ; %bb.0: ; %entry4712; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 04713; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04714; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84715; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4716; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)4717; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s34718; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s24719; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4720; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v34721; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164722; GFX11-CU-NEXT:    s_endpgm4723;4724; GFX12-WGP-LABEL: global_singlethread_release_acquire_cmpxchg:4725; GFX12-WGP:       ; %bb.0: ; %entry4726; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 04727; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04728; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84729; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4730; GFX12-WGP-NEXT:    s_wait_kmcnt 0x04731; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s34732; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s24733; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4734; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v34735; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164736; GFX12-WGP-NEXT:    s_endpgm4737;4738; GFX12-CU-LABEL: global_singlethread_release_acquire_cmpxchg:4739; GFX12-CU:       ; %bb.0: ; %entry4740; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 04741; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04742; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84743; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4744; GFX12-CU-NEXT:    s_wait_kmcnt 0x04745; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s34746; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s24747; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4748; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v34749; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164750; GFX12-CU-NEXT:    s_endpgm4751;4752; GFX1250-LABEL: global_singlethread_release_acquire_cmpxchg:4753; GFX1250:       ; %bb.0: ; %entry4754; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14755; GFX1250-NEXT:    v_mov_b32_e32 v0, 04756; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04757; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x84758; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc4759; GFX1250-NEXT:    s_wait_kmcnt 0x04760; GFX1250-NEXT:    v_mov_b32_e32 v2, s34761; GFX1250-NEXT:    v_mov_b32_e32 v1, s24762; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4763; GFX1250-NEXT:    v_mov_b32_e32 v3, v14764; GFX1250-NEXT:    s_wait_xcnt 0x04765; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:164766; GFX1250-NEXT:    s_endpgm4767    ptr addrspace(1) %out, i32 %in, i32 %old) {4768entry:4769  %gep = getelementptr i32, ptr addrspace(1) %out, i32 44770  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") release acquire4771  ret void4772}4773 4774define amdgpu_kernel void @global_singlethread_acq_rel_acquire_cmpxchg(4775; GFX6-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4776; GFX6:       ; %bb.0: ; %entry4777; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]4778; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x04779; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x24780; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x34781; GFX6-NEXT:    s_waitcnt lgkmcnt(0)4782; GFX6-NEXT:    s_mov_b32 s12, s54783; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr54784; GFX6-NEXT:    s_mov_b32 s10, 0x100f0004785; GFX6-NEXT:    s_mov_b32 s11, -14786; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr74787; GFX6-NEXT:    s_mov_b32 s5, s124788; GFX6-NEXT:    s_mov_b32 s6, s114789; GFX6-NEXT:    s_mov_b32 s7, s104790; GFX6-NEXT:    v_mov_b32_e32 v0, s94791; GFX6-NEXT:    v_mov_b32_e32 v2, s84792; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4793; GFX6-NEXT:    v_mov_b32_e32 v1, v24794; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:164795; GFX6-NEXT:    s_endpgm4796;4797; GFX7-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4798; GFX7:       ; %bb.0: ; %entry4799; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s134800; GFX7-NEXT:    s_add_i32 s12, s12, s174801; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 84802; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]4803; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x04804; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x24805; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x34806; GFX7-NEXT:    s_mov_b64 s[10:11], 164807; GFX7-NEXT:    s_waitcnt lgkmcnt(0)4808; GFX7-NEXT:    s_mov_b32 s4, s84809; GFX7-NEXT:    s_mov_b32 s5, s94810; GFX7-NEXT:    s_mov_b32 s9, s104811; GFX7-NEXT:    s_mov_b32 s8, s114812; GFX7-NEXT:    s_add_u32 s4, s4, s94813; GFX7-NEXT:    s_addc_u32 s8, s5, s84814; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr54815; GFX7-NEXT:    s_mov_b32 s5, s84816; GFX7-NEXT:    v_mov_b32_e32 v2, s74817; GFX7-NEXT:    v_mov_b32_e32 v0, s64818; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4819; GFX7-NEXT:    v_mov_b32_e32 v3, v04820; GFX7-NEXT:    v_mov_b32_e32 v0, s44821; GFX7-NEXT:    v_mov_b32_e32 v1, s54822; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]4823; GFX7-NEXT:    s_endpgm4824;4825; GFX10-WGP-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4826; GFX10-WGP:       ; %bb.0: ; %entry4827; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 04828; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04829; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x84830; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc4831; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)4832; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s74833; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s64834; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4835; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v34836; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164837; GFX10-WGP-NEXT:    s_endpgm4838;4839; GFX10-CU-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4840; GFX10-CU:       ; %bb.0: ; %entry4841; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 04842; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04843; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x84844; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc4845; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)4846; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s74847; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s64848; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4849; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v34850; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:164851; GFX10-CU-NEXT:    s_endpgm4852;4853; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4854; SKIP-CACHE-INV:       ; %bb.0: ; %entry4855; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]4856; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x04857; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x24858; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x34859; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)4860; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s14861; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr14862; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0004863; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -14864; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr34865; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s84866; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s74867; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s64868; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s54869; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s44870; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec4871; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v24872; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:164873; SKIP-CACHE-INV-NEXT:    s_endpgm4874;4875; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4876; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry4877; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04878; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04879; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84880; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4881; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4882; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s74883; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s64884; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4885; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14886; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164887; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm4888;4889; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4890; GFX90A-TGSPLIT:       ; %bb.0: ; %entry4891; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04892; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x04893; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x84894; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc4895; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4896; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s74897; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s64898; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4899; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14900; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:164901; GFX90A-TGSPLIT-NEXT:    s_endpgm4902;4903; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4904; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry4905; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 04906; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04907; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84908; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4909; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4910; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s34911; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s24912; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4913; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v14914; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164915; GFX942-NOTTGSPLIT-NEXT:    s_endpgm4916;4917; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4918; GFX942-TGSPLIT:       ; %bb.0: ; %entry4919; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 04920; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x04921; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x84922; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc4923; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)4924; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s34925; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s24926; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4927; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v14928; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:164929; GFX942-TGSPLIT-NEXT:    s_endpgm4930;4931; GFX11-WGP-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4932; GFX11-WGP:       ; %bb.0: ; %entry4933; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 04934; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04935; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84936; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4937; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)4938; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s34939; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s24940; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4941; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v34942; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164943; GFX11-WGP-NEXT:    s_endpgm4944;4945; GFX11-CU-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4946; GFX11-CU:       ; %bb.0: ; %entry4947; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 04948; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04949; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84950; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4951; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)4952; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s34953; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s24954; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4955; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v34956; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164957; GFX11-CU-NEXT:    s_endpgm4958;4959; GFX12-WGP-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4960; GFX12-WGP:       ; %bb.0: ; %entry4961; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 04962; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04963; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x84964; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc4965; GFX12-WGP-NEXT:    s_wait_kmcnt 0x04966; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s34967; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s24968; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4969; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v34970; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164971; GFX12-WGP-NEXT:    s_endpgm4972;4973; GFX12-CU-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4974; GFX12-CU:       ; %bb.0: ; %entry4975; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 04976; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04977; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x84978; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc4979; GFX12-CU-NEXT:    s_wait_kmcnt 0x04980; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s34981; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s24982; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec4983; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v34984; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:164985; GFX12-CU-NEXT:    s_endpgm4986;4987; GFX1250-LABEL: global_singlethread_acq_rel_acquire_cmpxchg:4988; GFX1250:       ; %bb.0: ; %entry4989; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 14990; GFX1250-NEXT:    v_mov_b32_e32 v0, 04991; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x04992; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x84993; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc4994; GFX1250-NEXT:    s_wait_kmcnt 0x04995; GFX1250-NEXT:    v_mov_b32_e32 v2, s34996; GFX1250-NEXT:    v_mov_b32_e32 v1, s24997; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec4998; GFX1250-NEXT:    v_mov_b32_e32 v3, v14999; GFX1250-NEXT:    s_wait_xcnt 0x05000; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:165001; GFX1250-NEXT:    s_endpgm5002    ptr addrspace(1) %out, i32 %in, i32 %old) {5003entry:5004  %gep = getelementptr i32, ptr addrspace(1) %out, i32 45005  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acq_rel acquire5006  ret void5007}5008 5009define amdgpu_kernel void @global_singlethread_seq_cst_acquire_cmpxchg(5010; GFX6-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5011; GFX6:       ; %bb.0: ; %entry5012; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]5013; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x05014; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x25015; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x35016; GFX6-NEXT:    s_waitcnt lgkmcnt(0)5017; GFX6-NEXT:    s_mov_b32 s12, s55018; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr55019; GFX6-NEXT:    s_mov_b32 s10, 0x100f0005020; GFX6-NEXT:    s_mov_b32 s11, -15021; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr75022; GFX6-NEXT:    s_mov_b32 s5, s125023; GFX6-NEXT:    s_mov_b32 s6, s115024; GFX6-NEXT:    s_mov_b32 s7, s105025; GFX6-NEXT:    v_mov_b32_e32 v0, s95026; GFX6-NEXT:    v_mov_b32_e32 v2, s85027; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5028; GFX6-NEXT:    v_mov_b32_e32 v1, v25029; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:165030; GFX6-NEXT:    s_endpgm5031;5032; GFX7-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5033; GFX7:       ; %bb.0: ; %entry5034; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s135035; GFX7-NEXT:    s_add_i32 s12, s12, s175036; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 85037; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]5038; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x05039; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x25040; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x35041; GFX7-NEXT:    s_mov_b64 s[10:11], 165042; GFX7-NEXT:    s_waitcnt lgkmcnt(0)5043; GFX7-NEXT:    s_mov_b32 s4, s85044; GFX7-NEXT:    s_mov_b32 s5, s95045; GFX7-NEXT:    s_mov_b32 s9, s105046; GFX7-NEXT:    s_mov_b32 s8, s115047; GFX7-NEXT:    s_add_u32 s4, s4, s95048; GFX7-NEXT:    s_addc_u32 s8, s5, s85049; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr55050; GFX7-NEXT:    s_mov_b32 s5, s85051; GFX7-NEXT:    v_mov_b32_e32 v2, s75052; GFX7-NEXT:    v_mov_b32_e32 v0, s65053; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5054; GFX7-NEXT:    v_mov_b32_e32 v3, v05055; GFX7-NEXT:    v_mov_b32_e32 v0, s45056; GFX7-NEXT:    v_mov_b32_e32 v1, s55057; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]5058; GFX7-NEXT:    s_endpgm5059;5060; GFX10-WGP-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5061; GFX10-WGP:       ; %bb.0: ; %entry5062; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 05063; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05064; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x85065; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc5066; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)5067; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s75068; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s65069; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5070; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v35071; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165072; GFX10-WGP-NEXT:    s_endpgm5073;5074; GFX10-CU-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5075; GFX10-CU:       ; %bb.0: ; %entry5076; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 05077; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05078; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x85079; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc5080; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)5081; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s75082; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s65083; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5084; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v35085; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165086; GFX10-CU-NEXT:    s_endpgm5087;5088; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5089; SKIP-CACHE-INV:       ; %bb.0: ; %entry5090; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]5091; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x05092; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x25093; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x35094; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)5095; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s15096; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr15097; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0005098; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -15099; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr35100; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s85101; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s75102; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s65103; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s55104; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s45105; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5106; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v25107; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:165108; SKIP-CACHE-INV-NEXT:    s_endpgm5109;5110; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5111; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry5112; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05113; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05114; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85115; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5116; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5117; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s75118; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s65119; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5120; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15121; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165122; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm5123;5124; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5125; GFX90A-TGSPLIT:       ; %bb.0: ; %entry5126; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05127; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05128; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85129; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5130; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5131; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s75132; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s65133; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5134; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15135; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165136; GFX90A-TGSPLIT-NEXT:    s_endpgm5137;5138; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5139; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry5140; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05141; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05142; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85143; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5144; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5145; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s35146; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s25147; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5148; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15149; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165150; GFX942-NOTTGSPLIT-NEXT:    s_endpgm5151;5152; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5153; GFX942-TGSPLIT:       ; %bb.0: ; %entry5154; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05155; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05156; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85157; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5158; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5159; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s35160; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s25161; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5162; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15163; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165164; GFX942-TGSPLIT-NEXT:    s_endpgm5165;5166; GFX11-WGP-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5167; GFX11-WGP:       ; %bb.0: ; %entry5168; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 05169; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05170; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85171; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5172; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)5173; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s35174; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s25175; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5176; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v35177; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165178; GFX11-WGP-NEXT:    s_endpgm5179;5180; GFX11-CU-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5181; GFX11-CU:       ; %bb.0: ; %entry5182; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 05183; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05184; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85185; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5186; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)5187; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s35188; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s25189; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5190; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v35191; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165192; GFX11-CU-NEXT:    s_endpgm5193;5194; GFX12-WGP-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5195; GFX12-WGP:       ; %bb.0: ; %entry5196; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 05197; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05198; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85199; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5200; GFX12-WGP-NEXT:    s_wait_kmcnt 0x05201; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s35202; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s25203; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5204; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v35205; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165206; GFX12-WGP-NEXT:    s_endpgm5207;5208; GFX12-CU-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5209; GFX12-CU:       ; %bb.0: ; %entry5210; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 05211; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05212; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85213; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5214; GFX12-CU-NEXT:    s_wait_kmcnt 0x05215; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s35216; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s25217; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5218; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v35219; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165220; GFX12-CU-NEXT:    s_endpgm5221;5222; GFX1250-LABEL: global_singlethread_seq_cst_acquire_cmpxchg:5223; GFX1250:       ; %bb.0: ; %entry5224; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15225; GFX1250-NEXT:    v_mov_b32_e32 v0, 05226; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05227; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x85228; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc5229; GFX1250-NEXT:    s_wait_kmcnt 0x05230; GFX1250-NEXT:    v_mov_b32_e32 v2, s35231; GFX1250-NEXT:    v_mov_b32_e32 v1, s25232; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5233; GFX1250-NEXT:    v_mov_b32_e32 v3, v15234; GFX1250-NEXT:    s_wait_xcnt 0x05235; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:165236; GFX1250-NEXT:    s_endpgm5237    ptr addrspace(1) %out, i32 %in, i32 %old) {5238entry:5239  %gep = getelementptr i32, ptr addrspace(1) %out, i32 45240  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") seq_cst acquire5241  ret void5242}5243 5244define amdgpu_kernel void @global_singlethread_monotonic_seq_cst_cmpxchg(5245; GFX6-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5246; GFX6:       ; %bb.0: ; %entry5247; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]5248; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x05249; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x25250; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x35251; GFX6-NEXT:    s_waitcnt lgkmcnt(0)5252; GFX6-NEXT:    s_mov_b32 s12, s55253; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr55254; GFX6-NEXT:    s_mov_b32 s10, 0x100f0005255; GFX6-NEXT:    s_mov_b32 s11, -15256; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr75257; GFX6-NEXT:    s_mov_b32 s5, s125258; GFX6-NEXT:    s_mov_b32 s6, s115259; GFX6-NEXT:    s_mov_b32 s7, s105260; GFX6-NEXT:    v_mov_b32_e32 v0, s95261; GFX6-NEXT:    v_mov_b32_e32 v2, s85262; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5263; GFX6-NEXT:    v_mov_b32_e32 v1, v25264; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:165265; GFX6-NEXT:    s_endpgm5266;5267; GFX7-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5268; GFX7:       ; %bb.0: ; %entry5269; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s135270; GFX7-NEXT:    s_add_i32 s12, s12, s175271; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 85272; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]5273; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x05274; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x25275; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x35276; GFX7-NEXT:    s_mov_b64 s[10:11], 165277; GFX7-NEXT:    s_waitcnt lgkmcnt(0)5278; GFX7-NEXT:    s_mov_b32 s4, s85279; GFX7-NEXT:    s_mov_b32 s5, s95280; GFX7-NEXT:    s_mov_b32 s9, s105281; GFX7-NEXT:    s_mov_b32 s8, s115282; GFX7-NEXT:    s_add_u32 s4, s4, s95283; GFX7-NEXT:    s_addc_u32 s8, s5, s85284; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr55285; GFX7-NEXT:    s_mov_b32 s5, s85286; GFX7-NEXT:    v_mov_b32_e32 v2, s75287; GFX7-NEXT:    v_mov_b32_e32 v0, s65288; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5289; GFX7-NEXT:    v_mov_b32_e32 v3, v05290; GFX7-NEXT:    v_mov_b32_e32 v0, s45291; GFX7-NEXT:    v_mov_b32_e32 v1, s55292; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]5293; GFX7-NEXT:    s_endpgm5294;5295; GFX10-WGP-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5296; GFX10-WGP:       ; %bb.0: ; %entry5297; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 05298; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05299; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x85300; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc5301; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)5302; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s75303; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s65304; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5305; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v35306; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165307; GFX10-WGP-NEXT:    s_endpgm5308;5309; GFX10-CU-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5310; GFX10-CU:       ; %bb.0: ; %entry5311; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 05312; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05313; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x85314; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc5315; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)5316; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s75317; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s65318; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5319; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v35320; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165321; GFX10-CU-NEXT:    s_endpgm5322;5323; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5324; SKIP-CACHE-INV:       ; %bb.0: ; %entry5325; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]5326; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x05327; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x25328; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x35329; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)5330; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s15331; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr15332; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0005333; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -15334; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr35335; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s85336; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s75337; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s65338; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s55339; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s45340; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5341; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v25342; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:165343; SKIP-CACHE-INV-NEXT:    s_endpgm5344;5345; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5346; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry5347; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05348; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05349; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85350; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5351; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5352; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s75353; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s65354; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5355; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15356; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165357; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm5358;5359; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5360; GFX90A-TGSPLIT:       ; %bb.0: ; %entry5361; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05362; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05363; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85364; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5365; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5366; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s75367; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s65368; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5369; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15370; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165371; GFX90A-TGSPLIT-NEXT:    s_endpgm5372;5373; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5374; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry5375; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05376; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05377; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85378; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5379; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5380; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s35381; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s25382; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5383; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15384; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165385; GFX942-NOTTGSPLIT-NEXT:    s_endpgm5386;5387; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5388; GFX942-TGSPLIT:       ; %bb.0: ; %entry5389; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05390; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05391; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85392; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5393; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5394; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s35395; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s25396; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5397; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15398; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165399; GFX942-TGSPLIT-NEXT:    s_endpgm5400;5401; GFX11-WGP-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5402; GFX11-WGP:       ; %bb.0: ; %entry5403; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 05404; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05405; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85406; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5407; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)5408; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s35409; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s25410; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5411; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v35412; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165413; GFX11-WGP-NEXT:    s_endpgm5414;5415; GFX11-CU-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5416; GFX11-CU:       ; %bb.0: ; %entry5417; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 05418; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05419; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85420; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5421; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)5422; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s35423; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s25424; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5425; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v35426; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165427; GFX11-CU-NEXT:    s_endpgm5428;5429; GFX12-WGP-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5430; GFX12-WGP:       ; %bb.0: ; %entry5431; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 05432; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05433; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85434; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5435; GFX12-WGP-NEXT:    s_wait_kmcnt 0x05436; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s35437; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s25438; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5439; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v35440; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165441; GFX12-WGP-NEXT:    s_endpgm5442;5443; GFX12-CU-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5444; GFX12-CU:       ; %bb.0: ; %entry5445; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 05446; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05447; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85448; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5449; GFX12-CU-NEXT:    s_wait_kmcnt 0x05450; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s35451; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s25452; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5453; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v35454; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165455; GFX12-CU-NEXT:    s_endpgm5456;5457; GFX1250-LABEL: global_singlethread_monotonic_seq_cst_cmpxchg:5458; GFX1250:       ; %bb.0: ; %entry5459; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15460; GFX1250-NEXT:    v_mov_b32_e32 v0, 05461; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05462; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x85463; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc5464; GFX1250-NEXT:    s_wait_kmcnt 0x05465; GFX1250-NEXT:    v_mov_b32_e32 v2, s35466; GFX1250-NEXT:    v_mov_b32_e32 v1, s25467; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5468; GFX1250-NEXT:    v_mov_b32_e32 v3, v15469; GFX1250-NEXT:    s_wait_xcnt 0x05470; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:165471; GFX1250-NEXT:    s_endpgm5472    ptr addrspace(1) %out, i32 %in, i32 %old) {5473entry:5474  %gep = getelementptr i32, ptr addrspace(1) %out, i32 45475  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") monotonic seq_cst5476  ret void5477}5478 5479define amdgpu_kernel void @global_singlethread_acquire_seq_cst_cmpxchg(5480; GFX6-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5481; GFX6:       ; %bb.0: ; %entry5482; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]5483; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x05484; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x25485; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x35486; GFX6-NEXT:    s_waitcnt lgkmcnt(0)5487; GFX6-NEXT:    s_mov_b32 s12, s55488; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr55489; GFX6-NEXT:    s_mov_b32 s10, 0x100f0005490; GFX6-NEXT:    s_mov_b32 s11, -15491; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr75492; GFX6-NEXT:    s_mov_b32 s5, s125493; GFX6-NEXT:    s_mov_b32 s6, s115494; GFX6-NEXT:    s_mov_b32 s7, s105495; GFX6-NEXT:    v_mov_b32_e32 v0, s95496; GFX6-NEXT:    v_mov_b32_e32 v2, s85497; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5498; GFX6-NEXT:    v_mov_b32_e32 v1, v25499; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:165500; GFX6-NEXT:    s_endpgm5501;5502; GFX7-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5503; GFX7:       ; %bb.0: ; %entry5504; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s135505; GFX7-NEXT:    s_add_i32 s12, s12, s175506; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 85507; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]5508; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x05509; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x25510; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x35511; GFX7-NEXT:    s_mov_b64 s[10:11], 165512; GFX7-NEXT:    s_waitcnt lgkmcnt(0)5513; GFX7-NEXT:    s_mov_b32 s4, s85514; GFX7-NEXT:    s_mov_b32 s5, s95515; GFX7-NEXT:    s_mov_b32 s9, s105516; GFX7-NEXT:    s_mov_b32 s8, s115517; GFX7-NEXT:    s_add_u32 s4, s4, s95518; GFX7-NEXT:    s_addc_u32 s8, s5, s85519; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr55520; GFX7-NEXT:    s_mov_b32 s5, s85521; GFX7-NEXT:    v_mov_b32_e32 v2, s75522; GFX7-NEXT:    v_mov_b32_e32 v0, s65523; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5524; GFX7-NEXT:    v_mov_b32_e32 v3, v05525; GFX7-NEXT:    v_mov_b32_e32 v0, s45526; GFX7-NEXT:    v_mov_b32_e32 v1, s55527; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]5528; GFX7-NEXT:    s_endpgm5529;5530; GFX10-WGP-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5531; GFX10-WGP:       ; %bb.0: ; %entry5532; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 05533; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05534; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x85535; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc5536; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)5537; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s75538; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s65539; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5540; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v35541; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165542; GFX10-WGP-NEXT:    s_endpgm5543;5544; GFX10-CU-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5545; GFX10-CU:       ; %bb.0: ; %entry5546; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 05547; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05548; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x85549; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc5550; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)5551; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s75552; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s65553; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5554; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v35555; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165556; GFX10-CU-NEXT:    s_endpgm5557;5558; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5559; SKIP-CACHE-INV:       ; %bb.0: ; %entry5560; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]5561; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x05562; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x25563; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x35564; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)5565; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s15566; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr15567; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0005568; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -15569; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr35570; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s85571; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s75572; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s65573; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s55574; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s45575; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5576; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v25577; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:165578; SKIP-CACHE-INV-NEXT:    s_endpgm5579;5580; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5581; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry5582; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05583; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05584; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85585; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5586; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5587; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s75588; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s65589; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5590; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15591; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165592; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm5593;5594; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5595; GFX90A-TGSPLIT:       ; %bb.0: ; %entry5596; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05597; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05598; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85599; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5600; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5601; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s75602; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s65603; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5604; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15605; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165606; GFX90A-TGSPLIT-NEXT:    s_endpgm5607;5608; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5609; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry5610; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05611; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05612; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85613; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5614; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5615; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s35616; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s25617; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5618; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15619; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165620; GFX942-NOTTGSPLIT-NEXT:    s_endpgm5621;5622; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5623; GFX942-TGSPLIT:       ; %bb.0: ; %entry5624; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05625; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05626; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85627; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5628; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5629; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s35630; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s25631; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5632; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15633; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165634; GFX942-TGSPLIT-NEXT:    s_endpgm5635;5636; GFX11-WGP-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5637; GFX11-WGP:       ; %bb.0: ; %entry5638; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 05639; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05640; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85641; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5642; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)5643; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s35644; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s25645; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5646; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v35647; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165648; GFX11-WGP-NEXT:    s_endpgm5649;5650; GFX11-CU-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5651; GFX11-CU:       ; %bb.0: ; %entry5652; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 05653; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05654; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85655; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5656; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)5657; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s35658; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s25659; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5660; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v35661; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165662; GFX11-CU-NEXT:    s_endpgm5663;5664; GFX12-WGP-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5665; GFX12-WGP:       ; %bb.0: ; %entry5666; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 05667; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05668; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85669; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5670; GFX12-WGP-NEXT:    s_wait_kmcnt 0x05671; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s35672; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s25673; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5674; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v35675; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165676; GFX12-WGP-NEXT:    s_endpgm5677;5678; GFX12-CU-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5679; GFX12-CU:       ; %bb.0: ; %entry5680; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 05681; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05682; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85683; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5684; GFX12-CU-NEXT:    s_wait_kmcnt 0x05685; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s35686; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s25687; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5688; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v35689; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165690; GFX12-CU-NEXT:    s_endpgm5691;5692; GFX1250-LABEL: global_singlethread_acquire_seq_cst_cmpxchg:5693; GFX1250:       ; %bb.0: ; %entry5694; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15695; GFX1250-NEXT:    v_mov_b32_e32 v0, 05696; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05697; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x85698; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc5699; GFX1250-NEXT:    s_wait_kmcnt 0x05700; GFX1250-NEXT:    v_mov_b32_e32 v2, s35701; GFX1250-NEXT:    v_mov_b32_e32 v1, s25702; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5703; GFX1250-NEXT:    v_mov_b32_e32 v3, v15704; GFX1250-NEXT:    s_wait_xcnt 0x05705; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:165706; GFX1250-NEXT:    s_endpgm5707    ptr addrspace(1) %out, i32 %in, i32 %old) {5708entry:5709  %gep = getelementptr i32, ptr addrspace(1) %out, i32 45710  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acquire seq_cst5711  ret void5712}5713 5714define amdgpu_kernel void @global_singlethread_release_seq_cst_cmpxchg(5715; GFX6-LABEL: global_singlethread_release_seq_cst_cmpxchg:5716; GFX6:       ; %bb.0: ; %entry5717; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]5718; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x05719; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x25720; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x35721; GFX6-NEXT:    s_waitcnt lgkmcnt(0)5722; GFX6-NEXT:    s_mov_b32 s12, s55723; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr55724; GFX6-NEXT:    s_mov_b32 s10, 0x100f0005725; GFX6-NEXT:    s_mov_b32 s11, -15726; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr75727; GFX6-NEXT:    s_mov_b32 s5, s125728; GFX6-NEXT:    s_mov_b32 s6, s115729; GFX6-NEXT:    s_mov_b32 s7, s105730; GFX6-NEXT:    v_mov_b32_e32 v0, s95731; GFX6-NEXT:    v_mov_b32_e32 v2, s85732; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5733; GFX6-NEXT:    v_mov_b32_e32 v1, v25734; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:165735; GFX6-NEXT:    s_endpgm5736;5737; GFX7-LABEL: global_singlethread_release_seq_cst_cmpxchg:5738; GFX7:       ; %bb.0: ; %entry5739; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s135740; GFX7-NEXT:    s_add_i32 s12, s12, s175741; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 85742; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]5743; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x05744; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x25745; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x35746; GFX7-NEXT:    s_mov_b64 s[10:11], 165747; GFX7-NEXT:    s_waitcnt lgkmcnt(0)5748; GFX7-NEXT:    s_mov_b32 s4, s85749; GFX7-NEXT:    s_mov_b32 s5, s95750; GFX7-NEXT:    s_mov_b32 s9, s105751; GFX7-NEXT:    s_mov_b32 s8, s115752; GFX7-NEXT:    s_add_u32 s4, s4, s95753; GFX7-NEXT:    s_addc_u32 s8, s5, s85754; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr55755; GFX7-NEXT:    s_mov_b32 s5, s85756; GFX7-NEXT:    v_mov_b32_e32 v2, s75757; GFX7-NEXT:    v_mov_b32_e32 v0, s65758; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5759; GFX7-NEXT:    v_mov_b32_e32 v3, v05760; GFX7-NEXT:    v_mov_b32_e32 v0, s45761; GFX7-NEXT:    v_mov_b32_e32 v1, s55762; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]5763; GFX7-NEXT:    s_endpgm5764;5765; GFX10-WGP-LABEL: global_singlethread_release_seq_cst_cmpxchg:5766; GFX10-WGP:       ; %bb.0: ; %entry5767; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 05768; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05769; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x85770; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc5771; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)5772; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s75773; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s65774; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5775; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v35776; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165777; GFX10-WGP-NEXT:    s_endpgm5778;5779; GFX10-CU-LABEL: global_singlethread_release_seq_cst_cmpxchg:5780; GFX10-CU:       ; %bb.0: ; %entry5781; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 05782; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05783; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x85784; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc5785; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)5786; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s75787; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s65788; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5789; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v35790; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:165791; GFX10-CU-NEXT:    s_endpgm5792;5793; SKIP-CACHE-INV-LABEL: global_singlethread_release_seq_cst_cmpxchg:5794; SKIP-CACHE-INV:       ; %bb.0: ; %entry5795; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]5796; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x05797; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x25798; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x35799; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)5800; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s15801; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr15802; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0005803; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -15804; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr35805; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s85806; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s75807; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s65808; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s55809; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s45810; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5811; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v25812; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:165813; SKIP-CACHE-INV-NEXT:    s_endpgm5814;5815; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_seq_cst_cmpxchg:5816; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry5817; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05818; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05819; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85820; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5821; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5822; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s75823; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s65824; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5825; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15826; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165827; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm5828;5829; GFX90A-TGSPLIT-LABEL: global_singlethread_release_seq_cst_cmpxchg:5830; GFX90A-TGSPLIT:       ; %bb.0: ; %entry5831; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05832; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x05833; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x85834; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc5835; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5836; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s75837; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s65838; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5839; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15840; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:165841; GFX90A-TGSPLIT-NEXT:    s_endpgm5842;5843; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_seq_cst_cmpxchg:5844; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry5845; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 05846; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05847; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85848; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5849; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5850; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s35851; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s25852; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5853; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v15854; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165855; GFX942-NOTTGSPLIT-NEXT:    s_endpgm5856;5857; GFX942-TGSPLIT-LABEL: global_singlethread_release_seq_cst_cmpxchg:5858; GFX942-TGSPLIT:       ; %bb.0: ; %entry5859; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 05860; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x05861; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x85862; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc5863; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)5864; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s35865; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s25866; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5867; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v15868; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:165869; GFX942-TGSPLIT-NEXT:    s_endpgm5870;5871; GFX11-WGP-LABEL: global_singlethread_release_seq_cst_cmpxchg:5872; GFX11-WGP:       ; %bb.0: ; %entry5873; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 05874; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05875; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85876; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5877; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)5878; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s35879; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s25880; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5881; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v35882; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165883; GFX11-WGP-NEXT:    s_endpgm5884;5885; GFX11-CU-LABEL: global_singlethread_release_seq_cst_cmpxchg:5886; GFX11-CU:       ; %bb.0: ; %entry5887; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 05888; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05889; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85890; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5891; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)5892; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s35893; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s25894; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5895; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v35896; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165897; GFX11-CU-NEXT:    s_endpgm5898;5899; GFX12-WGP-LABEL: global_singlethread_release_seq_cst_cmpxchg:5900; GFX12-WGP:       ; %bb.0: ; %entry5901; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 05902; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05903; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x85904; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc5905; GFX12-WGP-NEXT:    s_wait_kmcnt 0x05906; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s35907; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s25908; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5909; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v35910; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165911; GFX12-WGP-NEXT:    s_endpgm5912;5913; GFX12-CU-LABEL: global_singlethread_release_seq_cst_cmpxchg:5914; GFX12-CU:       ; %bb.0: ; %entry5915; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 05916; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05917; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x85918; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc5919; GFX12-CU-NEXT:    s_wait_kmcnt 0x05920; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s35921; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s25922; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec5923; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v35924; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:165925; GFX12-CU-NEXT:    s_endpgm5926;5927; GFX1250-LABEL: global_singlethread_release_seq_cst_cmpxchg:5928; GFX1250:       ; %bb.0: ; %entry5929; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 15930; GFX1250-NEXT:    v_mov_b32_e32 v0, 05931; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x05932; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x85933; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc5934; GFX1250-NEXT:    s_wait_kmcnt 0x05935; GFX1250-NEXT:    v_mov_b32_e32 v2, s35936; GFX1250-NEXT:    v_mov_b32_e32 v1, s25937; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5938; GFX1250-NEXT:    v_mov_b32_e32 v3, v15939; GFX1250-NEXT:    s_wait_xcnt 0x05940; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:165941; GFX1250-NEXT:    s_endpgm5942    ptr addrspace(1) %out, i32 %in, i32 %old) {5943entry:5944  %gep = getelementptr i32, ptr addrspace(1) %out, i32 45945  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") release seq_cst5946  ret void5947}5948 5949define amdgpu_kernel void @global_singlethread_acq_rel_seq_cst_cmpxchg(5950; GFX6-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:5951; GFX6:       ; %bb.0: ; %entry5952; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]5953; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x05954; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x25955; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x35956; GFX6-NEXT:    s_waitcnt lgkmcnt(0)5957; GFX6-NEXT:    s_mov_b32 s12, s55958; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr55959; GFX6-NEXT:    s_mov_b32 s10, 0x100f0005960; GFX6-NEXT:    s_mov_b32 s11, -15961; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr75962; GFX6-NEXT:    s_mov_b32 s5, s125963; GFX6-NEXT:    s_mov_b32 s6, s115964; GFX6-NEXT:    s_mov_b32 s7, s105965; GFX6-NEXT:    v_mov_b32_e32 v0, s95966; GFX6-NEXT:    v_mov_b32_e32 v2, s85967; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec5968; GFX6-NEXT:    v_mov_b32_e32 v1, v25969; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:165970; GFX6-NEXT:    s_endpgm5971;5972; GFX7-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:5973; GFX7:       ; %bb.0: ; %entry5974; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s135975; GFX7-NEXT:    s_add_i32 s12, s12, s175976; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 85977; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]5978; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x05979; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x25980; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x35981; GFX7-NEXT:    s_mov_b64 s[10:11], 165982; GFX7-NEXT:    s_waitcnt lgkmcnt(0)5983; GFX7-NEXT:    s_mov_b32 s4, s85984; GFX7-NEXT:    s_mov_b32 s5, s95985; GFX7-NEXT:    s_mov_b32 s9, s105986; GFX7-NEXT:    s_mov_b32 s8, s115987; GFX7-NEXT:    s_add_u32 s4, s4, s95988; GFX7-NEXT:    s_addc_u32 s8, s5, s85989; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr55990; GFX7-NEXT:    s_mov_b32 s5, s85991; GFX7-NEXT:    v_mov_b32_e32 v2, s75992; GFX7-NEXT:    v_mov_b32_e32 v0, s65993; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec5994; GFX7-NEXT:    v_mov_b32_e32 v3, v05995; GFX7-NEXT:    v_mov_b32_e32 v0, s45996; GFX7-NEXT:    v_mov_b32_e32 v1, s55997; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]5998; GFX7-NEXT:    s_endpgm5999;6000; GFX10-WGP-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6001; GFX10-WGP:       ; %bb.0: ; %entry6002; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 06003; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06004; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x86005; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc6006; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)6007; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s76008; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s66009; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6010; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v36011; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:166012; GFX10-WGP-NEXT:    s_endpgm6013;6014; GFX10-CU-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6015; GFX10-CU:       ; %bb.0: ; %entry6016; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 06017; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06018; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x86019; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc6020; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)6021; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s76022; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s66023; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6024; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v36025; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:166026; GFX10-CU-NEXT:    s_endpgm6027;6028; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6029; SKIP-CACHE-INV:       ; %bb.0: ; %entry6030; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]6031; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x06032; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x26033; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x36034; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)6035; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s16036; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr16037; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0006038; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -16039; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr36040; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s86041; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s76042; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s66043; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s56044; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s46045; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6046; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v26047; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:166048; SKIP-CACHE-INV-NEXT:    s_endpgm6049;6050; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6051; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry6052; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06053; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06054; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86055; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6056; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6057; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s76058; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s66059; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6060; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16061; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:166062; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm6063;6064; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6065; GFX90A-TGSPLIT:       ; %bb.0: ; %entry6066; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06067; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06068; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86069; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6070; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6071; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s76072; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s66073; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6074; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16075; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:166076; GFX90A-TGSPLIT-NEXT:    s_endpgm6077;6078; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6079; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry6080; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06081; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06082; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86083; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6084; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6085; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s36086; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s26087; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6088; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16089; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:166090; GFX942-NOTTGSPLIT-NEXT:    s_endpgm6091;6092; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6093; GFX942-TGSPLIT:       ; %bb.0: ; %entry6094; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06095; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06096; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86097; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6098; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6099; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s36100; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s26101; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6102; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16103; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:166104; GFX942-TGSPLIT-NEXT:    s_endpgm6105;6106; GFX11-WGP-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6107; GFX11-WGP:       ; %bb.0: ; %entry6108; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 06109; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06110; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86111; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6112; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)6113; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s36114; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s26115; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6116; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v36117; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166118; GFX11-WGP-NEXT:    s_endpgm6119;6120; GFX11-CU-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6121; GFX11-CU:       ; %bb.0: ; %entry6122; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 06123; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06124; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86125; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6126; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)6127; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s36128; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s26129; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6130; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v36131; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166132; GFX11-CU-NEXT:    s_endpgm6133;6134; GFX12-WGP-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6135; GFX12-WGP:       ; %bb.0: ; %entry6136; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 06137; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06138; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86139; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6140; GFX12-WGP-NEXT:    s_wait_kmcnt 0x06141; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s36142; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s26143; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6144; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v36145; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166146; GFX12-WGP-NEXT:    s_endpgm6147;6148; GFX12-CU-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6149; GFX12-CU:       ; %bb.0: ; %entry6150; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 06151; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06152; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86153; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6154; GFX12-CU-NEXT:    s_wait_kmcnt 0x06155; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s36156; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s26157; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6158; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v36159; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166160; GFX12-CU-NEXT:    s_endpgm6161;6162; GFX1250-LABEL: global_singlethread_acq_rel_seq_cst_cmpxchg:6163; GFX1250:       ; %bb.0: ; %entry6164; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 16165; GFX1250-NEXT:    v_mov_b32_e32 v0, 06166; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06167; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x86168; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc6169; GFX1250-NEXT:    s_wait_kmcnt 0x06170; GFX1250-NEXT:    v_mov_b32_e32 v2, s36171; GFX1250-NEXT:    v_mov_b32_e32 v1, s26172; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6173; GFX1250-NEXT:    v_mov_b32_e32 v3, v16174; GFX1250-NEXT:    s_wait_xcnt 0x06175; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:166176; GFX1250-NEXT:    s_endpgm6177    ptr addrspace(1) %out, i32 %in, i32 %old) {6178entry:6179  %gep = getelementptr i32, ptr addrspace(1) %out, i32 46180  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acq_rel seq_cst6181  ret void6182}6183 6184define amdgpu_kernel void @global_singlethread_seq_cst_seq_cst_cmpxchg(6185; GFX6-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6186; GFX6:       ; %bb.0: ; %entry6187; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]6188; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x06189; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x26190; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x36191; GFX6-NEXT:    s_waitcnt lgkmcnt(0)6192; GFX6-NEXT:    s_mov_b32 s12, s56193; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr56194; GFX6-NEXT:    s_mov_b32 s10, 0x100f0006195; GFX6-NEXT:    s_mov_b32 s11, -16196; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr76197; GFX6-NEXT:    s_mov_b32 s5, s126198; GFX6-NEXT:    s_mov_b32 s6, s116199; GFX6-NEXT:    s_mov_b32 s7, s106200; GFX6-NEXT:    v_mov_b32_e32 v0, s96201; GFX6-NEXT:    v_mov_b32_e32 v2, s86202; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6203; GFX6-NEXT:    v_mov_b32_e32 v1, v26204; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:166205; GFX6-NEXT:    s_endpgm6206;6207; GFX7-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6208; GFX7:       ; %bb.0: ; %entry6209; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s136210; GFX7-NEXT:    s_add_i32 s12, s12, s176211; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 86212; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]6213; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x06214; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x26215; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x36216; GFX7-NEXT:    s_mov_b64 s[10:11], 166217; GFX7-NEXT:    s_waitcnt lgkmcnt(0)6218; GFX7-NEXT:    s_mov_b32 s4, s86219; GFX7-NEXT:    s_mov_b32 s5, s96220; GFX7-NEXT:    s_mov_b32 s9, s106221; GFX7-NEXT:    s_mov_b32 s8, s116222; GFX7-NEXT:    s_add_u32 s4, s4, s96223; GFX7-NEXT:    s_addc_u32 s8, s5, s86224; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr56225; GFX7-NEXT:    s_mov_b32 s5, s86226; GFX7-NEXT:    v_mov_b32_e32 v2, s76227; GFX7-NEXT:    v_mov_b32_e32 v0, s66228; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6229; GFX7-NEXT:    v_mov_b32_e32 v3, v06230; GFX7-NEXT:    v_mov_b32_e32 v0, s46231; GFX7-NEXT:    v_mov_b32_e32 v1, s56232; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]6233; GFX7-NEXT:    s_endpgm6234;6235; GFX10-WGP-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6236; GFX10-WGP:       ; %bb.0: ; %entry6237; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 06238; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06239; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x86240; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc6241; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)6242; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s76243; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s66244; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6245; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v36246; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:166247; GFX10-WGP-NEXT:    s_endpgm6248;6249; GFX10-CU-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6250; GFX10-CU:       ; %bb.0: ; %entry6251; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 06252; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06253; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x86254; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc6255; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)6256; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s76257; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s66258; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6259; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v36260; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:166261; GFX10-CU-NEXT:    s_endpgm6262;6263; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6264; SKIP-CACHE-INV:       ; %bb.0: ; %entry6265; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]6266; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x06267; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x26268; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x36269; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)6270; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s16271; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr16272; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0006273; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -16274; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr36275; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s86276; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s76277; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s66278; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s56279; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s46280; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6281; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v26282; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:166283; SKIP-CACHE-INV-NEXT:    s_endpgm6284;6285; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6286; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry6287; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06288; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06289; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86290; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6291; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6292; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s76293; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s66294; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6295; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16296; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:166297; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm6298;6299; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6300; GFX90A-TGSPLIT:       ; %bb.0: ; %entry6301; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06302; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06303; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86304; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6305; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6306; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s76307; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s66308; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6309; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16310; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:166311; GFX90A-TGSPLIT-NEXT:    s_endpgm6312;6313; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6314; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry6315; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06316; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06317; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86318; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6319; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6320; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s36321; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s26322; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6323; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16324; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:166325; GFX942-NOTTGSPLIT-NEXT:    s_endpgm6326;6327; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6328; GFX942-TGSPLIT:       ; %bb.0: ; %entry6329; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06330; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06331; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86332; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6333; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6334; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s36335; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s26336; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6337; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16338; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:166339; GFX942-TGSPLIT-NEXT:    s_endpgm6340;6341; GFX11-WGP-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6342; GFX11-WGP:       ; %bb.0: ; %entry6343; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 06344; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06345; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86346; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6347; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)6348; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s36349; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s26350; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6351; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v36352; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166353; GFX11-WGP-NEXT:    s_endpgm6354;6355; GFX11-CU-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6356; GFX11-CU:       ; %bb.0: ; %entry6357; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 06358; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06359; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86360; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6361; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)6362; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s36363; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s26364; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6365; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v36366; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166367; GFX11-CU-NEXT:    s_endpgm6368;6369; GFX12-WGP-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6370; GFX12-WGP:       ; %bb.0: ; %entry6371; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 06372; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06373; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86374; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6375; GFX12-WGP-NEXT:    s_wait_kmcnt 0x06376; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s36377; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s26378; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6379; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v36380; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166381; GFX12-WGP-NEXT:    s_endpgm6382;6383; GFX12-CU-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6384; GFX12-CU:       ; %bb.0: ; %entry6385; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 06386; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06387; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86388; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6389; GFX12-CU-NEXT:    s_wait_kmcnt 0x06390; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s36391; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s26392; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6393; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v36394; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:166395; GFX12-CU-NEXT:    s_endpgm6396;6397; GFX1250-LABEL: global_singlethread_seq_cst_seq_cst_cmpxchg:6398; GFX1250:       ; %bb.0: ; %entry6399; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 16400; GFX1250-NEXT:    v_mov_b32_e32 v0, 06401; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06402; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x86403; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc6404; GFX1250-NEXT:    s_wait_kmcnt 0x06405; GFX1250-NEXT:    v_mov_b32_e32 v2, s36406; GFX1250-NEXT:    v_mov_b32_e32 v1, s26407; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6408; GFX1250-NEXT:    v_mov_b32_e32 v3, v16409; GFX1250-NEXT:    s_wait_xcnt 0x06410; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:166411; GFX1250-NEXT:    s_endpgm6412    ptr addrspace(1) %out, i32 %in, i32 %old) {6413entry:6414  %gep = getelementptr i32, ptr addrspace(1) %out, i32 46415  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") seq_cst seq_cst6416  ret void6417}6418 6419define amdgpu_kernel void @global_singlethread_monotonic_monotonic_ret_cmpxchg(6420; GFX6-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6421; GFX6:       ; %bb.0: ; %entry6422; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]6423; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x06424; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x26425; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x36426; GFX6-NEXT:    s_waitcnt lgkmcnt(0)6427; GFX6-NEXT:    s_mov_b32 s12, s56428; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr56429; GFX6-NEXT:    s_mov_b32 s10, 0x100f0006430; GFX6-NEXT:    s_mov_b32 s11, -16431; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr76432; GFX6-NEXT:    s_mov_b32 s5, s126433; GFX6-NEXT:    s_mov_b32 s6, s116434; GFX6-NEXT:    s_mov_b32 s7, s106435; GFX6-NEXT:    v_mov_b32_e32 v0, s96436; GFX6-NEXT:    v_mov_b32_e32 v2, s86437; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6438; GFX6-NEXT:    v_mov_b32_e32 v1, v26439; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc6440; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec6441; GFX6-NEXT:    s_waitcnt vmcnt(0)6442; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 06443; GFX6-NEXT:    s_endpgm6444;6445; GFX7-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6446; GFX7:       ; %bb.0: ; %entry6447; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s136448; GFX7-NEXT:    s_add_i32 s12, s12, s176449; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 86450; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]6451; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x06452; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x26453; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x36454; GFX7-NEXT:    s_mov_b64 s[12:13], 166455; GFX7-NEXT:    s_waitcnt lgkmcnt(0)6456; GFX7-NEXT:    s_mov_b32 s6, s46457; GFX7-NEXT:    s_mov_b32 s7, s56458; GFX7-NEXT:    s_mov_b32 s11, s126459; GFX7-NEXT:    s_mov_b32 s10, s136460; GFX7-NEXT:    s_add_u32 s6, s6, s116461; GFX7-NEXT:    s_addc_u32 s10, s7, s106462; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr76463; GFX7-NEXT:    s_mov_b32 s7, s106464; GFX7-NEXT:    v_mov_b32_e32 v2, s96465; GFX7-NEXT:    v_mov_b32_e32 v0, s86466; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6467; GFX7-NEXT:    v_mov_b32_e32 v3, v06468; GFX7-NEXT:    v_mov_b32_e32 v0, s66469; GFX7-NEXT:    v_mov_b32_e32 v1, s76470; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6471; GFX7-NEXT:    v_mov_b32_e32 v0, s46472; GFX7-NEXT:    v_mov_b32_e32 v1, s56473; GFX7-NEXT:    s_waitcnt vmcnt(0)6474; GFX7-NEXT:    flat_store_dword v[0:1], v26475; GFX7-NEXT:    s_endpgm6476;6477; GFX10-WGP-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6478; GFX10-WGP:       ; %bb.0: ; %entry6479; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 06480; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06481; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x86482; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc6483; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)6484; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s76485; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s66486; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6487; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v36488; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc6489; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)6490; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]6491; GFX10-WGP-NEXT:    s_endpgm6492;6493; GFX10-CU-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6494; GFX10-CU:       ; %bb.0: ; %entry6495; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 06496; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06497; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x86498; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc6499; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)6500; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s76501; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s66502; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6503; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v36504; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc6505; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)6506; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]6507; GFX10-CU-NEXT:    s_endpgm6508;6509; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6510; SKIP-CACHE-INV:       ; %bb.0: ; %entry6511; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]6512; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x06513; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x26514; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x36515; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)6516; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s16517; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr16518; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0006519; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -16520; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr36521; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s86522; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s76523; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s66524; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s56525; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s46526; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6527; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v26528; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc6529; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec6530; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)6531; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 06532; SKIP-CACHE-INV-NEXT:    s_endpgm6533;6534; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6535; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry6536; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06537; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06538; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86539; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6540; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6541; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s76542; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s66543; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6544; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16545; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc6546; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)6547; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]6548; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm6549;6550; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6551; GFX90A-TGSPLIT:       ; %bb.0: ; %entry6552; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06553; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06554; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86555; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6556; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6557; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s76558; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s66559; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6560; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16561; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc6562; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)6563; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]6564; GFX90A-TGSPLIT-NEXT:    s_endpgm6565;6566; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6567; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry6568; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06569; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06570; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86571; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6572; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6573; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s36574; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s26575; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6576; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16577; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc06578; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)6579; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]6580; GFX942-NOTTGSPLIT-NEXT:    s_endpgm6581;6582; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6583; GFX942-TGSPLIT:       ; %bb.0: ; %entry6584; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06585; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06586; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86587; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6588; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6589; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s36590; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s26591; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6592; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16593; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc06594; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)6595; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]6596; GFX942-TGSPLIT-NEXT:    s_endpgm6597;6598; GFX11-WGP-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6599; GFX11-WGP:       ; %bb.0: ; %entry6600; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 06601; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06602; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86603; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6604; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)6605; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s36606; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s26607; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6608; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v36609; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc6610; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)6611; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]6612; GFX11-WGP-NEXT:    s_endpgm6613;6614; GFX11-CU-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6615; GFX11-CU:       ; %bb.0: ; %entry6616; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 06617; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06618; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86619; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6620; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)6621; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s36622; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s26623; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6624; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v36625; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc6626; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)6627; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]6628; GFX11-CU-NEXT:    s_endpgm6629;6630; GFX12-WGP-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6631; GFX12-WGP:       ; %bb.0: ; %entry6632; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 06633; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06634; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86635; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6636; GFX12-WGP-NEXT:    s_wait_kmcnt 0x06637; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s36638; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s26639; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6640; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v36641; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN6642; GFX12-WGP-NEXT:    s_wait_loadcnt 0x06643; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]6644; GFX12-WGP-NEXT:    s_endpgm6645;6646; GFX12-CU-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6647; GFX12-CU:       ; %bb.0: ; %entry6648; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 06649; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06650; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86651; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6652; GFX12-CU-NEXT:    s_wait_kmcnt 0x06653; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s36654; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s26655; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6656; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v36657; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN6658; GFX12-CU-NEXT:    s_wait_loadcnt 0x06659; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]6660; GFX12-CU-NEXT:    s_endpgm6661;6662; GFX1250-LABEL: global_singlethread_monotonic_monotonic_ret_cmpxchg:6663; GFX1250:       ; %bb.0: ; %entry6664; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 16665; GFX1250-NEXT:    v_mov_b32_e32 v0, 06666; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06667; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x86668; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc6669; GFX1250-NEXT:    s_wait_kmcnt 0x06670; GFX1250-NEXT:    v_mov_b32_e32 v2, s36671; GFX1250-NEXT:    v_mov_b32_e32 v1, s26672; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6673; GFX1250-NEXT:    v_mov_b32_e32 v3, v16674; GFX1250-NEXT:    s_wait_xcnt 0x06675; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN6676; GFX1250-NEXT:    s_wait_loadcnt 0x06677; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]6678; GFX1250-NEXT:    s_endpgm6679    ptr addrspace(1) %out, i32 %in, i32 %old) {6680entry:6681  %gep = getelementptr i32, ptr addrspace(1) %out, i32 46682  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") monotonic monotonic6683  %val0 = extractvalue { i32, i1 } %val, 06684  store i32 %val0, ptr addrspace(1) %out, align 46685  ret void6686}6687 6688define amdgpu_kernel void @global_singlethread_acquire_monotonic_ret_cmpxchg(6689; GFX6-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6690; GFX6:       ; %bb.0: ; %entry6691; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]6692; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x06693; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x26694; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x36695; GFX6-NEXT:    s_waitcnt lgkmcnt(0)6696; GFX6-NEXT:    s_mov_b32 s12, s56697; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr56698; GFX6-NEXT:    s_mov_b32 s10, 0x100f0006699; GFX6-NEXT:    s_mov_b32 s11, -16700; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr76701; GFX6-NEXT:    s_mov_b32 s5, s126702; GFX6-NEXT:    s_mov_b32 s6, s116703; GFX6-NEXT:    s_mov_b32 s7, s106704; GFX6-NEXT:    v_mov_b32_e32 v0, s96705; GFX6-NEXT:    v_mov_b32_e32 v2, s86706; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6707; GFX6-NEXT:    v_mov_b32_e32 v1, v26708; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc6709; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec6710; GFX6-NEXT:    s_waitcnt vmcnt(0)6711; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 06712; GFX6-NEXT:    s_endpgm6713;6714; GFX7-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6715; GFX7:       ; %bb.0: ; %entry6716; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s136717; GFX7-NEXT:    s_add_i32 s12, s12, s176718; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 86719; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]6720; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x06721; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x26722; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x36723; GFX7-NEXT:    s_mov_b64 s[12:13], 166724; GFX7-NEXT:    s_waitcnt lgkmcnt(0)6725; GFX7-NEXT:    s_mov_b32 s6, s46726; GFX7-NEXT:    s_mov_b32 s7, s56727; GFX7-NEXT:    s_mov_b32 s11, s126728; GFX7-NEXT:    s_mov_b32 s10, s136729; GFX7-NEXT:    s_add_u32 s6, s6, s116730; GFX7-NEXT:    s_addc_u32 s10, s7, s106731; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr76732; GFX7-NEXT:    s_mov_b32 s7, s106733; GFX7-NEXT:    v_mov_b32_e32 v2, s96734; GFX7-NEXT:    v_mov_b32_e32 v0, s86735; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6736; GFX7-NEXT:    v_mov_b32_e32 v3, v06737; GFX7-NEXT:    v_mov_b32_e32 v0, s66738; GFX7-NEXT:    v_mov_b32_e32 v1, s76739; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6740; GFX7-NEXT:    v_mov_b32_e32 v0, s46741; GFX7-NEXT:    v_mov_b32_e32 v1, s56742; GFX7-NEXT:    s_waitcnt vmcnt(0)6743; GFX7-NEXT:    flat_store_dword v[0:1], v26744; GFX7-NEXT:    s_endpgm6745;6746; GFX10-WGP-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6747; GFX10-WGP:       ; %bb.0: ; %entry6748; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 06749; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06750; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x86751; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc6752; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)6753; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s76754; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s66755; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6756; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v36757; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc6758; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)6759; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]6760; GFX10-WGP-NEXT:    s_endpgm6761;6762; GFX10-CU-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6763; GFX10-CU:       ; %bb.0: ; %entry6764; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 06765; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06766; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x86767; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc6768; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)6769; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s76770; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s66771; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6772; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v36773; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc6774; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)6775; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]6776; GFX10-CU-NEXT:    s_endpgm6777;6778; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6779; SKIP-CACHE-INV:       ; %bb.0: ; %entry6780; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]6781; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x06782; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x26783; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x36784; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)6785; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s16786; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr16787; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0006788; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -16789; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr36790; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s86791; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s76792; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s66793; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s56794; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s46795; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6796; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v26797; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc6798; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec6799; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)6800; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 06801; SKIP-CACHE-INV-NEXT:    s_endpgm6802;6803; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6804; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry6805; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06806; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06807; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86808; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6809; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6810; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s76811; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s66812; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6813; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16814; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc6815; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)6816; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]6817; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm6818;6819; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6820; GFX90A-TGSPLIT:       ; %bb.0: ; %entry6821; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06822; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x06823; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x86824; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc6825; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6826; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s76827; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s66828; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6829; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16830; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc6831; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)6832; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]6833; GFX90A-TGSPLIT-NEXT:    s_endpgm6834;6835; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6836; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry6837; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 06838; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06839; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86840; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6841; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6842; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s36843; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s26844; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6845; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v16846; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc06847; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)6848; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]6849; GFX942-NOTTGSPLIT-NEXT:    s_endpgm6850;6851; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6852; GFX942-TGSPLIT:       ; %bb.0: ; %entry6853; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 06854; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x06855; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x86856; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc6857; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)6858; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s36859; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s26860; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6861; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v16862; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc06863; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)6864; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]6865; GFX942-TGSPLIT-NEXT:    s_endpgm6866;6867; GFX11-WGP-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6868; GFX11-WGP:       ; %bb.0: ; %entry6869; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 06870; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06871; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86872; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6873; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)6874; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s36875; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s26876; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6877; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v36878; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc6879; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)6880; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]6881; GFX11-WGP-NEXT:    s_endpgm6882;6883; GFX11-CU-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6884; GFX11-CU:       ; %bb.0: ; %entry6885; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 06886; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06887; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86888; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6889; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)6890; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s36891; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s26892; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6893; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v36894; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc6895; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)6896; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]6897; GFX11-CU-NEXT:    s_endpgm6898;6899; GFX12-WGP-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6900; GFX12-WGP:       ; %bb.0: ; %entry6901; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 06902; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06903; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x86904; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc6905; GFX12-WGP-NEXT:    s_wait_kmcnt 0x06906; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s36907; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s26908; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6909; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v36910; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN6911; GFX12-WGP-NEXT:    s_wait_loadcnt 0x06912; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]6913; GFX12-WGP-NEXT:    s_endpgm6914;6915; GFX12-CU-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6916; GFX12-CU:       ; %bb.0: ; %entry6917; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 06918; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06919; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x86920; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc6921; GFX12-CU-NEXT:    s_wait_kmcnt 0x06922; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s36923; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s26924; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec6925; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v36926; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN6927; GFX12-CU-NEXT:    s_wait_loadcnt 0x06928; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]6929; GFX12-CU-NEXT:    s_endpgm6930;6931; GFX1250-LABEL: global_singlethread_acquire_monotonic_ret_cmpxchg:6932; GFX1250:       ; %bb.0: ; %entry6933; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 16934; GFX1250-NEXT:    v_mov_b32_e32 v0, 06935; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x06936; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x86937; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc6938; GFX1250-NEXT:    s_wait_kmcnt 0x06939; GFX1250-NEXT:    v_mov_b32_e32 v2, s36940; GFX1250-NEXT:    v_mov_b32_e32 v1, s26941; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec6942; GFX1250-NEXT:    v_mov_b32_e32 v3, v16943; GFX1250-NEXT:    s_wait_xcnt 0x06944; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN6945; GFX1250-NEXT:    s_wait_loadcnt 0x06946; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]6947; GFX1250-NEXT:    s_endpgm6948    ptr addrspace(1) %out, i32 %in, i32 %old) {6949entry:6950  %gep = getelementptr i32, ptr addrspace(1) %out, i32 46951  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acquire monotonic6952  %val0 = extractvalue { i32, i1 } %val, 06953  store i32 %val0, ptr addrspace(1) %out, align 46954  ret void6955}6956 6957define amdgpu_kernel void @global_singlethread_release_monotonic_ret_cmpxchg(6958; GFX6-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:6959; GFX6:       ; %bb.0: ; %entry6960; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]6961; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x06962; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x26963; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x36964; GFX6-NEXT:    s_waitcnt lgkmcnt(0)6965; GFX6-NEXT:    s_mov_b32 s12, s56966; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr56967; GFX6-NEXT:    s_mov_b32 s10, 0x100f0006968; GFX6-NEXT:    s_mov_b32 s11, -16969; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr76970; GFX6-NEXT:    s_mov_b32 s5, s126971; GFX6-NEXT:    s_mov_b32 s6, s116972; GFX6-NEXT:    s_mov_b32 s7, s106973; GFX6-NEXT:    v_mov_b32_e32 v0, s96974; GFX6-NEXT:    v_mov_b32_e32 v2, s86975; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec6976; GFX6-NEXT:    v_mov_b32_e32 v1, v26977; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc6978; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec6979; GFX6-NEXT:    s_waitcnt vmcnt(0)6980; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 06981; GFX6-NEXT:    s_endpgm6982;6983; GFX7-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:6984; GFX7:       ; %bb.0: ; %entry6985; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s136986; GFX7-NEXT:    s_add_i32 s12, s12, s176987; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 86988; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]6989; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x06990; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x26991; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x36992; GFX7-NEXT:    s_mov_b64 s[12:13], 166993; GFX7-NEXT:    s_waitcnt lgkmcnt(0)6994; GFX7-NEXT:    s_mov_b32 s6, s46995; GFX7-NEXT:    s_mov_b32 s7, s56996; GFX7-NEXT:    s_mov_b32 s11, s126997; GFX7-NEXT:    s_mov_b32 s10, s136998; GFX7-NEXT:    s_add_u32 s6, s6, s116999; GFX7-NEXT:    s_addc_u32 s10, s7, s107000; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr77001; GFX7-NEXT:    s_mov_b32 s7, s107002; GFX7-NEXT:    v_mov_b32_e32 v2, s97003; GFX7-NEXT:    v_mov_b32_e32 v0, s87004; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7005; GFX7-NEXT:    v_mov_b32_e32 v3, v07006; GFX7-NEXT:    v_mov_b32_e32 v0, s67007; GFX7-NEXT:    v_mov_b32_e32 v1, s77008; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7009; GFX7-NEXT:    v_mov_b32_e32 v0, s47010; GFX7-NEXT:    v_mov_b32_e32 v1, s57011; GFX7-NEXT:    s_waitcnt vmcnt(0)7012; GFX7-NEXT:    flat_store_dword v[0:1], v27013; GFX7-NEXT:    s_endpgm7014;7015; GFX10-WGP-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7016; GFX10-WGP:       ; %bb.0: ; %entry7017; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 07018; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07019; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x87020; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc7021; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)7022; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s77023; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s67024; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7025; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v37026; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7027; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)7028; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]7029; GFX10-WGP-NEXT:    s_endpgm7030;7031; GFX10-CU-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7032; GFX10-CU:       ; %bb.0: ; %entry7033; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 07034; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07035; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x87036; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc7037; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)7038; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s77039; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s67040; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7041; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v37042; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7043; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)7044; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]7045; GFX10-CU-NEXT:    s_endpgm7046;7047; SKIP-CACHE-INV-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7048; SKIP-CACHE-INV:       ; %bb.0: ; %entry7049; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]7050; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x07051; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x27052; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x37053; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)7054; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s17055; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr17056; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0007057; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -17058; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr37059; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s87060; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s77061; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s67062; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s57063; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s47064; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec7065; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v27066; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc7067; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec7068; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)7069; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 07070; SKIP-CACHE-INV-NEXT:    s_endpgm7071;7072; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7073; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry7074; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07075; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07076; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87077; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7078; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7079; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s77080; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s67081; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7082; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17083; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7084; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7085; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7086; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm7087;7088; GFX90A-TGSPLIT-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7089; GFX90A-TGSPLIT:       ; %bb.0: ; %entry7090; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07091; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07092; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87093; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7094; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7095; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s77096; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s67097; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7098; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17099; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7100; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7101; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7102; GFX90A-TGSPLIT-NEXT:    s_endpgm7103;7104; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7105; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry7106; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07107; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07108; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87109; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7110; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7111; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s37112; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s27113; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7114; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17115; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07116; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7117; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7118; GFX942-NOTTGSPLIT-NEXT:    s_endpgm7119;7120; GFX942-TGSPLIT-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7121; GFX942-TGSPLIT:       ; %bb.0: ; %entry7122; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07123; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07124; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87125; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7126; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7127; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s37128; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s27129; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7130; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17131; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07132; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7133; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7134; GFX942-TGSPLIT-NEXT:    s_endpgm7135;7136; GFX11-WGP-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7137; GFX11-WGP:       ; %bb.0: ; %entry7138; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 07139; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07140; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87141; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7142; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)7143; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s37144; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s27145; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7146; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v37147; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7148; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)7149; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7150; GFX11-WGP-NEXT:    s_endpgm7151;7152; GFX11-CU-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7153; GFX11-CU:       ; %bb.0: ; %entry7154; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 07155; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07156; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87157; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7158; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)7159; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s37160; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s27161; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7162; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v37163; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7164; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)7165; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]7166; GFX11-CU-NEXT:    s_endpgm7167;7168; GFX12-WGP-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7169; GFX12-WGP:       ; %bb.0: ; %entry7170; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 07171; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07172; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87173; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7174; GFX12-WGP-NEXT:    s_wait_kmcnt 0x07175; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s37176; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s27177; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7178; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v37179; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN7180; GFX12-WGP-NEXT:    s_wait_loadcnt 0x07181; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7182; GFX12-WGP-NEXT:    s_endpgm7183;7184; GFX12-CU-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7185; GFX12-CU:       ; %bb.0: ; %entry7186; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 07187; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07188; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87189; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7190; GFX12-CU-NEXT:    s_wait_kmcnt 0x07191; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s37192; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s27193; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7194; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v37195; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN7196; GFX12-CU-NEXT:    s_wait_loadcnt 0x07197; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]7198; GFX12-CU-NEXT:    s_endpgm7199;7200; GFX1250-LABEL: global_singlethread_release_monotonic_ret_cmpxchg:7201; GFX1250:       ; %bb.0: ; %entry7202; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 17203; GFX1250-NEXT:    v_mov_b32_e32 v0, 07204; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07205; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x87206; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc7207; GFX1250-NEXT:    s_wait_kmcnt 0x07208; GFX1250-NEXT:    v_mov_b32_e32 v2, s37209; GFX1250-NEXT:    v_mov_b32_e32 v1, s27210; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7211; GFX1250-NEXT:    v_mov_b32_e32 v3, v17212; GFX1250-NEXT:    s_wait_xcnt 0x07213; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN7214; GFX1250-NEXT:    s_wait_loadcnt 0x07215; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]7216; GFX1250-NEXT:    s_endpgm7217    ptr addrspace(1) %out, i32 %in, i32 %old) {7218entry:7219  %gep = getelementptr i32, ptr addrspace(1) %out, i32 47220  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") release monotonic7221  %val0 = extractvalue { i32, i1 } %val, 07222  store i32 %val0, ptr addrspace(1) %out, align 47223  ret void7224}7225 7226define amdgpu_kernel void @global_singlethread_acq_rel_monotonic_ret_cmpxchg(7227; GFX6-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7228; GFX6:       ; %bb.0: ; %entry7229; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]7230; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x07231; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x27232; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x37233; GFX6-NEXT:    s_waitcnt lgkmcnt(0)7234; GFX6-NEXT:    s_mov_b32 s12, s57235; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr57236; GFX6-NEXT:    s_mov_b32 s10, 0x100f0007237; GFX6-NEXT:    s_mov_b32 s11, -17238; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr77239; GFX6-NEXT:    s_mov_b32 s5, s127240; GFX6-NEXT:    s_mov_b32 s6, s117241; GFX6-NEXT:    s_mov_b32 s7, s107242; GFX6-NEXT:    v_mov_b32_e32 v0, s97243; GFX6-NEXT:    v_mov_b32_e32 v2, s87244; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec7245; GFX6-NEXT:    v_mov_b32_e32 v1, v27246; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc7247; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec7248; GFX6-NEXT:    s_waitcnt vmcnt(0)7249; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 07250; GFX6-NEXT:    s_endpgm7251;7252; GFX7-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7253; GFX7:       ; %bb.0: ; %entry7254; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s137255; GFX7-NEXT:    s_add_i32 s12, s12, s177256; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 87257; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]7258; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x07259; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x27260; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x37261; GFX7-NEXT:    s_mov_b64 s[12:13], 167262; GFX7-NEXT:    s_waitcnt lgkmcnt(0)7263; GFX7-NEXT:    s_mov_b32 s6, s47264; GFX7-NEXT:    s_mov_b32 s7, s57265; GFX7-NEXT:    s_mov_b32 s11, s127266; GFX7-NEXT:    s_mov_b32 s10, s137267; GFX7-NEXT:    s_add_u32 s6, s6, s117268; GFX7-NEXT:    s_addc_u32 s10, s7, s107269; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr77270; GFX7-NEXT:    s_mov_b32 s7, s107271; GFX7-NEXT:    v_mov_b32_e32 v2, s97272; GFX7-NEXT:    v_mov_b32_e32 v0, s87273; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7274; GFX7-NEXT:    v_mov_b32_e32 v3, v07275; GFX7-NEXT:    v_mov_b32_e32 v0, s67276; GFX7-NEXT:    v_mov_b32_e32 v1, s77277; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7278; GFX7-NEXT:    v_mov_b32_e32 v0, s47279; GFX7-NEXT:    v_mov_b32_e32 v1, s57280; GFX7-NEXT:    s_waitcnt vmcnt(0)7281; GFX7-NEXT:    flat_store_dword v[0:1], v27282; GFX7-NEXT:    s_endpgm7283;7284; GFX10-WGP-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7285; GFX10-WGP:       ; %bb.0: ; %entry7286; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 07287; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07288; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x87289; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc7290; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)7291; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s77292; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s67293; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7294; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v37295; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7296; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)7297; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]7298; GFX10-WGP-NEXT:    s_endpgm7299;7300; GFX10-CU-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7301; GFX10-CU:       ; %bb.0: ; %entry7302; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 07303; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07304; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x87305; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc7306; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)7307; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s77308; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s67309; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7310; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v37311; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7312; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)7313; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]7314; GFX10-CU-NEXT:    s_endpgm7315;7316; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7317; SKIP-CACHE-INV:       ; %bb.0: ; %entry7318; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]7319; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x07320; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x27321; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x37322; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)7323; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s17324; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr17325; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0007326; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -17327; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr37328; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s87329; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s77330; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s67331; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s57332; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s47333; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec7334; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v27335; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc7336; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec7337; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)7338; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 07339; SKIP-CACHE-INV-NEXT:    s_endpgm7340;7341; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7342; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry7343; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07344; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07345; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87346; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7347; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7348; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s77349; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s67350; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7351; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17352; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7353; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7354; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7355; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm7356;7357; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7358; GFX90A-TGSPLIT:       ; %bb.0: ; %entry7359; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07360; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07361; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87362; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7363; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7364; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s77365; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s67366; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7367; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17368; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7369; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7370; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7371; GFX90A-TGSPLIT-NEXT:    s_endpgm7372;7373; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7374; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry7375; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07376; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07377; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87378; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7379; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7380; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s37381; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s27382; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7383; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17384; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07385; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7386; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7387; GFX942-NOTTGSPLIT-NEXT:    s_endpgm7388;7389; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7390; GFX942-TGSPLIT:       ; %bb.0: ; %entry7391; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07392; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07393; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87394; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7395; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7396; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s37397; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s27398; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7399; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17400; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07401; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7402; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7403; GFX942-TGSPLIT-NEXT:    s_endpgm7404;7405; GFX11-WGP-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7406; GFX11-WGP:       ; %bb.0: ; %entry7407; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 07408; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07409; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87410; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7411; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)7412; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s37413; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s27414; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7415; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v37416; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7417; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)7418; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7419; GFX11-WGP-NEXT:    s_endpgm7420;7421; GFX11-CU-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7422; GFX11-CU:       ; %bb.0: ; %entry7423; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 07424; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07425; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87426; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7427; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)7428; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s37429; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s27430; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7431; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v37432; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7433; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)7434; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]7435; GFX11-CU-NEXT:    s_endpgm7436;7437; GFX12-WGP-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7438; GFX12-WGP:       ; %bb.0: ; %entry7439; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 07440; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07441; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87442; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7443; GFX12-WGP-NEXT:    s_wait_kmcnt 0x07444; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s37445; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s27446; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7447; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v37448; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN7449; GFX12-WGP-NEXT:    s_wait_loadcnt 0x07450; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7451; GFX12-WGP-NEXT:    s_endpgm7452;7453; GFX12-CU-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7454; GFX12-CU:       ; %bb.0: ; %entry7455; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 07456; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07457; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87458; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7459; GFX12-CU-NEXT:    s_wait_kmcnt 0x07460; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s37461; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s27462; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7463; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v37464; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN7465; GFX12-CU-NEXT:    s_wait_loadcnt 0x07466; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]7467; GFX12-CU-NEXT:    s_endpgm7468;7469; GFX1250-LABEL: global_singlethread_acq_rel_monotonic_ret_cmpxchg:7470; GFX1250:       ; %bb.0: ; %entry7471; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 17472; GFX1250-NEXT:    v_mov_b32_e32 v0, 07473; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07474; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x87475; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc7476; GFX1250-NEXT:    s_wait_kmcnt 0x07477; GFX1250-NEXT:    v_mov_b32_e32 v2, s37478; GFX1250-NEXT:    v_mov_b32_e32 v1, s27479; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7480; GFX1250-NEXT:    v_mov_b32_e32 v3, v17481; GFX1250-NEXT:    s_wait_xcnt 0x07482; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN7483; GFX1250-NEXT:    s_wait_loadcnt 0x07484; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]7485; GFX1250-NEXT:    s_endpgm7486    ptr addrspace(1) %out, i32 %in, i32 %old) {7487entry:7488  %gep = getelementptr i32, ptr addrspace(1) %out, i32 47489  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acq_rel monotonic7490  %val0 = extractvalue { i32, i1 } %val, 07491  store i32 %val0, ptr addrspace(1) %out, align 47492  ret void7493}7494 7495define amdgpu_kernel void @global_singlethread_seq_cst_monotonic_ret_cmpxchg(7496; GFX6-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7497; GFX6:       ; %bb.0: ; %entry7498; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]7499; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x07500; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x27501; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x37502; GFX6-NEXT:    s_waitcnt lgkmcnt(0)7503; GFX6-NEXT:    s_mov_b32 s12, s57504; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr57505; GFX6-NEXT:    s_mov_b32 s10, 0x100f0007506; GFX6-NEXT:    s_mov_b32 s11, -17507; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr77508; GFX6-NEXT:    s_mov_b32 s5, s127509; GFX6-NEXT:    s_mov_b32 s6, s117510; GFX6-NEXT:    s_mov_b32 s7, s107511; GFX6-NEXT:    v_mov_b32_e32 v0, s97512; GFX6-NEXT:    v_mov_b32_e32 v2, s87513; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec7514; GFX6-NEXT:    v_mov_b32_e32 v1, v27515; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc7516; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec7517; GFX6-NEXT:    s_waitcnt vmcnt(0)7518; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 07519; GFX6-NEXT:    s_endpgm7520;7521; GFX7-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7522; GFX7:       ; %bb.0: ; %entry7523; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s137524; GFX7-NEXT:    s_add_i32 s12, s12, s177525; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 87526; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]7527; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x07528; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x27529; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x37530; GFX7-NEXT:    s_mov_b64 s[12:13], 167531; GFX7-NEXT:    s_waitcnt lgkmcnt(0)7532; GFX7-NEXT:    s_mov_b32 s6, s47533; GFX7-NEXT:    s_mov_b32 s7, s57534; GFX7-NEXT:    s_mov_b32 s11, s127535; GFX7-NEXT:    s_mov_b32 s10, s137536; GFX7-NEXT:    s_add_u32 s6, s6, s117537; GFX7-NEXT:    s_addc_u32 s10, s7, s107538; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr77539; GFX7-NEXT:    s_mov_b32 s7, s107540; GFX7-NEXT:    v_mov_b32_e32 v2, s97541; GFX7-NEXT:    v_mov_b32_e32 v0, s87542; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7543; GFX7-NEXT:    v_mov_b32_e32 v3, v07544; GFX7-NEXT:    v_mov_b32_e32 v0, s67545; GFX7-NEXT:    v_mov_b32_e32 v1, s77546; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7547; GFX7-NEXT:    v_mov_b32_e32 v0, s47548; GFX7-NEXT:    v_mov_b32_e32 v1, s57549; GFX7-NEXT:    s_waitcnt vmcnt(0)7550; GFX7-NEXT:    flat_store_dword v[0:1], v27551; GFX7-NEXT:    s_endpgm7552;7553; GFX10-WGP-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7554; GFX10-WGP:       ; %bb.0: ; %entry7555; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 07556; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07557; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x87558; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc7559; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)7560; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s77561; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s67562; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7563; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v37564; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7565; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)7566; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]7567; GFX10-WGP-NEXT:    s_endpgm7568;7569; GFX10-CU-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7570; GFX10-CU:       ; %bb.0: ; %entry7571; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 07572; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07573; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x87574; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc7575; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)7576; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s77577; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s67578; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7579; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v37580; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7581; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)7582; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]7583; GFX10-CU-NEXT:    s_endpgm7584;7585; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7586; SKIP-CACHE-INV:       ; %bb.0: ; %entry7587; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]7588; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x07589; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x27590; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x37591; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)7592; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s17593; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr17594; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0007595; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -17596; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr37597; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s87598; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s77599; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s67600; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s57601; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s47602; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec7603; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v27604; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc7605; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec7606; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)7607; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 07608; SKIP-CACHE-INV-NEXT:    s_endpgm7609;7610; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7611; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry7612; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07613; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07614; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87615; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7616; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7617; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s77618; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s67619; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7620; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17621; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7622; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7623; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7624; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm7625;7626; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7627; GFX90A-TGSPLIT:       ; %bb.0: ; %entry7628; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07629; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07630; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87631; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7632; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7633; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s77634; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s67635; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7636; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17637; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7638; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7639; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7640; GFX90A-TGSPLIT-NEXT:    s_endpgm7641;7642; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7643; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry7644; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07645; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07646; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87647; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7648; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7649; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s37650; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s27651; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7652; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17653; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07654; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7655; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7656; GFX942-NOTTGSPLIT-NEXT:    s_endpgm7657;7658; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7659; GFX942-TGSPLIT:       ; %bb.0: ; %entry7660; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07661; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07662; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87663; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7664; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7665; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s37666; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s27667; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7668; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17669; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07670; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7671; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7672; GFX942-TGSPLIT-NEXT:    s_endpgm7673;7674; GFX11-WGP-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7675; GFX11-WGP:       ; %bb.0: ; %entry7676; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 07677; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07678; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87679; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7680; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)7681; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s37682; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s27683; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7684; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v37685; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7686; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)7687; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7688; GFX11-WGP-NEXT:    s_endpgm7689;7690; GFX11-CU-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7691; GFX11-CU:       ; %bb.0: ; %entry7692; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 07693; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07694; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87695; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7696; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)7697; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s37698; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s27699; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7700; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v37701; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7702; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)7703; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]7704; GFX11-CU-NEXT:    s_endpgm7705;7706; GFX12-WGP-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7707; GFX12-WGP:       ; %bb.0: ; %entry7708; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 07709; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07710; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87711; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7712; GFX12-WGP-NEXT:    s_wait_kmcnt 0x07713; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s37714; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s27715; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7716; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v37717; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN7718; GFX12-WGP-NEXT:    s_wait_loadcnt 0x07719; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7720; GFX12-WGP-NEXT:    s_endpgm7721;7722; GFX12-CU-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7723; GFX12-CU:       ; %bb.0: ; %entry7724; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 07725; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07726; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87727; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7728; GFX12-CU-NEXT:    s_wait_kmcnt 0x07729; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s37730; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s27731; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7732; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v37733; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN7734; GFX12-CU-NEXT:    s_wait_loadcnt 0x07735; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]7736; GFX12-CU-NEXT:    s_endpgm7737;7738; GFX1250-LABEL: global_singlethread_seq_cst_monotonic_ret_cmpxchg:7739; GFX1250:       ; %bb.0: ; %entry7740; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 17741; GFX1250-NEXT:    v_mov_b32_e32 v0, 07742; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07743; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x87744; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc7745; GFX1250-NEXT:    s_wait_kmcnt 0x07746; GFX1250-NEXT:    v_mov_b32_e32 v2, s37747; GFX1250-NEXT:    v_mov_b32_e32 v1, s27748; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7749; GFX1250-NEXT:    v_mov_b32_e32 v3, v17750; GFX1250-NEXT:    s_wait_xcnt 0x07751; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN7752; GFX1250-NEXT:    s_wait_loadcnt 0x07753; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]7754; GFX1250-NEXT:    s_endpgm7755    ptr addrspace(1) %out, i32 %in, i32 %old) {7756entry:7757  %gep = getelementptr i32, ptr addrspace(1) %out, i32 47758  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") seq_cst monotonic7759  %val0 = extractvalue { i32, i1 } %val, 07760  store i32 %val0, ptr addrspace(1) %out, align 47761  ret void7762}7763 7764define amdgpu_kernel void @global_singlethread_monotonic_acquire_ret_cmpxchg(7765; GFX6-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7766; GFX6:       ; %bb.0: ; %entry7767; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]7768; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x07769; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x27770; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x37771; GFX6-NEXT:    s_waitcnt lgkmcnt(0)7772; GFX6-NEXT:    s_mov_b32 s12, s57773; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr57774; GFX6-NEXT:    s_mov_b32 s10, 0x100f0007775; GFX6-NEXT:    s_mov_b32 s11, -17776; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr77777; GFX6-NEXT:    s_mov_b32 s5, s127778; GFX6-NEXT:    s_mov_b32 s6, s117779; GFX6-NEXT:    s_mov_b32 s7, s107780; GFX6-NEXT:    v_mov_b32_e32 v0, s97781; GFX6-NEXT:    v_mov_b32_e32 v2, s87782; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec7783; GFX6-NEXT:    v_mov_b32_e32 v1, v27784; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc7785; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec7786; GFX6-NEXT:    s_waitcnt vmcnt(0)7787; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 07788; GFX6-NEXT:    s_endpgm7789;7790; GFX7-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7791; GFX7:       ; %bb.0: ; %entry7792; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s137793; GFX7-NEXT:    s_add_i32 s12, s12, s177794; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 87795; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]7796; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x07797; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x27798; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x37799; GFX7-NEXT:    s_mov_b64 s[12:13], 167800; GFX7-NEXT:    s_waitcnt lgkmcnt(0)7801; GFX7-NEXT:    s_mov_b32 s6, s47802; GFX7-NEXT:    s_mov_b32 s7, s57803; GFX7-NEXT:    s_mov_b32 s11, s127804; GFX7-NEXT:    s_mov_b32 s10, s137805; GFX7-NEXT:    s_add_u32 s6, s6, s117806; GFX7-NEXT:    s_addc_u32 s10, s7, s107807; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr77808; GFX7-NEXT:    s_mov_b32 s7, s107809; GFX7-NEXT:    v_mov_b32_e32 v2, s97810; GFX7-NEXT:    v_mov_b32_e32 v0, s87811; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7812; GFX7-NEXT:    v_mov_b32_e32 v3, v07813; GFX7-NEXT:    v_mov_b32_e32 v0, s67814; GFX7-NEXT:    v_mov_b32_e32 v1, s77815; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7816; GFX7-NEXT:    v_mov_b32_e32 v0, s47817; GFX7-NEXT:    v_mov_b32_e32 v1, s57818; GFX7-NEXT:    s_waitcnt vmcnt(0)7819; GFX7-NEXT:    flat_store_dword v[0:1], v27820; GFX7-NEXT:    s_endpgm7821;7822; GFX10-WGP-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7823; GFX10-WGP:       ; %bb.0: ; %entry7824; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 07825; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07826; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x87827; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc7828; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)7829; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s77830; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s67831; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7832; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v37833; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7834; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)7835; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]7836; GFX10-WGP-NEXT:    s_endpgm7837;7838; GFX10-CU-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7839; GFX10-CU:       ; %bb.0: ; %entry7840; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 07841; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07842; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x87843; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc7844; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)7845; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s77846; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s67847; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7848; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v37849; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc7850; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)7851; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]7852; GFX10-CU-NEXT:    s_endpgm7853;7854; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7855; SKIP-CACHE-INV:       ; %bb.0: ; %entry7856; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]7857; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x07858; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x27859; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x37860; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)7861; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s17862; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr17863; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0007864; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -17865; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr37866; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s87867; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s77868; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s67869; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s57870; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s47871; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec7872; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v27873; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc7874; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec7875; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)7876; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 07877; SKIP-CACHE-INV-NEXT:    s_endpgm7878;7879; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7880; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry7881; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07882; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07883; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87884; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7885; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7886; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s77887; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s67888; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7889; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17890; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7891; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7892; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7893; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm7894;7895; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7896; GFX90A-TGSPLIT:       ; %bb.0: ; %entry7897; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07898; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x07899; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x87900; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc7901; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7902; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s77903; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s67904; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7905; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17906; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc7907; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7908; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]7909; GFX90A-TGSPLIT-NEXT:    s_endpgm7910;7911; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7912; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry7913; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 07914; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07915; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87916; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7917; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7918; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s37919; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s27920; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7921; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v17922; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07923; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)7924; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7925; GFX942-NOTTGSPLIT-NEXT:    s_endpgm7926;7927; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7928; GFX942-TGSPLIT:       ; %bb.0: ; %entry7929; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 07930; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x07931; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x87932; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc7933; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)7934; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s37935; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s27936; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec7937; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v17938; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc07939; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)7940; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]7941; GFX942-TGSPLIT-NEXT:    s_endpgm7942;7943; GFX11-WGP-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7944; GFX11-WGP:       ; %bb.0: ; %entry7945; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 07946; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07947; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87948; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7949; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)7950; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s37951; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s27952; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7953; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v37954; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7955; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)7956; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7957; GFX11-WGP-NEXT:    s_endpgm7958;7959; GFX11-CU-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7960; GFX11-CU:       ; %bb.0: ; %entry7961; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 07962; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07963; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87964; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7965; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)7966; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s37967; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s27968; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7969; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v37970; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc7971; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)7972; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]7973; GFX11-CU-NEXT:    s_endpgm7974;7975; GFX12-WGP-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7976; GFX12-WGP:       ; %bb.0: ; %entry7977; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 07978; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07979; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x87980; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc7981; GFX12-WGP-NEXT:    s_wait_kmcnt 0x07982; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s37983; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s27984; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec7985; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v37986; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN7987; GFX12-WGP-NEXT:    s_wait_loadcnt 0x07988; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]7989; GFX12-WGP-NEXT:    s_endpgm7990;7991; GFX12-CU-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:7992; GFX12-CU:       ; %bb.0: ; %entry7993; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 07994; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x07995; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x87996; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc7997; GFX12-CU-NEXT:    s_wait_kmcnt 0x07998; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s37999; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s28000; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8001; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v38002; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN8003; GFX12-CU-NEXT:    s_wait_loadcnt 0x08004; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]8005; GFX12-CU-NEXT:    s_endpgm8006;8007; GFX1250-LABEL: global_singlethread_monotonic_acquire_ret_cmpxchg:8008; GFX1250:       ; %bb.0: ; %entry8009; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 18010; GFX1250-NEXT:    v_mov_b32_e32 v0, 08011; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08012; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x88013; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc8014; GFX1250-NEXT:    s_wait_kmcnt 0x08015; GFX1250-NEXT:    v_mov_b32_e32 v2, s38016; GFX1250-NEXT:    v_mov_b32_e32 v1, s28017; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8018; GFX1250-NEXT:    v_mov_b32_e32 v3, v18019; GFX1250-NEXT:    s_wait_xcnt 0x08020; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN8021; GFX1250-NEXT:    s_wait_loadcnt 0x08022; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]8023; GFX1250-NEXT:    s_endpgm8024    ptr addrspace(1) %out, i32 %in, i32 %old) {8025entry:8026  %gep = getelementptr i32, ptr addrspace(1) %out, i32 48027  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") monotonic acquire8028  %val0 = extractvalue { i32, i1 } %val, 08029  store i32 %val0, ptr addrspace(1) %out, align 48030  ret void8031}8032 8033define amdgpu_kernel void @global_singlethread_acquire_acquire_ret_cmpxchg(8034; GFX6-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8035; GFX6:       ; %bb.0: ; %entry8036; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]8037; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08038; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x28039; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x38040; GFX6-NEXT:    s_waitcnt lgkmcnt(0)8041; GFX6-NEXT:    s_mov_b32 s12, s58042; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr58043; GFX6-NEXT:    s_mov_b32 s10, 0x100f0008044; GFX6-NEXT:    s_mov_b32 s11, -18045; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr78046; GFX6-NEXT:    s_mov_b32 s5, s128047; GFX6-NEXT:    s_mov_b32 s6, s118048; GFX6-NEXT:    s_mov_b32 s7, s108049; GFX6-NEXT:    v_mov_b32_e32 v0, s98050; GFX6-NEXT:    v_mov_b32_e32 v2, s88051; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8052; GFX6-NEXT:    v_mov_b32_e32 v1, v28053; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc8054; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8055; GFX6-NEXT:    s_waitcnt vmcnt(0)8056; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 08057; GFX6-NEXT:    s_endpgm8058;8059; GFX7-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8060; GFX7:       ; %bb.0: ; %entry8061; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s138062; GFX7-NEXT:    s_add_i32 s12, s12, s178063; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 88064; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]8065; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08066; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x28067; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x38068; GFX7-NEXT:    s_mov_b64 s[12:13], 168069; GFX7-NEXT:    s_waitcnt lgkmcnt(0)8070; GFX7-NEXT:    s_mov_b32 s6, s48071; GFX7-NEXT:    s_mov_b32 s7, s58072; GFX7-NEXT:    s_mov_b32 s11, s128073; GFX7-NEXT:    s_mov_b32 s10, s138074; GFX7-NEXT:    s_add_u32 s6, s6, s118075; GFX7-NEXT:    s_addc_u32 s10, s7, s108076; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr78077; GFX7-NEXT:    s_mov_b32 s7, s108078; GFX7-NEXT:    v_mov_b32_e32 v2, s98079; GFX7-NEXT:    v_mov_b32_e32 v0, s88080; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8081; GFX7-NEXT:    v_mov_b32_e32 v3, v08082; GFX7-NEXT:    v_mov_b32_e32 v0, s68083; GFX7-NEXT:    v_mov_b32_e32 v1, s78084; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8085; GFX7-NEXT:    v_mov_b32_e32 v0, s48086; GFX7-NEXT:    v_mov_b32_e32 v1, s58087; GFX7-NEXT:    s_waitcnt vmcnt(0)8088; GFX7-NEXT:    flat_store_dword v[0:1], v28089; GFX7-NEXT:    s_endpgm8090;8091; GFX10-WGP-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8092; GFX10-WGP:       ; %bb.0: ; %entry8093; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 08094; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08095; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x88096; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc8097; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)8098; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s78099; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s68100; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8101; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v38102; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8103; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)8104; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]8105; GFX10-WGP-NEXT:    s_endpgm8106;8107; GFX10-CU-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8108; GFX10-CU:       ; %bb.0: ; %entry8109; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 08110; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08111; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x88112; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc8113; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)8114; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s78115; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s68116; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8117; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v38118; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8119; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)8120; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]8121; GFX10-CU-NEXT:    s_endpgm8122;8123; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8124; SKIP-CACHE-INV:       ; %bb.0: ; %entry8125; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]8126; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x08127; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x28128; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x38129; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)8130; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s18131; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr18132; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0008133; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -18134; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr38135; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s88136; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s78137; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s68138; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s58139; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s48140; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8141; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v28142; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc8143; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8144; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)8145; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 08146; SKIP-CACHE-INV-NEXT:    s_endpgm8147;8148; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8149; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry8150; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08151; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08152; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88153; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8154; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8155; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s78156; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s68157; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8158; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18159; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8160; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)8161; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8162; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm8163;8164; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8165; GFX90A-TGSPLIT:       ; %bb.0: ; %entry8166; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 08167; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08168; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88169; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8170; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8171; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s78172; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s68173; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8174; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v18175; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8176; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)8177; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8178; GFX90A-TGSPLIT-NEXT:    s_endpgm8179;8180; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8181; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry8182; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08183; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x08184; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x88185; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc8186; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8187; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s38188; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s28189; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8190; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18191; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc08192; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)8193; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]8194; GFX942-NOTTGSPLIT-NEXT:    s_endpgm8195;8196; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8197; GFX942-TGSPLIT:       ; %bb.0: ; %entry8198; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 08199; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x08200; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x88201; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc8202; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8203; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s38204; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s28205; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8206; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v18207; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc08208; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)8209; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]8210; GFX942-TGSPLIT-NEXT:    s_endpgm8211;8212; GFX11-WGP-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8213; GFX11-WGP:       ; %bb.0: ; %entry8214; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 08215; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08216; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x88217; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc8218; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)8219; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s38220; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s28221; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8222; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v38223; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc8224; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)8225; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]8226; GFX11-WGP-NEXT:    s_endpgm8227;8228; GFX11-CU-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8229; GFX11-CU:       ; %bb.0: ; %entry8230; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 08231; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08232; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x88233; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc8234; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)8235; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s38236; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s28237; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8238; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v38239; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc8240; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)8241; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]8242; GFX11-CU-NEXT:    s_endpgm8243;8244; GFX12-WGP-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8245; GFX12-WGP:       ; %bb.0: ; %entry8246; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 08247; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08248; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x88249; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc8250; GFX12-WGP-NEXT:    s_wait_kmcnt 0x08251; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s38252; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s28253; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8254; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v38255; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN8256; GFX12-WGP-NEXT:    s_wait_loadcnt 0x08257; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]8258; GFX12-WGP-NEXT:    s_endpgm8259;8260; GFX12-CU-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8261; GFX12-CU:       ; %bb.0: ; %entry8262; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 08263; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08264; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x88265; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc8266; GFX12-CU-NEXT:    s_wait_kmcnt 0x08267; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s38268; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s28269; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8270; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v38271; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN8272; GFX12-CU-NEXT:    s_wait_loadcnt 0x08273; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]8274; GFX12-CU-NEXT:    s_endpgm8275;8276; GFX1250-LABEL: global_singlethread_acquire_acquire_ret_cmpxchg:8277; GFX1250:       ; %bb.0: ; %entry8278; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 18279; GFX1250-NEXT:    v_mov_b32_e32 v0, 08280; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08281; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x88282; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc8283; GFX1250-NEXT:    s_wait_kmcnt 0x08284; GFX1250-NEXT:    v_mov_b32_e32 v2, s38285; GFX1250-NEXT:    v_mov_b32_e32 v1, s28286; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8287; GFX1250-NEXT:    v_mov_b32_e32 v3, v18288; GFX1250-NEXT:    s_wait_xcnt 0x08289; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN8290; GFX1250-NEXT:    s_wait_loadcnt 0x08291; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]8292; GFX1250-NEXT:    s_endpgm8293    ptr addrspace(1) %out, i32 %in, i32 %old) {8294entry:8295  %gep = getelementptr i32, ptr addrspace(1) %out, i32 48296  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acquire acquire8297  %val0 = extractvalue { i32, i1 } %val, 08298  store i32 %val0, ptr addrspace(1) %out, align 48299  ret void8300}8301 8302define amdgpu_kernel void @global_singlethread_release_acquire_ret_cmpxchg(8303; GFX6-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8304; GFX6:       ; %bb.0: ; %entry8305; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]8306; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08307; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x28308; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x38309; GFX6-NEXT:    s_waitcnt lgkmcnt(0)8310; GFX6-NEXT:    s_mov_b32 s12, s58311; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr58312; GFX6-NEXT:    s_mov_b32 s10, 0x100f0008313; GFX6-NEXT:    s_mov_b32 s11, -18314; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr78315; GFX6-NEXT:    s_mov_b32 s5, s128316; GFX6-NEXT:    s_mov_b32 s6, s118317; GFX6-NEXT:    s_mov_b32 s7, s108318; GFX6-NEXT:    v_mov_b32_e32 v0, s98319; GFX6-NEXT:    v_mov_b32_e32 v2, s88320; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8321; GFX6-NEXT:    v_mov_b32_e32 v1, v28322; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc8323; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8324; GFX6-NEXT:    s_waitcnt vmcnt(0)8325; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 08326; GFX6-NEXT:    s_endpgm8327;8328; GFX7-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8329; GFX7:       ; %bb.0: ; %entry8330; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s138331; GFX7-NEXT:    s_add_i32 s12, s12, s178332; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 88333; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]8334; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08335; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x28336; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x38337; GFX7-NEXT:    s_mov_b64 s[12:13], 168338; GFX7-NEXT:    s_waitcnt lgkmcnt(0)8339; GFX7-NEXT:    s_mov_b32 s6, s48340; GFX7-NEXT:    s_mov_b32 s7, s58341; GFX7-NEXT:    s_mov_b32 s11, s128342; GFX7-NEXT:    s_mov_b32 s10, s138343; GFX7-NEXT:    s_add_u32 s6, s6, s118344; GFX7-NEXT:    s_addc_u32 s10, s7, s108345; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr78346; GFX7-NEXT:    s_mov_b32 s7, s108347; GFX7-NEXT:    v_mov_b32_e32 v2, s98348; GFX7-NEXT:    v_mov_b32_e32 v0, s88349; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8350; GFX7-NEXT:    v_mov_b32_e32 v3, v08351; GFX7-NEXT:    v_mov_b32_e32 v0, s68352; GFX7-NEXT:    v_mov_b32_e32 v1, s78353; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8354; GFX7-NEXT:    v_mov_b32_e32 v0, s48355; GFX7-NEXT:    v_mov_b32_e32 v1, s58356; GFX7-NEXT:    s_waitcnt vmcnt(0)8357; GFX7-NEXT:    flat_store_dword v[0:1], v28358; GFX7-NEXT:    s_endpgm8359;8360; GFX10-WGP-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8361; GFX10-WGP:       ; %bb.0: ; %entry8362; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 08363; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08364; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x88365; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc8366; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)8367; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s78368; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s68369; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8370; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v38371; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8372; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)8373; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]8374; GFX10-WGP-NEXT:    s_endpgm8375;8376; GFX10-CU-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8377; GFX10-CU:       ; %bb.0: ; %entry8378; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 08379; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08380; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x88381; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc8382; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)8383; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s78384; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s68385; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8386; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v38387; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8388; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)8389; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]8390; GFX10-CU-NEXT:    s_endpgm8391;8392; SKIP-CACHE-INV-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8393; SKIP-CACHE-INV:       ; %bb.0: ; %entry8394; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]8395; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x08396; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x28397; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x38398; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)8399; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s18400; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr18401; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0008402; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -18403; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr38404; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s88405; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s78406; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s68407; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s58408; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s48409; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8410; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v28411; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc8412; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8413; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)8414; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 08415; SKIP-CACHE-INV-NEXT:    s_endpgm8416;8417; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8418; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry8419; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08420; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08421; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88422; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8423; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8424; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s78425; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s68426; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8427; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18428; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8429; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)8430; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8431; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm8432;8433; GFX90A-TGSPLIT-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8434; GFX90A-TGSPLIT:       ; %bb.0: ; %entry8435; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 08436; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08437; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88438; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8439; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8440; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s78441; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s68442; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8443; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v18444; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8445; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)8446; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8447; GFX90A-TGSPLIT-NEXT:    s_endpgm8448;8449; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8450; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry8451; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08452; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x08453; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x88454; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc8455; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8456; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s38457; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s28458; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8459; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18460; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc08461; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)8462; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]8463; GFX942-NOTTGSPLIT-NEXT:    s_endpgm8464;8465; GFX942-TGSPLIT-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8466; GFX942-TGSPLIT:       ; %bb.0: ; %entry8467; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 08468; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x08469; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x88470; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc8471; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8472; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s38473; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s28474; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8475; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v18476; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc08477; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)8478; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]8479; GFX942-TGSPLIT-NEXT:    s_endpgm8480;8481; GFX11-WGP-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8482; GFX11-WGP:       ; %bb.0: ; %entry8483; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 08484; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08485; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x88486; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc8487; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)8488; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s38489; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s28490; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8491; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v38492; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc8493; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)8494; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]8495; GFX11-WGP-NEXT:    s_endpgm8496;8497; GFX11-CU-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8498; GFX11-CU:       ; %bb.0: ; %entry8499; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 08500; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08501; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x88502; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc8503; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)8504; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s38505; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s28506; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8507; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v38508; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc8509; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)8510; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]8511; GFX11-CU-NEXT:    s_endpgm8512;8513; GFX12-WGP-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8514; GFX12-WGP:       ; %bb.0: ; %entry8515; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 08516; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08517; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x88518; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc8519; GFX12-WGP-NEXT:    s_wait_kmcnt 0x08520; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s38521; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s28522; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8523; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v38524; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN8525; GFX12-WGP-NEXT:    s_wait_loadcnt 0x08526; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]8527; GFX12-WGP-NEXT:    s_endpgm8528;8529; GFX12-CU-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8530; GFX12-CU:       ; %bb.0: ; %entry8531; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 08532; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08533; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x88534; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc8535; GFX12-CU-NEXT:    s_wait_kmcnt 0x08536; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s38537; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s28538; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8539; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v38540; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN8541; GFX12-CU-NEXT:    s_wait_loadcnt 0x08542; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]8543; GFX12-CU-NEXT:    s_endpgm8544;8545; GFX1250-LABEL: global_singlethread_release_acquire_ret_cmpxchg:8546; GFX1250:       ; %bb.0: ; %entry8547; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 18548; GFX1250-NEXT:    v_mov_b32_e32 v0, 08549; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08550; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x88551; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc8552; GFX1250-NEXT:    s_wait_kmcnt 0x08553; GFX1250-NEXT:    v_mov_b32_e32 v2, s38554; GFX1250-NEXT:    v_mov_b32_e32 v1, s28555; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8556; GFX1250-NEXT:    v_mov_b32_e32 v3, v18557; GFX1250-NEXT:    s_wait_xcnt 0x08558; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN8559; GFX1250-NEXT:    s_wait_loadcnt 0x08560; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]8561; GFX1250-NEXT:    s_endpgm8562    ptr addrspace(1) %out, i32 %in, i32 %old) {8563entry:8564  %gep = getelementptr i32, ptr addrspace(1) %out, i32 48565  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") release acquire8566  %val0 = extractvalue { i32, i1 } %val, 08567  store i32 %val0, ptr addrspace(1) %out, align 48568  ret void8569}8570 8571define amdgpu_kernel void @global_singlethread_acq_rel_acquire_ret_cmpxchg(8572; GFX6-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8573; GFX6:       ; %bb.0: ; %entry8574; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]8575; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08576; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x28577; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x38578; GFX6-NEXT:    s_waitcnt lgkmcnt(0)8579; GFX6-NEXT:    s_mov_b32 s12, s58580; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr58581; GFX6-NEXT:    s_mov_b32 s10, 0x100f0008582; GFX6-NEXT:    s_mov_b32 s11, -18583; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr78584; GFX6-NEXT:    s_mov_b32 s5, s128585; GFX6-NEXT:    s_mov_b32 s6, s118586; GFX6-NEXT:    s_mov_b32 s7, s108587; GFX6-NEXT:    v_mov_b32_e32 v0, s98588; GFX6-NEXT:    v_mov_b32_e32 v2, s88589; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8590; GFX6-NEXT:    v_mov_b32_e32 v1, v28591; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc8592; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8593; GFX6-NEXT:    s_waitcnt vmcnt(0)8594; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 08595; GFX6-NEXT:    s_endpgm8596;8597; GFX7-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8598; GFX7:       ; %bb.0: ; %entry8599; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s138600; GFX7-NEXT:    s_add_i32 s12, s12, s178601; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 88602; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]8603; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08604; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x28605; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x38606; GFX7-NEXT:    s_mov_b64 s[12:13], 168607; GFX7-NEXT:    s_waitcnt lgkmcnt(0)8608; GFX7-NEXT:    s_mov_b32 s6, s48609; GFX7-NEXT:    s_mov_b32 s7, s58610; GFX7-NEXT:    s_mov_b32 s11, s128611; GFX7-NEXT:    s_mov_b32 s10, s138612; GFX7-NEXT:    s_add_u32 s6, s6, s118613; GFX7-NEXT:    s_addc_u32 s10, s7, s108614; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr78615; GFX7-NEXT:    s_mov_b32 s7, s108616; GFX7-NEXT:    v_mov_b32_e32 v2, s98617; GFX7-NEXT:    v_mov_b32_e32 v0, s88618; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8619; GFX7-NEXT:    v_mov_b32_e32 v3, v08620; GFX7-NEXT:    v_mov_b32_e32 v0, s68621; GFX7-NEXT:    v_mov_b32_e32 v1, s78622; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8623; GFX7-NEXT:    v_mov_b32_e32 v0, s48624; GFX7-NEXT:    v_mov_b32_e32 v1, s58625; GFX7-NEXT:    s_waitcnt vmcnt(0)8626; GFX7-NEXT:    flat_store_dword v[0:1], v28627; GFX7-NEXT:    s_endpgm8628;8629; GFX10-WGP-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8630; GFX10-WGP:       ; %bb.0: ; %entry8631; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 08632; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08633; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x88634; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc8635; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)8636; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s78637; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s68638; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8639; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v38640; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8641; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)8642; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]8643; GFX10-WGP-NEXT:    s_endpgm8644;8645; GFX10-CU-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8646; GFX10-CU:       ; %bb.0: ; %entry8647; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 08648; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08649; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x88650; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc8651; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)8652; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s78653; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s68654; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8655; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v38656; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8657; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)8658; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]8659; GFX10-CU-NEXT:    s_endpgm8660;8661; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8662; SKIP-CACHE-INV:       ; %bb.0: ; %entry8663; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]8664; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x08665; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x28666; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x38667; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)8668; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s18669; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr18670; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0008671; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -18672; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr38673; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s88674; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s78675; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s68676; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s58677; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s48678; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8679; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v28680; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc8681; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8682; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)8683; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 08684; SKIP-CACHE-INV-NEXT:    s_endpgm8685;8686; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8687; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry8688; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08689; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08690; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88691; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8692; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8693; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s78694; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s68695; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8696; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18697; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8698; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)8699; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8700; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm8701;8702; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8703; GFX90A-TGSPLIT:       ; %bb.0: ; %entry8704; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 08705; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08706; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88707; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8708; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8709; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s78710; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s68711; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8712; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v18713; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8714; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)8715; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8716; GFX90A-TGSPLIT-NEXT:    s_endpgm8717;8718; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8719; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry8720; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08721; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x08722; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x88723; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc8724; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8725; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s38726; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s28727; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8728; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18729; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc08730; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)8731; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]8732; GFX942-NOTTGSPLIT-NEXT:    s_endpgm8733;8734; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8735; GFX942-TGSPLIT:       ; %bb.0: ; %entry8736; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 08737; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x08738; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x88739; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc8740; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8741; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s38742; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s28743; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8744; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v18745; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc08746; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)8747; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]8748; GFX942-TGSPLIT-NEXT:    s_endpgm8749;8750; GFX11-WGP-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8751; GFX11-WGP:       ; %bb.0: ; %entry8752; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 08753; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08754; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x88755; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc8756; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)8757; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s38758; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s28759; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8760; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v38761; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc8762; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)8763; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]8764; GFX11-WGP-NEXT:    s_endpgm8765;8766; GFX11-CU-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8767; GFX11-CU:       ; %bb.0: ; %entry8768; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 08769; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08770; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x88771; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc8772; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)8773; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s38774; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s28775; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8776; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v38777; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc8778; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)8779; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]8780; GFX11-CU-NEXT:    s_endpgm8781;8782; GFX12-WGP-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8783; GFX12-WGP:       ; %bb.0: ; %entry8784; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 08785; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08786; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x88787; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc8788; GFX12-WGP-NEXT:    s_wait_kmcnt 0x08789; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s38790; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s28791; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8792; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v38793; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN8794; GFX12-WGP-NEXT:    s_wait_loadcnt 0x08795; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]8796; GFX12-WGP-NEXT:    s_endpgm8797;8798; GFX12-CU-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8799; GFX12-CU:       ; %bb.0: ; %entry8800; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 08801; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08802; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x88803; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc8804; GFX12-CU-NEXT:    s_wait_kmcnt 0x08805; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s38806; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s28807; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8808; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v38809; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN8810; GFX12-CU-NEXT:    s_wait_loadcnt 0x08811; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]8812; GFX12-CU-NEXT:    s_endpgm8813;8814; GFX1250-LABEL: global_singlethread_acq_rel_acquire_ret_cmpxchg:8815; GFX1250:       ; %bb.0: ; %entry8816; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 18817; GFX1250-NEXT:    v_mov_b32_e32 v0, 08818; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x08819; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x88820; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc8821; GFX1250-NEXT:    s_wait_kmcnt 0x08822; GFX1250-NEXT:    v_mov_b32_e32 v2, s38823; GFX1250-NEXT:    v_mov_b32_e32 v1, s28824; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8825; GFX1250-NEXT:    v_mov_b32_e32 v3, v18826; GFX1250-NEXT:    s_wait_xcnt 0x08827; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN8828; GFX1250-NEXT:    s_wait_loadcnt 0x08829; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]8830; GFX1250-NEXT:    s_endpgm8831    ptr addrspace(1) %out, i32 %in, i32 %old) {8832entry:8833  %gep = getelementptr i32, ptr addrspace(1) %out, i32 48834  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acq_rel acquire8835  %val0 = extractvalue { i32, i1 } %val, 08836  store i32 %val0, ptr addrspace(1) %out, align 48837  ret void8838}8839 8840define amdgpu_kernel void @global_singlethread_seq_cst_acquire_ret_cmpxchg(8841; GFX6-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8842; GFX6:       ; %bb.0: ; %entry8843; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]8844; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08845; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x28846; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x38847; GFX6-NEXT:    s_waitcnt lgkmcnt(0)8848; GFX6-NEXT:    s_mov_b32 s12, s58849; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr58850; GFX6-NEXT:    s_mov_b32 s10, 0x100f0008851; GFX6-NEXT:    s_mov_b32 s11, -18852; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr78853; GFX6-NEXT:    s_mov_b32 s5, s128854; GFX6-NEXT:    s_mov_b32 s6, s118855; GFX6-NEXT:    s_mov_b32 s7, s108856; GFX6-NEXT:    v_mov_b32_e32 v0, s98857; GFX6-NEXT:    v_mov_b32_e32 v2, s88858; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8859; GFX6-NEXT:    v_mov_b32_e32 v1, v28860; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc8861; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8862; GFX6-NEXT:    s_waitcnt vmcnt(0)8863; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 08864; GFX6-NEXT:    s_endpgm8865;8866; GFX7-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8867; GFX7:       ; %bb.0: ; %entry8868; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s138869; GFX7-NEXT:    s_add_i32 s12, s12, s178870; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 88871; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]8872; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x08873; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x28874; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x38875; GFX7-NEXT:    s_mov_b64 s[12:13], 168876; GFX7-NEXT:    s_waitcnt lgkmcnt(0)8877; GFX7-NEXT:    s_mov_b32 s6, s48878; GFX7-NEXT:    s_mov_b32 s7, s58879; GFX7-NEXT:    s_mov_b32 s11, s128880; GFX7-NEXT:    s_mov_b32 s10, s138881; GFX7-NEXT:    s_add_u32 s6, s6, s118882; GFX7-NEXT:    s_addc_u32 s10, s7, s108883; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr78884; GFX7-NEXT:    s_mov_b32 s7, s108885; GFX7-NEXT:    v_mov_b32_e32 v2, s98886; GFX7-NEXT:    v_mov_b32_e32 v0, s88887; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8888; GFX7-NEXT:    v_mov_b32_e32 v3, v08889; GFX7-NEXT:    v_mov_b32_e32 v0, s68890; GFX7-NEXT:    v_mov_b32_e32 v1, s78891; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8892; GFX7-NEXT:    v_mov_b32_e32 v0, s48893; GFX7-NEXT:    v_mov_b32_e32 v1, s58894; GFX7-NEXT:    s_waitcnt vmcnt(0)8895; GFX7-NEXT:    flat_store_dword v[0:1], v28896; GFX7-NEXT:    s_endpgm8897;8898; GFX10-WGP-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8899; GFX10-WGP:       ; %bb.0: ; %entry8900; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 08901; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08902; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x88903; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc8904; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)8905; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s78906; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s68907; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8908; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v38909; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8910; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)8911; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]8912; GFX10-WGP-NEXT:    s_endpgm8913;8914; GFX10-CU-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8915; GFX10-CU:       ; %bb.0: ; %entry8916; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 08917; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08918; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x88919; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc8920; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)8921; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s78922; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s68923; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec8924; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v38925; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc8926; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)8927; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]8928; GFX10-CU-NEXT:    s_endpgm8929;8930; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8931; SKIP-CACHE-INV:       ; %bb.0: ; %entry8932; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]8933; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x08934; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x28935; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x38936; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)8937; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s18938; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr18939; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0008940; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -18941; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr38942; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s88943; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s78944; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s68945; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s58946; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s48947; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec8948; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v28949; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc8950; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec8951; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)8952; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 08953; SKIP-CACHE-INV-NEXT:    s_endpgm8954;8955; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8956; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry8957; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08958; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08959; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88960; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8961; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8962; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s78963; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s68964; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8965; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18966; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8967; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)8968; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8969; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm8970;8971; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8972; GFX90A-TGSPLIT:       ; %bb.0: ; %entry8973; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 08974; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x08975; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x88976; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc8977; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8978; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s78979; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s68980; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8981; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v18982; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc8983; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)8984; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]8985; GFX90A-TGSPLIT-NEXT:    s_endpgm8986;8987; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:8988; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry8989; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 08990; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x08991; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x88992; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc8993; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)8994; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s38995; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s28996; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec8997; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v18998; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc08999; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)9000; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9001; GFX942-NOTTGSPLIT-NEXT:    s_endpgm9002;9003; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:9004; GFX942-TGSPLIT:       ; %bb.0: ; %entry9005; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 09006; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x09007; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x89008; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc9009; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9010; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s39011; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s29012; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9013; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v19014; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc09015; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)9016; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9017; GFX942-TGSPLIT-NEXT:    s_endpgm9018;9019; GFX11-WGP-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:9020; GFX11-WGP:       ; %bb.0: ; %entry9021; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 09022; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09023; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89024; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9025; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)9026; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s39027; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s29028; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9029; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v39030; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9031; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)9032; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9033; GFX11-WGP-NEXT:    s_endpgm9034;9035; GFX11-CU-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:9036; GFX11-CU:       ; %bb.0: ; %entry9037; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 09038; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09039; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89040; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9041; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)9042; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s39043; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s29044; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9045; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v39046; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9047; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)9048; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9049; GFX11-CU-NEXT:    s_endpgm9050;9051; GFX12-WGP-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:9052; GFX12-WGP:       ; %bb.0: ; %entry9053; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 09054; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09055; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89056; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9057; GFX12-WGP-NEXT:    s_wait_kmcnt 0x09058; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s39059; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s29060; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9061; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v39062; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9063; GFX12-WGP-NEXT:    s_wait_loadcnt 0x09064; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9065; GFX12-WGP-NEXT:    s_endpgm9066;9067; GFX12-CU-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:9068; GFX12-CU:       ; %bb.0: ; %entry9069; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 09070; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09071; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89072; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9073; GFX12-CU-NEXT:    s_wait_kmcnt 0x09074; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s39075; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s29076; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9077; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v39078; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9079; GFX12-CU-NEXT:    s_wait_loadcnt 0x09080; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9081; GFX12-CU-NEXT:    s_endpgm9082;9083; GFX1250-LABEL: global_singlethread_seq_cst_acquire_ret_cmpxchg:9084; GFX1250:       ; %bb.0: ; %entry9085; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 19086; GFX1250-NEXT:    v_mov_b32_e32 v0, 09087; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09088; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x89089; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc9090; GFX1250-NEXT:    s_wait_kmcnt 0x09091; GFX1250-NEXT:    v_mov_b32_e32 v2, s39092; GFX1250-NEXT:    v_mov_b32_e32 v1, s29093; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9094; GFX1250-NEXT:    v_mov_b32_e32 v3, v19095; GFX1250-NEXT:    s_wait_xcnt 0x09096; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN9097; GFX1250-NEXT:    s_wait_loadcnt 0x09098; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]9099; GFX1250-NEXT:    s_endpgm9100    ptr addrspace(1) %out, i32 %in, i32 %old) {9101entry:9102  %gep = getelementptr i32, ptr addrspace(1) %out, i32 49103  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") seq_cst acquire9104  %val0 = extractvalue { i32, i1 } %val, 09105  store i32 %val0, ptr addrspace(1) %out, align 49106  ret void9107}9108 9109define amdgpu_kernel void @global_singlethread_monotonic_seq_cst_ret_cmpxchg(9110; GFX6-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9111; GFX6:       ; %bb.0: ; %entry9112; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]9113; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09114; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x29115; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x39116; GFX6-NEXT:    s_waitcnt lgkmcnt(0)9117; GFX6-NEXT:    s_mov_b32 s12, s59118; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr59119; GFX6-NEXT:    s_mov_b32 s10, 0x100f0009120; GFX6-NEXT:    s_mov_b32 s11, -19121; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr79122; GFX6-NEXT:    s_mov_b32 s5, s129123; GFX6-NEXT:    s_mov_b32 s6, s119124; GFX6-NEXT:    s_mov_b32 s7, s109125; GFX6-NEXT:    v_mov_b32_e32 v0, s99126; GFX6-NEXT:    v_mov_b32_e32 v2, s89127; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec9128; GFX6-NEXT:    v_mov_b32_e32 v1, v29129; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc9130; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec9131; GFX6-NEXT:    s_waitcnt vmcnt(0)9132; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 09133; GFX6-NEXT:    s_endpgm9134;9135; GFX7-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9136; GFX7:       ; %bb.0: ; %entry9137; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s139138; GFX7-NEXT:    s_add_i32 s12, s12, s179139; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 89140; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]9141; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09142; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x29143; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x39144; GFX7-NEXT:    s_mov_b64 s[12:13], 169145; GFX7-NEXT:    s_waitcnt lgkmcnt(0)9146; GFX7-NEXT:    s_mov_b32 s6, s49147; GFX7-NEXT:    s_mov_b32 s7, s59148; GFX7-NEXT:    s_mov_b32 s11, s129149; GFX7-NEXT:    s_mov_b32 s10, s139150; GFX7-NEXT:    s_add_u32 s6, s6, s119151; GFX7-NEXT:    s_addc_u32 s10, s7, s109152; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr79153; GFX7-NEXT:    s_mov_b32 s7, s109154; GFX7-NEXT:    v_mov_b32_e32 v2, s99155; GFX7-NEXT:    v_mov_b32_e32 v0, s89156; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9157; GFX7-NEXT:    v_mov_b32_e32 v3, v09158; GFX7-NEXT:    v_mov_b32_e32 v0, s69159; GFX7-NEXT:    v_mov_b32_e32 v1, s79160; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc9161; GFX7-NEXT:    v_mov_b32_e32 v0, s49162; GFX7-NEXT:    v_mov_b32_e32 v1, s59163; GFX7-NEXT:    s_waitcnt vmcnt(0)9164; GFX7-NEXT:    flat_store_dword v[0:1], v29165; GFX7-NEXT:    s_endpgm9166;9167; GFX10-WGP-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9168; GFX10-WGP:       ; %bb.0: ; %entry9169; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 09170; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09171; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x89172; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc9173; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)9174; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s79175; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s69176; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9177; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v39178; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc9179; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)9180; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]9181; GFX10-WGP-NEXT:    s_endpgm9182;9183; GFX10-CU-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9184; GFX10-CU:       ; %bb.0: ; %entry9185; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 09186; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09187; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x89188; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc9189; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)9190; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s79191; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s69192; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9193; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v39194; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc9195; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)9196; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]9197; GFX10-CU-NEXT:    s_endpgm9198;9199; SKIP-CACHE-INV-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9200; SKIP-CACHE-INV:       ; %bb.0: ; %entry9201; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]9202; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x09203; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x29204; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x39205; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)9206; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s19207; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr19208; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0009209; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -19210; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr39211; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s89212; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s79213; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s69214; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s59215; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s49216; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec9217; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v29218; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc9219; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec9220; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)9221; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 09222; SKIP-CACHE-INV-NEXT:    s_endpgm9223;9224; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9225; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry9226; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 09227; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09228; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x89229; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc9230; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9231; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s79232; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s69233; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9234; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v19235; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc9236; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)9237; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]9238; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm9239;9240; GFX90A-TGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9241; GFX90A-TGSPLIT:       ; %bb.0: ; %entry9242; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 09243; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09244; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x89245; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc9246; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9247; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s79248; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s69249; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9250; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v19251; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc9252; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)9253; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]9254; GFX90A-TGSPLIT-NEXT:    s_endpgm9255;9256; GFX942-NOTTGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9257; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry9258; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 09259; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x09260; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x89261; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc9262; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9263; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s39264; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s29265; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9266; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v19267; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc09268; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)9269; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9270; GFX942-NOTTGSPLIT-NEXT:    s_endpgm9271;9272; GFX942-TGSPLIT-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9273; GFX942-TGSPLIT:       ; %bb.0: ; %entry9274; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 09275; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x09276; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x89277; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc9278; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9279; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s39280; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s29281; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9282; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v19283; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc09284; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)9285; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9286; GFX942-TGSPLIT-NEXT:    s_endpgm9287;9288; GFX11-WGP-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9289; GFX11-WGP:       ; %bb.0: ; %entry9290; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 09291; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09292; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89293; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9294; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)9295; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s39296; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s29297; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9298; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v39299; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9300; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)9301; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9302; GFX11-WGP-NEXT:    s_endpgm9303;9304; GFX11-CU-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9305; GFX11-CU:       ; %bb.0: ; %entry9306; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 09307; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09308; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89309; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9310; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)9311; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s39312; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s29313; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9314; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v39315; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9316; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)9317; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9318; GFX11-CU-NEXT:    s_endpgm9319;9320; GFX12-WGP-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9321; GFX12-WGP:       ; %bb.0: ; %entry9322; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 09323; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09324; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89325; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9326; GFX12-WGP-NEXT:    s_wait_kmcnt 0x09327; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s39328; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s29329; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9330; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v39331; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9332; GFX12-WGP-NEXT:    s_wait_loadcnt 0x09333; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9334; GFX12-WGP-NEXT:    s_endpgm9335;9336; GFX12-CU-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9337; GFX12-CU:       ; %bb.0: ; %entry9338; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 09339; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09340; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89341; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9342; GFX12-CU-NEXT:    s_wait_kmcnt 0x09343; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s39344; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s29345; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9346; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v39347; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9348; GFX12-CU-NEXT:    s_wait_loadcnt 0x09349; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9350; GFX12-CU-NEXT:    s_endpgm9351;9352; GFX1250-LABEL: global_singlethread_monotonic_seq_cst_ret_cmpxchg:9353; GFX1250:       ; %bb.0: ; %entry9354; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 19355; GFX1250-NEXT:    v_mov_b32_e32 v0, 09356; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09357; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x89358; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc9359; GFX1250-NEXT:    s_wait_kmcnt 0x09360; GFX1250-NEXT:    v_mov_b32_e32 v2, s39361; GFX1250-NEXT:    v_mov_b32_e32 v1, s29362; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9363; GFX1250-NEXT:    v_mov_b32_e32 v3, v19364; GFX1250-NEXT:    s_wait_xcnt 0x09365; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN9366; GFX1250-NEXT:    s_wait_loadcnt 0x09367; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]9368; GFX1250-NEXT:    s_endpgm9369    ptr addrspace(1) %out, i32 %in, i32 %old) {9370entry:9371  %gep = getelementptr i32, ptr addrspace(1) %out, i32 49372  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") monotonic seq_cst9373  %val0 = extractvalue { i32, i1 } %val, 09374  store i32 %val0, ptr addrspace(1) %out, align 49375  ret void9376}9377 9378define amdgpu_kernel void @global_singlethread_acquire_seq_cst_ret_cmpxchg(9379; GFX6-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9380; GFX6:       ; %bb.0: ; %entry9381; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]9382; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09383; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x29384; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x39385; GFX6-NEXT:    s_waitcnt lgkmcnt(0)9386; GFX6-NEXT:    s_mov_b32 s12, s59387; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr59388; GFX6-NEXT:    s_mov_b32 s10, 0x100f0009389; GFX6-NEXT:    s_mov_b32 s11, -19390; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr79391; GFX6-NEXT:    s_mov_b32 s5, s129392; GFX6-NEXT:    s_mov_b32 s6, s119393; GFX6-NEXT:    s_mov_b32 s7, s109394; GFX6-NEXT:    v_mov_b32_e32 v0, s99395; GFX6-NEXT:    v_mov_b32_e32 v2, s89396; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec9397; GFX6-NEXT:    v_mov_b32_e32 v1, v29398; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc9399; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec9400; GFX6-NEXT:    s_waitcnt vmcnt(0)9401; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 09402; GFX6-NEXT:    s_endpgm9403;9404; GFX7-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9405; GFX7:       ; %bb.0: ; %entry9406; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s139407; GFX7-NEXT:    s_add_i32 s12, s12, s179408; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 89409; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]9410; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09411; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x29412; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x39413; GFX7-NEXT:    s_mov_b64 s[12:13], 169414; GFX7-NEXT:    s_waitcnt lgkmcnt(0)9415; GFX7-NEXT:    s_mov_b32 s6, s49416; GFX7-NEXT:    s_mov_b32 s7, s59417; GFX7-NEXT:    s_mov_b32 s11, s129418; GFX7-NEXT:    s_mov_b32 s10, s139419; GFX7-NEXT:    s_add_u32 s6, s6, s119420; GFX7-NEXT:    s_addc_u32 s10, s7, s109421; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr79422; GFX7-NEXT:    s_mov_b32 s7, s109423; GFX7-NEXT:    v_mov_b32_e32 v2, s99424; GFX7-NEXT:    v_mov_b32_e32 v0, s89425; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9426; GFX7-NEXT:    v_mov_b32_e32 v3, v09427; GFX7-NEXT:    v_mov_b32_e32 v0, s69428; GFX7-NEXT:    v_mov_b32_e32 v1, s79429; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc9430; GFX7-NEXT:    v_mov_b32_e32 v0, s49431; GFX7-NEXT:    v_mov_b32_e32 v1, s59432; GFX7-NEXT:    s_waitcnt vmcnt(0)9433; GFX7-NEXT:    flat_store_dword v[0:1], v29434; GFX7-NEXT:    s_endpgm9435;9436; GFX10-WGP-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9437; GFX10-WGP:       ; %bb.0: ; %entry9438; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 09439; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09440; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x89441; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc9442; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)9443; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s79444; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s69445; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9446; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v39447; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc9448; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)9449; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]9450; GFX10-WGP-NEXT:    s_endpgm9451;9452; GFX10-CU-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9453; GFX10-CU:       ; %bb.0: ; %entry9454; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 09455; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09456; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x89457; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc9458; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)9459; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s79460; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s69461; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9462; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v39463; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc9464; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)9465; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]9466; GFX10-CU-NEXT:    s_endpgm9467;9468; SKIP-CACHE-INV-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9469; SKIP-CACHE-INV:       ; %bb.0: ; %entry9470; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]9471; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x09472; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x29473; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x39474; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)9475; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s19476; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr19477; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0009478; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -19479; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr39480; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s89481; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s79482; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s69483; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s59484; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s49485; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec9486; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v29487; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc9488; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec9489; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)9490; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 09491; SKIP-CACHE-INV-NEXT:    s_endpgm9492;9493; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9494; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry9495; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 09496; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09497; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x89498; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc9499; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9500; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s79501; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s69502; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9503; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v19504; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc9505; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)9506; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]9507; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm9508;9509; GFX90A-TGSPLIT-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9510; GFX90A-TGSPLIT:       ; %bb.0: ; %entry9511; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 09512; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09513; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x89514; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc9515; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9516; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s79517; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s69518; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9519; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v19520; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc9521; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)9522; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]9523; GFX90A-TGSPLIT-NEXT:    s_endpgm9524;9525; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9526; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry9527; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 09528; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x09529; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x89530; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc9531; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9532; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s39533; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s29534; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9535; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v19536; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc09537; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)9538; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9539; GFX942-NOTTGSPLIT-NEXT:    s_endpgm9540;9541; GFX942-TGSPLIT-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9542; GFX942-TGSPLIT:       ; %bb.0: ; %entry9543; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 09544; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x09545; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x89546; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc9547; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9548; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s39549; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s29550; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9551; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v19552; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc09553; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)9554; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9555; GFX942-TGSPLIT-NEXT:    s_endpgm9556;9557; GFX11-WGP-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9558; GFX11-WGP:       ; %bb.0: ; %entry9559; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 09560; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09561; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89562; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9563; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)9564; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s39565; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s29566; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9567; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v39568; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9569; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)9570; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9571; GFX11-WGP-NEXT:    s_endpgm9572;9573; GFX11-CU-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9574; GFX11-CU:       ; %bb.0: ; %entry9575; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 09576; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09577; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89578; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9579; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)9580; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s39581; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s29582; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9583; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v39584; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9585; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)9586; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9587; GFX11-CU-NEXT:    s_endpgm9588;9589; GFX12-WGP-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9590; GFX12-WGP:       ; %bb.0: ; %entry9591; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 09592; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09593; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89594; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9595; GFX12-WGP-NEXT:    s_wait_kmcnt 0x09596; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s39597; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s29598; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9599; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v39600; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9601; GFX12-WGP-NEXT:    s_wait_loadcnt 0x09602; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9603; GFX12-WGP-NEXT:    s_endpgm9604;9605; GFX12-CU-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9606; GFX12-CU:       ; %bb.0: ; %entry9607; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 09608; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09609; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89610; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9611; GFX12-CU-NEXT:    s_wait_kmcnt 0x09612; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s39613; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s29614; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9615; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v39616; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9617; GFX12-CU-NEXT:    s_wait_loadcnt 0x09618; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9619; GFX12-CU-NEXT:    s_endpgm9620;9621; GFX1250-LABEL: global_singlethread_acquire_seq_cst_ret_cmpxchg:9622; GFX1250:       ; %bb.0: ; %entry9623; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 19624; GFX1250-NEXT:    v_mov_b32_e32 v0, 09625; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09626; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x89627; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc9628; GFX1250-NEXT:    s_wait_kmcnt 0x09629; GFX1250-NEXT:    v_mov_b32_e32 v2, s39630; GFX1250-NEXT:    v_mov_b32_e32 v1, s29631; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9632; GFX1250-NEXT:    v_mov_b32_e32 v3, v19633; GFX1250-NEXT:    s_wait_xcnt 0x09634; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN9635; GFX1250-NEXT:    s_wait_loadcnt 0x09636; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]9637; GFX1250-NEXT:    s_endpgm9638    ptr addrspace(1) %out, i32 %in, i32 %old) {9639entry:9640  %gep = getelementptr i32, ptr addrspace(1) %out, i32 49641  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acquire seq_cst9642  %val0 = extractvalue { i32, i1 } %val, 09643  store i32 %val0, ptr addrspace(1) %out, align 49644  ret void9645}9646 9647define amdgpu_kernel void @global_singlethread_release_seq_cst_ret_cmpxchg(9648; GFX6-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9649; GFX6:       ; %bb.0: ; %entry9650; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]9651; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09652; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x29653; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x39654; GFX6-NEXT:    s_waitcnt lgkmcnt(0)9655; GFX6-NEXT:    s_mov_b32 s12, s59656; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr59657; GFX6-NEXT:    s_mov_b32 s10, 0x100f0009658; GFX6-NEXT:    s_mov_b32 s11, -19659; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr79660; GFX6-NEXT:    s_mov_b32 s5, s129661; GFX6-NEXT:    s_mov_b32 s6, s119662; GFX6-NEXT:    s_mov_b32 s7, s109663; GFX6-NEXT:    v_mov_b32_e32 v0, s99664; GFX6-NEXT:    v_mov_b32_e32 v2, s89665; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec9666; GFX6-NEXT:    v_mov_b32_e32 v1, v29667; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc9668; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec9669; GFX6-NEXT:    s_waitcnt vmcnt(0)9670; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 09671; GFX6-NEXT:    s_endpgm9672;9673; GFX7-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9674; GFX7:       ; %bb.0: ; %entry9675; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s139676; GFX7-NEXT:    s_add_i32 s12, s12, s179677; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 89678; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]9679; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09680; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x29681; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x39682; GFX7-NEXT:    s_mov_b64 s[12:13], 169683; GFX7-NEXT:    s_waitcnt lgkmcnt(0)9684; GFX7-NEXT:    s_mov_b32 s6, s49685; GFX7-NEXT:    s_mov_b32 s7, s59686; GFX7-NEXT:    s_mov_b32 s11, s129687; GFX7-NEXT:    s_mov_b32 s10, s139688; GFX7-NEXT:    s_add_u32 s6, s6, s119689; GFX7-NEXT:    s_addc_u32 s10, s7, s109690; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr79691; GFX7-NEXT:    s_mov_b32 s7, s109692; GFX7-NEXT:    v_mov_b32_e32 v2, s99693; GFX7-NEXT:    v_mov_b32_e32 v0, s89694; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9695; GFX7-NEXT:    v_mov_b32_e32 v3, v09696; GFX7-NEXT:    v_mov_b32_e32 v0, s69697; GFX7-NEXT:    v_mov_b32_e32 v1, s79698; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc9699; GFX7-NEXT:    v_mov_b32_e32 v0, s49700; GFX7-NEXT:    v_mov_b32_e32 v1, s59701; GFX7-NEXT:    s_waitcnt vmcnt(0)9702; GFX7-NEXT:    flat_store_dword v[0:1], v29703; GFX7-NEXT:    s_endpgm9704;9705; GFX10-WGP-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9706; GFX10-WGP:       ; %bb.0: ; %entry9707; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 09708; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09709; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x89710; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc9711; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)9712; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s79713; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s69714; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9715; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v39716; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc9717; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)9718; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]9719; GFX10-WGP-NEXT:    s_endpgm9720;9721; GFX10-CU-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9722; GFX10-CU:       ; %bb.0: ; %entry9723; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 09724; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09725; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x89726; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc9727; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)9728; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s79729; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s69730; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9731; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v39732; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc9733; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)9734; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]9735; GFX10-CU-NEXT:    s_endpgm9736;9737; SKIP-CACHE-INV-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9738; SKIP-CACHE-INV:       ; %bb.0: ; %entry9739; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]9740; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x09741; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x29742; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x39743; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)9744; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s19745; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr19746; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf0009747; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -19748; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr39749; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s89750; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s79751; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s69752; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s59753; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s49754; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec9755; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v29756; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc9757; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec9758; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)9759; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 09760; SKIP-CACHE-INV-NEXT:    s_endpgm9761;9762; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9763; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry9764; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 09765; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09766; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x89767; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc9768; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9769; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s79770; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s69771; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9772; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v19773; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc9774; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)9775; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]9776; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm9777;9778; GFX90A-TGSPLIT-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9779; GFX90A-TGSPLIT:       ; %bb.0: ; %entry9780; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 09781; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09782; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x89783; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc9784; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9785; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s79786; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s69787; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9788; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v19789; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc9790; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)9791; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]9792; GFX90A-TGSPLIT-NEXT:    s_endpgm9793;9794; GFX942-NOTTGSPLIT-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9795; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry9796; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 09797; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x09798; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x89799; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc9800; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9801; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s39802; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s29803; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9804; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v19805; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc09806; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)9807; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9808; GFX942-NOTTGSPLIT-NEXT:    s_endpgm9809;9810; GFX942-TGSPLIT-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9811; GFX942-TGSPLIT:       ; %bb.0: ; %entry9812; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 09813; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x09814; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x89815; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc9816; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)9817; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s39818; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s29819; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9820; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v19821; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc09822; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)9823; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]9824; GFX942-TGSPLIT-NEXT:    s_endpgm9825;9826; GFX11-WGP-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9827; GFX11-WGP:       ; %bb.0: ; %entry9828; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 09829; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09830; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89831; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9832; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)9833; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s39834; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s29835; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9836; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v39837; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9838; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)9839; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9840; GFX11-WGP-NEXT:    s_endpgm9841;9842; GFX11-CU-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9843; GFX11-CU:       ; %bb.0: ; %entry9844; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 09845; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09846; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89847; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9848; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)9849; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s39850; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s29851; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9852; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v39853; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc9854; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)9855; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9856; GFX11-CU-NEXT:    s_endpgm9857;9858; GFX12-WGP-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9859; GFX12-WGP:       ; %bb.0: ; %entry9860; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 09861; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09862; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x89863; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc9864; GFX12-WGP-NEXT:    s_wait_kmcnt 0x09865; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s39866; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s29867; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9868; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v39869; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9870; GFX12-WGP-NEXT:    s_wait_loadcnt 0x09871; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]9872; GFX12-WGP-NEXT:    s_endpgm9873;9874; GFX12-CU-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9875; GFX12-CU:       ; %bb.0: ; %entry9876; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 09877; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09878; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x89879; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc9880; GFX12-CU-NEXT:    s_wait_kmcnt 0x09881; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s39882; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s29883; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9884; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v39885; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN9886; GFX12-CU-NEXT:    s_wait_loadcnt 0x09887; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]9888; GFX12-CU-NEXT:    s_endpgm9889;9890; GFX1250-LABEL: global_singlethread_release_seq_cst_ret_cmpxchg:9891; GFX1250:       ; %bb.0: ; %entry9892; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 19893; GFX1250-NEXT:    v_mov_b32_e32 v0, 09894; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x09895; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x89896; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc9897; GFX1250-NEXT:    s_wait_kmcnt 0x09898; GFX1250-NEXT:    v_mov_b32_e32 v2, s39899; GFX1250-NEXT:    v_mov_b32_e32 v1, s29900; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9901; GFX1250-NEXT:    v_mov_b32_e32 v3, v19902; GFX1250-NEXT:    s_wait_xcnt 0x09903; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN9904; GFX1250-NEXT:    s_wait_loadcnt 0x09905; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]9906; GFX1250-NEXT:    s_endpgm9907    ptr addrspace(1) %out, i32 %in, i32 %old) {9908entry:9909  %gep = getelementptr i32, ptr addrspace(1) %out, i32 49910  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") release seq_cst9911  %val0 = extractvalue { i32, i1 } %val, 09912  store i32 %val0, ptr addrspace(1) %out, align 49913  ret void9914}9915 9916define amdgpu_kernel void @global_singlethread_acq_rel_seq_cst_ret_cmpxchg(9917; GFX6-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:9918; GFX6:       ; %bb.0: ; %entry9919; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]9920; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09921; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x29922; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x39923; GFX6-NEXT:    s_waitcnt lgkmcnt(0)9924; GFX6-NEXT:    s_mov_b32 s12, s59925; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr59926; GFX6-NEXT:    s_mov_b32 s10, 0x100f0009927; GFX6-NEXT:    s_mov_b32 s11, -19928; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr79929; GFX6-NEXT:    s_mov_b32 s5, s129930; GFX6-NEXT:    s_mov_b32 s6, s119931; GFX6-NEXT:    s_mov_b32 s7, s109932; GFX6-NEXT:    v_mov_b32_e32 v0, s99933; GFX6-NEXT:    v_mov_b32_e32 v2, s89934; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec9935; GFX6-NEXT:    v_mov_b32_e32 v1, v29936; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc9937; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec9938; GFX6-NEXT:    s_waitcnt vmcnt(0)9939; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 09940; GFX6-NEXT:    s_endpgm9941;9942; GFX7-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:9943; GFX7:       ; %bb.0: ; %entry9944; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s139945; GFX7-NEXT:    s_add_i32 s12, s12, s179946; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 89947; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]9948; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x09949; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x29950; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x39951; GFX7-NEXT:    s_mov_b64 s[12:13], 169952; GFX7-NEXT:    s_waitcnt lgkmcnt(0)9953; GFX7-NEXT:    s_mov_b32 s6, s49954; GFX7-NEXT:    s_mov_b32 s7, s59955; GFX7-NEXT:    s_mov_b32 s11, s129956; GFX7-NEXT:    s_mov_b32 s10, s139957; GFX7-NEXT:    s_add_u32 s6, s6, s119958; GFX7-NEXT:    s_addc_u32 s10, s7, s109959; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr79960; GFX7-NEXT:    s_mov_b32 s7, s109961; GFX7-NEXT:    v_mov_b32_e32 v2, s99962; GFX7-NEXT:    v_mov_b32_e32 v0, s89963; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec9964; GFX7-NEXT:    v_mov_b32_e32 v3, v09965; GFX7-NEXT:    v_mov_b32_e32 v0, s69966; GFX7-NEXT:    v_mov_b32_e32 v1, s79967; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc9968; GFX7-NEXT:    v_mov_b32_e32 v0, s49969; GFX7-NEXT:    v_mov_b32_e32 v1, s59970; GFX7-NEXT:    s_waitcnt vmcnt(0)9971; GFX7-NEXT:    flat_store_dword v[0:1], v29972; GFX7-NEXT:    s_endpgm9973;9974; GFX10-WGP-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:9975; GFX10-WGP:       ; %bb.0: ; %entry9976; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 09977; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09978; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x89979; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc9980; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)9981; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s79982; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s69983; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec9984; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v39985; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc9986; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)9987; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]9988; GFX10-WGP-NEXT:    s_endpgm9989;9990; GFX10-CU-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:9991; GFX10-CU:       ; %bb.0: ; %entry9992; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 09993; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x09994; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x89995; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc9996; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)9997; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s79998; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s69999; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10000; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v310001; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc10002; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)10003; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]10004; GFX10-CU-NEXT:    s_endpgm10005;10006; SKIP-CACHE-INV-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10007; SKIP-CACHE-INV:       ; %bb.0: ; %entry10008; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]10009; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x010010; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x210011; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x310012; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)10013; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s110014; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr110015; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00010016; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -110017; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr310018; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s810019; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s710020; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s610021; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s510022; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s410023; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec10024; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v210025; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc10026; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec10027; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)10028; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 010029; SKIP-CACHE-INV-NEXT:    s_endpgm10030;10031; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10032; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry10033; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010034; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x010035; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x810036; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc10037; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10038; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s710039; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s610040; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10041; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v110042; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc10043; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10044; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10045; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm10046;10047; GFX90A-TGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10048; GFX90A-TGSPLIT:       ; %bb.0: ; %entry10049; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010050; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x010051; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x810052; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc10053; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10054; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s710055; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s610056; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10057; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v110058; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc10059; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10060; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10061; GFX90A-TGSPLIT-NEXT:    s_endpgm10062;10063; GFX942-NOTTGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10064; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry10065; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010066; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x010067; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x810068; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc10069; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10070; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s310071; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s210072; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10073; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v110074; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc010075; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10076; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10077; GFX942-NOTTGSPLIT-NEXT:    s_endpgm10078;10079; GFX942-TGSPLIT-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10080; GFX942-TGSPLIT:       ; %bb.0: ; %entry10081; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010082; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x010083; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x810084; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc10085; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10086; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s310087; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s210088; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10089; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v110090; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc010091; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10092; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10093; GFX942-TGSPLIT-NEXT:    s_endpgm10094;10095; GFX11-WGP-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10096; GFX11-WGP:       ; %bb.0: ; %entry10097; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 010098; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010099; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x810100; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc10101; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)10102; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s310103; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s210104; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10105; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v310106; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc10107; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)10108; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10109; GFX11-WGP-NEXT:    s_endpgm10110;10111; GFX11-CU-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10112; GFX11-CU:       ; %bb.0: ; %entry10113; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 010114; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010115; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x810116; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc10117; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)10118; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s310119; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s210120; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10121; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v310122; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc10123; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)10124; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10125; GFX11-CU-NEXT:    s_endpgm10126;10127; GFX12-WGP-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10128; GFX12-WGP:       ; %bb.0: ; %entry10129; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 010130; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010131; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x810132; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc10133; GFX12-WGP-NEXT:    s_wait_kmcnt 0x010134; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s310135; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s210136; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10137; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v310138; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN10139; GFX12-WGP-NEXT:    s_wait_loadcnt 0x010140; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10141; GFX12-WGP-NEXT:    s_endpgm10142;10143; GFX12-CU-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10144; GFX12-CU:       ; %bb.0: ; %entry10145; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 010146; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010147; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x810148; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc10149; GFX12-CU-NEXT:    s_wait_kmcnt 0x010150; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s310151; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s210152; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10153; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v310154; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN10155; GFX12-CU-NEXT:    s_wait_loadcnt 0x010156; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10157; GFX12-CU-NEXT:    s_endpgm10158;10159; GFX1250-LABEL: global_singlethread_acq_rel_seq_cst_ret_cmpxchg:10160; GFX1250:       ; %bb.0: ; %entry10161; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 110162; GFX1250-NEXT:    v_mov_b32_e32 v0, 010163; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010164; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x810165; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc10166; GFX1250-NEXT:    s_wait_kmcnt 0x010167; GFX1250-NEXT:    v_mov_b32_e32 v2, s310168; GFX1250-NEXT:    v_mov_b32_e32 v1, s210169; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10170; GFX1250-NEXT:    v_mov_b32_e32 v3, v110171; GFX1250-NEXT:    s_wait_xcnt 0x010172; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN10173; GFX1250-NEXT:    s_wait_loadcnt 0x010174; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]10175; GFX1250-NEXT:    s_endpgm10176    ptr addrspace(1) %out, i32 %in, i32 %old) {10177entry:10178  %gep = getelementptr i32, ptr addrspace(1) %out, i32 410179  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") acq_rel seq_cst10180  %val0 = extractvalue { i32, i1 } %val, 010181  store i32 %val0, ptr addrspace(1) %out, align 410182  ret void10183}10184 10185define amdgpu_kernel void @global_singlethread_seq_cst_seq_cst_ret_cmpxchg(10186; GFX6-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10187; GFX6:       ; %bb.0: ; %entry10188; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]10189; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x010190; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x210191; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x310192; GFX6-NEXT:    s_waitcnt lgkmcnt(0)10193; GFX6-NEXT:    s_mov_b32 s12, s510194; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr510195; GFX6-NEXT:    s_mov_b32 s10, 0x100f00010196; GFX6-NEXT:    s_mov_b32 s11, -110197; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr710198; GFX6-NEXT:    s_mov_b32 s5, s1210199; GFX6-NEXT:    s_mov_b32 s6, s1110200; GFX6-NEXT:    s_mov_b32 s7, s1010201; GFX6-NEXT:    v_mov_b32_e32 v0, s910202; GFX6-NEXT:    v_mov_b32_e32 v2, s810203; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec10204; GFX6-NEXT:    v_mov_b32_e32 v1, v210205; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc10206; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec10207; GFX6-NEXT:    s_waitcnt vmcnt(0)10208; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 010209; GFX6-NEXT:    s_endpgm10210;10211; GFX7-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10212; GFX7:       ; %bb.0: ; %entry10213; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1310214; GFX7-NEXT:    s_add_i32 s12, s12, s1710215; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 810216; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]10217; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x010218; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x210219; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x310220; GFX7-NEXT:    s_mov_b64 s[12:13], 1610221; GFX7-NEXT:    s_waitcnt lgkmcnt(0)10222; GFX7-NEXT:    s_mov_b32 s6, s410223; GFX7-NEXT:    s_mov_b32 s7, s510224; GFX7-NEXT:    s_mov_b32 s11, s1210225; GFX7-NEXT:    s_mov_b32 s10, s1310226; GFX7-NEXT:    s_add_u32 s6, s6, s1110227; GFX7-NEXT:    s_addc_u32 s10, s7, s1010228; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr710229; GFX7-NEXT:    s_mov_b32 s7, s1010230; GFX7-NEXT:    v_mov_b32_e32 v2, s910231; GFX7-NEXT:    v_mov_b32_e32 v0, s810232; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10233; GFX7-NEXT:    v_mov_b32_e32 v3, v010234; GFX7-NEXT:    v_mov_b32_e32 v0, s610235; GFX7-NEXT:    v_mov_b32_e32 v1, s710236; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc10237; GFX7-NEXT:    v_mov_b32_e32 v0, s410238; GFX7-NEXT:    v_mov_b32_e32 v1, s510239; GFX7-NEXT:    s_waitcnt vmcnt(0)10240; GFX7-NEXT:    flat_store_dword v[0:1], v210241; GFX7-NEXT:    s_endpgm10242;10243; GFX10-WGP-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10244; GFX10-WGP:       ; %bb.0: ; %entry10245; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 010246; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x010247; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x810248; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc10249; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)10250; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s710251; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s610252; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10253; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v310254; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc10255; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)10256; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]10257; GFX10-WGP-NEXT:    s_endpgm10258;10259; GFX10-CU-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10260; GFX10-CU:       ; %bb.0: ; %entry10261; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 010262; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x010263; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x810264; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc10265; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)10266; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s710267; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s610268; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10269; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v310270; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc10271; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)10272; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]10273; GFX10-CU-NEXT:    s_endpgm10274;10275; SKIP-CACHE-INV-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10276; SKIP-CACHE-INV:       ; %bb.0: ; %entry10277; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]10278; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x010279; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x210280; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x310281; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)10282; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s110283; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr110284; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00010285; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -110286; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr310287; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s810288; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s710289; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s610290; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s510291; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s410292; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec10293; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v210294; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc10295; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec10296; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)10297; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 010298; SKIP-CACHE-INV-NEXT:    s_endpgm10299;10300; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10301; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry10302; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010303; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x010304; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x810305; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc10306; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10307; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s710308; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s610309; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10310; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v110311; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc10312; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10313; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10314; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm10315;10316; GFX90A-TGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10317; GFX90A-TGSPLIT:       ; %bb.0: ; %entry10318; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010319; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x010320; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x810321; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc10322; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10323; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s710324; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s610325; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10326; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v110327; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc10328; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10329; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10330; GFX90A-TGSPLIT-NEXT:    s_endpgm10331;10332; GFX942-NOTTGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10333; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry10334; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010335; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x010336; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x810337; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc10338; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10339; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s310340; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s210341; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10342; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v110343; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc010344; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10345; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10346; GFX942-NOTTGSPLIT-NEXT:    s_endpgm10347;10348; GFX942-TGSPLIT-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10349; GFX942-TGSPLIT:       ; %bb.0: ; %entry10350; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010351; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x010352; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x810353; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc10354; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10355; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s310356; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s210357; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10358; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v110359; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc010360; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10361; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10362; GFX942-TGSPLIT-NEXT:    s_endpgm10363;10364; GFX11-WGP-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10365; GFX11-WGP:       ; %bb.0: ; %entry10366; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 010367; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010368; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x810369; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc10370; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)10371; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s310372; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s210373; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10374; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v310375; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc10376; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)10377; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10378; GFX11-WGP-NEXT:    s_endpgm10379;10380; GFX11-CU-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10381; GFX11-CU:       ; %bb.0: ; %entry10382; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 010383; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010384; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x810385; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc10386; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)10387; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s310388; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s210389; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10390; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v310391; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc10392; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)10393; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10394; GFX11-CU-NEXT:    s_endpgm10395;10396; GFX12-WGP-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10397; GFX12-WGP:       ; %bb.0: ; %entry10398; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 010399; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010400; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x810401; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc10402; GFX12-WGP-NEXT:    s_wait_kmcnt 0x010403; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s310404; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s210405; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10406; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v310407; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN10408; GFX12-WGP-NEXT:    s_wait_loadcnt 0x010409; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10410; GFX12-WGP-NEXT:    s_endpgm10411;10412; GFX12-CU-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10413; GFX12-CU:       ; %bb.0: ; %entry10414; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 010415; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010416; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x810417; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc10418; GFX12-CU-NEXT:    s_wait_kmcnt 0x010419; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s310420; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s210421; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec10422; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v310423; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN10424; GFX12-CU-NEXT:    s_wait_loadcnt 0x010425; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10426; GFX12-CU-NEXT:    s_endpgm10427;10428; GFX1250-LABEL: global_singlethread_seq_cst_seq_cst_ret_cmpxchg:10429; GFX1250:       ; %bb.0: ; %entry10430; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 110431; GFX1250-NEXT:    v_mov_b32_e32 v0, 010432; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x010433; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x810434; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc10435; GFX1250-NEXT:    s_wait_kmcnt 0x010436; GFX1250-NEXT:    v_mov_b32_e32 v2, s310437; GFX1250-NEXT:    v_mov_b32_e32 v1, s210438; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec10439; GFX1250-NEXT:    v_mov_b32_e32 v3, v110440; GFX1250-NEXT:    s_wait_xcnt 0x010441; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN10442; GFX1250-NEXT:    s_wait_loadcnt 0x010443; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]10444; GFX1250-NEXT:    s_endpgm10445    ptr addrspace(1) %out, i32 %in, i32 %old) {10446entry:10447  %gep = getelementptr i32, ptr addrspace(1) %out, i32 410448  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread") seq_cst seq_cst10449  %val0 = extractvalue { i32, i1 } %val, 010450  store i32 %val0, ptr addrspace(1) %out, align 410451  ret void10452}10453 10454define amdgpu_kernel void @global_singlethread_one_as_unordered_load(10455; GFX6-LABEL: global_singlethread_one_as_unordered_load:10456; GFX6:       ; %bb.0: ; %entry10457; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]10458; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x010459; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x210460; GFX6-NEXT:    s_waitcnt lgkmcnt(0)10461; GFX6-NEXT:    s_mov_b32 s6, s910462; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr910463; GFX6-NEXT:    s_mov_b32 s12, 0x100f00010464; GFX6-NEXT:    s_mov_b32 s13, -110465; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr1110466; GFX6-NEXT:    s_mov_b32 s9, s610467; GFX6-NEXT:    s_mov_b32 s10, s1310468; GFX6-NEXT:    s_mov_b32 s11, s1210469; GFX6-NEXT:    s_mov_b32 s14, s510470; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr510471; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr710472; GFX6-NEXT:    s_mov_b32 s5, s1410473; GFX6-NEXT:    s_mov_b32 s6, s1310474; GFX6-NEXT:    s_mov_b32 s7, s1210475; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 010476; GFX6-NEXT:    s_waitcnt vmcnt(0)10477; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 010478; GFX6-NEXT:    s_endpgm10479;10480; GFX7-LABEL: global_singlethread_one_as_unordered_load:10481; GFX7:       ; %bb.0: ; %entry10482; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1310483; GFX7-NEXT:    s_add_i32 s12, s12, s1710484; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 810485; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010486; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x210487; GFX7-NEXT:    s_waitcnt lgkmcnt(0)10488; GFX7-NEXT:    v_mov_b32_e32 v0, s610489; GFX7-NEXT:    v_mov_b32_e32 v1, s710490; GFX7-NEXT:    flat_load_dword v2, v[0:1]10491; GFX7-NEXT:    v_mov_b32_e32 v0, s410492; GFX7-NEXT:    v_mov_b32_e32 v1, s510493; GFX7-NEXT:    s_waitcnt vmcnt(0)10494; GFX7-NEXT:    flat_store_dword v[0:1], v210495; GFX7-NEXT:    s_endpgm10496;10497; GFX10-WGP-LABEL: global_singlethread_one_as_unordered_load:10498; GFX10-WGP:       ; %bb.0: ; %entry10499; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 010500; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010501; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810502; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)10503; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]10504; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)10505; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]10506; GFX10-WGP-NEXT:    s_endpgm10507;10508; GFX10-CU-LABEL: global_singlethread_one_as_unordered_load:10509; GFX10-CU:       ; %bb.0: ; %entry10510; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 010511; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010512; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810513; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)10514; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]10515; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)10516; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]10517; GFX10-CU-NEXT:    s_endpgm10518;10519; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_unordered_load:10520; SKIP-CACHE-INV:       ; %bb.0: ; %entry10521; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]10522; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x010523; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x210524; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)10525; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s510526; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr510527; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf00010528; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -110529; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr710530; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s210531; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s910532; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s810533; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s110534; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr110535; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr310536; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s1010537; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s910538; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s810539; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 010540; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)10541; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 010542; SKIP-CACHE-INV-NEXT:    s_endpgm10543;10544; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_unordered_load:10545; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry10546; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010547; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010548; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810549; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10550; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]10551; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10552; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10553; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm10554;10555; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_unordered_load:10556; GFX90A-TGSPLIT:       ; %bb.0: ; %entry10557; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010558; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010559; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810560; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10561; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]10562; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10563; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10564; GFX90A-TGSPLIT-NEXT:    s_endpgm10565;10566; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_unordered_load:10567; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry10568; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010569; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x010570; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x810571; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10572; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]10573; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10574; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10575; GFX942-NOTTGSPLIT-NEXT:    s_endpgm10576;10577; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_unordered_load:10578; GFX942-TGSPLIT:       ; %bb.0: ; %entry10579; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010580; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x010581; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x810582; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10583; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]10584; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10585; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10586; GFX942-TGSPLIT-NEXT:    s_endpgm10587;10588; GFX11-WGP-LABEL: global_singlethread_one_as_unordered_load:10589; GFX11-WGP:       ; %bb.0: ; %entry10590; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 010591; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010592; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810593; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)10594; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]10595; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)10596; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10597; GFX11-WGP-NEXT:    s_endpgm10598;10599; GFX11-CU-LABEL: global_singlethread_one_as_unordered_load:10600; GFX11-CU:       ; %bb.0: ; %entry10601; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 010602; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010603; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810604; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)10605; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]10606; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)10607; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10608; GFX11-CU-NEXT:    s_endpgm10609;10610; GFX12-WGP-LABEL: global_singlethread_one_as_unordered_load:10611; GFX12-WGP:       ; %bb.0: ; %entry10612; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 010613; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010614; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810615; GFX12-WGP-NEXT:    s_wait_kmcnt 0x010616; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]10617; GFX12-WGP-NEXT:    s_wait_loadcnt 0x010618; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10619; GFX12-WGP-NEXT:    s_endpgm10620;10621; GFX12-CU-LABEL: global_singlethread_one_as_unordered_load:10622; GFX12-CU:       ; %bb.0: ; %entry10623; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 010624; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010625; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810626; GFX12-CU-NEXT:    s_wait_kmcnt 0x010627; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]10628; GFX12-CU-NEXT:    s_wait_loadcnt 0x010629; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10630; GFX12-CU-NEXT:    s_endpgm10631;10632; GFX1250-LABEL: global_singlethread_one_as_unordered_load:10633; GFX1250:       ; %bb.0: ; %entry10634; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 110635; GFX1250-NEXT:    v_mov_b32_e32 v0, 010636; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010637; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810638; GFX1250-NEXT:    s_wait_kmcnt 0x010639; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]10640; GFX1250-NEXT:    s_wait_loadcnt 0x010641; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]10642; GFX1250-NEXT:    s_endpgm10643    ptr addrspace(1) %in, ptr addrspace(1) %out) {10644entry:10645  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread-one-as") unordered, align 410646  store i32 %val, ptr addrspace(1) %out10647  ret void10648}10649 10650define amdgpu_kernel void @global_singlethread_one_as_monotonic_load(10651; GFX6-LABEL: global_singlethread_one_as_monotonic_load:10652; GFX6:       ; %bb.0: ; %entry10653; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]10654; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x010655; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x210656; GFX6-NEXT:    s_waitcnt lgkmcnt(0)10657; GFX6-NEXT:    s_mov_b32 s6, s910658; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr910659; GFX6-NEXT:    s_mov_b32 s12, 0x100f00010660; GFX6-NEXT:    s_mov_b32 s13, -110661; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr1110662; GFX6-NEXT:    s_mov_b32 s9, s610663; GFX6-NEXT:    s_mov_b32 s10, s1310664; GFX6-NEXT:    s_mov_b32 s11, s1210665; GFX6-NEXT:    s_mov_b32 s14, s510666; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr510667; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr710668; GFX6-NEXT:    s_mov_b32 s5, s1410669; GFX6-NEXT:    s_mov_b32 s6, s1310670; GFX6-NEXT:    s_mov_b32 s7, s1210671; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 010672; GFX6-NEXT:    s_waitcnt vmcnt(0)10673; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 010674; GFX6-NEXT:    s_endpgm10675;10676; GFX7-LABEL: global_singlethread_one_as_monotonic_load:10677; GFX7:       ; %bb.0: ; %entry10678; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1310679; GFX7-NEXT:    s_add_i32 s12, s12, s1710680; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 810681; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010682; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x210683; GFX7-NEXT:    s_waitcnt lgkmcnt(0)10684; GFX7-NEXT:    v_mov_b32_e32 v0, s610685; GFX7-NEXT:    v_mov_b32_e32 v1, s710686; GFX7-NEXT:    flat_load_dword v2, v[0:1]10687; GFX7-NEXT:    v_mov_b32_e32 v0, s410688; GFX7-NEXT:    v_mov_b32_e32 v1, s510689; GFX7-NEXT:    s_waitcnt vmcnt(0)10690; GFX7-NEXT:    flat_store_dword v[0:1], v210691; GFX7-NEXT:    s_endpgm10692;10693; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_load:10694; GFX10-WGP:       ; %bb.0: ; %entry10695; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 010696; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010697; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810698; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)10699; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]10700; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)10701; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]10702; GFX10-WGP-NEXT:    s_endpgm10703;10704; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_load:10705; GFX10-CU:       ; %bb.0: ; %entry10706; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 010707; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010708; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810709; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)10710; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]10711; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)10712; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]10713; GFX10-CU-NEXT:    s_endpgm10714;10715; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_load:10716; SKIP-CACHE-INV:       ; %bb.0: ; %entry10717; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]10718; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x010719; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x210720; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)10721; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s510722; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr510723; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf00010724; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -110725; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr710726; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s210727; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s910728; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s810729; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s110730; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr110731; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr310732; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s1010733; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s910734; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s810735; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 010736; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)10737; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 010738; SKIP-CACHE-INV-NEXT:    s_endpgm10739;10740; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_load:10741; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry10742; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010743; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010744; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810745; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10746; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]10747; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10748; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10749; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm10750;10751; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_load:10752; GFX90A-TGSPLIT:       ; %bb.0: ; %entry10753; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010754; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010755; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810756; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10757; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]10758; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10759; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10760; GFX90A-TGSPLIT-NEXT:    s_endpgm10761;10762; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_load:10763; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry10764; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010765; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x010766; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x810767; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10768; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]10769; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10770; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10771; GFX942-NOTTGSPLIT-NEXT:    s_endpgm10772;10773; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_load:10774; GFX942-TGSPLIT:       ; %bb.0: ; %entry10775; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010776; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x010777; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x810778; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10779; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]10780; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10781; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10782; GFX942-TGSPLIT-NEXT:    s_endpgm10783;10784; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_load:10785; GFX11-WGP:       ; %bb.0: ; %entry10786; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 010787; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010788; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810789; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)10790; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]10791; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)10792; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10793; GFX11-WGP-NEXT:    s_endpgm10794;10795; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_load:10796; GFX11-CU:       ; %bb.0: ; %entry10797; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 010798; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010799; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810800; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)10801; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]10802; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)10803; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10804; GFX11-CU-NEXT:    s_endpgm10805;10806; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_load:10807; GFX12-WGP:       ; %bb.0: ; %entry10808; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 010809; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010810; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810811; GFX12-WGP-NEXT:    s_wait_kmcnt 0x010812; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]10813; GFX12-WGP-NEXT:    s_wait_loadcnt 0x010814; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10815; GFX12-WGP-NEXT:    s_endpgm10816;10817; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_load:10818; GFX12-CU:       ; %bb.0: ; %entry10819; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 010820; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010821; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810822; GFX12-CU-NEXT:    s_wait_kmcnt 0x010823; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]10824; GFX12-CU-NEXT:    s_wait_loadcnt 0x010825; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]10826; GFX12-CU-NEXT:    s_endpgm10827;10828; GFX1250-LABEL: global_singlethread_one_as_monotonic_load:10829; GFX1250:       ; %bb.0: ; %entry10830; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 110831; GFX1250-NEXT:    v_mov_b32_e32 v0, 010832; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010833; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810834; GFX1250-NEXT:    s_wait_kmcnt 0x010835; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]10836; GFX1250-NEXT:    s_wait_loadcnt 0x010837; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]10838; GFX1250-NEXT:    s_endpgm10839    ptr addrspace(1) %in, ptr addrspace(1) %out) {10840entry:10841  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread-one-as") monotonic, align 410842  store i32 %val, ptr addrspace(1) %out10843  ret void10844}10845 10846define amdgpu_kernel void @global_singlethread_one_as_acquire_load(10847; GFX6-LABEL: global_singlethread_one_as_acquire_load:10848; GFX6:       ; %bb.0: ; %entry10849; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]10850; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x010851; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x210852; GFX6-NEXT:    s_waitcnt lgkmcnt(0)10853; GFX6-NEXT:    s_mov_b32 s6, s910854; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr910855; GFX6-NEXT:    s_mov_b32 s12, 0x100f00010856; GFX6-NEXT:    s_mov_b32 s13, -110857; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr1110858; GFX6-NEXT:    s_mov_b32 s9, s610859; GFX6-NEXT:    s_mov_b32 s10, s1310860; GFX6-NEXT:    s_mov_b32 s11, s1210861; GFX6-NEXT:    s_mov_b32 s14, s510862; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr510863; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr710864; GFX6-NEXT:    s_mov_b32 s5, s1410865; GFX6-NEXT:    s_mov_b32 s6, s1310866; GFX6-NEXT:    s_mov_b32 s7, s1210867; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 010868; GFX6-NEXT:    s_waitcnt vmcnt(0)10869; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 010870; GFX6-NEXT:    s_endpgm10871;10872; GFX7-LABEL: global_singlethread_one_as_acquire_load:10873; GFX7:       ; %bb.0: ; %entry10874; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1310875; GFX7-NEXT:    s_add_i32 s12, s12, s1710876; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 810877; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010878; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x210879; GFX7-NEXT:    s_waitcnt lgkmcnt(0)10880; GFX7-NEXT:    v_mov_b32_e32 v0, s610881; GFX7-NEXT:    v_mov_b32_e32 v1, s710882; GFX7-NEXT:    flat_load_dword v2, v[0:1]10883; GFX7-NEXT:    v_mov_b32_e32 v0, s410884; GFX7-NEXT:    v_mov_b32_e32 v1, s510885; GFX7-NEXT:    s_waitcnt vmcnt(0)10886; GFX7-NEXT:    flat_store_dword v[0:1], v210887; GFX7-NEXT:    s_endpgm10888;10889; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_load:10890; GFX10-WGP:       ; %bb.0: ; %entry10891; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 010892; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010893; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810894; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)10895; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]10896; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)10897; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]10898; GFX10-WGP-NEXT:    s_endpgm10899;10900; GFX10-CU-LABEL: global_singlethread_one_as_acquire_load:10901; GFX10-CU:       ; %bb.0: ; %entry10902; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 010903; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010904; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810905; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)10906; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]10907; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)10908; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]10909; GFX10-CU-NEXT:    s_endpgm10910;10911; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_load:10912; SKIP-CACHE-INV:       ; %bb.0: ; %entry10913; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]10914; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x010915; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x210916; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)10917; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s510918; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr510919; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf00010920; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -110921; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr710922; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s210923; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s910924; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s810925; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s110926; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr110927; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr310928; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s1010929; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s910930; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s810931; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 010932; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)10933; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 010934; SKIP-CACHE-INV-NEXT:    s_endpgm10935;10936; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_load:10937; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry10938; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010939; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010940; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810941; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10942; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]10943; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10944; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10945; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm10946;10947; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_load:10948; GFX90A-TGSPLIT:       ; %bb.0: ; %entry10949; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010950; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x010951; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x810952; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10953; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]10954; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10955; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]10956; GFX90A-TGSPLIT-NEXT:    s_endpgm10957;10958; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_load:10959; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry10960; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 010961; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x010962; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x810963; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10964; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]10965; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)10966; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10967; GFX942-NOTTGSPLIT-NEXT:    s_endpgm10968;10969; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_load:10970; GFX942-TGSPLIT:       ; %bb.0: ; %entry10971; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 010972; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x010973; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x810974; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)10975; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]10976; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)10977; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]10978; GFX942-TGSPLIT-NEXT:    s_endpgm10979;10980; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_load:10981; GFX11-WGP:       ; %bb.0: ; %entry10982; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 010983; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010984; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810985; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)10986; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]10987; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)10988; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]10989; GFX11-WGP-NEXT:    s_endpgm10990;10991; GFX11-CU-LABEL: global_singlethread_one_as_acquire_load:10992; GFX11-CU:       ; %bb.0: ; %entry10993; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 010994; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x010995; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x810996; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)10997; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]10998; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)10999; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11000; GFX11-CU-NEXT:    s_endpgm11001;11002; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_load:11003; GFX12-WGP:       ; %bb.0: ; %entry11004; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 011005; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011006; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811007; GFX12-WGP-NEXT:    s_wait_kmcnt 0x011008; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]11009; GFX12-WGP-NEXT:    s_wait_loadcnt 0x011010; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11011; GFX12-WGP-NEXT:    s_endpgm11012;11013; GFX12-CU-LABEL: global_singlethread_one_as_acquire_load:11014; GFX12-CU:       ; %bb.0: ; %entry11015; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 011016; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011017; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811018; GFX12-CU-NEXT:    s_wait_kmcnt 0x011019; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]11020; GFX12-CU-NEXT:    s_wait_loadcnt 0x011021; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11022; GFX12-CU-NEXT:    s_endpgm11023;11024; GFX1250-LABEL: global_singlethread_one_as_acquire_load:11025; GFX1250:       ; %bb.0: ; %entry11026; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 111027; GFX1250-NEXT:    v_mov_b32_e32 v0, 011028; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011029; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811030; GFX1250-NEXT:    s_wait_kmcnt 0x011031; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]11032; GFX1250-NEXT:    s_wait_loadcnt 0x011033; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]11034; GFX1250-NEXT:    s_endpgm11035    ptr addrspace(1) %in, ptr addrspace(1) %out) {11036entry:11037  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread-one-as") acquire, align 411038  store i32 %val, ptr addrspace(1) %out11039  ret void11040}11041 11042define amdgpu_kernel void @global_singlethread_one_as_seq_cst_load(11043; GFX6-LABEL: global_singlethread_one_as_seq_cst_load:11044; GFX6:       ; %bb.0: ; %entry11045; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]11046; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x011047; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x211048; GFX6-NEXT:    s_waitcnt lgkmcnt(0)11049; GFX6-NEXT:    s_mov_b32 s6, s911050; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 killed $sgpr8_sgpr911051; GFX6-NEXT:    s_mov_b32 s12, 0x100f00011052; GFX6-NEXT:    s_mov_b32 s13, -111053; GFX6-NEXT:    ; kill: def $sgpr8 killed $sgpr8 def $sgpr8_sgpr9_sgpr10_sgpr1111054; GFX6-NEXT:    s_mov_b32 s9, s611055; GFX6-NEXT:    s_mov_b32 s10, s1311056; GFX6-NEXT:    s_mov_b32 s11, s1211057; GFX6-NEXT:    s_mov_b32 s14, s511058; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr511059; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr711060; GFX6-NEXT:    s_mov_b32 s5, s1411061; GFX6-NEXT:    s_mov_b32 s6, s1311062; GFX6-NEXT:    s_mov_b32 s7, s1211063; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 011064; GFX6-NEXT:    s_waitcnt vmcnt(0)11065; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 011066; GFX6-NEXT:    s_endpgm11067;11068; GFX7-LABEL: global_singlethread_one_as_seq_cst_load:11069; GFX7:       ; %bb.0: ; %entry11070; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1311071; GFX7-NEXT:    s_add_i32 s12, s12, s1711072; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 811073; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x011074; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x211075; GFX7-NEXT:    s_waitcnt lgkmcnt(0)11076; GFX7-NEXT:    v_mov_b32_e32 v0, s611077; GFX7-NEXT:    v_mov_b32_e32 v1, s711078; GFX7-NEXT:    flat_load_dword v2, v[0:1]11079; GFX7-NEXT:    v_mov_b32_e32 v0, s411080; GFX7-NEXT:    v_mov_b32_e32 v1, s511081; GFX7-NEXT:    s_waitcnt vmcnt(0)11082; GFX7-NEXT:    flat_store_dword v[0:1], v211083; GFX7-NEXT:    s_endpgm11084;11085; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_load:11086; GFX10-WGP:       ; %bb.0: ; %entry11087; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 011088; GFX10-WGP-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x011089; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811090; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)11091; GFX10-WGP-NEXT:    global_load_dword v1, v0, s[6:7]11092; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)11093; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]11094; GFX10-WGP-NEXT:    s_endpgm11095;11096; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_load:11097; GFX10-CU:       ; %bb.0: ; %entry11098; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 011099; GFX10-CU-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x011100; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811101; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)11102; GFX10-CU-NEXT:    global_load_dword v1, v0, s[6:7]11103; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)11104; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]11105; GFX10-CU-NEXT:    s_endpgm11106;11107; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_load:11108; SKIP-CACHE-INV:       ; %bb.0: ; %entry11109; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]11110; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x011111; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x211112; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)11113; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s511114; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr511115; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, 0xf00011116; SKIP-CACHE-INV-NEXT:    s_mov_b32 s9, -111117; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr711118; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, s211119; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, s911120; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s811121; SKIP-CACHE-INV-NEXT:    s_mov_b32 s10, s111122; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr111123; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr311124; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s1011125; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s911126; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s811127; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, off, s[4:7], 011128; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)11129; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 011130; SKIP-CACHE-INV-NEXT:    s_endpgm11131;11132; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_load:11133; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry11134; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011135; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x011136; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811137; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11138; GFX90A-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]11139; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)11140; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11141; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm11142;11143; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_load:11144; GFX90A-TGSPLIT:       ; %bb.0: ; %entry11145; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011146; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x011147; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811148; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11149; GFX90A-TGSPLIT-NEXT:    global_load_dword v1, v0, s[6:7]11150; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)11151; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11152; GFX90A-TGSPLIT-NEXT:    s_endpgm11153;11154; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_load:11155; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry11156; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011157; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x011158; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811159; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11160; GFX942-NOTTGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]11161; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)11162; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11163; GFX942-NOTTGSPLIT-NEXT:    s_endpgm11164;11165; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_load:11166; GFX942-TGSPLIT:       ; %bb.0: ; %entry11167; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011168; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x011169; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811170; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11171; GFX942-TGSPLIT-NEXT:    global_load_dword v1, v0, s[2:3]11172; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)11173; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11174; GFX942-TGSPLIT-NEXT:    s_endpgm11175;11176; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_load:11177; GFX11-WGP:       ; %bb.0: ; %entry11178; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 011179; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011180; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811181; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)11182; GFX11-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]11183; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)11184; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11185; GFX11-WGP-NEXT:    s_endpgm11186;11187; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_load:11188; GFX11-CU:       ; %bb.0: ; %entry11189; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 011190; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011191; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811192; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)11193; GFX11-CU-NEXT:    global_load_b32 v1, v0, s[2:3]11194; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)11195; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11196; GFX11-CU-NEXT:    s_endpgm11197;11198; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_load:11199; GFX12-WGP:       ; %bb.0: ; %entry11200; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 011201; GFX12-WGP-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011202; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811203; GFX12-WGP-NEXT:    s_wait_kmcnt 0x011204; GFX12-WGP-NEXT:    global_load_b32 v1, v0, s[2:3]11205; GFX12-WGP-NEXT:    s_wait_loadcnt 0x011206; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11207; GFX12-WGP-NEXT:    s_endpgm11208;11209; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_load:11210; GFX12-CU:       ; %bb.0: ; %entry11211; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 011212; GFX12-CU-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011213; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811214; GFX12-CU-NEXT:    s_wait_kmcnt 0x011215; GFX12-CU-NEXT:    global_load_b32 v1, v0, s[2:3]11216; GFX12-CU-NEXT:    s_wait_loadcnt 0x011217; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11218; GFX12-CU-NEXT:    s_endpgm11219;11220; GFX1250-LABEL: global_singlethread_one_as_seq_cst_load:11221; GFX1250:       ; %bb.0: ; %entry11222; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 111223; GFX1250-NEXT:    v_mov_b32_e32 v0, 011224; GFX1250-NEXT:    s_load_b64 s[2:3], s[4:5], 0x011225; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811226; GFX1250-NEXT:    s_wait_kmcnt 0x011227; GFX1250-NEXT:    global_load_b32 v1, v0, s[2:3]11228; GFX1250-NEXT:    s_wait_loadcnt 0x011229; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]11230; GFX1250-NEXT:    s_endpgm11231    ptr addrspace(1) %in, ptr addrspace(1) %out) {11232entry:11233  %val = load atomic i32, ptr addrspace(1) %in syncscope("singlethread-one-as") seq_cst, align 411234  store i32 %val, ptr addrspace(1) %out11235  ret void11236}11237 11238define amdgpu_kernel void @global_singlethread_one_as_unordered_store(11239; GFX6-LABEL: global_singlethread_one_as_unordered_store:11240; GFX6:       ; %bb.0: ; %entry11241; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]11242; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x011243; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x211244; GFX6-NEXT:    s_waitcnt lgkmcnt(0)11245; GFX6-NEXT:    s_mov_b32 s11, s511246; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr511247; GFX6-NEXT:    s_mov_b32 s9, 0x100f00011248; GFX6-NEXT:    s_mov_b32 s10, -111249; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr711250; GFX6-NEXT:    s_mov_b32 s5, s1111251; GFX6-NEXT:    s_mov_b32 s6, s1011252; GFX6-NEXT:    s_mov_b32 s7, s911253; GFX6-NEXT:    v_mov_b32_e32 v0, s811254; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 011255; GFX6-NEXT:    s_endpgm11256;11257; GFX7-LABEL: global_singlethread_one_as_unordered_store:11258; GFX7:       ; %bb.0: ; %entry11259; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1311260; GFX7-NEXT:    s_add_i32 s12, s12, s1711261; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 811262; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x011263; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x211264; GFX7-NEXT:    s_waitcnt lgkmcnt(0)11265; GFX7-NEXT:    v_mov_b32_e32 v0, s611266; GFX7-NEXT:    v_mov_b32_e32 v1, s711267; GFX7-NEXT:    v_mov_b32_e32 v2, s411268; GFX7-NEXT:    flat_store_dword v[0:1], v211269; GFX7-NEXT:    s_endpgm11270;11271; GFX10-WGP-LABEL: global_singlethread_one_as_unordered_store:11272; GFX10-WGP:       ; %bb.0: ; %entry11273; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x011274; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811275; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 011276; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)11277; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s611278; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]11279; GFX10-WGP-NEXT:    s_endpgm11280;11281; GFX10-CU-LABEL: global_singlethread_one_as_unordered_store:11282; GFX10-CU:       ; %bb.0: ; %entry11283; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x011284; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811285; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 011286; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)11287; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s611288; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]11289; GFX10-CU-NEXT:    s_endpgm11290;11291; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_unordered_store:11292; SKIP-CACHE-INV:       ; %bb.0: ; %entry11293; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]11294; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x011295; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x211296; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)11297; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s111298; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr111299; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00011300; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -111301; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr311302; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s711303; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s611304; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s511305; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s411306; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 011307; SKIP-CACHE-INV-NEXT:    s_endpgm11308;11309; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_unordered_store:11310; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry11311; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011312; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811313; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011314; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11315; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s611316; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11317; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm11318;11319; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_unordered_store:11320; GFX90A-TGSPLIT:       ; %bb.0: ; %entry11321; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011322; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811323; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011324; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11325; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s611326; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11327; GFX90A-TGSPLIT-NEXT:    s_endpgm11328;11329; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_unordered_store:11330; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry11331; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011332; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811333; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011334; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11335; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s211336; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11337; GFX942-NOTTGSPLIT-NEXT:    s_endpgm11338;11339; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_unordered_store:11340; GFX942-TGSPLIT:       ; %bb.0: ; %entry11341; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011342; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811343; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011344; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11345; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s211346; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11347; GFX942-TGSPLIT-NEXT:    s_endpgm11348;11349; GFX11-WGP-LABEL: global_singlethread_one_as_unordered_store:11350; GFX11-WGP:       ; %bb.0: ; %entry11351; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011352; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811353; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 011354; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)11355; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s211356; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11357; GFX11-WGP-NEXT:    s_endpgm11358;11359; GFX11-CU-LABEL: global_singlethread_one_as_unordered_store:11360; GFX11-CU:       ; %bb.0: ; %entry11361; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011362; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811363; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 011364; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)11365; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s211366; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11367; GFX11-CU-NEXT:    s_endpgm11368;11369; GFX12-WGP-LABEL: global_singlethread_one_as_unordered_store:11370; GFX12-WGP:       ; %bb.0: ; %entry11371; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011372; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811373; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 011374; GFX12-WGP-NEXT:    s_wait_kmcnt 0x011375; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s211376; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11377; GFX12-WGP-NEXT:    s_endpgm11378;11379; GFX12-CU-LABEL: global_singlethread_one_as_unordered_store:11380; GFX12-CU:       ; %bb.0: ; %entry11381; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011382; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811383; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 011384; GFX12-CU-NEXT:    s_wait_kmcnt 0x011385; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s211386; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11387; GFX12-CU-NEXT:    s_endpgm11388;11389; GFX1250-LABEL: global_singlethread_one_as_unordered_store:11390; GFX1250:       ; %bb.0: ; %entry11391; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 111392; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x011393; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811394; GFX1250-NEXT:    v_mov_b32_e32 v0, 011395; GFX1250-NEXT:    s_wait_kmcnt 0x011396; GFX1250-NEXT:    v_mov_b32_e32 v1, s211397; GFX1250-NEXT:    s_wait_xcnt 0x011398; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]11399; GFX1250-NEXT:    s_endpgm11400    i32 %in, ptr addrspace(1) %out) {11401entry:11402  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread-one-as") unordered, align 411403  ret void11404}11405 11406define amdgpu_kernel void @global_singlethread_one_as_monotonic_store(11407; GFX6-LABEL: global_singlethread_one_as_monotonic_store:11408; GFX6:       ; %bb.0: ; %entry11409; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]11410; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x011411; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x211412; GFX6-NEXT:    s_waitcnt lgkmcnt(0)11413; GFX6-NEXT:    s_mov_b32 s11, s511414; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr511415; GFX6-NEXT:    s_mov_b32 s9, 0x100f00011416; GFX6-NEXT:    s_mov_b32 s10, -111417; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr711418; GFX6-NEXT:    s_mov_b32 s5, s1111419; GFX6-NEXT:    s_mov_b32 s6, s1011420; GFX6-NEXT:    s_mov_b32 s7, s911421; GFX6-NEXT:    v_mov_b32_e32 v0, s811422; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 011423; GFX6-NEXT:    s_endpgm11424;11425; GFX7-LABEL: global_singlethread_one_as_monotonic_store:11426; GFX7:       ; %bb.0: ; %entry11427; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1311428; GFX7-NEXT:    s_add_i32 s12, s12, s1711429; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 811430; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x011431; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x211432; GFX7-NEXT:    s_waitcnt lgkmcnt(0)11433; GFX7-NEXT:    v_mov_b32_e32 v0, s611434; GFX7-NEXT:    v_mov_b32_e32 v1, s711435; GFX7-NEXT:    v_mov_b32_e32 v2, s411436; GFX7-NEXT:    flat_store_dword v[0:1], v211437; GFX7-NEXT:    s_endpgm11438;11439; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_store:11440; GFX10-WGP:       ; %bb.0: ; %entry11441; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x011442; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811443; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 011444; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)11445; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s611446; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]11447; GFX10-WGP-NEXT:    s_endpgm11448;11449; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_store:11450; GFX10-CU:       ; %bb.0: ; %entry11451; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x011452; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811453; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 011454; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)11455; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s611456; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]11457; GFX10-CU-NEXT:    s_endpgm11458;11459; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_store:11460; SKIP-CACHE-INV:       ; %bb.0: ; %entry11461; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]11462; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x011463; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x211464; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)11465; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s111466; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr111467; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00011468; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -111469; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr311470; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s711471; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s611472; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s511473; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s411474; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 011475; SKIP-CACHE-INV-NEXT:    s_endpgm11476;11477; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_store:11478; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry11479; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011480; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811481; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011482; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11483; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s611484; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11485; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm11486;11487; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_store:11488; GFX90A-TGSPLIT:       ; %bb.0: ; %entry11489; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011490; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811491; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011492; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11493; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s611494; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11495; GFX90A-TGSPLIT-NEXT:    s_endpgm11496;11497; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_store:11498; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry11499; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011500; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811501; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011502; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11503; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s211504; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11505; GFX942-NOTTGSPLIT-NEXT:    s_endpgm11506;11507; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_store:11508; GFX942-TGSPLIT:       ; %bb.0: ; %entry11509; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011510; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811511; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011512; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11513; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s211514; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11515; GFX942-TGSPLIT-NEXT:    s_endpgm11516;11517; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_store:11518; GFX11-WGP:       ; %bb.0: ; %entry11519; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011520; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811521; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 011522; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)11523; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s211524; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11525; GFX11-WGP-NEXT:    s_endpgm11526;11527; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_store:11528; GFX11-CU:       ; %bb.0: ; %entry11529; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011530; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811531; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 011532; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)11533; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s211534; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11535; GFX11-CU-NEXT:    s_endpgm11536;11537; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_store:11538; GFX12-WGP:       ; %bb.0: ; %entry11539; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011540; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811541; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 011542; GFX12-WGP-NEXT:    s_wait_kmcnt 0x011543; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s211544; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11545; GFX12-WGP-NEXT:    s_endpgm11546;11547; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_store:11548; GFX12-CU:       ; %bb.0: ; %entry11549; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011550; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811551; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 011552; GFX12-CU-NEXT:    s_wait_kmcnt 0x011553; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s211554; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11555; GFX12-CU-NEXT:    s_endpgm11556;11557; GFX1250-LABEL: global_singlethread_one_as_monotonic_store:11558; GFX1250:       ; %bb.0: ; %entry11559; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 111560; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x011561; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811562; GFX1250-NEXT:    v_mov_b32_e32 v0, 011563; GFX1250-NEXT:    s_wait_kmcnt 0x011564; GFX1250-NEXT:    v_mov_b32_e32 v1, s211565; GFX1250-NEXT:    s_wait_xcnt 0x011566; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]11567; GFX1250-NEXT:    s_endpgm11568    i32 %in, ptr addrspace(1) %out) {11569entry:11570  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread-one-as") monotonic, align 411571  ret void11572}11573 11574define amdgpu_kernel void @global_singlethread_one_as_release_store(11575; GFX6-LABEL: global_singlethread_one_as_release_store:11576; GFX6:       ; %bb.0: ; %entry11577; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]11578; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x011579; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x211580; GFX6-NEXT:    s_waitcnt lgkmcnt(0)11581; GFX6-NEXT:    s_mov_b32 s11, s511582; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr511583; GFX6-NEXT:    s_mov_b32 s9, 0x100f00011584; GFX6-NEXT:    s_mov_b32 s10, -111585; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr711586; GFX6-NEXT:    s_mov_b32 s5, s1111587; GFX6-NEXT:    s_mov_b32 s6, s1011588; GFX6-NEXT:    s_mov_b32 s7, s911589; GFX6-NEXT:    v_mov_b32_e32 v0, s811590; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 011591; GFX6-NEXT:    s_endpgm11592;11593; GFX7-LABEL: global_singlethread_one_as_release_store:11594; GFX7:       ; %bb.0: ; %entry11595; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1311596; GFX7-NEXT:    s_add_i32 s12, s12, s1711597; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 811598; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x011599; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x211600; GFX7-NEXT:    s_waitcnt lgkmcnt(0)11601; GFX7-NEXT:    v_mov_b32_e32 v0, s611602; GFX7-NEXT:    v_mov_b32_e32 v1, s711603; GFX7-NEXT:    v_mov_b32_e32 v2, s411604; GFX7-NEXT:    flat_store_dword v[0:1], v211605; GFX7-NEXT:    s_endpgm11606;11607; GFX10-WGP-LABEL: global_singlethread_one_as_release_store:11608; GFX10-WGP:       ; %bb.0: ; %entry11609; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x011610; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811611; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 011612; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)11613; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s611614; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]11615; GFX10-WGP-NEXT:    s_endpgm11616;11617; GFX10-CU-LABEL: global_singlethread_one_as_release_store:11618; GFX10-CU:       ; %bb.0: ; %entry11619; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x011620; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811621; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 011622; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)11623; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s611624; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]11625; GFX10-CU-NEXT:    s_endpgm11626;11627; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_store:11628; SKIP-CACHE-INV:       ; %bb.0: ; %entry11629; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]11630; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x011631; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x211632; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)11633; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s111634; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr111635; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00011636; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -111637; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr311638; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s711639; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s611640; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s511641; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s411642; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 011643; SKIP-CACHE-INV-NEXT:    s_endpgm11644;11645; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_store:11646; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry11647; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011648; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811649; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011650; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11651; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s611652; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11653; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm11654;11655; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_store:11656; GFX90A-TGSPLIT:       ; %bb.0: ; %entry11657; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011658; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811659; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011660; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11661; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s611662; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11663; GFX90A-TGSPLIT-NEXT:    s_endpgm11664;11665; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_store:11666; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry11667; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011668; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811669; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011670; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11671; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s211672; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11673; GFX942-NOTTGSPLIT-NEXT:    s_endpgm11674;11675; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_store:11676; GFX942-TGSPLIT:       ; %bb.0: ; %entry11677; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011678; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811679; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011680; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11681; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s211682; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11683; GFX942-TGSPLIT-NEXT:    s_endpgm11684;11685; GFX11-WGP-LABEL: global_singlethread_one_as_release_store:11686; GFX11-WGP:       ; %bb.0: ; %entry11687; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011688; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811689; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 011690; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)11691; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s211692; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11693; GFX11-WGP-NEXT:    s_endpgm11694;11695; GFX11-CU-LABEL: global_singlethread_one_as_release_store:11696; GFX11-CU:       ; %bb.0: ; %entry11697; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011698; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811699; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 011700; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)11701; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s211702; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11703; GFX11-CU-NEXT:    s_endpgm11704;11705; GFX12-WGP-LABEL: global_singlethread_one_as_release_store:11706; GFX12-WGP:       ; %bb.0: ; %entry11707; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011708; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811709; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 011710; GFX12-WGP-NEXT:    s_wait_kmcnt 0x011711; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s211712; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11713; GFX12-WGP-NEXT:    s_endpgm11714;11715; GFX12-CU-LABEL: global_singlethread_one_as_release_store:11716; GFX12-CU:       ; %bb.0: ; %entry11717; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011718; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811719; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 011720; GFX12-CU-NEXT:    s_wait_kmcnt 0x011721; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s211722; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11723; GFX12-CU-NEXT:    s_endpgm11724;11725; GFX1250-LABEL: global_singlethread_one_as_release_store:11726; GFX1250:       ; %bb.0: ; %entry11727; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 111728; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x011729; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811730; GFX1250-NEXT:    v_mov_b32_e32 v0, 011731; GFX1250-NEXT:    s_wait_kmcnt 0x011732; GFX1250-NEXT:    v_mov_b32_e32 v1, s211733; GFX1250-NEXT:    s_wait_xcnt 0x011734; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]11735; GFX1250-NEXT:    s_endpgm11736    i32 %in, ptr addrspace(1) %out) {11737entry:11738  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread-one-as") release, align 411739  ret void11740}11741 11742define amdgpu_kernel void @global_singlethread_one_as_seq_cst_store(11743; GFX6-LABEL: global_singlethread_one_as_seq_cst_store:11744; GFX6:       ; %bb.0: ; %entry11745; GFX6-NEXT:    s_mov_b64 s[4:5], s[8:9]11746; GFX6-NEXT:    s_load_dword s8, s[4:5], 0x011747; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x211748; GFX6-NEXT:    s_waitcnt lgkmcnt(0)11749; GFX6-NEXT:    s_mov_b32 s11, s511750; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr511751; GFX6-NEXT:    s_mov_b32 s9, 0x100f00011752; GFX6-NEXT:    s_mov_b32 s10, -111753; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr711754; GFX6-NEXT:    s_mov_b32 s5, s1111755; GFX6-NEXT:    s_mov_b32 s6, s1011756; GFX6-NEXT:    s_mov_b32 s7, s911757; GFX6-NEXT:    v_mov_b32_e32 v0, s811758; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 011759; GFX6-NEXT:    s_endpgm11760;11761; GFX7-LABEL: global_singlethread_one_as_seq_cst_store:11762; GFX7:       ; %bb.0: ; %entry11763; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1311764; GFX7-NEXT:    s_add_i32 s12, s12, s1711765; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 811766; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x011767; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x211768; GFX7-NEXT:    s_waitcnt lgkmcnt(0)11769; GFX7-NEXT:    v_mov_b32_e32 v0, s611770; GFX7-NEXT:    v_mov_b32_e32 v1, s711771; GFX7-NEXT:    v_mov_b32_e32 v2, s411772; GFX7-NEXT:    flat_store_dword v[0:1], v211773; GFX7-NEXT:    s_endpgm11774;11775; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_store:11776; GFX10-WGP:       ; %bb.0: ; %entry11777; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x011778; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811779; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 011780; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)11781; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s611782; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]11783; GFX10-WGP-NEXT:    s_endpgm11784;11785; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_store:11786; GFX10-CU:       ; %bb.0: ; %entry11787; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x011788; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811789; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 011790; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)11791; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s611792; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]11793; GFX10-CU-NEXT:    s_endpgm11794;11795; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_store:11796; SKIP-CACHE-INV:       ; %bb.0: ; %entry11797; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[0:1], s[4:5]11798; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[0:1], 0x011799; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x211800; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)11801; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s111802; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr111803; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00011804; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -111805; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr311806; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s711807; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s611808; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s511809; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s411810; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 011811; SKIP-CACHE-INV-NEXT:    s_endpgm11812;11813; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_store:11814; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry11815; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011816; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811817; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011818; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11819; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s611820; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11821; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm11822;11823; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_store:11824; GFX90A-TGSPLIT:       ; %bb.0: ; %entry11825; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x011826; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x811827; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011828; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11829; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s611830; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]11831; GFX90A-TGSPLIT-NEXT:    s_endpgm11832;11833; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_store:11834; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry11835; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011836; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811837; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011838; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11839; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s211840; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11841; GFX942-NOTTGSPLIT-NEXT:    s_endpgm11842;11843; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_store:11844; GFX942-TGSPLIT:       ; %bb.0: ; %entry11845; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x011846; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x811847; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011848; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11849; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s211850; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]11851; GFX942-TGSPLIT-NEXT:    s_endpgm11852;11853; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_store:11854; GFX11-WGP:       ; %bb.0: ; %entry11855; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011856; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811857; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 011858; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)11859; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s211860; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11861; GFX11-WGP-NEXT:    s_endpgm11862;11863; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_store:11864; GFX11-CU:       ; %bb.0: ; %entry11865; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011866; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811867; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 011868; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)11869; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s211870; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11871; GFX11-CU-NEXT:    s_endpgm11872;11873; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_store:11874; GFX12-WGP:       ; %bb.0: ; %entry11875; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x011876; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811877; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 011878; GFX12-WGP-NEXT:    s_wait_kmcnt 0x011879; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s211880; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]11881; GFX12-WGP-NEXT:    s_endpgm11882;11883; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_store:11884; GFX12-CU:       ; %bb.0: ; %entry11885; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x011886; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811887; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 011888; GFX12-CU-NEXT:    s_wait_kmcnt 0x011889; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s211890; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]11891; GFX12-CU-NEXT:    s_endpgm11892;11893; GFX1250-LABEL: global_singlethread_one_as_seq_cst_store:11894; GFX1250:       ; %bb.0: ; %entry11895; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 111896; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x011897; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x811898; GFX1250-NEXT:    v_mov_b32_e32 v0, 011899; GFX1250-NEXT:    s_wait_kmcnt 0x011900; GFX1250-NEXT:    v_mov_b32_e32 v1, s211901; GFX1250-NEXT:    s_wait_xcnt 0x011902; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]11903; GFX1250-NEXT:    s_endpgm11904    i32 %in, ptr addrspace(1) %out) {11905entry:11906  store atomic i32 %in, ptr addrspace(1) %out syncscope("singlethread-one-as") seq_cst, align 411907  ret void11908}11909 11910define amdgpu_kernel void @global_singlethread_one_as_monotonic_atomicrmw(11911; GFX6-LABEL: global_singlethread_one_as_monotonic_atomicrmw:11912; GFX6:       ; %bb.0: ; %entry11913; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x011914; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x211915; GFX6-NEXT:    s_waitcnt lgkmcnt(0)11916; GFX6-NEXT:    s_mov_b32 s11, s511917; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr511918; GFX6-NEXT:    s_mov_b32 s9, 0x100f00011919; GFX6-NEXT:    s_mov_b32 s10, -111920; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr711921; GFX6-NEXT:    s_mov_b32 s5, s1111922; GFX6-NEXT:    s_mov_b32 s6, s1011923; GFX6-NEXT:    s_mov_b32 s7, s911924; GFX6-NEXT:    v_mov_b32_e32 v0, s811925; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 011926; GFX6-NEXT:    s_endpgm11927;11928; GFX7-LABEL: global_singlethread_one_as_monotonic_atomicrmw:11929; GFX7:       ; %bb.0: ; %entry11930; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1311931; GFX7-NEXT:    s_add_i32 s12, s12, s1711932; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 811933; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x011934; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x211935; GFX7-NEXT:    s_waitcnt lgkmcnt(0)11936; GFX7-NEXT:    v_mov_b32_e32 v0, s611937; GFX7-NEXT:    v_mov_b32_e32 v1, s711938; GFX7-NEXT:    v_mov_b32_e32 v2, s411939; GFX7-NEXT:    flat_atomic_swap v[0:1], v211940; GFX7-NEXT:    s_endpgm11941;11942; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_atomicrmw:11943; GFX10-WGP:       ; %bb.0: ; %entry11944; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 011945; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x011946; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x811947; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)11948; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s611949; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]11950; GFX10-WGP-NEXT:    s_endpgm11951;11952; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_atomicrmw:11953; GFX10-CU:       ; %bb.0: ; %entry11954; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 011955; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x011956; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x811957; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)11958; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s611959; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]11960; GFX10-CU-NEXT:    s_endpgm11961;11962; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_atomicrmw:11963; SKIP-CACHE-INV:       ; %bb.0: ; %entry11964; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x011965; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x211966; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)11967; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s111968; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr111969; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00011970; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -111971; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr311972; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s711973; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s611974; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s511975; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s411976; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 011977; SKIP-CACHE-INV-NEXT:    s_endpgm11978;11979; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_atomicrmw:11980; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry11981; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 011982; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x011983; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x811984; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11985; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s611986; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]11987; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm11988;11989; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_atomicrmw:11990; GFX90A-TGSPLIT:       ; %bb.0: ; %entry11991; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 011992; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x011993; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x811994; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)11995; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s611996; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]11997; GFX90A-TGSPLIT-NEXT:    s_endpgm11998;11999; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_atomicrmw:12000; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry12001; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012002; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012003; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812004; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12005; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s212006; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12007; GFX942-NOTTGSPLIT-NEXT:    s_endpgm12008;12009; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_atomicrmw:12010; GFX942-TGSPLIT:       ; %bb.0: ; %entry12011; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012012; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012013; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812014; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12015; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s212016; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12017; GFX942-TGSPLIT-NEXT:    s_endpgm12018;12019; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_atomicrmw:12020; GFX11-WGP:       ; %bb.0: ; %entry12021; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 012022; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012023; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812024; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)12025; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s212026; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12027; GFX11-WGP-NEXT:    s_endpgm12028;12029; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_atomicrmw:12030; GFX11-CU:       ; %bb.0: ; %entry12031; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 012032; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012033; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812034; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)12035; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s212036; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12037; GFX11-CU-NEXT:    s_endpgm12038;12039; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_atomicrmw:12040; GFX12-WGP:       ; %bb.0: ; %entry12041; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 012042; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012043; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812044; GFX12-WGP-NEXT:    s_wait_kmcnt 0x012045; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s212046; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12047; GFX12-WGP-NEXT:    s_endpgm12048;12049; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_atomicrmw:12050; GFX12-CU:       ; %bb.0: ; %entry12051; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 012052; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012053; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812054; GFX12-CU-NEXT:    s_wait_kmcnt 0x012055; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s212056; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12057; GFX12-CU-NEXT:    s_endpgm12058;12059; GFX1250-LABEL: global_singlethread_one_as_monotonic_atomicrmw:12060; GFX1250:       ; %bb.0: ; %entry12061; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 112062; GFX1250-NEXT:    v_mov_b32_e32 v0, 012063; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012064; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x812065; GFX1250-NEXT:    s_wait_kmcnt 0x012066; GFX1250-NEXT:    v_mov_b32_e32 v1, s212067; GFX1250-NEXT:    s_wait_xcnt 0x012068; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12069; GFX1250-NEXT:    s_endpgm12070    ptr addrspace(1) %out, i32 %in) {12071entry:12072  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") monotonic12073  ret void12074}12075 12076define amdgpu_kernel void @global_singlethread_one_as_acquire_atomicrmw(12077; GFX6-LABEL: global_singlethread_one_as_acquire_atomicrmw:12078; GFX6:       ; %bb.0: ; %entry12079; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012080; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x212081; GFX6-NEXT:    s_waitcnt lgkmcnt(0)12082; GFX6-NEXT:    s_mov_b32 s11, s512083; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr512084; GFX6-NEXT:    s_mov_b32 s9, 0x100f00012085; GFX6-NEXT:    s_mov_b32 s10, -112086; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr712087; GFX6-NEXT:    s_mov_b32 s5, s1112088; GFX6-NEXT:    s_mov_b32 s6, s1012089; GFX6-NEXT:    s_mov_b32 s7, s912090; GFX6-NEXT:    v_mov_b32_e32 v0, s812091; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 012092; GFX6-NEXT:    s_endpgm12093;12094; GFX7-LABEL: global_singlethread_one_as_acquire_atomicrmw:12095; GFX7:       ; %bb.0: ; %entry12096; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1312097; GFX7-NEXT:    s_add_i32 s12, s12, s1712098; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 812099; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x012100; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x212101; GFX7-NEXT:    s_waitcnt lgkmcnt(0)12102; GFX7-NEXT:    v_mov_b32_e32 v0, s612103; GFX7-NEXT:    v_mov_b32_e32 v1, s712104; GFX7-NEXT:    v_mov_b32_e32 v2, s412105; GFX7-NEXT:    flat_atomic_swap v[0:1], v212106; GFX7-NEXT:    s_endpgm12107;12108; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_atomicrmw:12109; GFX10-WGP:       ; %bb.0: ; %entry12110; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 012111; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012112; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x812113; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)12114; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s612115; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]12116; GFX10-WGP-NEXT:    s_endpgm12117;12118; GFX10-CU-LABEL: global_singlethread_one_as_acquire_atomicrmw:12119; GFX10-CU:       ; %bb.0: ; %entry12120; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 012121; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012122; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x812123; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)12124; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s612125; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]12126; GFX10-CU-NEXT:    s_endpgm12127;12128; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_atomicrmw:12129; SKIP-CACHE-INV:       ; %bb.0: ; %entry12130; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012131; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x212132; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)12133; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s112134; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr112135; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00012136; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -112137; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr312138; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s712139; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s612140; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s512141; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s412142; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 012143; SKIP-CACHE-INV-NEXT:    s_endpgm12144;12145; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_atomicrmw:12146; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry12147; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012148; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012149; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812150; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12151; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s612152; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12153; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm12154;12155; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_atomicrmw:12156; GFX90A-TGSPLIT:       ; %bb.0: ; %entry12157; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012158; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012159; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812160; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12161; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s612162; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12163; GFX90A-TGSPLIT-NEXT:    s_endpgm12164;12165; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_atomicrmw:12166; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry12167; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012168; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012169; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812170; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12171; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s212172; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12173; GFX942-NOTTGSPLIT-NEXT:    s_endpgm12174;12175; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_atomicrmw:12176; GFX942-TGSPLIT:       ; %bb.0: ; %entry12177; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012178; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012179; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812180; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12181; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s212182; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12183; GFX942-TGSPLIT-NEXT:    s_endpgm12184;12185; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_atomicrmw:12186; GFX11-WGP:       ; %bb.0: ; %entry12187; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 012188; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012189; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812190; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)12191; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s212192; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12193; GFX11-WGP-NEXT:    s_endpgm12194;12195; GFX11-CU-LABEL: global_singlethread_one_as_acquire_atomicrmw:12196; GFX11-CU:       ; %bb.0: ; %entry12197; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 012198; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012199; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812200; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)12201; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s212202; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12203; GFX11-CU-NEXT:    s_endpgm12204;12205; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_atomicrmw:12206; GFX12-WGP:       ; %bb.0: ; %entry12207; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 012208; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012209; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812210; GFX12-WGP-NEXT:    s_wait_kmcnt 0x012211; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s212212; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12213; GFX12-WGP-NEXT:    s_endpgm12214;12215; GFX12-CU-LABEL: global_singlethread_one_as_acquire_atomicrmw:12216; GFX12-CU:       ; %bb.0: ; %entry12217; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 012218; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012219; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812220; GFX12-CU-NEXT:    s_wait_kmcnt 0x012221; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s212222; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12223; GFX12-CU-NEXT:    s_endpgm12224;12225; GFX1250-LABEL: global_singlethread_one_as_acquire_atomicrmw:12226; GFX1250:       ; %bb.0: ; %entry12227; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 112228; GFX1250-NEXT:    v_mov_b32_e32 v0, 012229; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012230; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x812231; GFX1250-NEXT:    s_wait_kmcnt 0x012232; GFX1250-NEXT:    v_mov_b32_e32 v1, s212233; GFX1250-NEXT:    s_wait_xcnt 0x012234; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12235; GFX1250-NEXT:    s_endpgm12236    ptr addrspace(1) %out, i32 %in) {12237entry:12238  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") acquire12239  ret void12240}12241 12242define amdgpu_kernel void @global_singlethread_one_as_release_atomicrmw(12243; GFX6-LABEL: global_singlethread_one_as_release_atomicrmw:12244; GFX6:       ; %bb.0: ; %entry12245; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012246; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x212247; GFX6-NEXT:    s_waitcnt lgkmcnt(0)12248; GFX6-NEXT:    s_mov_b32 s11, s512249; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr512250; GFX6-NEXT:    s_mov_b32 s9, 0x100f00012251; GFX6-NEXT:    s_mov_b32 s10, -112252; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr712253; GFX6-NEXT:    s_mov_b32 s5, s1112254; GFX6-NEXT:    s_mov_b32 s6, s1012255; GFX6-NEXT:    s_mov_b32 s7, s912256; GFX6-NEXT:    v_mov_b32_e32 v0, s812257; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 012258; GFX6-NEXT:    s_endpgm12259;12260; GFX7-LABEL: global_singlethread_one_as_release_atomicrmw:12261; GFX7:       ; %bb.0: ; %entry12262; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1312263; GFX7-NEXT:    s_add_i32 s12, s12, s1712264; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 812265; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x012266; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x212267; GFX7-NEXT:    s_waitcnt lgkmcnt(0)12268; GFX7-NEXT:    v_mov_b32_e32 v0, s612269; GFX7-NEXT:    v_mov_b32_e32 v1, s712270; GFX7-NEXT:    v_mov_b32_e32 v2, s412271; GFX7-NEXT:    flat_atomic_swap v[0:1], v212272; GFX7-NEXT:    s_endpgm12273;12274; GFX10-WGP-LABEL: global_singlethread_one_as_release_atomicrmw:12275; GFX10-WGP:       ; %bb.0: ; %entry12276; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 012277; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012278; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x812279; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)12280; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s612281; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]12282; GFX10-WGP-NEXT:    s_endpgm12283;12284; GFX10-CU-LABEL: global_singlethread_one_as_release_atomicrmw:12285; GFX10-CU:       ; %bb.0: ; %entry12286; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 012287; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012288; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x812289; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)12290; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s612291; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]12292; GFX10-CU-NEXT:    s_endpgm12293;12294; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_atomicrmw:12295; SKIP-CACHE-INV:       ; %bb.0: ; %entry12296; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012297; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x212298; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)12299; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s112300; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr112301; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00012302; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -112303; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr312304; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s712305; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s612306; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s512307; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s412308; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 012309; SKIP-CACHE-INV-NEXT:    s_endpgm12310;12311; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_atomicrmw:12312; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry12313; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012314; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012315; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812316; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12317; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s612318; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12319; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm12320;12321; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_atomicrmw:12322; GFX90A-TGSPLIT:       ; %bb.0: ; %entry12323; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012324; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012325; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812326; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12327; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s612328; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12329; GFX90A-TGSPLIT-NEXT:    s_endpgm12330;12331; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_atomicrmw:12332; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry12333; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012334; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012335; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812336; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12337; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s212338; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12339; GFX942-NOTTGSPLIT-NEXT:    s_endpgm12340;12341; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_atomicrmw:12342; GFX942-TGSPLIT:       ; %bb.0: ; %entry12343; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012344; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012345; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812346; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12347; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s212348; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12349; GFX942-TGSPLIT-NEXT:    s_endpgm12350;12351; GFX11-WGP-LABEL: global_singlethread_one_as_release_atomicrmw:12352; GFX11-WGP:       ; %bb.0: ; %entry12353; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 012354; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012355; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812356; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)12357; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s212358; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12359; GFX11-WGP-NEXT:    s_endpgm12360;12361; GFX11-CU-LABEL: global_singlethread_one_as_release_atomicrmw:12362; GFX11-CU:       ; %bb.0: ; %entry12363; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 012364; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012365; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812366; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)12367; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s212368; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12369; GFX11-CU-NEXT:    s_endpgm12370;12371; GFX12-WGP-LABEL: global_singlethread_one_as_release_atomicrmw:12372; GFX12-WGP:       ; %bb.0: ; %entry12373; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 012374; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012375; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812376; GFX12-WGP-NEXT:    s_wait_kmcnt 0x012377; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s212378; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12379; GFX12-WGP-NEXT:    s_endpgm12380;12381; GFX12-CU-LABEL: global_singlethread_one_as_release_atomicrmw:12382; GFX12-CU:       ; %bb.0: ; %entry12383; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 012384; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012385; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812386; GFX12-CU-NEXT:    s_wait_kmcnt 0x012387; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s212388; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12389; GFX12-CU-NEXT:    s_endpgm12390;12391; GFX1250-LABEL: global_singlethread_one_as_release_atomicrmw:12392; GFX1250:       ; %bb.0: ; %entry12393; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 112394; GFX1250-NEXT:    v_mov_b32_e32 v0, 012395; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012396; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x812397; GFX1250-NEXT:    s_wait_kmcnt 0x012398; GFX1250-NEXT:    v_mov_b32_e32 v1, s212399; GFX1250-NEXT:    s_wait_xcnt 0x012400; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12401; GFX1250-NEXT:    s_endpgm12402    ptr addrspace(1) %out, i32 %in) {12403entry:12404  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") release12405  ret void12406}12407 12408define amdgpu_kernel void @global_singlethread_one_as_acq_rel_atomicrmw(12409; GFX6-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12410; GFX6:       ; %bb.0: ; %entry12411; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012412; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x212413; GFX6-NEXT:    s_waitcnt lgkmcnt(0)12414; GFX6-NEXT:    s_mov_b32 s11, s512415; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr512416; GFX6-NEXT:    s_mov_b32 s9, 0x100f00012417; GFX6-NEXT:    s_mov_b32 s10, -112418; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr712419; GFX6-NEXT:    s_mov_b32 s5, s1112420; GFX6-NEXT:    s_mov_b32 s6, s1012421; GFX6-NEXT:    s_mov_b32 s7, s912422; GFX6-NEXT:    v_mov_b32_e32 v0, s812423; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 012424; GFX6-NEXT:    s_endpgm12425;12426; GFX7-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12427; GFX7:       ; %bb.0: ; %entry12428; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1312429; GFX7-NEXT:    s_add_i32 s12, s12, s1712430; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 812431; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x012432; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x212433; GFX7-NEXT:    s_waitcnt lgkmcnt(0)12434; GFX7-NEXT:    v_mov_b32_e32 v0, s612435; GFX7-NEXT:    v_mov_b32_e32 v1, s712436; GFX7-NEXT:    v_mov_b32_e32 v2, s412437; GFX7-NEXT:    flat_atomic_swap v[0:1], v212438; GFX7-NEXT:    s_endpgm12439;12440; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12441; GFX10-WGP:       ; %bb.0: ; %entry12442; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 012443; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012444; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x812445; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)12446; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s612447; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]12448; GFX10-WGP-NEXT:    s_endpgm12449;12450; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12451; GFX10-CU:       ; %bb.0: ; %entry12452; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 012453; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012454; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x812455; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)12456; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s612457; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]12458; GFX10-CU-NEXT:    s_endpgm12459;12460; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12461; SKIP-CACHE-INV:       ; %bb.0: ; %entry12462; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012463; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x212464; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)12465; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s112466; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr112467; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00012468; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -112469; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr312470; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s712471; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s612472; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s512473; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s412474; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 012475; SKIP-CACHE-INV-NEXT:    s_endpgm12476;12477; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12478; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry12479; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012480; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012481; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812482; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12483; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s612484; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12485; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm12486;12487; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12488; GFX90A-TGSPLIT:       ; %bb.0: ; %entry12489; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012490; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012491; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812492; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12493; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s612494; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12495; GFX90A-TGSPLIT-NEXT:    s_endpgm12496;12497; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12498; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry12499; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012500; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012501; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812502; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12503; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s212504; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12505; GFX942-NOTTGSPLIT-NEXT:    s_endpgm12506;12507; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12508; GFX942-TGSPLIT:       ; %bb.0: ; %entry12509; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012510; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012511; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812512; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12513; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s212514; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12515; GFX942-TGSPLIT-NEXT:    s_endpgm12516;12517; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12518; GFX11-WGP:       ; %bb.0: ; %entry12519; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 012520; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012521; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812522; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)12523; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s212524; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12525; GFX11-WGP-NEXT:    s_endpgm12526;12527; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12528; GFX11-CU:       ; %bb.0: ; %entry12529; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 012530; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012531; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812532; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)12533; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s212534; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12535; GFX11-CU-NEXT:    s_endpgm12536;12537; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12538; GFX12-WGP:       ; %bb.0: ; %entry12539; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 012540; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012541; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812542; GFX12-WGP-NEXT:    s_wait_kmcnt 0x012543; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s212544; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12545; GFX12-WGP-NEXT:    s_endpgm12546;12547; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12548; GFX12-CU:       ; %bb.0: ; %entry12549; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 012550; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012551; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812552; GFX12-CU-NEXT:    s_wait_kmcnt 0x012553; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s212554; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12555; GFX12-CU-NEXT:    s_endpgm12556;12557; GFX1250-LABEL: global_singlethread_one_as_acq_rel_atomicrmw:12558; GFX1250:       ; %bb.0: ; %entry12559; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 112560; GFX1250-NEXT:    v_mov_b32_e32 v0, 012561; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012562; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x812563; GFX1250-NEXT:    s_wait_kmcnt 0x012564; GFX1250-NEXT:    v_mov_b32_e32 v1, s212565; GFX1250-NEXT:    s_wait_xcnt 0x012566; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12567; GFX1250-NEXT:    s_endpgm12568    ptr addrspace(1) %out, i32 %in) {12569entry:12570  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") acq_rel12571  ret void12572}12573 12574define amdgpu_kernel void @global_singlethread_one_as_seq_cst_atomicrmw(12575; GFX6-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12576; GFX6:       ; %bb.0: ; %entry12577; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012578; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x212579; GFX6-NEXT:    s_waitcnt lgkmcnt(0)12580; GFX6-NEXT:    s_mov_b32 s11, s512581; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr512582; GFX6-NEXT:    s_mov_b32 s9, 0x100f00012583; GFX6-NEXT:    s_mov_b32 s10, -112584; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr712585; GFX6-NEXT:    s_mov_b32 s5, s1112586; GFX6-NEXT:    s_mov_b32 s6, s1012587; GFX6-NEXT:    s_mov_b32 s7, s912588; GFX6-NEXT:    v_mov_b32_e32 v0, s812589; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 012590; GFX6-NEXT:    s_endpgm12591;12592; GFX7-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12593; GFX7:       ; %bb.0: ; %entry12594; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1312595; GFX7-NEXT:    s_add_i32 s12, s12, s1712596; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 812597; GFX7-NEXT:    s_load_dwordx2 s[6:7], s[8:9], 0x012598; GFX7-NEXT:    s_load_dword s4, s[8:9], 0x212599; GFX7-NEXT:    s_waitcnt lgkmcnt(0)12600; GFX7-NEXT:    v_mov_b32_e32 v0, s612601; GFX7-NEXT:    v_mov_b32_e32 v1, s712602; GFX7-NEXT:    v_mov_b32_e32 v2, s412603; GFX7-NEXT:    flat_atomic_swap v[0:1], v212604; GFX7-NEXT:    s_endpgm12605;12606; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12607; GFX10-WGP:       ; %bb.0: ; %entry12608; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 012609; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012610; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x812611; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)12612; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s612613; GFX10-WGP-NEXT:    global_atomic_swap v0, v1, s[4:5]12614; GFX10-WGP-NEXT:    s_endpgm12615;12616; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12617; GFX10-CU:       ; %bb.0: ; %entry12618; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 012619; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012620; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x812621; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)12622; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s612623; GFX10-CU-NEXT:    global_atomic_swap v0, v1, s[4:5]12624; GFX10-CU-NEXT:    s_endpgm12625;12626; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12627; SKIP-CACHE-INV:       ; %bb.0: ; %entry12628; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012629; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x212630; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)12631; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s112632; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr112633; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00012634; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -112635; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr312636; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s712637; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s612638; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s512639; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s412640; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 012641; SKIP-CACHE-INV-NEXT:    s_endpgm12642;12643; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12644; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry12645; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012646; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012647; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812648; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12649; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s612650; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12651; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm12652;12653; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12654; GFX90A-TGSPLIT:       ; %bb.0: ; %entry12655; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012656; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012657; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812658; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12659; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s612660; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[4:5]12661; GFX90A-TGSPLIT-NEXT:    s_endpgm12662;12663; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12664; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry12665; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012666; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012667; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812668; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12669; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s212670; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12671; GFX942-NOTTGSPLIT-NEXT:    s_endpgm12672;12673; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12674; GFX942-TGSPLIT:       ; %bb.0: ; %entry12675; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012676; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012677; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812678; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12679; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s212680; GFX942-TGSPLIT-NEXT:    global_atomic_swap v0, v1, s[0:1]12681; GFX942-TGSPLIT-NEXT:    s_endpgm12682;12683; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12684; GFX11-WGP:       ; %bb.0: ; %entry12685; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 012686; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012687; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812688; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)12689; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s212690; GFX11-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12691; GFX11-WGP-NEXT:    s_endpgm12692;12693; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12694; GFX11-CU:       ; %bb.0: ; %entry12695; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 012696; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012697; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812698; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)12699; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s212700; GFX11-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12701; GFX11-CU-NEXT:    s_endpgm12702;12703; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12704; GFX12-WGP:       ; %bb.0: ; %entry12705; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 012706; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012707; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812708; GFX12-WGP-NEXT:    s_wait_kmcnt 0x012709; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s212710; GFX12-WGP-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12711; GFX12-WGP-NEXT:    s_endpgm12712;12713; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12714; GFX12-CU:       ; %bb.0: ; %entry12715; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 012716; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012717; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812718; GFX12-CU-NEXT:    s_wait_kmcnt 0x012719; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s212720; GFX12-CU-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12721; GFX12-CU-NEXT:    s_endpgm12722;12723; GFX1250-LABEL: global_singlethread_one_as_seq_cst_atomicrmw:12724; GFX1250:       ; %bb.0: ; %entry12725; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 112726; GFX1250-NEXT:    v_mov_b32_e32 v0, 012727; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012728; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x812729; GFX1250-NEXT:    s_wait_kmcnt 0x012730; GFX1250-NEXT:    v_mov_b32_e32 v1, s212731; GFX1250-NEXT:    s_wait_xcnt 0x012732; GFX1250-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]12733; GFX1250-NEXT:    s_endpgm12734    ptr addrspace(1) %out, i32 %in) {12735entry:12736  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") seq_cst12737  ret void12738}12739 12740define amdgpu_kernel void @global_singlethread_one_as_acquire_ret_atomicrmw(12741; GFX6-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12742; GFX6:       ; %bb.0: ; %entry12743; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012744; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x212745; GFX6-NEXT:    s_waitcnt lgkmcnt(0)12746; GFX6-NEXT:    s_mov_b32 s11, s512747; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr512748; GFX6-NEXT:    s_mov_b32 s9, 0x100f00012749; GFX6-NEXT:    s_mov_b32 s10, -112750; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr712751; GFX6-NEXT:    s_mov_b32 s5, s1112752; GFX6-NEXT:    s_mov_b32 s6, s1012753; GFX6-NEXT:    s_mov_b32 s7, s912754; GFX6-NEXT:    v_mov_b32_e32 v0, s812755; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 0 glc12756; GFX6-NEXT:    s_waitcnt vmcnt(0)12757; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 012758; GFX6-NEXT:    s_endpgm12759;12760; GFX7-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12761; GFX7:       ; %bb.0: ; %entry12762; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1312763; GFX7-NEXT:    s_add_i32 s12, s12, s1712764; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 812765; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012766; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x212767; GFX7-NEXT:    s_waitcnt lgkmcnt(0)12768; GFX7-NEXT:    v_mov_b32_e32 v0, s412769; GFX7-NEXT:    v_mov_b32_e32 v1, s512770; GFX7-NEXT:    v_mov_b32_e32 v2, s612771; GFX7-NEXT:    flat_atomic_swap v2, v[0:1], v2 glc12772; GFX7-NEXT:    v_mov_b32_e32 v0, s412773; GFX7-NEXT:    v_mov_b32_e32 v1, s512774; GFX7-NEXT:    s_waitcnt vmcnt(0)12775; GFX7-NEXT:    flat_store_dword v[0:1], v212776; GFX7-NEXT:    s_endpgm12777;12778; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12779; GFX10-WGP:       ; %bb.0: ; %entry12780; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 012781; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012782; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x812783; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)12784; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s612785; GFX10-WGP-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc12786; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)12787; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]12788; GFX10-WGP-NEXT:    s_endpgm12789;12790; GFX10-CU-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12791; GFX10-CU:       ; %bb.0: ; %entry12792; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 012793; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012794; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x812795; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)12796; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s612797; GFX10-CU-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc12798; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)12799; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]12800; GFX10-CU-NEXT:    s_endpgm12801;12802; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12803; SKIP-CACHE-INV:       ; %bb.0: ; %entry12804; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012805; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x212806; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)12807; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s112808; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr112809; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00012810; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -112811; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr312812; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s712813; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s612814; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s512815; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s412816; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 0 glc12817; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)12818; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 012819; SKIP-CACHE-INV-NEXT:    s_endpgm12820;12821; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12822; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry12823; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012824; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012825; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812826; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12827; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s612828; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc12829; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)12830; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]12831; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm12832;12833; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12834; GFX90A-TGSPLIT:       ; %bb.0: ; %entry12835; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012836; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012837; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x812838; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12839; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s612840; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc12841; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)12842; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]12843; GFX90A-TGSPLIT-NEXT:    s_endpgm12844;12845; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12846; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry12847; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 012848; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012849; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812850; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12851; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s212852; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc012853; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)12854; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]12855; GFX942-NOTTGSPLIT-NEXT:    s_endpgm12856;12857; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12858; GFX942-TGSPLIT:       ; %bb.0: ; %entry12859; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 012860; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x012861; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x812862; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)12863; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s212864; GFX942-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc012865; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)12866; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]12867; GFX942-TGSPLIT-NEXT:    s_endpgm12868;12869; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12870; GFX11-WGP:       ; %bb.0: ; %entry12871; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 012872; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012873; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812874; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)12875; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s212876; GFX11-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc12877; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)12878; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]12879; GFX11-WGP-NEXT:    s_endpgm12880;12881; GFX11-CU-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12882; GFX11-CU:       ; %bb.0: ; %entry12883; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 012884; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012885; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812886; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)12887; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s212888; GFX11-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc12889; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)12890; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]12891; GFX11-CU-NEXT:    s_endpgm12892;12893; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12894; GFX12-WGP:       ; %bb.0: ; %entry12895; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 012896; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012897; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x812898; GFX12-WGP-NEXT:    s_wait_kmcnt 0x012899; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s212900; GFX12-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN12901; GFX12-WGP-NEXT:    s_wait_loadcnt 0x012902; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]12903; GFX12-WGP-NEXT:    s_endpgm12904;12905; GFX12-CU-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12906; GFX12-CU:       ; %bb.0: ; %entry12907; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 012908; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012909; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x812910; GFX12-CU-NEXT:    s_wait_kmcnt 0x012911; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s212912; GFX12-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN12913; GFX12-CU-NEXT:    s_wait_loadcnt 0x012914; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]12915; GFX12-CU-NEXT:    s_endpgm12916;12917; GFX1250-LABEL: global_singlethread_one_as_acquire_ret_atomicrmw:12918; GFX1250:       ; %bb.0: ; %entry12919; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 112920; GFX1250-NEXT:    v_mov_b32_e32 v0, 012921; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x012922; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x812923; GFX1250-NEXT:    s_wait_kmcnt 0x012924; GFX1250-NEXT:    v_mov_b32_e32 v1, s212925; GFX1250-NEXT:    s_wait_xcnt 0x012926; GFX1250-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN12927; GFX1250-NEXT:    s_wait_loadcnt 0x012928; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]12929; GFX1250-NEXT:    s_endpgm12930    ptr addrspace(1) %out, i32 %in) {12931entry:12932  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") acquire12933  store i32 %val, ptr addrspace(1) %out, align 412934  ret void12935}12936 12937define amdgpu_kernel void @global_singlethread_one_as_acq_rel_ret_atomicrmw(12938; GFX6-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:12939; GFX6:       ; %bb.0: ; %entry12940; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012941; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x212942; GFX6-NEXT:    s_waitcnt lgkmcnt(0)12943; GFX6-NEXT:    s_mov_b32 s11, s512944; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr512945; GFX6-NEXT:    s_mov_b32 s9, 0x100f00012946; GFX6-NEXT:    s_mov_b32 s10, -112947; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr712948; GFX6-NEXT:    s_mov_b32 s5, s1112949; GFX6-NEXT:    s_mov_b32 s6, s1012950; GFX6-NEXT:    s_mov_b32 s7, s912951; GFX6-NEXT:    v_mov_b32_e32 v0, s812952; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 0 glc12953; GFX6-NEXT:    s_waitcnt vmcnt(0)12954; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 012955; GFX6-NEXT:    s_endpgm12956;12957; GFX7-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:12958; GFX7:       ; %bb.0: ; %entry12959; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1312960; GFX7-NEXT:    s_add_i32 s12, s12, s1712961; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 812962; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012963; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x212964; GFX7-NEXT:    s_waitcnt lgkmcnt(0)12965; GFX7-NEXT:    v_mov_b32_e32 v0, s412966; GFX7-NEXT:    v_mov_b32_e32 v1, s512967; GFX7-NEXT:    v_mov_b32_e32 v2, s612968; GFX7-NEXT:    flat_atomic_swap v2, v[0:1], v2 glc12969; GFX7-NEXT:    v_mov_b32_e32 v0, s412970; GFX7-NEXT:    v_mov_b32_e32 v1, s512971; GFX7-NEXT:    s_waitcnt vmcnt(0)12972; GFX7-NEXT:    flat_store_dword v[0:1], v212973; GFX7-NEXT:    s_endpgm12974;12975; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:12976; GFX10-WGP:       ; %bb.0: ; %entry12977; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 012978; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012979; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x812980; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)12981; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s612982; GFX10-WGP-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc12983; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)12984; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]12985; GFX10-WGP-NEXT:    s_endpgm12986;12987; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:12988; GFX10-CU:       ; %bb.0: ; %entry12989; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 012990; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x012991; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x812992; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)12993; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s612994; GFX10-CU-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc12995; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)12996; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]12997; GFX10-CU-NEXT:    s_endpgm12998;12999; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13000; SKIP-CACHE-INV:       ; %bb.0: ; %entry13001; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013002; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x213003; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)13004; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s113005; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr113006; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00013007; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -113008; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr313009; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s713010; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s613011; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s513012; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s413013; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 0 glc13014; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)13015; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 013016; SKIP-CACHE-INV-NEXT:    s_endpgm13017;13018; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13019; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry13020; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013021; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013022; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x813023; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13024; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s613025; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc13026; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)13027; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]13028; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm13029;13030; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13031; GFX90A-TGSPLIT:       ; %bb.0: ; %entry13032; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013033; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013034; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x813035; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13036; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s613037; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc13038; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)13039; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]13040; GFX90A-TGSPLIT-NEXT:    s_endpgm13041;13042; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13043; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry13044; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013045; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013046; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x813047; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13048; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s213049; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc013050; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)13051; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]13052; GFX942-NOTTGSPLIT-NEXT:    s_endpgm13053;13054; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13055; GFX942-TGSPLIT:       ; %bb.0: ; %entry13056; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013057; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013058; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x813059; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13060; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s213061; GFX942-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc013062; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)13063; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]13064; GFX942-TGSPLIT-NEXT:    s_endpgm13065;13066; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13067; GFX11-WGP:       ; %bb.0: ; %entry13068; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 013069; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013070; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x813071; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)13072; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s213073; GFX11-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc13074; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)13075; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]13076; GFX11-WGP-NEXT:    s_endpgm13077;13078; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13079; GFX11-CU:       ; %bb.0: ; %entry13080; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 013081; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013082; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x813083; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)13084; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s213085; GFX11-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc13086; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)13087; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]13088; GFX11-CU-NEXT:    s_endpgm13089;13090; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13091; GFX12-WGP:       ; %bb.0: ; %entry13092; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 013093; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013094; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x813095; GFX12-WGP-NEXT:    s_wait_kmcnt 0x013096; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s213097; GFX12-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN13098; GFX12-WGP-NEXT:    s_wait_loadcnt 0x013099; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]13100; GFX12-WGP-NEXT:    s_endpgm13101;13102; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13103; GFX12-CU:       ; %bb.0: ; %entry13104; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 013105; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013106; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x813107; GFX12-CU-NEXT:    s_wait_kmcnt 0x013108; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s213109; GFX12-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN13110; GFX12-CU-NEXT:    s_wait_loadcnt 0x013111; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]13112; GFX12-CU-NEXT:    s_endpgm13113;13114; GFX1250-LABEL: global_singlethread_one_as_acq_rel_ret_atomicrmw:13115; GFX1250:       ; %bb.0: ; %entry13116; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 113117; GFX1250-NEXT:    v_mov_b32_e32 v0, 013118; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013119; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x813120; GFX1250-NEXT:    s_wait_kmcnt 0x013121; GFX1250-NEXT:    v_mov_b32_e32 v1, s213122; GFX1250-NEXT:    s_wait_xcnt 0x013123; GFX1250-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN13124; GFX1250-NEXT:    s_wait_loadcnt 0x013125; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]13126; GFX1250-NEXT:    s_endpgm13127    ptr addrspace(1) %out, i32 %in) {13128entry:13129  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") acq_rel13130  store i32 %val, ptr addrspace(1) %out, align 413131  ret void13132}13133 13134define amdgpu_kernel void @global_singlethread_one_as_seq_cst_ret_atomicrmw(13135; GFX6-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13136; GFX6:       ; %bb.0: ; %entry13137; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013138; GFX6-NEXT:    s_load_dword s8, s[8:9], 0x213139; GFX6-NEXT:    s_waitcnt lgkmcnt(0)13140; GFX6-NEXT:    s_mov_b32 s11, s513141; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr513142; GFX6-NEXT:    s_mov_b32 s9, 0x100f00013143; GFX6-NEXT:    s_mov_b32 s10, -113144; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr713145; GFX6-NEXT:    s_mov_b32 s5, s1113146; GFX6-NEXT:    s_mov_b32 s6, s1013147; GFX6-NEXT:    s_mov_b32 s7, s913148; GFX6-NEXT:    v_mov_b32_e32 v0, s813149; GFX6-NEXT:    buffer_atomic_swap v0, off, s[4:7], 0 glc13150; GFX6-NEXT:    s_waitcnt vmcnt(0)13151; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 013152; GFX6-NEXT:    s_endpgm13153;13154; GFX7-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13155; GFX7:       ; %bb.0: ; %entry13156; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1313157; GFX7-NEXT:    s_add_i32 s12, s12, s1713158; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 813159; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013160; GFX7-NEXT:    s_load_dword s6, s[8:9], 0x213161; GFX7-NEXT:    s_waitcnt lgkmcnt(0)13162; GFX7-NEXT:    v_mov_b32_e32 v0, s413163; GFX7-NEXT:    v_mov_b32_e32 v1, s513164; GFX7-NEXT:    v_mov_b32_e32 v2, s613165; GFX7-NEXT:    flat_atomic_swap v2, v[0:1], v2 glc13166; GFX7-NEXT:    v_mov_b32_e32 v0, s413167; GFX7-NEXT:    v_mov_b32_e32 v1, s513168; GFX7-NEXT:    s_waitcnt vmcnt(0)13169; GFX7-NEXT:    flat_store_dword v[0:1], v213170; GFX7-NEXT:    s_endpgm13171;13172; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13173; GFX10-WGP:       ; %bb.0: ; %entry13174; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 013175; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013176; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0x813177; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)13178; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s613179; GFX10-WGP-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc13180; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)13181; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]13182; GFX10-WGP-NEXT:    s_endpgm13183;13184; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13185; GFX10-CU:       ; %bb.0: ; %entry13186; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 013187; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013188; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0x813189; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)13190; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s613191; GFX10-CU-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc13192; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)13193; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]13194; GFX10-CU-NEXT:    s_endpgm13195;13196; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13197; SKIP-CACHE-INV:       ; %bb.0: ; %entry13198; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013199; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[4:5], 0x213200; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)13201; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, s113202; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr113203; SKIP-CACHE-INV-NEXT:    s_mov_b32 s5, 0xf00013204; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, -113205; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr313206; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s713207; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s613208; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s513209; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s413210; SKIP-CACHE-INV-NEXT:    buffer_atomic_swap v0, off, s[0:3], 0 glc13211; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)13212; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 013213; SKIP-CACHE-INV-NEXT:    s_endpgm13214;13215; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13216; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry13217; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013218; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013219; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x813220; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13221; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s613222; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc13223; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)13224; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]13225; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm13226;13227; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13228; GFX90A-TGSPLIT:       ; %bb.0: ; %entry13229; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013230; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013231; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0x813232; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13233; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s613234; GFX90A-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[4:5] glc13235; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)13236; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]13237; GFX90A-TGSPLIT-NEXT:    s_endpgm13238;13239; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13240; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry13241; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013242; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013243; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x813244; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13245; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s213246; GFX942-NOTTGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc013247; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)13248; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]13249; GFX942-NOTTGSPLIT-NEXT:    s_endpgm13250;13251; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13252; GFX942-TGSPLIT:       ; %bb.0: ; %entry13253; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013254; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013255; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0x813256; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13257; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s213258; GFX942-TGSPLIT-NEXT:    global_atomic_swap v1, v0, v1, s[0:1] sc013259; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)13260; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]13261; GFX942-TGSPLIT-NEXT:    s_endpgm13262;13263; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13264; GFX11-WGP:       ; %bb.0: ; %entry13265; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 013266; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013267; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x813268; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)13269; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s213270; GFX11-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc13271; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)13272; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]13273; GFX11-WGP-NEXT:    s_endpgm13274;13275; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13276; GFX11-CU:       ; %bb.0: ; %entry13277; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 013278; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013279; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0x813280; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)13281; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s213282; GFX11-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] glc13283; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)13284; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]13285; GFX11-CU-NEXT:    s_endpgm13286;13287; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13288; GFX12-WGP:       ; %bb.0: ; %entry13289; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 013290; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013291; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0x813292; GFX12-WGP-NEXT:    s_wait_kmcnt 0x013293; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s213294; GFX12-WGP-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN13295; GFX12-WGP-NEXT:    s_wait_loadcnt 0x013296; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]13297; GFX12-WGP-NEXT:    s_endpgm13298;13299; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13300; GFX12-CU:       ; %bb.0: ; %entry13301; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 013302; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013303; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0x813304; GFX12-CU-NEXT:    s_wait_kmcnt 0x013305; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s213306; GFX12-CU-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN13307; GFX12-CU-NEXT:    s_wait_loadcnt 0x013308; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]13309; GFX12-CU-NEXT:    s_endpgm13310;13311; GFX1250-LABEL: global_singlethread_one_as_seq_cst_ret_atomicrmw:13312; GFX1250:       ; %bb.0: ; %entry13313; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 113314; GFX1250-NEXT:    v_mov_b32_e32 v0, 013315; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013316; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0x813317; GFX1250-NEXT:    s_wait_kmcnt 0x013318; GFX1250-NEXT:    v_mov_b32_e32 v1, s213319; GFX1250-NEXT:    s_wait_xcnt 0x013320; GFX1250-NEXT:    global_atomic_swap_b32 v1, v0, v1, s[0:1] th:TH_ATOMIC_RETURN13321; GFX1250-NEXT:    s_wait_loadcnt 0x013322; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]13323; GFX1250-NEXT:    s_endpgm13324    ptr addrspace(1) %out, i32 %in) {13325entry:13326  %val = atomicrmw volatile xchg ptr addrspace(1) %out, i32 %in syncscope("singlethread-one-as") seq_cst13327  store i32 %val, ptr addrspace(1) %out, align 413328  ret void13329}13330 13331define amdgpu_kernel void @global_singlethread_one_as_monotonic_monotonic_cmpxchg(13332; GFX6-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13333; GFX6:       ; %bb.0: ; %entry13334; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]13335; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x013336; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x213337; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x313338; GFX6-NEXT:    s_waitcnt lgkmcnt(0)13339; GFX6-NEXT:    s_mov_b32 s12, s513340; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr513341; GFX6-NEXT:    s_mov_b32 s10, 0x100f00013342; GFX6-NEXT:    s_mov_b32 s11, -113343; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr713344; GFX6-NEXT:    s_mov_b32 s5, s1213345; GFX6-NEXT:    s_mov_b32 s6, s1113346; GFX6-NEXT:    s_mov_b32 s7, s1013347; GFX6-NEXT:    v_mov_b32_e32 v0, s913348; GFX6-NEXT:    v_mov_b32_e32 v2, s813349; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec13350; GFX6-NEXT:    v_mov_b32_e32 v1, v213351; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1613352; GFX6-NEXT:    s_endpgm13353;13354; GFX7-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13355; GFX7:       ; %bb.0: ; %entry13356; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1313357; GFX7-NEXT:    s_add_i32 s12, s12, s1713358; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 813359; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]13360; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x013361; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x213362; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x313363; GFX7-NEXT:    s_mov_b64 s[10:11], 1613364; GFX7-NEXT:    s_waitcnt lgkmcnt(0)13365; GFX7-NEXT:    s_mov_b32 s4, s813366; GFX7-NEXT:    s_mov_b32 s5, s913367; GFX7-NEXT:    s_mov_b32 s9, s1013368; GFX7-NEXT:    s_mov_b32 s8, s1113369; GFX7-NEXT:    s_add_u32 s4, s4, s913370; GFX7-NEXT:    s_addc_u32 s8, s5, s813371; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr513372; GFX7-NEXT:    s_mov_b32 s5, s813373; GFX7-NEXT:    v_mov_b32_e32 v2, s713374; GFX7-NEXT:    v_mov_b32_e32 v0, s613375; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13376; GFX7-NEXT:    v_mov_b32_e32 v3, v013377; GFX7-NEXT:    v_mov_b32_e32 v0, s413378; GFX7-NEXT:    v_mov_b32_e32 v1, s513379; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]13380; GFX7-NEXT:    s_endpgm13381;13382; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13383; GFX10-WGP:       ; %bb.0: ; %entry13384; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 013385; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013386; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x813387; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc13388; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)13389; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s713390; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s613391; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13392; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v313393; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1613394; GFX10-WGP-NEXT:    s_endpgm13395;13396; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13397; GFX10-CU:       ; %bb.0: ; %entry13398; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 013399; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013400; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x813401; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc13402; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)13403; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s713404; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s613405; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13406; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v313407; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1613408; GFX10-CU-NEXT:    s_endpgm13409;13410; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13411; SKIP-CACHE-INV:       ; %bb.0: ; %entry13412; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]13413; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x013414; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x213415; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x313416; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)13417; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s113418; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr113419; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00013420; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -113421; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr313422; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s813423; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s713424; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s613425; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s513426; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s413427; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec13428; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v213429; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1613430; SKIP-CACHE-INV-NEXT:    s_endpgm13431;13432; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13433; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry13434; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013435; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013436; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x813437; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc13438; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13439; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s713440; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s613441; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13442; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v113443; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1613444; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm13445;13446; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13447; GFX90A-TGSPLIT:       ; %bb.0: ; %entry13448; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013449; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013450; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x813451; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc13452; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13453; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s713454; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s613455; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13456; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v113457; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1613458; GFX90A-TGSPLIT-NEXT:    s_endpgm13459;13460; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13461; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry13462; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013463; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013464; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x813465; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc13466; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13467; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s313468; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s213469; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13470; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v113471; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1613472; GFX942-NOTTGSPLIT-NEXT:    s_endpgm13473;13474; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13475; GFX942-TGSPLIT:       ; %bb.0: ; %entry13476; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013477; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013478; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x813479; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc13480; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13481; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s313482; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s213483; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13484; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v113485; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1613486; GFX942-TGSPLIT-NEXT:    s_endpgm13487;13488; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13489; GFX11-WGP:       ; %bb.0: ; %entry13490; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 013491; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013492; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x813493; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc13494; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)13495; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s313496; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s213497; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13498; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v313499; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613500; GFX11-WGP-NEXT:    s_endpgm13501;13502; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13503; GFX11-CU:       ; %bb.0: ; %entry13504; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 013505; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013506; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x813507; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc13508; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)13509; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s313510; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s213511; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13512; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v313513; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613514; GFX11-CU-NEXT:    s_endpgm13515;13516; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13517; GFX12-WGP:       ; %bb.0: ; %entry13518; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 013519; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013520; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x813521; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc13522; GFX12-WGP-NEXT:    s_wait_kmcnt 0x013523; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s313524; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s213525; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13526; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v313527; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613528; GFX12-WGP-NEXT:    s_endpgm13529;13530; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13531; GFX12-CU:       ; %bb.0: ; %entry13532; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 013533; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013534; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x813535; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc13536; GFX12-CU-NEXT:    s_wait_kmcnt 0x013537; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s313538; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s213539; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13540; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v313541; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613542; GFX12-CU-NEXT:    s_endpgm13543;13544; GFX1250-LABEL: global_singlethread_one_as_monotonic_monotonic_cmpxchg:13545; GFX1250:       ; %bb.0: ; %entry13546; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 113547; GFX1250-NEXT:    v_mov_b32_e32 v0, 013548; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013549; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x813550; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc13551; GFX1250-NEXT:    s_wait_kmcnt 0x013552; GFX1250-NEXT:    v_mov_b32_e32 v2, s313553; GFX1250-NEXT:    v_mov_b32_e32 v1, s213554; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13555; GFX1250-NEXT:    v_mov_b32_e32 v3, v113556; GFX1250-NEXT:    s_wait_xcnt 0x013557; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1613558; GFX1250-NEXT:    s_endpgm13559    ptr addrspace(1) %out, i32 %in, i32 %old) {13560entry:13561  %gep = getelementptr i32, ptr addrspace(1) %out, i32 413562  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") monotonic monotonic13563  ret void13564}13565 13566define amdgpu_kernel void @global_singlethread_one_as_acquire_monotonic_cmpxchg(13567; GFX6-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13568; GFX6:       ; %bb.0: ; %entry13569; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]13570; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x013571; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x213572; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x313573; GFX6-NEXT:    s_waitcnt lgkmcnt(0)13574; GFX6-NEXT:    s_mov_b32 s12, s513575; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr513576; GFX6-NEXT:    s_mov_b32 s10, 0x100f00013577; GFX6-NEXT:    s_mov_b32 s11, -113578; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr713579; GFX6-NEXT:    s_mov_b32 s5, s1213580; GFX6-NEXT:    s_mov_b32 s6, s1113581; GFX6-NEXT:    s_mov_b32 s7, s1013582; GFX6-NEXT:    v_mov_b32_e32 v0, s913583; GFX6-NEXT:    v_mov_b32_e32 v2, s813584; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec13585; GFX6-NEXT:    v_mov_b32_e32 v1, v213586; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1613587; GFX6-NEXT:    s_endpgm13588;13589; GFX7-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13590; GFX7:       ; %bb.0: ; %entry13591; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1313592; GFX7-NEXT:    s_add_i32 s12, s12, s1713593; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 813594; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]13595; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x013596; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x213597; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x313598; GFX7-NEXT:    s_mov_b64 s[10:11], 1613599; GFX7-NEXT:    s_waitcnt lgkmcnt(0)13600; GFX7-NEXT:    s_mov_b32 s4, s813601; GFX7-NEXT:    s_mov_b32 s5, s913602; GFX7-NEXT:    s_mov_b32 s9, s1013603; GFX7-NEXT:    s_mov_b32 s8, s1113604; GFX7-NEXT:    s_add_u32 s4, s4, s913605; GFX7-NEXT:    s_addc_u32 s8, s5, s813606; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr513607; GFX7-NEXT:    s_mov_b32 s5, s813608; GFX7-NEXT:    v_mov_b32_e32 v2, s713609; GFX7-NEXT:    v_mov_b32_e32 v0, s613610; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13611; GFX7-NEXT:    v_mov_b32_e32 v3, v013612; GFX7-NEXT:    v_mov_b32_e32 v0, s413613; GFX7-NEXT:    v_mov_b32_e32 v1, s513614; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]13615; GFX7-NEXT:    s_endpgm13616;13617; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13618; GFX10-WGP:       ; %bb.0: ; %entry13619; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 013620; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013621; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x813622; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc13623; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)13624; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s713625; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s613626; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13627; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v313628; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1613629; GFX10-WGP-NEXT:    s_endpgm13630;13631; GFX10-CU-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13632; GFX10-CU:       ; %bb.0: ; %entry13633; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 013634; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013635; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x813636; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc13637; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)13638; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s713639; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s613640; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13641; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v313642; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1613643; GFX10-CU-NEXT:    s_endpgm13644;13645; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13646; SKIP-CACHE-INV:       ; %bb.0: ; %entry13647; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]13648; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x013649; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x213650; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x313651; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)13652; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s113653; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr113654; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00013655; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -113656; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr313657; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s813658; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s713659; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s613660; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s513661; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s413662; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec13663; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v213664; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1613665; SKIP-CACHE-INV-NEXT:    s_endpgm13666;13667; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13668; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry13669; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013670; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013671; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x813672; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc13673; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13674; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s713675; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s613676; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13677; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v113678; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1613679; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm13680;13681; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13682; GFX90A-TGSPLIT:       ; %bb.0: ; %entry13683; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013684; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013685; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x813686; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc13687; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13688; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s713689; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s613690; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13691; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v113692; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1613693; GFX90A-TGSPLIT-NEXT:    s_endpgm13694;13695; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13696; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry13697; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013698; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013699; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x813700; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc13701; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13702; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s313703; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s213704; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13705; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v113706; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1613707; GFX942-NOTTGSPLIT-NEXT:    s_endpgm13708;13709; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13710; GFX942-TGSPLIT:       ; %bb.0: ; %entry13711; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013712; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013713; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x813714; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc13715; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13716; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s313717; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s213718; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13719; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v113720; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1613721; GFX942-TGSPLIT-NEXT:    s_endpgm13722;13723; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13724; GFX11-WGP:       ; %bb.0: ; %entry13725; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 013726; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013727; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x813728; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc13729; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)13730; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s313731; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s213732; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13733; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v313734; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613735; GFX11-WGP-NEXT:    s_endpgm13736;13737; GFX11-CU-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13738; GFX11-CU:       ; %bb.0: ; %entry13739; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 013740; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013741; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x813742; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc13743; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)13744; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s313745; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s213746; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13747; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v313748; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613749; GFX11-CU-NEXT:    s_endpgm13750;13751; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13752; GFX12-WGP:       ; %bb.0: ; %entry13753; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 013754; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013755; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x813756; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc13757; GFX12-WGP-NEXT:    s_wait_kmcnt 0x013758; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s313759; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s213760; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13761; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v313762; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613763; GFX12-WGP-NEXT:    s_endpgm13764;13765; GFX12-CU-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13766; GFX12-CU:       ; %bb.0: ; %entry13767; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 013768; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013769; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x813770; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc13771; GFX12-CU-NEXT:    s_wait_kmcnt 0x013772; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s313773; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s213774; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13775; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v313776; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613777; GFX12-CU-NEXT:    s_endpgm13778;13779; GFX1250-LABEL: global_singlethread_one_as_acquire_monotonic_cmpxchg:13780; GFX1250:       ; %bb.0: ; %entry13781; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 113782; GFX1250-NEXT:    v_mov_b32_e32 v0, 013783; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013784; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x813785; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc13786; GFX1250-NEXT:    s_wait_kmcnt 0x013787; GFX1250-NEXT:    v_mov_b32_e32 v2, s313788; GFX1250-NEXT:    v_mov_b32_e32 v1, s213789; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13790; GFX1250-NEXT:    v_mov_b32_e32 v3, v113791; GFX1250-NEXT:    s_wait_xcnt 0x013792; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1613793; GFX1250-NEXT:    s_endpgm13794    ptr addrspace(1) %out, i32 %in, i32 %old) {13795entry:13796  %gep = getelementptr i32, ptr addrspace(1) %out, i32 413797  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acquire monotonic13798  ret void13799}13800 13801define amdgpu_kernel void @global_singlethread_one_as_release_monotonic_cmpxchg(13802; GFX6-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13803; GFX6:       ; %bb.0: ; %entry13804; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]13805; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x013806; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x213807; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x313808; GFX6-NEXT:    s_waitcnt lgkmcnt(0)13809; GFX6-NEXT:    s_mov_b32 s12, s513810; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr513811; GFX6-NEXT:    s_mov_b32 s10, 0x100f00013812; GFX6-NEXT:    s_mov_b32 s11, -113813; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr713814; GFX6-NEXT:    s_mov_b32 s5, s1213815; GFX6-NEXT:    s_mov_b32 s6, s1113816; GFX6-NEXT:    s_mov_b32 s7, s1013817; GFX6-NEXT:    v_mov_b32_e32 v0, s913818; GFX6-NEXT:    v_mov_b32_e32 v2, s813819; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec13820; GFX6-NEXT:    v_mov_b32_e32 v1, v213821; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1613822; GFX6-NEXT:    s_endpgm13823;13824; GFX7-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13825; GFX7:       ; %bb.0: ; %entry13826; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1313827; GFX7-NEXT:    s_add_i32 s12, s12, s1713828; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 813829; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]13830; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x013831; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x213832; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x313833; GFX7-NEXT:    s_mov_b64 s[10:11], 1613834; GFX7-NEXT:    s_waitcnt lgkmcnt(0)13835; GFX7-NEXT:    s_mov_b32 s4, s813836; GFX7-NEXT:    s_mov_b32 s5, s913837; GFX7-NEXT:    s_mov_b32 s9, s1013838; GFX7-NEXT:    s_mov_b32 s8, s1113839; GFX7-NEXT:    s_add_u32 s4, s4, s913840; GFX7-NEXT:    s_addc_u32 s8, s5, s813841; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr513842; GFX7-NEXT:    s_mov_b32 s5, s813843; GFX7-NEXT:    v_mov_b32_e32 v2, s713844; GFX7-NEXT:    v_mov_b32_e32 v0, s613845; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13846; GFX7-NEXT:    v_mov_b32_e32 v3, v013847; GFX7-NEXT:    v_mov_b32_e32 v0, s413848; GFX7-NEXT:    v_mov_b32_e32 v1, s513849; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]13850; GFX7-NEXT:    s_endpgm13851;13852; GFX10-WGP-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13853; GFX10-WGP:       ; %bb.0: ; %entry13854; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 013855; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013856; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x813857; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc13858; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)13859; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s713860; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s613861; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13862; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v313863; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1613864; GFX10-WGP-NEXT:    s_endpgm13865;13866; GFX10-CU-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13867; GFX10-CU:       ; %bb.0: ; %entry13868; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 013869; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013870; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x813871; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc13872; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)13873; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s713874; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s613875; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13876; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v313877; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1613878; GFX10-CU-NEXT:    s_endpgm13879;13880; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13881; SKIP-CACHE-INV:       ; %bb.0: ; %entry13882; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]13883; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x013884; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x213885; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x313886; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)13887; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s113888; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr113889; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00013890; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -113891; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr313892; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s813893; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s713894; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s613895; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s513896; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s413897; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec13898; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v213899; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1613900; SKIP-CACHE-INV-NEXT:    s_endpgm13901;13902; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13903; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry13904; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013905; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013906; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x813907; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc13908; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13909; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s713910; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s613911; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13912; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v113913; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1613914; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm13915;13916; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13917; GFX90A-TGSPLIT:       ; %bb.0: ; %entry13918; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013919; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x013920; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x813921; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc13922; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13923; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s713924; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s613925; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13926; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v113927; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1613928; GFX90A-TGSPLIT-NEXT:    s_endpgm13929;13930; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13931; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry13932; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 013933; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013934; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x813935; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc13936; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13937; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s313938; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s213939; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13940; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v113941; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1613942; GFX942-NOTTGSPLIT-NEXT:    s_endpgm13943;13944; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13945; GFX942-TGSPLIT:       ; %bb.0: ; %entry13946; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 013947; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x013948; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x813949; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc13950; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)13951; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s313952; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s213953; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec13954; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v113955; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1613956; GFX942-TGSPLIT-NEXT:    s_endpgm13957;13958; GFX11-WGP-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13959; GFX11-WGP:       ; %bb.0: ; %entry13960; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 013961; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013962; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x813963; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc13964; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)13965; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s313966; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s213967; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13968; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v313969; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613970; GFX11-WGP-NEXT:    s_endpgm13971;13972; GFX11-CU-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13973; GFX11-CU:       ; %bb.0: ; %entry13974; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 013975; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013976; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x813977; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc13978; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)13979; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s313980; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s213981; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13982; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v313983; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613984; GFX11-CU-NEXT:    s_endpgm13985;13986; GFX12-WGP-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:13987; GFX12-WGP:       ; %bb.0: ; %entry13988; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 013989; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x013990; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x813991; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc13992; GFX12-WGP-NEXT:    s_wait_kmcnt 0x013993; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s313994; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s213995; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec13996; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v313997; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1613998; GFX12-WGP-NEXT:    s_endpgm13999;14000; GFX12-CU-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:14001; GFX12-CU:       ; %bb.0: ; %entry14002; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 014003; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014004; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814005; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14006; GFX12-CU-NEXT:    s_wait_kmcnt 0x014007; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s314008; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s214009; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14010; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v314011; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614012; GFX12-CU-NEXT:    s_endpgm14013;14014; GFX1250-LABEL: global_singlethread_one_as_release_monotonic_cmpxchg:14015; GFX1250:       ; %bb.0: ; %entry14016; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 114017; GFX1250-NEXT:    v_mov_b32_e32 v0, 014018; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014019; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x814020; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc14021; GFX1250-NEXT:    s_wait_kmcnt 0x014022; GFX1250-NEXT:    v_mov_b32_e32 v2, s314023; GFX1250-NEXT:    v_mov_b32_e32 v1, s214024; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14025; GFX1250-NEXT:    v_mov_b32_e32 v3, v114026; GFX1250-NEXT:    s_wait_xcnt 0x014027; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1614028; GFX1250-NEXT:    s_endpgm14029    ptr addrspace(1) %out, i32 %in, i32 %old) {14030entry:14031  %gep = getelementptr i32, ptr addrspace(1) %out, i32 414032  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") release monotonic14033  ret void14034}14035 14036define amdgpu_kernel void @global_singlethread_one_as_acq_rel_monotonic_cmpxchg(14037; GFX6-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14038; GFX6:       ; %bb.0: ; %entry14039; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]14040; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x014041; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x214042; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x314043; GFX6-NEXT:    s_waitcnt lgkmcnt(0)14044; GFX6-NEXT:    s_mov_b32 s12, s514045; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr514046; GFX6-NEXT:    s_mov_b32 s10, 0x100f00014047; GFX6-NEXT:    s_mov_b32 s11, -114048; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr714049; GFX6-NEXT:    s_mov_b32 s5, s1214050; GFX6-NEXT:    s_mov_b32 s6, s1114051; GFX6-NEXT:    s_mov_b32 s7, s1014052; GFX6-NEXT:    v_mov_b32_e32 v0, s914053; GFX6-NEXT:    v_mov_b32_e32 v2, s814054; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14055; GFX6-NEXT:    v_mov_b32_e32 v1, v214056; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1614057; GFX6-NEXT:    s_endpgm14058;14059; GFX7-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14060; GFX7:       ; %bb.0: ; %entry14061; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1314062; GFX7-NEXT:    s_add_i32 s12, s12, s1714063; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 814064; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]14065; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x014066; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x214067; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x314068; GFX7-NEXT:    s_mov_b64 s[10:11], 1614069; GFX7-NEXT:    s_waitcnt lgkmcnt(0)14070; GFX7-NEXT:    s_mov_b32 s4, s814071; GFX7-NEXT:    s_mov_b32 s5, s914072; GFX7-NEXT:    s_mov_b32 s9, s1014073; GFX7-NEXT:    s_mov_b32 s8, s1114074; GFX7-NEXT:    s_add_u32 s4, s4, s914075; GFX7-NEXT:    s_addc_u32 s8, s5, s814076; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr514077; GFX7-NEXT:    s_mov_b32 s5, s814078; GFX7-NEXT:    v_mov_b32_e32 v2, s714079; GFX7-NEXT:    v_mov_b32_e32 v0, s614080; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14081; GFX7-NEXT:    v_mov_b32_e32 v3, v014082; GFX7-NEXT:    v_mov_b32_e32 v0, s414083; GFX7-NEXT:    v_mov_b32_e32 v1, s514084; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]14085; GFX7-NEXT:    s_endpgm14086;14087; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14088; GFX10-WGP:       ; %bb.0: ; %entry14089; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 014090; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014091; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x814092; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc14093; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)14094; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s714095; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s614096; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14097; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v314098; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614099; GFX10-WGP-NEXT:    s_endpgm14100;14101; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14102; GFX10-CU:       ; %bb.0: ; %entry14103; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 014104; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014105; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x814106; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc14107; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)14108; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s714109; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s614110; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14111; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v314112; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614113; GFX10-CU-NEXT:    s_endpgm14114;14115; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14116; SKIP-CACHE-INV:       ; %bb.0: ; %entry14117; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]14118; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x014119; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x214120; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x314121; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)14122; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s114123; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr114124; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00014125; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -114126; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr314127; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s814128; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s714129; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s614130; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s514131; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s414132; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14133; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v214134; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1614135; SKIP-CACHE-INV-NEXT:    s_endpgm14136;14137; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14138; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry14139; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014140; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014141; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814142; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14143; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14144; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s714145; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s614146; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14147; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114148; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614149; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm14150;14151; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14152; GFX90A-TGSPLIT:       ; %bb.0: ; %entry14153; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014154; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014155; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814156; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14157; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14158; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s714159; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s614160; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14161; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114162; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614163; GFX90A-TGSPLIT-NEXT:    s_endpgm14164;14165; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14166; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry14167; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014168; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014169; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814170; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14171; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14172; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s314173; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s214174; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14175; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114176; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614177; GFX942-NOTTGSPLIT-NEXT:    s_endpgm14178;14179; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14180; GFX942-TGSPLIT:       ; %bb.0: ; %entry14181; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014182; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014183; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814184; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14185; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14186; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s314187; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s214188; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14189; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114190; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614191; GFX942-TGSPLIT-NEXT:    s_endpgm14192;14193; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14194; GFX11-WGP:       ; %bb.0: ; %entry14195; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 014196; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014197; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814198; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14199; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)14200; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s314201; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s214202; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14203; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v314204; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614205; GFX11-WGP-NEXT:    s_endpgm14206;14207; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14208; GFX11-CU:       ; %bb.0: ; %entry14209; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 014210; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014211; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814212; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14213; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)14214; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s314215; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s214216; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14217; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v314218; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614219; GFX11-CU-NEXT:    s_endpgm14220;14221; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14222; GFX12-WGP:       ; %bb.0: ; %entry14223; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 014224; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014225; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814226; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14227; GFX12-WGP-NEXT:    s_wait_kmcnt 0x014228; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s314229; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s214230; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14231; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v314232; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614233; GFX12-WGP-NEXT:    s_endpgm14234;14235; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14236; GFX12-CU:       ; %bb.0: ; %entry14237; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 014238; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014239; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814240; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14241; GFX12-CU-NEXT:    s_wait_kmcnt 0x014242; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s314243; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s214244; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14245; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v314246; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614247; GFX12-CU-NEXT:    s_endpgm14248;14249; GFX1250-LABEL: global_singlethread_one_as_acq_rel_monotonic_cmpxchg:14250; GFX1250:       ; %bb.0: ; %entry14251; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 114252; GFX1250-NEXT:    v_mov_b32_e32 v0, 014253; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014254; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x814255; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc14256; GFX1250-NEXT:    s_wait_kmcnt 0x014257; GFX1250-NEXT:    v_mov_b32_e32 v2, s314258; GFX1250-NEXT:    v_mov_b32_e32 v1, s214259; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14260; GFX1250-NEXT:    v_mov_b32_e32 v3, v114261; GFX1250-NEXT:    s_wait_xcnt 0x014262; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1614263; GFX1250-NEXT:    s_endpgm14264    ptr addrspace(1) %out, i32 %in, i32 %old) {14265entry:14266  %gep = getelementptr i32, ptr addrspace(1) %out, i32 414267  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acq_rel monotonic14268  ret void14269}14270 14271define amdgpu_kernel void @global_singlethread_one_as_seq_cst_monotonic_cmpxchg(14272; GFX6-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14273; GFX6:       ; %bb.0: ; %entry14274; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]14275; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x014276; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x214277; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x314278; GFX6-NEXT:    s_waitcnt lgkmcnt(0)14279; GFX6-NEXT:    s_mov_b32 s12, s514280; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr514281; GFX6-NEXT:    s_mov_b32 s10, 0x100f00014282; GFX6-NEXT:    s_mov_b32 s11, -114283; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr714284; GFX6-NEXT:    s_mov_b32 s5, s1214285; GFX6-NEXT:    s_mov_b32 s6, s1114286; GFX6-NEXT:    s_mov_b32 s7, s1014287; GFX6-NEXT:    v_mov_b32_e32 v0, s914288; GFX6-NEXT:    v_mov_b32_e32 v2, s814289; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14290; GFX6-NEXT:    v_mov_b32_e32 v1, v214291; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1614292; GFX6-NEXT:    s_endpgm14293;14294; GFX7-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14295; GFX7:       ; %bb.0: ; %entry14296; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1314297; GFX7-NEXT:    s_add_i32 s12, s12, s1714298; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 814299; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]14300; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x014301; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x214302; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x314303; GFX7-NEXT:    s_mov_b64 s[10:11], 1614304; GFX7-NEXT:    s_waitcnt lgkmcnt(0)14305; GFX7-NEXT:    s_mov_b32 s4, s814306; GFX7-NEXT:    s_mov_b32 s5, s914307; GFX7-NEXT:    s_mov_b32 s9, s1014308; GFX7-NEXT:    s_mov_b32 s8, s1114309; GFX7-NEXT:    s_add_u32 s4, s4, s914310; GFX7-NEXT:    s_addc_u32 s8, s5, s814311; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr514312; GFX7-NEXT:    s_mov_b32 s5, s814313; GFX7-NEXT:    v_mov_b32_e32 v2, s714314; GFX7-NEXT:    v_mov_b32_e32 v0, s614315; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14316; GFX7-NEXT:    v_mov_b32_e32 v3, v014317; GFX7-NEXT:    v_mov_b32_e32 v0, s414318; GFX7-NEXT:    v_mov_b32_e32 v1, s514319; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]14320; GFX7-NEXT:    s_endpgm14321;14322; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14323; GFX10-WGP:       ; %bb.0: ; %entry14324; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 014325; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014326; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x814327; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc14328; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)14329; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s714330; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s614331; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14332; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v314333; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614334; GFX10-WGP-NEXT:    s_endpgm14335;14336; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14337; GFX10-CU:       ; %bb.0: ; %entry14338; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 014339; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014340; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x814341; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc14342; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)14343; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s714344; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s614345; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14346; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v314347; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614348; GFX10-CU-NEXT:    s_endpgm14349;14350; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14351; SKIP-CACHE-INV:       ; %bb.0: ; %entry14352; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]14353; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x014354; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x214355; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x314356; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)14357; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s114358; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr114359; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00014360; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -114361; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr314362; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s814363; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s714364; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s614365; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s514366; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s414367; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14368; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v214369; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1614370; SKIP-CACHE-INV-NEXT:    s_endpgm14371;14372; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14373; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry14374; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014375; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014376; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814377; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14378; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14379; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s714380; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s614381; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14382; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114383; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614384; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm14385;14386; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14387; GFX90A-TGSPLIT:       ; %bb.0: ; %entry14388; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014389; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014390; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814391; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14392; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14393; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s714394; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s614395; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14396; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114397; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614398; GFX90A-TGSPLIT-NEXT:    s_endpgm14399;14400; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14401; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry14402; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014403; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014404; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814405; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14406; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14407; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s314408; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s214409; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14410; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114411; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614412; GFX942-NOTTGSPLIT-NEXT:    s_endpgm14413;14414; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14415; GFX942-TGSPLIT:       ; %bb.0: ; %entry14416; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014417; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014418; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814419; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14420; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14421; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s314422; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s214423; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14424; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114425; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614426; GFX942-TGSPLIT-NEXT:    s_endpgm14427;14428; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14429; GFX11-WGP:       ; %bb.0: ; %entry14430; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 014431; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014432; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814433; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14434; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)14435; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s314436; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s214437; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14438; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v314439; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614440; GFX11-WGP-NEXT:    s_endpgm14441;14442; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14443; GFX11-CU:       ; %bb.0: ; %entry14444; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 014445; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014446; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814447; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14448; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)14449; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s314450; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s214451; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14452; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v314453; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614454; GFX11-CU-NEXT:    s_endpgm14455;14456; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14457; GFX12-WGP:       ; %bb.0: ; %entry14458; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 014459; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014460; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814461; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14462; GFX12-WGP-NEXT:    s_wait_kmcnt 0x014463; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s314464; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s214465; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14466; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v314467; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614468; GFX12-WGP-NEXT:    s_endpgm14469;14470; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14471; GFX12-CU:       ; %bb.0: ; %entry14472; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 014473; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014474; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814475; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14476; GFX12-CU-NEXT:    s_wait_kmcnt 0x014477; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s314478; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s214479; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14480; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v314481; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614482; GFX12-CU-NEXT:    s_endpgm14483;14484; GFX1250-LABEL: global_singlethread_one_as_seq_cst_monotonic_cmpxchg:14485; GFX1250:       ; %bb.0: ; %entry14486; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 114487; GFX1250-NEXT:    v_mov_b32_e32 v0, 014488; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014489; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x814490; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc14491; GFX1250-NEXT:    s_wait_kmcnt 0x014492; GFX1250-NEXT:    v_mov_b32_e32 v2, s314493; GFX1250-NEXT:    v_mov_b32_e32 v1, s214494; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14495; GFX1250-NEXT:    v_mov_b32_e32 v3, v114496; GFX1250-NEXT:    s_wait_xcnt 0x014497; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1614498; GFX1250-NEXT:    s_endpgm14499    ptr addrspace(1) %out, i32 %in, i32 %old) {14500entry:14501  %gep = getelementptr i32, ptr addrspace(1) %out, i32 414502  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") seq_cst monotonic14503  ret void14504}14505 14506define amdgpu_kernel void @global_singlethread_one_as_monotonic_acquire_cmpxchg(14507; GFX6-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14508; GFX6:       ; %bb.0: ; %entry14509; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]14510; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x014511; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x214512; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x314513; GFX6-NEXT:    s_waitcnt lgkmcnt(0)14514; GFX6-NEXT:    s_mov_b32 s12, s514515; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr514516; GFX6-NEXT:    s_mov_b32 s10, 0x100f00014517; GFX6-NEXT:    s_mov_b32 s11, -114518; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr714519; GFX6-NEXT:    s_mov_b32 s5, s1214520; GFX6-NEXT:    s_mov_b32 s6, s1114521; GFX6-NEXT:    s_mov_b32 s7, s1014522; GFX6-NEXT:    v_mov_b32_e32 v0, s914523; GFX6-NEXT:    v_mov_b32_e32 v2, s814524; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14525; GFX6-NEXT:    v_mov_b32_e32 v1, v214526; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1614527; GFX6-NEXT:    s_endpgm14528;14529; GFX7-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14530; GFX7:       ; %bb.0: ; %entry14531; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1314532; GFX7-NEXT:    s_add_i32 s12, s12, s1714533; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 814534; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]14535; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x014536; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x214537; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x314538; GFX7-NEXT:    s_mov_b64 s[10:11], 1614539; GFX7-NEXT:    s_waitcnt lgkmcnt(0)14540; GFX7-NEXT:    s_mov_b32 s4, s814541; GFX7-NEXT:    s_mov_b32 s5, s914542; GFX7-NEXT:    s_mov_b32 s9, s1014543; GFX7-NEXT:    s_mov_b32 s8, s1114544; GFX7-NEXT:    s_add_u32 s4, s4, s914545; GFX7-NEXT:    s_addc_u32 s8, s5, s814546; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr514547; GFX7-NEXT:    s_mov_b32 s5, s814548; GFX7-NEXT:    v_mov_b32_e32 v2, s714549; GFX7-NEXT:    v_mov_b32_e32 v0, s614550; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14551; GFX7-NEXT:    v_mov_b32_e32 v3, v014552; GFX7-NEXT:    v_mov_b32_e32 v0, s414553; GFX7-NEXT:    v_mov_b32_e32 v1, s514554; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]14555; GFX7-NEXT:    s_endpgm14556;14557; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14558; GFX10-WGP:       ; %bb.0: ; %entry14559; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 014560; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014561; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x814562; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc14563; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)14564; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s714565; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s614566; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14567; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v314568; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614569; GFX10-WGP-NEXT:    s_endpgm14570;14571; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14572; GFX10-CU:       ; %bb.0: ; %entry14573; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 014574; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014575; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x814576; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc14577; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)14578; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s714579; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s614580; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14581; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v314582; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614583; GFX10-CU-NEXT:    s_endpgm14584;14585; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14586; SKIP-CACHE-INV:       ; %bb.0: ; %entry14587; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]14588; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x014589; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x214590; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x314591; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)14592; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s114593; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr114594; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00014595; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -114596; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr314597; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s814598; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s714599; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s614600; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s514601; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s414602; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14603; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v214604; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1614605; SKIP-CACHE-INV-NEXT:    s_endpgm14606;14607; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14608; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry14609; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014610; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014611; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814612; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14613; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14614; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s714615; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s614616; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14617; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114618; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614619; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm14620;14621; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14622; GFX90A-TGSPLIT:       ; %bb.0: ; %entry14623; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014624; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014625; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814626; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14627; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14628; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s714629; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s614630; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14631; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114632; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614633; GFX90A-TGSPLIT-NEXT:    s_endpgm14634;14635; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14636; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry14637; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014638; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014639; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814640; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14641; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14642; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s314643; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s214644; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14645; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114646; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614647; GFX942-NOTTGSPLIT-NEXT:    s_endpgm14648;14649; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14650; GFX942-TGSPLIT:       ; %bb.0: ; %entry14651; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014652; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014653; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814654; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14655; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14656; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s314657; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s214658; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14659; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114660; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614661; GFX942-TGSPLIT-NEXT:    s_endpgm14662;14663; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14664; GFX11-WGP:       ; %bb.0: ; %entry14665; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 014666; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014667; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814668; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14669; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)14670; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s314671; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s214672; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14673; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v314674; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614675; GFX11-WGP-NEXT:    s_endpgm14676;14677; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14678; GFX11-CU:       ; %bb.0: ; %entry14679; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 014680; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014681; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814682; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14683; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)14684; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s314685; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s214686; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14687; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v314688; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614689; GFX11-CU-NEXT:    s_endpgm14690;14691; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14692; GFX12-WGP:       ; %bb.0: ; %entry14693; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 014694; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014695; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814696; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14697; GFX12-WGP-NEXT:    s_wait_kmcnt 0x014698; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s314699; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s214700; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14701; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v314702; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614703; GFX12-WGP-NEXT:    s_endpgm14704;14705; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14706; GFX12-CU:       ; %bb.0: ; %entry14707; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 014708; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014709; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814710; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14711; GFX12-CU-NEXT:    s_wait_kmcnt 0x014712; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s314713; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s214714; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14715; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v314716; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614717; GFX12-CU-NEXT:    s_endpgm14718;14719; GFX1250-LABEL: global_singlethread_one_as_monotonic_acquire_cmpxchg:14720; GFX1250:       ; %bb.0: ; %entry14721; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 114722; GFX1250-NEXT:    v_mov_b32_e32 v0, 014723; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014724; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x814725; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc14726; GFX1250-NEXT:    s_wait_kmcnt 0x014727; GFX1250-NEXT:    v_mov_b32_e32 v2, s314728; GFX1250-NEXT:    v_mov_b32_e32 v1, s214729; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14730; GFX1250-NEXT:    v_mov_b32_e32 v3, v114731; GFX1250-NEXT:    s_wait_xcnt 0x014732; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1614733; GFX1250-NEXT:    s_endpgm14734    ptr addrspace(1) %out, i32 %in, i32 %old) {14735entry:14736  %gep = getelementptr i32, ptr addrspace(1) %out, i32 414737  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") monotonic acquire14738  ret void14739}14740 14741define amdgpu_kernel void @global_singlethread_one_as_acquire_acquire_cmpxchg(14742; GFX6-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14743; GFX6:       ; %bb.0: ; %entry14744; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]14745; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x014746; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x214747; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x314748; GFX6-NEXT:    s_waitcnt lgkmcnt(0)14749; GFX6-NEXT:    s_mov_b32 s12, s514750; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr514751; GFX6-NEXT:    s_mov_b32 s10, 0x100f00014752; GFX6-NEXT:    s_mov_b32 s11, -114753; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr714754; GFX6-NEXT:    s_mov_b32 s5, s1214755; GFX6-NEXT:    s_mov_b32 s6, s1114756; GFX6-NEXT:    s_mov_b32 s7, s1014757; GFX6-NEXT:    v_mov_b32_e32 v0, s914758; GFX6-NEXT:    v_mov_b32_e32 v2, s814759; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14760; GFX6-NEXT:    v_mov_b32_e32 v1, v214761; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1614762; GFX6-NEXT:    s_endpgm14763;14764; GFX7-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14765; GFX7:       ; %bb.0: ; %entry14766; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1314767; GFX7-NEXT:    s_add_i32 s12, s12, s1714768; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 814769; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]14770; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x014771; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x214772; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x314773; GFX7-NEXT:    s_mov_b64 s[10:11], 1614774; GFX7-NEXT:    s_waitcnt lgkmcnt(0)14775; GFX7-NEXT:    s_mov_b32 s4, s814776; GFX7-NEXT:    s_mov_b32 s5, s914777; GFX7-NEXT:    s_mov_b32 s9, s1014778; GFX7-NEXT:    s_mov_b32 s8, s1114779; GFX7-NEXT:    s_add_u32 s4, s4, s914780; GFX7-NEXT:    s_addc_u32 s8, s5, s814781; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr514782; GFX7-NEXT:    s_mov_b32 s5, s814783; GFX7-NEXT:    v_mov_b32_e32 v2, s714784; GFX7-NEXT:    v_mov_b32_e32 v0, s614785; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14786; GFX7-NEXT:    v_mov_b32_e32 v3, v014787; GFX7-NEXT:    v_mov_b32_e32 v0, s414788; GFX7-NEXT:    v_mov_b32_e32 v1, s514789; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]14790; GFX7-NEXT:    s_endpgm14791;14792; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14793; GFX10-WGP:       ; %bb.0: ; %entry14794; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 014795; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014796; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x814797; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc14798; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)14799; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s714800; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s614801; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14802; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v314803; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614804; GFX10-WGP-NEXT:    s_endpgm14805;14806; GFX10-CU-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14807; GFX10-CU:       ; %bb.0: ; %entry14808; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 014809; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014810; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x814811; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc14812; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)14813; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s714814; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s614815; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14816; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v314817; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1614818; GFX10-CU-NEXT:    s_endpgm14819;14820; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14821; SKIP-CACHE-INV:       ; %bb.0: ; %entry14822; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]14823; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x014824; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x214825; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x314826; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)14827; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s114828; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr114829; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00014830; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -114831; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr314832; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s814833; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s714834; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s614835; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s514836; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s414837; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14838; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v214839; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1614840; SKIP-CACHE-INV-NEXT:    s_endpgm14841;14842; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14843; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry14844; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014845; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014846; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814847; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14848; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14849; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s714850; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s614851; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14852; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114853; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614854; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm14855;14856; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14857; GFX90A-TGSPLIT:       ; %bb.0: ; %entry14858; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014859; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x014860; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x814861; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc14862; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14863; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s714864; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s614865; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14866; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114867; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1614868; GFX90A-TGSPLIT-NEXT:    s_endpgm14869;14870; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14871; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry14872; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 014873; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014874; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814875; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14876; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14877; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s314878; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s214879; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14880; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v114881; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614882; GFX942-NOTTGSPLIT-NEXT:    s_endpgm14883;14884; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14885; GFX942-TGSPLIT:       ; %bb.0: ; %entry14886; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 014887; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x014888; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x814889; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc14890; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)14891; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s314892; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s214893; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14894; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v114895; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1614896; GFX942-TGSPLIT-NEXT:    s_endpgm14897;14898; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14899; GFX11-WGP:       ; %bb.0: ; %entry14900; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 014901; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014902; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814903; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14904; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)14905; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s314906; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s214907; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14908; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v314909; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614910; GFX11-WGP-NEXT:    s_endpgm14911;14912; GFX11-CU-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14913; GFX11-CU:       ; %bb.0: ; %entry14914; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 014915; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014916; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814917; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14918; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)14919; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s314920; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s214921; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14922; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v314923; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614924; GFX11-CU-NEXT:    s_endpgm14925;14926; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14927; GFX12-WGP:       ; %bb.0: ; %entry14928; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 014929; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014930; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x814931; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc14932; GFX12-WGP-NEXT:    s_wait_kmcnt 0x014933; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s314934; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s214935; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14936; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v314937; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614938; GFX12-WGP-NEXT:    s_endpgm14939;14940; GFX12-CU-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14941; GFX12-CU:       ; %bb.0: ; %entry14942; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 014943; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014944; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x814945; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc14946; GFX12-CU-NEXT:    s_wait_kmcnt 0x014947; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s314948; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s214949; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec14950; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v314951; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1614952; GFX12-CU-NEXT:    s_endpgm14953;14954; GFX1250-LABEL: global_singlethread_one_as_acquire_acquire_cmpxchg:14955; GFX1250:       ; %bb.0: ; %entry14956; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 114957; GFX1250-NEXT:    v_mov_b32_e32 v0, 014958; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x014959; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x814960; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc14961; GFX1250-NEXT:    s_wait_kmcnt 0x014962; GFX1250-NEXT:    v_mov_b32_e32 v2, s314963; GFX1250-NEXT:    v_mov_b32_e32 v1, s214964; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec14965; GFX1250-NEXT:    v_mov_b32_e32 v3, v114966; GFX1250-NEXT:    s_wait_xcnt 0x014967; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1614968; GFX1250-NEXT:    s_endpgm14969    ptr addrspace(1) %out, i32 %in, i32 %old) {14970entry:14971  %gep = getelementptr i32, ptr addrspace(1) %out, i32 414972  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acquire acquire14973  ret void14974}14975 14976define amdgpu_kernel void @global_singlethread_one_as_release_acquire_cmpxchg(14977; GFX6-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:14978; GFX6:       ; %bb.0: ; %entry14979; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]14980; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x014981; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x214982; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x314983; GFX6-NEXT:    s_waitcnt lgkmcnt(0)14984; GFX6-NEXT:    s_mov_b32 s12, s514985; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr514986; GFX6-NEXT:    s_mov_b32 s10, 0x100f00014987; GFX6-NEXT:    s_mov_b32 s11, -114988; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr714989; GFX6-NEXT:    s_mov_b32 s5, s1214990; GFX6-NEXT:    s_mov_b32 s6, s1114991; GFX6-NEXT:    s_mov_b32 s7, s1014992; GFX6-NEXT:    v_mov_b32_e32 v0, s914993; GFX6-NEXT:    v_mov_b32_e32 v2, s814994; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec14995; GFX6-NEXT:    v_mov_b32_e32 v1, v214996; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1614997; GFX6-NEXT:    s_endpgm14998;14999; GFX7-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15000; GFX7:       ; %bb.0: ; %entry15001; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1315002; GFX7-NEXT:    s_add_i32 s12, s12, s1715003; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 815004; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]15005; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x015006; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x215007; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x315008; GFX7-NEXT:    s_mov_b64 s[10:11], 1615009; GFX7-NEXT:    s_waitcnt lgkmcnt(0)15010; GFX7-NEXT:    s_mov_b32 s4, s815011; GFX7-NEXT:    s_mov_b32 s5, s915012; GFX7-NEXT:    s_mov_b32 s9, s1015013; GFX7-NEXT:    s_mov_b32 s8, s1115014; GFX7-NEXT:    s_add_u32 s4, s4, s915015; GFX7-NEXT:    s_addc_u32 s8, s5, s815016; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr515017; GFX7-NEXT:    s_mov_b32 s5, s815018; GFX7-NEXT:    v_mov_b32_e32 v2, s715019; GFX7-NEXT:    v_mov_b32_e32 v0, s615020; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15021; GFX7-NEXT:    v_mov_b32_e32 v3, v015022; GFX7-NEXT:    v_mov_b32_e32 v0, s415023; GFX7-NEXT:    v_mov_b32_e32 v1, s515024; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]15025; GFX7-NEXT:    s_endpgm15026;15027; GFX10-WGP-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15028; GFX10-WGP:       ; %bb.0: ; %entry15029; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 015030; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015031; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x815032; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc15033; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)15034; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s715035; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s615036; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15037; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v315038; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615039; GFX10-WGP-NEXT:    s_endpgm15040;15041; GFX10-CU-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15042; GFX10-CU:       ; %bb.0: ; %entry15043; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 015044; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015045; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x815046; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc15047; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)15048; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s715049; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s615050; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15051; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v315052; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615053; GFX10-CU-NEXT:    s_endpgm15054;15055; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15056; SKIP-CACHE-INV:       ; %bb.0: ; %entry15057; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]15058; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x015059; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x215060; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x315061; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)15062; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s115063; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr115064; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00015065; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -115066; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr315067; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s815068; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s715069; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s615070; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s515071; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s415072; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15073; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v215074; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1615075; SKIP-CACHE-INV-NEXT:    s_endpgm15076;15077; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15078; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry15079; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015080; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015081; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815082; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15083; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15084; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s715085; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s615086; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15087; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115088; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615089; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm15090;15091; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15092; GFX90A-TGSPLIT:       ; %bb.0: ; %entry15093; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015094; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015095; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815096; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15097; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15098; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s715099; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s615100; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15101; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115102; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615103; GFX90A-TGSPLIT-NEXT:    s_endpgm15104;15105; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15106; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry15107; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015108; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015109; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815110; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15111; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15112; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s315113; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s215114; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15115; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115116; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615117; GFX942-NOTTGSPLIT-NEXT:    s_endpgm15118;15119; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15120; GFX942-TGSPLIT:       ; %bb.0: ; %entry15121; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015122; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015123; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815124; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15125; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15126; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s315127; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s215128; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15129; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115130; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615131; GFX942-TGSPLIT-NEXT:    s_endpgm15132;15133; GFX11-WGP-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15134; GFX11-WGP:       ; %bb.0: ; %entry15135; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 015136; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015137; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815138; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15139; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)15140; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s315141; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s215142; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15143; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v315144; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615145; GFX11-WGP-NEXT:    s_endpgm15146;15147; GFX11-CU-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15148; GFX11-CU:       ; %bb.0: ; %entry15149; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 015150; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015151; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815152; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15153; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)15154; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s315155; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s215156; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15157; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v315158; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615159; GFX11-CU-NEXT:    s_endpgm15160;15161; GFX12-WGP-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15162; GFX12-WGP:       ; %bb.0: ; %entry15163; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 015164; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015165; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815166; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15167; GFX12-WGP-NEXT:    s_wait_kmcnt 0x015168; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s315169; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s215170; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15171; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v315172; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615173; GFX12-WGP-NEXT:    s_endpgm15174;15175; GFX12-CU-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15176; GFX12-CU:       ; %bb.0: ; %entry15177; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 015178; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015179; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815180; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15181; GFX12-CU-NEXT:    s_wait_kmcnt 0x015182; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s315183; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s215184; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15185; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v315186; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615187; GFX12-CU-NEXT:    s_endpgm15188;15189; GFX1250-LABEL: global_singlethread_one_as_release_acquire_cmpxchg:15190; GFX1250:       ; %bb.0: ; %entry15191; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 115192; GFX1250-NEXT:    v_mov_b32_e32 v0, 015193; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015194; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x815195; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc15196; GFX1250-NEXT:    s_wait_kmcnt 0x015197; GFX1250-NEXT:    v_mov_b32_e32 v2, s315198; GFX1250-NEXT:    v_mov_b32_e32 v1, s215199; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15200; GFX1250-NEXT:    v_mov_b32_e32 v3, v115201; GFX1250-NEXT:    s_wait_xcnt 0x015202; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1615203; GFX1250-NEXT:    s_endpgm15204    ptr addrspace(1) %out, i32 %in, i32 %old) {15205entry:15206  %gep = getelementptr i32, ptr addrspace(1) %out, i32 415207  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") release acquire15208  ret void15209}15210 15211define amdgpu_kernel void @global_singlethread_one_as_acq_rel_acquire_cmpxchg(15212; GFX6-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15213; GFX6:       ; %bb.0: ; %entry15214; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]15215; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x015216; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x215217; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x315218; GFX6-NEXT:    s_waitcnt lgkmcnt(0)15219; GFX6-NEXT:    s_mov_b32 s12, s515220; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr515221; GFX6-NEXT:    s_mov_b32 s10, 0x100f00015222; GFX6-NEXT:    s_mov_b32 s11, -115223; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr715224; GFX6-NEXT:    s_mov_b32 s5, s1215225; GFX6-NEXT:    s_mov_b32 s6, s1115226; GFX6-NEXT:    s_mov_b32 s7, s1015227; GFX6-NEXT:    v_mov_b32_e32 v0, s915228; GFX6-NEXT:    v_mov_b32_e32 v2, s815229; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15230; GFX6-NEXT:    v_mov_b32_e32 v1, v215231; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1615232; GFX6-NEXT:    s_endpgm15233;15234; GFX7-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15235; GFX7:       ; %bb.0: ; %entry15236; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1315237; GFX7-NEXT:    s_add_i32 s12, s12, s1715238; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 815239; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]15240; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x015241; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x215242; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x315243; GFX7-NEXT:    s_mov_b64 s[10:11], 1615244; GFX7-NEXT:    s_waitcnt lgkmcnt(0)15245; GFX7-NEXT:    s_mov_b32 s4, s815246; GFX7-NEXT:    s_mov_b32 s5, s915247; GFX7-NEXT:    s_mov_b32 s9, s1015248; GFX7-NEXT:    s_mov_b32 s8, s1115249; GFX7-NEXT:    s_add_u32 s4, s4, s915250; GFX7-NEXT:    s_addc_u32 s8, s5, s815251; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr515252; GFX7-NEXT:    s_mov_b32 s5, s815253; GFX7-NEXT:    v_mov_b32_e32 v2, s715254; GFX7-NEXT:    v_mov_b32_e32 v0, s615255; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15256; GFX7-NEXT:    v_mov_b32_e32 v3, v015257; GFX7-NEXT:    v_mov_b32_e32 v0, s415258; GFX7-NEXT:    v_mov_b32_e32 v1, s515259; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]15260; GFX7-NEXT:    s_endpgm15261;15262; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15263; GFX10-WGP:       ; %bb.0: ; %entry15264; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 015265; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015266; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x815267; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc15268; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)15269; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s715270; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s615271; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15272; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v315273; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615274; GFX10-WGP-NEXT:    s_endpgm15275;15276; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15277; GFX10-CU:       ; %bb.0: ; %entry15278; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 015279; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015280; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x815281; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc15282; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)15283; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s715284; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s615285; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15286; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v315287; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615288; GFX10-CU-NEXT:    s_endpgm15289;15290; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15291; SKIP-CACHE-INV:       ; %bb.0: ; %entry15292; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]15293; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x015294; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x215295; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x315296; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)15297; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s115298; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr115299; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00015300; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -115301; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr315302; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s815303; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s715304; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s615305; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s515306; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s415307; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15308; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v215309; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1615310; SKIP-CACHE-INV-NEXT:    s_endpgm15311;15312; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15313; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry15314; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015315; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015316; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815317; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15318; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15319; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s715320; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s615321; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15322; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115323; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615324; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm15325;15326; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15327; GFX90A-TGSPLIT:       ; %bb.0: ; %entry15328; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015329; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015330; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815331; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15332; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15333; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s715334; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s615335; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15336; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115337; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615338; GFX90A-TGSPLIT-NEXT:    s_endpgm15339;15340; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15341; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry15342; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015343; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015344; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815345; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15346; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15347; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s315348; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s215349; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15350; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115351; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615352; GFX942-NOTTGSPLIT-NEXT:    s_endpgm15353;15354; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15355; GFX942-TGSPLIT:       ; %bb.0: ; %entry15356; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015357; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015358; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815359; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15360; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15361; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s315362; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s215363; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15364; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115365; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615366; GFX942-TGSPLIT-NEXT:    s_endpgm15367;15368; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15369; GFX11-WGP:       ; %bb.0: ; %entry15370; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 015371; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015372; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815373; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15374; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)15375; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s315376; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s215377; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15378; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v315379; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615380; GFX11-WGP-NEXT:    s_endpgm15381;15382; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15383; GFX11-CU:       ; %bb.0: ; %entry15384; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 015385; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015386; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815387; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15388; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)15389; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s315390; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s215391; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15392; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v315393; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615394; GFX11-CU-NEXT:    s_endpgm15395;15396; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15397; GFX12-WGP:       ; %bb.0: ; %entry15398; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 015399; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015400; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815401; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15402; GFX12-WGP-NEXT:    s_wait_kmcnt 0x015403; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s315404; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s215405; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15406; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v315407; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615408; GFX12-WGP-NEXT:    s_endpgm15409;15410; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15411; GFX12-CU:       ; %bb.0: ; %entry15412; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 015413; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015414; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815415; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15416; GFX12-CU-NEXT:    s_wait_kmcnt 0x015417; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s315418; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s215419; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15420; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v315421; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615422; GFX12-CU-NEXT:    s_endpgm15423;15424; GFX1250-LABEL: global_singlethread_one_as_acq_rel_acquire_cmpxchg:15425; GFX1250:       ; %bb.0: ; %entry15426; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 115427; GFX1250-NEXT:    v_mov_b32_e32 v0, 015428; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015429; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x815430; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc15431; GFX1250-NEXT:    s_wait_kmcnt 0x015432; GFX1250-NEXT:    v_mov_b32_e32 v2, s315433; GFX1250-NEXT:    v_mov_b32_e32 v1, s215434; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15435; GFX1250-NEXT:    v_mov_b32_e32 v3, v115436; GFX1250-NEXT:    s_wait_xcnt 0x015437; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1615438; GFX1250-NEXT:    s_endpgm15439    ptr addrspace(1) %out, i32 %in, i32 %old) {15440entry:15441  %gep = getelementptr i32, ptr addrspace(1) %out, i32 415442  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acq_rel acquire15443  ret void15444}15445 15446define amdgpu_kernel void @global_singlethread_one_as_seq_cst_acquire_cmpxchg(15447; GFX6-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15448; GFX6:       ; %bb.0: ; %entry15449; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]15450; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x015451; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x215452; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x315453; GFX6-NEXT:    s_waitcnt lgkmcnt(0)15454; GFX6-NEXT:    s_mov_b32 s12, s515455; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr515456; GFX6-NEXT:    s_mov_b32 s10, 0x100f00015457; GFX6-NEXT:    s_mov_b32 s11, -115458; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr715459; GFX6-NEXT:    s_mov_b32 s5, s1215460; GFX6-NEXT:    s_mov_b32 s6, s1115461; GFX6-NEXT:    s_mov_b32 s7, s1015462; GFX6-NEXT:    v_mov_b32_e32 v0, s915463; GFX6-NEXT:    v_mov_b32_e32 v2, s815464; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15465; GFX6-NEXT:    v_mov_b32_e32 v1, v215466; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1615467; GFX6-NEXT:    s_endpgm15468;15469; GFX7-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15470; GFX7:       ; %bb.0: ; %entry15471; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1315472; GFX7-NEXT:    s_add_i32 s12, s12, s1715473; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 815474; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]15475; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x015476; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x215477; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x315478; GFX7-NEXT:    s_mov_b64 s[10:11], 1615479; GFX7-NEXT:    s_waitcnt lgkmcnt(0)15480; GFX7-NEXT:    s_mov_b32 s4, s815481; GFX7-NEXT:    s_mov_b32 s5, s915482; GFX7-NEXT:    s_mov_b32 s9, s1015483; GFX7-NEXT:    s_mov_b32 s8, s1115484; GFX7-NEXT:    s_add_u32 s4, s4, s915485; GFX7-NEXT:    s_addc_u32 s8, s5, s815486; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr515487; GFX7-NEXT:    s_mov_b32 s5, s815488; GFX7-NEXT:    v_mov_b32_e32 v2, s715489; GFX7-NEXT:    v_mov_b32_e32 v0, s615490; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15491; GFX7-NEXT:    v_mov_b32_e32 v3, v015492; GFX7-NEXT:    v_mov_b32_e32 v0, s415493; GFX7-NEXT:    v_mov_b32_e32 v1, s515494; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]15495; GFX7-NEXT:    s_endpgm15496;15497; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15498; GFX10-WGP:       ; %bb.0: ; %entry15499; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 015500; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015501; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x815502; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc15503; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)15504; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s715505; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s615506; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15507; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v315508; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615509; GFX10-WGP-NEXT:    s_endpgm15510;15511; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15512; GFX10-CU:       ; %bb.0: ; %entry15513; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 015514; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015515; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x815516; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc15517; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)15518; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s715519; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s615520; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15521; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v315522; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615523; GFX10-CU-NEXT:    s_endpgm15524;15525; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15526; SKIP-CACHE-INV:       ; %bb.0: ; %entry15527; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]15528; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x015529; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x215530; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x315531; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)15532; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s115533; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr115534; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00015535; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -115536; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr315537; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s815538; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s715539; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s615540; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s515541; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s415542; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15543; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v215544; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1615545; SKIP-CACHE-INV-NEXT:    s_endpgm15546;15547; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15548; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry15549; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015550; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015551; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815552; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15553; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15554; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s715555; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s615556; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15557; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115558; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615559; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm15560;15561; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15562; GFX90A-TGSPLIT:       ; %bb.0: ; %entry15563; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015564; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015565; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815566; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15567; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15568; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s715569; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s615570; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15571; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115572; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615573; GFX90A-TGSPLIT-NEXT:    s_endpgm15574;15575; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15576; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry15577; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015578; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015579; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815580; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15581; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15582; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s315583; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s215584; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15585; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115586; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615587; GFX942-NOTTGSPLIT-NEXT:    s_endpgm15588;15589; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15590; GFX942-TGSPLIT:       ; %bb.0: ; %entry15591; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015592; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015593; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815594; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15595; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15596; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s315597; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s215598; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15599; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115600; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615601; GFX942-TGSPLIT-NEXT:    s_endpgm15602;15603; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15604; GFX11-WGP:       ; %bb.0: ; %entry15605; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 015606; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015607; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815608; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15609; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)15610; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s315611; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s215612; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15613; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v315614; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615615; GFX11-WGP-NEXT:    s_endpgm15616;15617; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15618; GFX11-CU:       ; %bb.0: ; %entry15619; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 015620; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015621; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815622; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15623; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)15624; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s315625; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s215626; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15627; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v315628; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615629; GFX11-CU-NEXT:    s_endpgm15630;15631; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15632; GFX12-WGP:       ; %bb.0: ; %entry15633; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 015634; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015635; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815636; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15637; GFX12-WGP-NEXT:    s_wait_kmcnt 0x015638; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s315639; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s215640; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15641; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v315642; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615643; GFX12-WGP-NEXT:    s_endpgm15644;15645; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15646; GFX12-CU:       ; %bb.0: ; %entry15647; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 015648; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015649; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815650; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15651; GFX12-CU-NEXT:    s_wait_kmcnt 0x015652; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s315653; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s215654; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15655; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v315656; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615657; GFX12-CU-NEXT:    s_endpgm15658;15659; GFX1250-LABEL: global_singlethread_one_as_seq_cst_acquire_cmpxchg:15660; GFX1250:       ; %bb.0: ; %entry15661; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 115662; GFX1250-NEXT:    v_mov_b32_e32 v0, 015663; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015664; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x815665; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc15666; GFX1250-NEXT:    s_wait_kmcnt 0x015667; GFX1250-NEXT:    v_mov_b32_e32 v2, s315668; GFX1250-NEXT:    v_mov_b32_e32 v1, s215669; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15670; GFX1250-NEXT:    v_mov_b32_e32 v3, v115671; GFX1250-NEXT:    s_wait_xcnt 0x015672; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1615673; GFX1250-NEXT:    s_endpgm15674    ptr addrspace(1) %out, i32 %in, i32 %old) {15675entry:15676  %gep = getelementptr i32, ptr addrspace(1) %out, i32 415677  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") seq_cst acquire15678  ret void15679}15680 15681define amdgpu_kernel void @global_singlethread_one_as_monotonic_seq_cst_cmpxchg(15682; GFX6-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15683; GFX6:       ; %bb.0: ; %entry15684; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]15685; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x015686; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x215687; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x315688; GFX6-NEXT:    s_waitcnt lgkmcnt(0)15689; GFX6-NEXT:    s_mov_b32 s12, s515690; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr515691; GFX6-NEXT:    s_mov_b32 s10, 0x100f00015692; GFX6-NEXT:    s_mov_b32 s11, -115693; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr715694; GFX6-NEXT:    s_mov_b32 s5, s1215695; GFX6-NEXT:    s_mov_b32 s6, s1115696; GFX6-NEXT:    s_mov_b32 s7, s1015697; GFX6-NEXT:    v_mov_b32_e32 v0, s915698; GFX6-NEXT:    v_mov_b32_e32 v2, s815699; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15700; GFX6-NEXT:    v_mov_b32_e32 v1, v215701; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1615702; GFX6-NEXT:    s_endpgm15703;15704; GFX7-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15705; GFX7:       ; %bb.0: ; %entry15706; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1315707; GFX7-NEXT:    s_add_i32 s12, s12, s1715708; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 815709; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]15710; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x015711; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x215712; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x315713; GFX7-NEXT:    s_mov_b64 s[10:11], 1615714; GFX7-NEXT:    s_waitcnt lgkmcnt(0)15715; GFX7-NEXT:    s_mov_b32 s4, s815716; GFX7-NEXT:    s_mov_b32 s5, s915717; GFX7-NEXT:    s_mov_b32 s9, s1015718; GFX7-NEXT:    s_mov_b32 s8, s1115719; GFX7-NEXT:    s_add_u32 s4, s4, s915720; GFX7-NEXT:    s_addc_u32 s8, s5, s815721; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr515722; GFX7-NEXT:    s_mov_b32 s5, s815723; GFX7-NEXT:    v_mov_b32_e32 v2, s715724; GFX7-NEXT:    v_mov_b32_e32 v0, s615725; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15726; GFX7-NEXT:    v_mov_b32_e32 v3, v015727; GFX7-NEXT:    v_mov_b32_e32 v0, s415728; GFX7-NEXT:    v_mov_b32_e32 v1, s515729; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]15730; GFX7-NEXT:    s_endpgm15731;15732; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15733; GFX10-WGP:       ; %bb.0: ; %entry15734; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 015735; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015736; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x815737; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc15738; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)15739; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s715740; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s615741; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15742; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v315743; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615744; GFX10-WGP-NEXT:    s_endpgm15745;15746; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15747; GFX10-CU:       ; %bb.0: ; %entry15748; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 015749; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015750; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x815751; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc15752; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)15753; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s715754; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s615755; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15756; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v315757; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615758; GFX10-CU-NEXT:    s_endpgm15759;15760; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15761; SKIP-CACHE-INV:       ; %bb.0: ; %entry15762; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]15763; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x015764; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x215765; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x315766; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)15767; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s115768; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr115769; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00015770; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -115771; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr315772; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s815773; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s715774; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s615775; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s515776; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s415777; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15778; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v215779; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1615780; SKIP-CACHE-INV-NEXT:    s_endpgm15781;15782; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15783; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry15784; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015785; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015786; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815787; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15788; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15789; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s715790; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s615791; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15792; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115793; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615794; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm15795;15796; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15797; GFX90A-TGSPLIT:       ; %bb.0: ; %entry15798; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015799; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015800; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x815801; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc15802; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15803; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s715804; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s615805; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15806; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115807; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1615808; GFX90A-TGSPLIT-NEXT:    s_endpgm15809;15810; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15811; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry15812; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 015813; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015814; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815815; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15816; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15817; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s315818; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s215819; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15820; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v115821; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615822; GFX942-NOTTGSPLIT-NEXT:    s_endpgm15823;15824; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15825; GFX942-TGSPLIT:       ; %bb.0: ; %entry15826; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 015827; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x015828; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x815829; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc15830; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)15831; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s315832; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s215833; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15834; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v115835; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1615836; GFX942-TGSPLIT-NEXT:    s_endpgm15837;15838; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15839; GFX11-WGP:       ; %bb.0: ; %entry15840; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 015841; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015842; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815843; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15844; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)15845; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s315846; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s215847; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15848; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v315849; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615850; GFX11-WGP-NEXT:    s_endpgm15851;15852; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15853; GFX11-CU:       ; %bb.0: ; %entry15854; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 015855; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015856; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815857; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15858; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)15859; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s315860; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s215861; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15862; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v315863; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615864; GFX11-CU-NEXT:    s_endpgm15865;15866; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15867; GFX12-WGP:       ; %bb.0: ; %entry15868; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 015869; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015870; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x815871; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc15872; GFX12-WGP-NEXT:    s_wait_kmcnt 0x015873; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s315874; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s215875; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15876; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v315877; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615878; GFX12-WGP-NEXT:    s_endpgm15879;15880; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15881; GFX12-CU:       ; %bb.0: ; %entry15882; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 015883; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015884; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x815885; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc15886; GFX12-CU-NEXT:    s_wait_kmcnt 0x015887; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s315888; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s215889; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15890; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v315891; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1615892; GFX12-CU-NEXT:    s_endpgm15893;15894; GFX1250-LABEL: global_singlethread_one_as_monotonic_seq_cst_cmpxchg:15895; GFX1250:       ; %bb.0: ; %entry15896; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 115897; GFX1250-NEXT:    v_mov_b32_e32 v0, 015898; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x015899; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x815900; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc15901; GFX1250-NEXT:    s_wait_kmcnt 0x015902; GFX1250-NEXT:    v_mov_b32_e32 v2, s315903; GFX1250-NEXT:    v_mov_b32_e32 v1, s215904; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15905; GFX1250-NEXT:    v_mov_b32_e32 v3, v115906; GFX1250-NEXT:    s_wait_xcnt 0x015907; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1615908; GFX1250-NEXT:    s_endpgm15909    ptr addrspace(1) %out, i32 %in, i32 %old) {15910entry:15911  %gep = getelementptr i32, ptr addrspace(1) %out, i32 415912  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") monotonic seq_cst15913  ret void15914}15915 15916define amdgpu_kernel void @global_singlethread_one_as_acquire_seq_cst_cmpxchg(15917; GFX6-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:15918; GFX6:       ; %bb.0: ; %entry15919; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]15920; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x015921; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x215922; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x315923; GFX6-NEXT:    s_waitcnt lgkmcnt(0)15924; GFX6-NEXT:    s_mov_b32 s12, s515925; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr515926; GFX6-NEXT:    s_mov_b32 s10, 0x100f00015927; GFX6-NEXT:    s_mov_b32 s11, -115928; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr715929; GFX6-NEXT:    s_mov_b32 s5, s1215930; GFX6-NEXT:    s_mov_b32 s6, s1115931; GFX6-NEXT:    s_mov_b32 s7, s1015932; GFX6-NEXT:    v_mov_b32_e32 v0, s915933; GFX6-NEXT:    v_mov_b32_e32 v2, s815934; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec15935; GFX6-NEXT:    v_mov_b32_e32 v1, v215936; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1615937; GFX6-NEXT:    s_endpgm15938;15939; GFX7-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:15940; GFX7:       ; %bb.0: ; %entry15941; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1315942; GFX7-NEXT:    s_add_i32 s12, s12, s1715943; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 815944; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]15945; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x015946; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x215947; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x315948; GFX7-NEXT:    s_mov_b64 s[10:11], 1615949; GFX7-NEXT:    s_waitcnt lgkmcnt(0)15950; GFX7-NEXT:    s_mov_b32 s4, s815951; GFX7-NEXT:    s_mov_b32 s5, s915952; GFX7-NEXT:    s_mov_b32 s9, s1015953; GFX7-NEXT:    s_mov_b32 s8, s1115954; GFX7-NEXT:    s_add_u32 s4, s4, s915955; GFX7-NEXT:    s_addc_u32 s8, s5, s815956; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr515957; GFX7-NEXT:    s_mov_b32 s5, s815958; GFX7-NEXT:    v_mov_b32_e32 v2, s715959; GFX7-NEXT:    v_mov_b32_e32 v0, s615960; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec15961; GFX7-NEXT:    v_mov_b32_e32 v3, v015962; GFX7-NEXT:    v_mov_b32_e32 v0, s415963; GFX7-NEXT:    v_mov_b32_e32 v1, s515964; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]15965; GFX7-NEXT:    s_endpgm15966;15967; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:15968; GFX10-WGP:       ; %bb.0: ; %entry15969; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 015970; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015971; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x815972; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc15973; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)15974; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s715975; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s615976; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15977; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v315978; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615979; GFX10-WGP-NEXT:    s_endpgm15980;15981; GFX10-CU-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:15982; GFX10-CU:       ; %bb.0: ; %entry15983; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 015984; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x015985; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x815986; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc15987; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)15988; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s715989; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s615990; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec15991; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v315992; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1615993; GFX10-CU-NEXT:    s_endpgm15994;15995; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:15996; SKIP-CACHE-INV:       ; %bb.0: ; %entry15997; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]15998; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x015999; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x216000; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x316001; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)16002; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s116003; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr116004; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00016005; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -116006; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr316007; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s816008; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s716009; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s616010; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s516011; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s416012; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16013; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v216014; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1616015; SKIP-CACHE-INV-NEXT:    s_endpgm16016;16017; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16018; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry16019; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016020; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016021; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816022; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16023; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16024; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s716025; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s616026; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16027; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116028; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616029; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm16030;16031; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16032; GFX90A-TGSPLIT:       ; %bb.0: ; %entry16033; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016034; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016035; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816036; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16037; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16038; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s716039; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s616040; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16041; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116042; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616043; GFX90A-TGSPLIT-NEXT:    s_endpgm16044;16045; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16046; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry16047; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016048; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016049; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816050; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16051; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16052; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s316053; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s216054; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16055; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116056; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616057; GFX942-NOTTGSPLIT-NEXT:    s_endpgm16058;16059; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16060; GFX942-TGSPLIT:       ; %bb.0: ; %entry16061; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016062; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016063; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816064; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16065; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16066; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s316067; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s216068; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16069; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116070; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616071; GFX942-TGSPLIT-NEXT:    s_endpgm16072;16073; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16074; GFX11-WGP:       ; %bb.0: ; %entry16075; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 016076; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016077; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816078; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16079; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)16080; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s316081; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s216082; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16083; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v316084; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616085; GFX11-WGP-NEXT:    s_endpgm16086;16087; GFX11-CU-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16088; GFX11-CU:       ; %bb.0: ; %entry16089; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 016090; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016091; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816092; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16093; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)16094; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s316095; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s216096; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16097; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v316098; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616099; GFX11-CU-NEXT:    s_endpgm16100;16101; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16102; GFX12-WGP:       ; %bb.0: ; %entry16103; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 016104; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016105; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816106; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16107; GFX12-WGP-NEXT:    s_wait_kmcnt 0x016108; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s316109; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s216110; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16111; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v316112; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616113; GFX12-WGP-NEXT:    s_endpgm16114;16115; GFX12-CU-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16116; GFX12-CU:       ; %bb.0: ; %entry16117; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 016118; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016119; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816120; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16121; GFX12-CU-NEXT:    s_wait_kmcnt 0x016122; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s316123; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s216124; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16125; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v316126; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616127; GFX12-CU-NEXT:    s_endpgm16128;16129; GFX1250-LABEL: global_singlethread_one_as_acquire_seq_cst_cmpxchg:16130; GFX1250:       ; %bb.0: ; %entry16131; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 116132; GFX1250-NEXT:    v_mov_b32_e32 v0, 016133; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016134; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x816135; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc16136; GFX1250-NEXT:    s_wait_kmcnt 0x016137; GFX1250-NEXT:    v_mov_b32_e32 v2, s316138; GFX1250-NEXT:    v_mov_b32_e32 v1, s216139; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16140; GFX1250-NEXT:    v_mov_b32_e32 v3, v116141; GFX1250-NEXT:    s_wait_xcnt 0x016142; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1616143; GFX1250-NEXT:    s_endpgm16144    ptr addrspace(1) %out, i32 %in, i32 %old) {16145entry:16146  %gep = getelementptr i32, ptr addrspace(1) %out, i32 416147  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acquire seq_cst16148  ret void16149}16150 16151define amdgpu_kernel void @global_singlethread_one_as_release_seq_cst_cmpxchg(16152; GFX6-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16153; GFX6:       ; %bb.0: ; %entry16154; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]16155; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x016156; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x216157; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x316158; GFX6-NEXT:    s_waitcnt lgkmcnt(0)16159; GFX6-NEXT:    s_mov_b32 s12, s516160; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr516161; GFX6-NEXT:    s_mov_b32 s10, 0x100f00016162; GFX6-NEXT:    s_mov_b32 s11, -116163; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr716164; GFX6-NEXT:    s_mov_b32 s5, s1216165; GFX6-NEXT:    s_mov_b32 s6, s1116166; GFX6-NEXT:    s_mov_b32 s7, s1016167; GFX6-NEXT:    v_mov_b32_e32 v0, s916168; GFX6-NEXT:    v_mov_b32_e32 v2, s816169; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16170; GFX6-NEXT:    v_mov_b32_e32 v1, v216171; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1616172; GFX6-NEXT:    s_endpgm16173;16174; GFX7-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16175; GFX7:       ; %bb.0: ; %entry16176; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1316177; GFX7-NEXT:    s_add_i32 s12, s12, s1716178; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 816179; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]16180; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x016181; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x216182; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x316183; GFX7-NEXT:    s_mov_b64 s[10:11], 1616184; GFX7-NEXT:    s_waitcnt lgkmcnt(0)16185; GFX7-NEXT:    s_mov_b32 s4, s816186; GFX7-NEXT:    s_mov_b32 s5, s916187; GFX7-NEXT:    s_mov_b32 s9, s1016188; GFX7-NEXT:    s_mov_b32 s8, s1116189; GFX7-NEXT:    s_add_u32 s4, s4, s916190; GFX7-NEXT:    s_addc_u32 s8, s5, s816191; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr516192; GFX7-NEXT:    s_mov_b32 s5, s816193; GFX7-NEXT:    v_mov_b32_e32 v2, s716194; GFX7-NEXT:    v_mov_b32_e32 v0, s616195; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16196; GFX7-NEXT:    v_mov_b32_e32 v3, v016197; GFX7-NEXT:    v_mov_b32_e32 v0, s416198; GFX7-NEXT:    v_mov_b32_e32 v1, s516199; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]16200; GFX7-NEXT:    s_endpgm16201;16202; GFX10-WGP-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16203; GFX10-WGP:       ; %bb.0: ; %entry16204; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 016205; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016206; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x816207; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc16208; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)16209; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s716210; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s616211; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16212; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v316213; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1616214; GFX10-WGP-NEXT:    s_endpgm16215;16216; GFX10-CU-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16217; GFX10-CU:       ; %bb.0: ; %entry16218; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 016219; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016220; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x816221; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc16222; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)16223; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s716224; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s616225; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16226; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v316227; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1616228; GFX10-CU-NEXT:    s_endpgm16229;16230; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16231; SKIP-CACHE-INV:       ; %bb.0: ; %entry16232; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]16233; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x016234; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x216235; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x316236; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)16237; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s116238; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr116239; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00016240; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -116241; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr316242; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s816243; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s716244; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s616245; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s516246; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s416247; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16248; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v216249; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1616250; SKIP-CACHE-INV-NEXT:    s_endpgm16251;16252; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16253; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry16254; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016255; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016256; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816257; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16258; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16259; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s716260; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s616261; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16262; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116263; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616264; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm16265;16266; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16267; GFX90A-TGSPLIT:       ; %bb.0: ; %entry16268; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016269; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016270; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816271; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16272; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16273; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s716274; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s616275; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16276; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116277; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616278; GFX90A-TGSPLIT-NEXT:    s_endpgm16279;16280; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16281; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry16282; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016283; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016284; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816285; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16286; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16287; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s316288; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s216289; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16290; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116291; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616292; GFX942-NOTTGSPLIT-NEXT:    s_endpgm16293;16294; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16295; GFX942-TGSPLIT:       ; %bb.0: ; %entry16296; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016297; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016298; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816299; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16300; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16301; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s316302; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s216303; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16304; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116305; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616306; GFX942-TGSPLIT-NEXT:    s_endpgm16307;16308; GFX11-WGP-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16309; GFX11-WGP:       ; %bb.0: ; %entry16310; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 016311; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016312; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816313; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16314; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)16315; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s316316; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s216317; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16318; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v316319; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616320; GFX11-WGP-NEXT:    s_endpgm16321;16322; GFX11-CU-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16323; GFX11-CU:       ; %bb.0: ; %entry16324; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 016325; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016326; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816327; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16328; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)16329; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s316330; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s216331; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16332; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v316333; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616334; GFX11-CU-NEXT:    s_endpgm16335;16336; GFX12-WGP-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16337; GFX12-WGP:       ; %bb.0: ; %entry16338; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 016339; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016340; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816341; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16342; GFX12-WGP-NEXT:    s_wait_kmcnt 0x016343; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s316344; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s216345; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16346; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v316347; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616348; GFX12-WGP-NEXT:    s_endpgm16349;16350; GFX12-CU-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16351; GFX12-CU:       ; %bb.0: ; %entry16352; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 016353; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016354; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816355; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16356; GFX12-CU-NEXT:    s_wait_kmcnt 0x016357; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s316358; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s216359; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16360; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v316361; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616362; GFX12-CU-NEXT:    s_endpgm16363;16364; GFX1250-LABEL: global_singlethread_one_as_release_seq_cst_cmpxchg:16365; GFX1250:       ; %bb.0: ; %entry16366; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 116367; GFX1250-NEXT:    v_mov_b32_e32 v0, 016368; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016369; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x816370; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc16371; GFX1250-NEXT:    s_wait_kmcnt 0x016372; GFX1250-NEXT:    v_mov_b32_e32 v2, s316373; GFX1250-NEXT:    v_mov_b32_e32 v1, s216374; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16375; GFX1250-NEXT:    v_mov_b32_e32 v3, v116376; GFX1250-NEXT:    s_wait_xcnt 0x016377; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1616378; GFX1250-NEXT:    s_endpgm16379    ptr addrspace(1) %out, i32 %in, i32 %old) {16380entry:16381  %gep = getelementptr i32, ptr addrspace(1) %out, i32 416382  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") release seq_cst16383  ret void16384}16385 16386define amdgpu_kernel void @global_singlethread_one_as_acq_rel_seq_cst_cmpxchg(16387; GFX6-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16388; GFX6:       ; %bb.0: ; %entry16389; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]16390; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x016391; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x216392; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x316393; GFX6-NEXT:    s_waitcnt lgkmcnt(0)16394; GFX6-NEXT:    s_mov_b32 s12, s516395; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr516396; GFX6-NEXT:    s_mov_b32 s10, 0x100f00016397; GFX6-NEXT:    s_mov_b32 s11, -116398; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr716399; GFX6-NEXT:    s_mov_b32 s5, s1216400; GFX6-NEXT:    s_mov_b32 s6, s1116401; GFX6-NEXT:    s_mov_b32 s7, s1016402; GFX6-NEXT:    v_mov_b32_e32 v0, s916403; GFX6-NEXT:    v_mov_b32_e32 v2, s816404; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16405; GFX6-NEXT:    v_mov_b32_e32 v1, v216406; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1616407; GFX6-NEXT:    s_endpgm16408;16409; GFX7-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16410; GFX7:       ; %bb.0: ; %entry16411; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1316412; GFX7-NEXT:    s_add_i32 s12, s12, s1716413; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 816414; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]16415; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x016416; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x216417; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x316418; GFX7-NEXT:    s_mov_b64 s[10:11], 1616419; GFX7-NEXT:    s_waitcnt lgkmcnt(0)16420; GFX7-NEXT:    s_mov_b32 s4, s816421; GFX7-NEXT:    s_mov_b32 s5, s916422; GFX7-NEXT:    s_mov_b32 s9, s1016423; GFX7-NEXT:    s_mov_b32 s8, s1116424; GFX7-NEXT:    s_add_u32 s4, s4, s916425; GFX7-NEXT:    s_addc_u32 s8, s5, s816426; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr516427; GFX7-NEXT:    s_mov_b32 s5, s816428; GFX7-NEXT:    v_mov_b32_e32 v2, s716429; GFX7-NEXT:    v_mov_b32_e32 v0, s616430; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16431; GFX7-NEXT:    v_mov_b32_e32 v3, v016432; GFX7-NEXT:    v_mov_b32_e32 v0, s416433; GFX7-NEXT:    v_mov_b32_e32 v1, s516434; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]16435; GFX7-NEXT:    s_endpgm16436;16437; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16438; GFX10-WGP:       ; %bb.0: ; %entry16439; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 016440; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016441; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x816442; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc16443; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)16444; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s716445; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s616446; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16447; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v316448; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1616449; GFX10-WGP-NEXT:    s_endpgm16450;16451; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16452; GFX10-CU:       ; %bb.0: ; %entry16453; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 016454; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016455; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x816456; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc16457; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)16458; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s716459; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s616460; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16461; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v316462; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1616463; GFX10-CU-NEXT:    s_endpgm16464;16465; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16466; SKIP-CACHE-INV:       ; %bb.0: ; %entry16467; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]16468; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x016469; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x216470; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x316471; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)16472; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s116473; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr116474; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00016475; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -116476; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr316477; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s816478; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s716479; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s616480; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s516481; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s416482; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16483; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v216484; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1616485; SKIP-CACHE-INV-NEXT:    s_endpgm16486;16487; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16488; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry16489; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016490; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016491; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816492; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16493; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16494; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s716495; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s616496; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16497; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116498; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616499; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm16500;16501; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16502; GFX90A-TGSPLIT:       ; %bb.0: ; %entry16503; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016504; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016505; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816506; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16507; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16508; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s716509; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s616510; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16511; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116512; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616513; GFX90A-TGSPLIT-NEXT:    s_endpgm16514;16515; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16516; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry16517; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016518; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016519; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816520; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16521; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16522; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s316523; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s216524; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16525; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116526; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616527; GFX942-NOTTGSPLIT-NEXT:    s_endpgm16528;16529; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16530; GFX942-TGSPLIT:       ; %bb.0: ; %entry16531; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016532; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016533; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816534; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16535; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16536; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s316537; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s216538; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16539; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116540; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616541; GFX942-TGSPLIT-NEXT:    s_endpgm16542;16543; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16544; GFX11-WGP:       ; %bb.0: ; %entry16545; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 016546; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016547; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816548; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16549; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)16550; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s316551; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s216552; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16553; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v316554; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616555; GFX11-WGP-NEXT:    s_endpgm16556;16557; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16558; GFX11-CU:       ; %bb.0: ; %entry16559; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 016560; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016561; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816562; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16563; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)16564; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s316565; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s216566; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16567; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v316568; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616569; GFX11-CU-NEXT:    s_endpgm16570;16571; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16572; GFX12-WGP:       ; %bb.0: ; %entry16573; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 016574; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016575; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816576; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16577; GFX12-WGP-NEXT:    s_wait_kmcnt 0x016578; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s316579; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s216580; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16581; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v316582; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616583; GFX12-WGP-NEXT:    s_endpgm16584;16585; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16586; GFX12-CU:       ; %bb.0: ; %entry16587; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 016588; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016589; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816590; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16591; GFX12-CU-NEXT:    s_wait_kmcnt 0x016592; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s316593; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s216594; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16595; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v316596; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616597; GFX12-CU-NEXT:    s_endpgm16598;16599; GFX1250-LABEL: global_singlethread_one_as_acq_rel_seq_cst_cmpxchg:16600; GFX1250:       ; %bb.0: ; %entry16601; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 116602; GFX1250-NEXT:    v_mov_b32_e32 v0, 016603; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016604; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x816605; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc16606; GFX1250-NEXT:    s_wait_kmcnt 0x016607; GFX1250-NEXT:    v_mov_b32_e32 v2, s316608; GFX1250-NEXT:    v_mov_b32_e32 v1, s216609; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16610; GFX1250-NEXT:    v_mov_b32_e32 v3, v116611; GFX1250-NEXT:    s_wait_xcnt 0x016612; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1616613; GFX1250-NEXT:    s_endpgm16614    ptr addrspace(1) %out, i32 %in, i32 %old) {16615entry:16616  %gep = getelementptr i32, ptr addrspace(1) %out, i32 416617  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acq_rel seq_cst16618  ret void16619}16620 16621define amdgpu_kernel void @global_singlethread_one_as_seq_cst_seq_cst_cmpxchg(16622; GFX6-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16623; GFX6:       ; %bb.0: ; %entry16624; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]16625; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x016626; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x216627; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x316628; GFX6-NEXT:    s_waitcnt lgkmcnt(0)16629; GFX6-NEXT:    s_mov_b32 s12, s516630; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr516631; GFX6-NEXT:    s_mov_b32 s10, 0x100f00016632; GFX6-NEXT:    s_mov_b32 s11, -116633; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr716634; GFX6-NEXT:    s_mov_b32 s5, s1216635; GFX6-NEXT:    s_mov_b32 s6, s1116636; GFX6-NEXT:    s_mov_b32 s7, s1016637; GFX6-NEXT:    v_mov_b32_e32 v0, s916638; GFX6-NEXT:    v_mov_b32_e32 v2, s816639; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16640; GFX6-NEXT:    v_mov_b32_e32 v1, v216641; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:1616642; GFX6-NEXT:    s_endpgm16643;16644; GFX7-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16645; GFX7:       ; %bb.0: ; %entry16646; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1316647; GFX7-NEXT:    s_add_i32 s12, s12, s1716648; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 816649; GFX7-NEXT:    s_mov_b64 s[4:5], s[8:9]16650; GFX7-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x016651; GFX7-NEXT:    s_load_dword s7, s[4:5], 0x216652; GFX7-NEXT:    s_load_dword s6, s[4:5], 0x316653; GFX7-NEXT:    s_mov_b64 s[10:11], 1616654; GFX7-NEXT:    s_waitcnt lgkmcnt(0)16655; GFX7-NEXT:    s_mov_b32 s4, s816656; GFX7-NEXT:    s_mov_b32 s5, s916657; GFX7-NEXT:    s_mov_b32 s9, s1016658; GFX7-NEXT:    s_mov_b32 s8, s1116659; GFX7-NEXT:    s_add_u32 s4, s4, s916660; GFX7-NEXT:    s_addc_u32 s8, s5, s816661; GFX7-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr516662; GFX7-NEXT:    s_mov_b32 s5, s816663; GFX7-NEXT:    v_mov_b32_e32 v2, s716664; GFX7-NEXT:    v_mov_b32_e32 v0, s616665; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16666; GFX7-NEXT:    v_mov_b32_e32 v3, v016667; GFX7-NEXT:    v_mov_b32_e32 v0, s416668; GFX7-NEXT:    v_mov_b32_e32 v1, s516669; GFX7-NEXT:    flat_atomic_cmpswap v[0:1], v[2:3]16670; GFX7-NEXT:    s_endpgm16671;16672; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16673; GFX10-WGP:       ; %bb.0: ; %entry16674; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 016675; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016676; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x816677; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc16678; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)16679; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s716680; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s616681; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16682; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v316683; GFX10-WGP-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1616684; GFX10-WGP-NEXT:    s_endpgm16685;16686; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16687; GFX10-CU:       ; %bb.0: ; %entry16688; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 016689; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016690; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x816691; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc16692; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)16693; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s716694; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s616695; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16696; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v316697; GFX10-CU-NEXT:    global_atomic_cmpswap v0, v[1:2], s[4:5] offset:1616698; GFX10-CU-NEXT:    s_endpgm16699;16700; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16701; SKIP-CACHE-INV:       ; %bb.0: ; %entry16702; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]16703; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x016704; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x216705; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x316706; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)16707; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s116708; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr116709; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00016710; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -116711; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr316712; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s816713; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s716714; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s616715; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s516716; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s416717; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16718; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v216719; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:1616720; SKIP-CACHE-INV-NEXT:    s_endpgm16721;16722; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16723; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry16724; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016725; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016726; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816727; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16728; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16729; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s716730; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s616731; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16732; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116733; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616734; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm16735;16736; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16737; GFX90A-TGSPLIT:       ; %bb.0: ; %entry16738; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016739; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016740; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816741; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16742; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16743; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s716744; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s616745; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16746; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116747; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[4:5] offset:1616748; GFX90A-TGSPLIT-NEXT:    s_endpgm16749;16750; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16751; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry16752; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016753; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016754; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816755; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16756; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16757; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s316758; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s216759; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16760; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116761; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616762; GFX942-NOTTGSPLIT-NEXT:    s_endpgm16763;16764; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16765; GFX942-TGSPLIT:       ; %bb.0: ; %entry16766; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016767; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x016768; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x816769; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc16770; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16771; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s316772; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s216773; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16774; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116775; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v0, v[2:3], s[0:1] offset:1616776; GFX942-TGSPLIT-NEXT:    s_endpgm16777;16778; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16779; GFX11-WGP:       ; %bb.0: ; %entry16780; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 016781; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016782; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816783; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16784; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)16785; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s316786; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s216787; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16788; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v316789; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616790; GFX11-WGP-NEXT:    s_endpgm16791;16792; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16793; GFX11-CU:       ; %bb.0: ; %entry16794; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 016795; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016796; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816797; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16798; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)16799; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s316800; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s216801; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16802; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v316803; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616804; GFX11-CU-NEXT:    s_endpgm16805;16806; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16807; GFX12-WGP:       ; %bb.0: ; %entry16808; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 016809; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016810; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x816811; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc16812; GFX12-WGP-NEXT:    s_wait_kmcnt 0x016813; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s316814; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s216815; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16816; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v316817; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616818; GFX12-WGP-NEXT:    s_endpgm16819;16820; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16821; GFX12-CU:       ; %bb.0: ; %entry16822; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 016823; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016824; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x816825; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc16826; GFX12-CU-NEXT:    s_wait_kmcnt 0x016827; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s316828; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s216829; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16830; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v316831; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v0, v[1:2], s[0:1] offset:1616832; GFX12-CU-NEXT:    s_endpgm16833;16834; GFX1250-LABEL: global_singlethread_one_as_seq_cst_seq_cst_cmpxchg:16835; GFX1250:       ; %bb.0: ; %entry16836; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 116837; GFX1250-NEXT:    v_mov_b32_e32 v0, 016838; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x016839; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x816840; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc16841; GFX1250-NEXT:    s_wait_kmcnt 0x016842; GFX1250-NEXT:    v_mov_b32_e32 v2, s316843; GFX1250-NEXT:    v_mov_b32_e32 v1, s216844; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16845; GFX1250-NEXT:    v_mov_b32_e32 v3, v116846; GFX1250-NEXT:    s_wait_xcnt 0x016847; GFX1250-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[0:1] offset:1616848; GFX1250-NEXT:    s_endpgm16849    ptr addrspace(1) %out, i32 %in, i32 %old) {16850entry:16851  %gep = getelementptr i32, ptr addrspace(1) %out, i32 416852  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") seq_cst seq_cst16853  ret void16854}16855 16856define amdgpu_kernel void @global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg(16857; GFX6-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:16858; GFX6:       ; %bb.0: ; %entry16859; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]16860; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x016861; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x216862; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x316863; GFX6-NEXT:    s_waitcnt lgkmcnt(0)16864; GFX6-NEXT:    s_mov_b32 s12, s516865; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr516866; GFX6-NEXT:    s_mov_b32 s10, 0x100f00016867; GFX6-NEXT:    s_mov_b32 s11, -116868; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr716869; GFX6-NEXT:    s_mov_b32 s5, s1216870; GFX6-NEXT:    s_mov_b32 s6, s1116871; GFX6-NEXT:    s_mov_b32 s7, s1016872; GFX6-NEXT:    v_mov_b32_e32 v0, s916873; GFX6-NEXT:    v_mov_b32_e32 v2, s816874; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16875; GFX6-NEXT:    v_mov_b32_e32 v1, v216876; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc16877; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec16878; GFX6-NEXT:    s_waitcnt vmcnt(0)16879; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 016880; GFX6-NEXT:    s_endpgm16881;16882; GFX7-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:16883; GFX7:       ; %bb.0: ; %entry16884; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1316885; GFX7-NEXT:    s_add_i32 s12, s12, s1716886; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 816887; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]16888; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x016889; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x216890; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x316891; GFX7-NEXT:    s_mov_b64 s[12:13], 1616892; GFX7-NEXT:    s_waitcnt lgkmcnt(0)16893; GFX7-NEXT:    s_mov_b32 s6, s416894; GFX7-NEXT:    s_mov_b32 s7, s516895; GFX7-NEXT:    s_mov_b32 s11, s1216896; GFX7-NEXT:    s_mov_b32 s10, s1316897; GFX7-NEXT:    s_add_u32 s6, s6, s1116898; GFX7-NEXT:    s_addc_u32 s10, s7, s1016899; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr716900; GFX7-NEXT:    s_mov_b32 s7, s1016901; GFX7-NEXT:    v_mov_b32_e32 v2, s916902; GFX7-NEXT:    v_mov_b32_e32 v0, s816903; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16904; GFX7-NEXT:    v_mov_b32_e32 v3, v016905; GFX7-NEXT:    v_mov_b32_e32 v0, s616906; GFX7-NEXT:    v_mov_b32_e32 v1, s716907; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc16908; GFX7-NEXT:    v_mov_b32_e32 v0, s416909; GFX7-NEXT:    v_mov_b32_e32 v1, s516910; GFX7-NEXT:    s_waitcnt vmcnt(0)16911; GFX7-NEXT:    flat_store_dword v[0:1], v216912; GFX7-NEXT:    s_endpgm16913;16914; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:16915; GFX10-WGP:       ; %bb.0: ; %entry16916; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 016917; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016918; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x816919; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc16920; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)16921; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s716922; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s616923; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16924; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v316925; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc16926; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)16927; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]16928; GFX10-WGP-NEXT:    s_endpgm16929;16930; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:16931; GFX10-CU:       ; %bb.0: ; %entry16932; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 016933; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016934; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x816935; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc16936; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)16937; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s716938; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s616939; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec16940; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v316941; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc16942; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)16943; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]16944; GFX10-CU-NEXT:    s_endpgm16945;16946; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:16947; SKIP-CACHE-INV:       ; %bb.0: ; %entry16948; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]16949; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x016950; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x216951; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x316952; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)16953; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s116954; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr116955; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00016956; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -116957; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr316958; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s816959; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s716960; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s616961; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s516962; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s416963; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec16964; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v216965; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc16966; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec16967; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)16968; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 016969; SKIP-CACHE-INV-NEXT:    s_endpgm16970;16971; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:16972; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry16973; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 016974; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016975; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816976; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16977; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16978; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s716979; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s616980; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16981; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v116982; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc16983; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)16984; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]16985; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm16986;16987; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:16988; GFX90A-TGSPLIT:       ; %bb.0: ; %entry16989; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 016990; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x016991; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x816992; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc16993; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)16994; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s716995; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s616996; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec16997; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v116998; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc16999; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17000; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]17001; GFX90A-TGSPLIT-NEXT:    s_endpgm17002;17003; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:17004; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry17005; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 017006; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017007; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817008; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17009; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17010; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s317011; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s217012; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17013; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v117014; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017015; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)17016; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17017; GFX942-NOTTGSPLIT-NEXT:    s_endpgm17018;17019; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:17020; GFX942-TGSPLIT:       ; %bb.0: ; %entry17021; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 017022; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017023; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817024; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17025; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17026; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s317027; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s217028; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17029; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v117030; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017031; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17032; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17033; GFX942-TGSPLIT-NEXT:    s_endpgm17034;17035; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:17036; GFX11-WGP:       ; %bb.0: ; %entry17037; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 017038; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017039; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817040; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17041; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)17042; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s317043; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s217044; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17045; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v317046; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17047; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)17048; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17049; GFX11-WGP-NEXT:    s_endpgm17050;17051; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:17052; GFX11-CU:       ; %bb.0: ; %entry17053; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 017054; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017055; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817056; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17057; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)17058; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s317059; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s217060; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17061; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v317062; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17063; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)17064; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17065; GFX11-CU-NEXT:    s_endpgm17066;17067; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:17068; GFX12-WGP:       ; %bb.0: ; %entry17069; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 017070; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017071; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817072; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17073; GFX12-WGP-NEXT:    s_wait_kmcnt 0x017074; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s317075; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s217076; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17077; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v317078; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17079; GFX12-WGP-NEXT:    s_wait_loadcnt 0x017080; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17081; GFX12-WGP-NEXT:    s_endpgm17082;17083; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:17084; GFX12-CU:       ; %bb.0: ; %entry17085; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 017086; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017087; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817088; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17089; GFX12-CU-NEXT:    s_wait_kmcnt 0x017090; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s317091; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s217092; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17093; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v317094; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17095; GFX12-CU-NEXT:    s_wait_loadcnt 0x017096; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17097; GFX12-CU-NEXT:    s_endpgm17098;17099; GFX1250-LABEL: global_singlethread_one_as_monotonic_monotonic_ret_cmpxchg:17100; GFX1250:       ; %bb.0: ; %entry17101; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 117102; GFX1250-NEXT:    v_mov_b32_e32 v0, 017103; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017104; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x817105; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc17106; GFX1250-NEXT:    s_wait_kmcnt 0x017107; GFX1250-NEXT:    v_mov_b32_e32 v2, s317108; GFX1250-NEXT:    v_mov_b32_e32 v1, s217109; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17110; GFX1250-NEXT:    v_mov_b32_e32 v3, v117111; GFX1250-NEXT:    s_wait_xcnt 0x017112; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN17113; GFX1250-NEXT:    s_wait_loadcnt 0x017114; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]17115; GFX1250-NEXT:    s_endpgm17116    ptr addrspace(1) %out, i32 %in, i32 %old) {17117entry:17118  %gep = getelementptr i32, ptr addrspace(1) %out, i32 417119  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") monotonic monotonic17120  %val0 = extractvalue { i32, i1 } %val, 017121  store i32 %val0, ptr addrspace(1) %out, align 417122  ret void17123}17124 17125define amdgpu_kernel void @global_singlethread_one_as_acquire_monotonic_ret_cmpxchg(17126; GFX6-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17127; GFX6:       ; %bb.0: ; %entry17128; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]17129; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017130; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x217131; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x317132; GFX6-NEXT:    s_waitcnt lgkmcnt(0)17133; GFX6-NEXT:    s_mov_b32 s12, s517134; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr517135; GFX6-NEXT:    s_mov_b32 s10, 0x100f00017136; GFX6-NEXT:    s_mov_b32 s11, -117137; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr717138; GFX6-NEXT:    s_mov_b32 s5, s1217139; GFX6-NEXT:    s_mov_b32 s6, s1117140; GFX6-NEXT:    s_mov_b32 s7, s1017141; GFX6-NEXT:    v_mov_b32_e32 v0, s917142; GFX6-NEXT:    v_mov_b32_e32 v2, s817143; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec17144; GFX6-NEXT:    v_mov_b32_e32 v1, v217145; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc17146; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec17147; GFX6-NEXT:    s_waitcnt vmcnt(0)17148; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 017149; GFX6-NEXT:    s_endpgm17150;17151; GFX7-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17152; GFX7:       ; %bb.0: ; %entry17153; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1317154; GFX7-NEXT:    s_add_i32 s12, s12, s1717155; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 817156; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]17157; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017158; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x217159; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x317160; GFX7-NEXT:    s_mov_b64 s[12:13], 1617161; GFX7-NEXT:    s_waitcnt lgkmcnt(0)17162; GFX7-NEXT:    s_mov_b32 s6, s417163; GFX7-NEXT:    s_mov_b32 s7, s517164; GFX7-NEXT:    s_mov_b32 s11, s1217165; GFX7-NEXT:    s_mov_b32 s10, s1317166; GFX7-NEXT:    s_add_u32 s6, s6, s1117167; GFX7-NEXT:    s_addc_u32 s10, s7, s1017168; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr717169; GFX7-NEXT:    s_mov_b32 s7, s1017170; GFX7-NEXT:    v_mov_b32_e32 v2, s917171; GFX7-NEXT:    v_mov_b32_e32 v0, s817172; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17173; GFX7-NEXT:    v_mov_b32_e32 v3, v017174; GFX7-NEXT:    v_mov_b32_e32 v0, s617175; GFX7-NEXT:    v_mov_b32_e32 v1, s717176; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc17177; GFX7-NEXT:    v_mov_b32_e32 v0, s417178; GFX7-NEXT:    v_mov_b32_e32 v1, s517179; GFX7-NEXT:    s_waitcnt vmcnt(0)17180; GFX7-NEXT:    flat_store_dword v[0:1], v217181; GFX7-NEXT:    s_endpgm17182;17183; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17184; GFX10-WGP:       ; %bb.0: ; %entry17185; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 017186; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017187; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x817188; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc17189; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)17190; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s717191; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s617192; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17193; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v317194; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc17195; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)17196; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]17197; GFX10-WGP-NEXT:    s_endpgm17198;17199; GFX10-CU-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17200; GFX10-CU:       ; %bb.0: ; %entry17201; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 017202; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017203; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x817204; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc17205; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)17206; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s717207; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s617208; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17209; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v317210; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc17211; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)17212; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]17213; GFX10-CU-NEXT:    s_endpgm17214;17215; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17216; SKIP-CACHE-INV:       ; %bb.0: ; %entry17217; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]17218; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x017219; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x217220; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x317221; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)17222; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s117223; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr117224; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00017225; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -117226; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr317227; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s817228; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s717229; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s617230; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s517231; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s417232; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec17233; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v217234; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc17235; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec17236; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)17237; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 017238; SKIP-CACHE-INV-NEXT:    s_endpgm17239;17240; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17241; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry17242; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 017243; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017244; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x817245; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc17246; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17247; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s717248; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s617249; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17250; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v117251; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc17252; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)17253; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]17254; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm17255;17256; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17257; GFX90A-TGSPLIT:       ; %bb.0: ; %entry17258; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 017259; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017260; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x817261; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc17262; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17263; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s717264; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s617265; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17266; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v117267; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc17268; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17269; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]17270; GFX90A-TGSPLIT-NEXT:    s_endpgm17271;17272; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17273; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry17274; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 017275; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017276; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817277; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17278; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17279; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s317280; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s217281; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17282; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v117283; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017284; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)17285; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17286; GFX942-NOTTGSPLIT-NEXT:    s_endpgm17287;17288; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17289; GFX942-TGSPLIT:       ; %bb.0: ; %entry17290; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 017291; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017292; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817293; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17294; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17295; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s317296; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s217297; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17298; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v117299; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017300; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17301; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17302; GFX942-TGSPLIT-NEXT:    s_endpgm17303;17304; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17305; GFX11-WGP:       ; %bb.0: ; %entry17306; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 017307; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017308; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817309; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17310; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)17311; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s317312; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s217313; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17314; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v317315; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17316; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)17317; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17318; GFX11-WGP-NEXT:    s_endpgm17319;17320; GFX11-CU-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17321; GFX11-CU:       ; %bb.0: ; %entry17322; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 017323; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017324; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817325; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17326; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)17327; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s317328; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s217329; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17330; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v317331; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17332; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)17333; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17334; GFX11-CU-NEXT:    s_endpgm17335;17336; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17337; GFX12-WGP:       ; %bb.0: ; %entry17338; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 017339; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017340; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817341; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17342; GFX12-WGP-NEXT:    s_wait_kmcnt 0x017343; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s317344; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s217345; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17346; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v317347; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17348; GFX12-WGP-NEXT:    s_wait_loadcnt 0x017349; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17350; GFX12-WGP-NEXT:    s_endpgm17351;17352; GFX12-CU-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17353; GFX12-CU:       ; %bb.0: ; %entry17354; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 017355; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017356; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817357; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17358; GFX12-CU-NEXT:    s_wait_kmcnt 0x017359; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s317360; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s217361; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17362; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v317363; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17364; GFX12-CU-NEXT:    s_wait_loadcnt 0x017365; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17366; GFX12-CU-NEXT:    s_endpgm17367;17368; GFX1250-LABEL: global_singlethread_one_as_acquire_monotonic_ret_cmpxchg:17369; GFX1250:       ; %bb.0: ; %entry17370; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 117371; GFX1250-NEXT:    v_mov_b32_e32 v0, 017372; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017373; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x817374; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc17375; GFX1250-NEXT:    s_wait_kmcnt 0x017376; GFX1250-NEXT:    v_mov_b32_e32 v2, s317377; GFX1250-NEXT:    v_mov_b32_e32 v1, s217378; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17379; GFX1250-NEXT:    v_mov_b32_e32 v3, v117380; GFX1250-NEXT:    s_wait_xcnt 0x017381; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN17382; GFX1250-NEXT:    s_wait_loadcnt 0x017383; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]17384; GFX1250-NEXT:    s_endpgm17385    ptr addrspace(1) %out, i32 %in, i32 %old) {17386entry:17387  %gep = getelementptr i32, ptr addrspace(1) %out, i32 417388  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acquire monotonic17389  %val0 = extractvalue { i32, i1 } %val, 017390  store i32 %val0, ptr addrspace(1) %out, align 417391  ret void17392}17393 17394define amdgpu_kernel void @global_singlethread_one_as_release_monotonic_ret_cmpxchg(17395; GFX6-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17396; GFX6:       ; %bb.0: ; %entry17397; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]17398; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017399; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x217400; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x317401; GFX6-NEXT:    s_waitcnt lgkmcnt(0)17402; GFX6-NEXT:    s_mov_b32 s12, s517403; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr517404; GFX6-NEXT:    s_mov_b32 s10, 0x100f00017405; GFX6-NEXT:    s_mov_b32 s11, -117406; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr717407; GFX6-NEXT:    s_mov_b32 s5, s1217408; GFX6-NEXT:    s_mov_b32 s6, s1117409; GFX6-NEXT:    s_mov_b32 s7, s1017410; GFX6-NEXT:    v_mov_b32_e32 v0, s917411; GFX6-NEXT:    v_mov_b32_e32 v2, s817412; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec17413; GFX6-NEXT:    v_mov_b32_e32 v1, v217414; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc17415; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec17416; GFX6-NEXT:    s_waitcnt vmcnt(0)17417; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 017418; GFX6-NEXT:    s_endpgm17419;17420; GFX7-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17421; GFX7:       ; %bb.0: ; %entry17422; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1317423; GFX7-NEXT:    s_add_i32 s12, s12, s1717424; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 817425; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]17426; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017427; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x217428; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x317429; GFX7-NEXT:    s_mov_b64 s[12:13], 1617430; GFX7-NEXT:    s_waitcnt lgkmcnt(0)17431; GFX7-NEXT:    s_mov_b32 s6, s417432; GFX7-NEXT:    s_mov_b32 s7, s517433; GFX7-NEXT:    s_mov_b32 s11, s1217434; GFX7-NEXT:    s_mov_b32 s10, s1317435; GFX7-NEXT:    s_add_u32 s6, s6, s1117436; GFX7-NEXT:    s_addc_u32 s10, s7, s1017437; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr717438; GFX7-NEXT:    s_mov_b32 s7, s1017439; GFX7-NEXT:    v_mov_b32_e32 v2, s917440; GFX7-NEXT:    v_mov_b32_e32 v0, s817441; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17442; GFX7-NEXT:    v_mov_b32_e32 v3, v017443; GFX7-NEXT:    v_mov_b32_e32 v0, s617444; GFX7-NEXT:    v_mov_b32_e32 v1, s717445; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc17446; GFX7-NEXT:    v_mov_b32_e32 v0, s417447; GFX7-NEXT:    v_mov_b32_e32 v1, s517448; GFX7-NEXT:    s_waitcnt vmcnt(0)17449; GFX7-NEXT:    flat_store_dword v[0:1], v217450; GFX7-NEXT:    s_endpgm17451;17452; GFX10-WGP-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17453; GFX10-WGP:       ; %bb.0: ; %entry17454; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 017455; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017456; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x817457; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc17458; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)17459; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s717460; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s617461; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17462; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v317463; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc17464; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)17465; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]17466; GFX10-WGP-NEXT:    s_endpgm17467;17468; GFX10-CU-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17469; GFX10-CU:       ; %bb.0: ; %entry17470; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 017471; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017472; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x817473; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc17474; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)17475; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s717476; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s617477; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17478; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v317479; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc17480; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)17481; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]17482; GFX10-CU-NEXT:    s_endpgm17483;17484; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17485; SKIP-CACHE-INV:       ; %bb.0: ; %entry17486; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]17487; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x017488; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x217489; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x317490; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)17491; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s117492; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr117493; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00017494; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -117495; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr317496; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s817497; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s717498; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s617499; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s517500; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s417501; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec17502; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v217503; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc17504; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec17505; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)17506; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 017507; SKIP-CACHE-INV-NEXT:    s_endpgm17508;17509; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17510; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry17511; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 017512; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017513; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x817514; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc17515; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17516; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s717517; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s617518; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17519; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v117520; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc17521; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)17522; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]17523; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm17524;17525; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17526; GFX90A-TGSPLIT:       ; %bb.0: ; %entry17527; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 017528; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017529; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x817530; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc17531; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17532; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s717533; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s617534; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17535; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v117536; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc17537; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17538; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]17539; GFX90A-TGSPLIT-NEXT:    s_endpgm17540;17541; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17542; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry17543; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 017544; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017545; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817546; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17547; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17548; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s317549; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s217550; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17551; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v117552; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017553; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)17554; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17555; GFX942-NOTTGSPLIT-NEXT:    s_endpgm17556;17557; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17558; GFX942-TGSPLIT:       ; %bb.0: ; %entry17559; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 017560; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017561; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817562; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17563; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17564; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s317565; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s217566; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17567; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v117568; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017569; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17570; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17571; GFX942-TGSPLIT-NEXT:    s_endpgm17572;17573; GFX11-WGP-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17574; GFX11-WGP:       ; %bb.0: ; %entry17575; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 017576; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017577; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817578; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17579; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)17580; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s317581; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s217582; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17583; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v317584; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17585; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)17586; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17587; GFX11-WGP-NEXT:    s_endpgm17588;17589; GFX11-CU-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17590; GFX11-CU:       ; %bb.0: ; %entry17591; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 017592; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017593; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817594; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17595; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)17596; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s317597; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s217598; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17599; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v317600; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17601; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)17602; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17603; GFX11-CU-NEXT:    s_endpgm17604;17605; GFX12-WGP-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17606; GFX12-WGP:       ; %bb.0: ; %entry17607; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 017608; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017609; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817610; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17611; GFX12-WGP-NEXT:    s_wait_kmcnt 0x017612; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s317613; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s217614; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17615; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v317616; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17617; GFX12-WGP-NEXT:    s_wait_loadcnt 0x017618; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17619; GFX12-WGP-NEXT:    s_endpgm17620;17621; GFX12-CU-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17622; GFX12-CU:       ; %bb.0: ; %entry17623; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 017624; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017625; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817626; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17627; GFX12-CU-NEXT:    s_wait_kmcnt 0x017628; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s317629; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s217630; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17631; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v317632; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17633; GFX12-CU-NEXT:    s_wait_loadcnt 0x017634; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17635; GFX12-CU-NEXT:    s_endpgm17636;17637; GFX1250-LABEL: global_singlethread_one_as_release_monotonic_ret_cmpxchg:17638; GFX1250:       ; %bb.0: ; %entry17639; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 117640; GFX1250-NEXT:    v_mov_b32_e32 v0, 017641; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017642; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x817643; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc17644; GFX1250-NEXT:    s_wait_kmcnt 0x017645; GFX1250-NEXT:    v_mov_b32_e32 v2, s317646; GFX1250-NEXT:    v_mov_b32_e32 v1, s217647; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17648; GFX1250-NEXT:    v_mov_b32_e32 v3, v117649; GFX1250-NEXT:    s_wait_xcnt 0x017650; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN17651; GFX1250-NEXT:    s_wait_loadcnt 0x017652; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]17653; GFX1250-NEXT:    s_endpgm17654    ptr addrspace(1) %out, i32 %in, i32 %old) {17655entry:17656  %gep = getelementptr i32, ptr addrspace(1) %out, i32 417657  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") release monotonic17658  %val0 = extractvalue { i32, i1 } %val, 017659  store i32 %val0, ptr addrspace(1) %out, align 417660  ret void17661}17662 17663define amdgpu_kernel void @global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg(17664; GFX6-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17665; GFX6:       ; %bb.0: ; %entry17666; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]17667; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017668; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x217669; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x317670; GFX6-NEXT:    s_waitcnt lgkmcnt(0)17671; GFX6-NEXT:    s_mov_b32 s12, s517672; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr517673; GFX6-NEXT:    s_mov_b32 s10, 0x100f00017674; GFX6-NEXT:    s_mov_b32 s11, -117675; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr717676; GFX6-NEXT:    s_mov_b32 s5, s1217677; GFX6-NEXT:    s_mov_b32 s6, s1117678; GFX6-NEXT:    s_mov_b32 s7, s1017679; GFX6-NEXT:    v_mov_b32_e32 v0, s917680; GFX6-NEXT:    v_mov_b32_e32 v2, s817681; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec17682; GFX6-NEXT:    v_mov_b32_e32 v1, v217683; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc17684; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec17685; GFX6-NEXT:    s_waitcnt vmcnt(0)17686; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 017687; GFX6-NEXT:    s_endpgm17688;17689; GFX7-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17690; GFX7:       ; %bb.0: ; %entry17691; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1317692; GFX7-NEXT:    s_add_i32 s12, s12, s1717693; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 817694; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]17695; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017696; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x217697; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x317698; GFX7-NEXT:    s_mov_b64 s[12:13], 1617699; GFX7-NEXT:    s_waitcnt lgkmcnt(0)17700; GFX7-NEXT:    s_mov_b32 s6, s417701; GFX7-NEXT:    s_mov_b32 s7, s517702; GFX7-NEXT:    s_mov_b32 s11, s1217703; GFX7-NEXT:    s_mov_b32 s10, s1317704; GFX7-NEXT:    s_add_u32 s6, s6, s1117705; GFX7-NEXT:    s_addc_u32 s10, s7, s1017706; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr717707; GFX7-NEXT:    s_mov_b32 s7, s1017708; GFX7-NEXT:    v_mov_b32_e32 v2, s917709; GFX7-NEXT:    v_mov_b32_e32 v0, s817710; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17711; GFX7-NEXT:    v_mov_b32_e32 v3, v017712; GFX7-NEXT:    v_mov_b32_e32 v0, s617713; GFX7-NEXT:    v_mov_b32_e32 v1, s717714; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc17715; GFX7-NEXT:    v_mov_b32_e32 v0, s417716; GFX7-NEXT:    v_mov_b32_e32 v1, s517717; GFX7-NEXT:    s_waitcnt vmcnt(0)17718; GFX7-NEXT:    flat_store_dword v[0:1], v217719; GFX7-NEXT:    s_endpgm17720;17721; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17722; GFX10-WGP:       ; %bb.0: ; %entry17723; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 017724; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017725; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x817726; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc17727; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)17728; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s717729; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s617730; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17731; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v317732; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc17733; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)17734; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]17735; GFX10-WGP-NEXT:    s_endpgm17736;17737; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17738; GFX10-CU:       ; %bb.0: ; %entry17739; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 017740; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017741; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x817742; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc17743; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)17744; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s717745; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s617746; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17747; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v317748; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc17749; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)17750; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]17751; GFX10-CU-NEXT:    s_endpgm17752;17753; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17754; SKIP-CACHE-INV:       ; %bb.0: ; %entry17755; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]17756; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x017757; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x217758; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x317759; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)17760; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s117761; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr117762; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00017763; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -117764; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr317765; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s817766; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s717767; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s617768; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s517769; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s417770; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec17771; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v217772; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc17773; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec17774; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)17775; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 017776; SKIP-CACHE-INV-NEXT:    s_endpgm17777;17778; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17779; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry17780; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 017781; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017782; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x817783; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc17784; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17785; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s717786; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s617787; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17788; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v117789; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc17790; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)17791; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]17792; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm17793;17794; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17795; GFX90A-TGSPLIT:       ; %bb.0: ; %entry17796; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 017797; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017798; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x817799; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc17800; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17801; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s717802; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s617803; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17804; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v117805; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc17806; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17807; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]17808; GFX90A-TGSPLIT-NEXT:    s_endpgm17809;17810; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17811; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry17812; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 017813; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017814; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817815; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17816; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17817; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s317818; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s217819; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17820; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v117821; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017822; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)17823; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17824; GFX942-NOTTGSPLIT-NEXT:    s_endpgm17825;17826; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17827; GFX942-TGSPLIT:       ; %bb.0: ; %entry17828; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 017829; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x017830; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x817831; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc17832; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)17833; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s317834; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s217835; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17836; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v117837; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc017838; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)17839; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]17840; GFX942-TGSPLIT-NEXT:    s_endpgm17841;17842; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17843; GFX11-WGP:       ; %bb.0: ; %entry17844; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 017845; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017846; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817847; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17848; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)17849; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s317850; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s217851; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17852; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v317853; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17854; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)17855; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17856; GFX11-WGP-NEXT:    s_endpgm17857;17858; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17859; GFX11-CU:       ; %bb.0: ; %entry17860; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 017861; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017862; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817863; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17864; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)17865; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s317866; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s217867; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17868; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v317869; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc17870; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)17871; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17872; GFX11-CU-NEXT:    s_endpgm17873;17874; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17875; GFX12-WGP:       ; %bb.0: ; %entry17876; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 017877; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017878; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x817879; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc17880; GFX12-WGP-NEXT:    s_wait_kmcnt 0x017881; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s317882; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s217883; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17884; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v317885; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17886; GFX12-WGP-NEXT:    s_wait_loadcnt 0x017887; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]17888; GFX12-WGP-NEXT:    s_endpgm17889;17890; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17891; GFX12-CU:       ; %bb.0: ; %entry17892; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 017893; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017894; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x817895; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc17896; GFX12-CU-NEXT:    s_wait_kmcnt 0x017897; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s317898; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s217899; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec17900; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v317901; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN17902; GFX12-CU-NEXT:    s_wait_loadcnt 0x017903; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]17904; GFX12-CU-NEXT:    s_endpgm17905;17906; GFX1250-LABEL: global_singlethread_one_as_acq_rel_monotonic_ret_cmpxchg:17907; GFX1250:       ; %bb.0: ; %entry17908; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 117909; GFX1250-NEXT:    v_mov_b32_e32 v0, 017910; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x017911; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x817912; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc17913; GFX1250-NEXT:    s_wait_kmcnt 0x017914; GFX1250-NEXT:    v_mov_b32_e32 v2, s317915; GFX1250-NEXT:    v_mov_b32_e32 v1, s217916; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17917; GFX1250-NEXT:    v_mov_b32_e32 v3, v117918; GFX1250-NEXT:    s_wait_xcnt 0x017919; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN17920; GFX1250-NEXT:    s_wait_loadcnt 0x017921; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]17922; GFX1250-NEXT:    s_endpgm17923    ptr addrspace(1) %out, i32 %in, i32 %old) {17924entry:17925  %gep = getelementptr i32, ptr addrspace(1) %out, i32 417926  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acq_rel monotonic17927  %val0 = extractvalue { i32, i1 } %val, 017928  store i32 %val0, ptr addrspace(1) %out, align 417929  ret void17930}17931 17932define amdgpu_kernel void @global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg(17933; GFX6-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:17934; GFX6:       ; %bb.0: ; %entry17935; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]17936; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017937; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x217938; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x317939; GFX6-NEXT:    s_waitcnt lgkmcnt(0)17940; GFX6-NEXT:    s_mov_b32 s12, s517941; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr517942; GFX6-NEXT:    s_mov_b32 s10, 0x100f00017943; GFX6-NEXT:    s_mov_b32 s11, -117944; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr717945; GFX6-NEXT:    s_mov_b32 s5, s1217946; GFX6-NEXT:    s_mov_b32 s6, s1117947; GFX6-NEXT:    s_mov_b32 s7, s1017948; GFX6-NEXT:    v_mov_b32_e32 v0, s917949; GFX6-NEXT:    v_mov_b32_e32 v2, s817950; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec17951; GFX6-NEXT:    v_mov_b32_e32 v1, v217952; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc17953; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec17954; GFX6-NEXT:    s_waitcnt vmcnt(0)17955; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 017956; GFX6-NEXT:    s_endpgm17957;17958; GFX7-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:17959; GFX7:       ; %bb.0: ; %entry17960; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1317961; GFX7-NEXT:    s_add_i32 s12, s12, s1717962; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 817963; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]17964; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x017965; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x217966; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x317967; GFX7-NEXT:    s_mov_b64 s[12:13], 1617968; GFX7-NEXT:    s_waitcnt lgkmcnt(0)17969; GFX7-NEXT:    s_mov_b32 s6, s417970; GFX7-NEXT:    s_mov_b32 s7, s517971; GFX7-NEXT:    s_mov_b32 s11, s1217972; GFX7-NEXT:    s_mov_b32 s10, s1317973; GFX7-NEXT:    s_add_u32 s6, s6, s1117974; GFX7-NEXT:    s_addc_u32 s10, s7, s1017975; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr717976; GFX7-NEXT:    s_mov_b32 s7, s1017977; GFX7-NEXT:    v_mov_b32_e32 v2, s917978; GFX7-NEXT:    v_mov_b32_e32 v0, s817979; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec17980; GFX7-NEXT:    v_mov_b32_e32 v3, v017981; GFX7-NEXT:    v_mov_b32_e32 v0, s617982; GFX7-NEXT:    v_mov_b32_e32 v1, s717983; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc17984; GFX7-NEXT:    v_mov_b32_e32 v0, s417985; GFX7-NEXT:    v_mov_b32_e32 v1, s517986; GFX7-NEXT:    s_waitcnt vmcnt(0)17987; GFX7-NEXT:    flat_store_dword v[0:1], v217988; GFX7-NEXT:    s_endpgm17989;17990; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:17991; GFX10-WGP:       ; %bb.0: ; %entry17992; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 017993; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x017994; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x817995; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc17996; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)17997; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s717998; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s617999; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18000; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v318001; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18002; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)18003; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]18004; GFX10-WGP-NEXT:    s_endpgm18005;18006; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18007; GFX10-CU:       ; %bb.0: ; %entry18008; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 018009; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018010; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x818011; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc18012; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)18013; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s718014; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s618015; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18016; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v318017; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18018; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)18019; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]18020; GFX10-CU-NEXT:    s_endpgm18021;18022; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18023; SKIP-CACHE-INV:       ; %bb.0: ; %entry18024; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]18025; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x018026; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x218027; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x318028; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)18029; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s118030; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr118031; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00018032; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -118033; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr318034; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s818035; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s718036; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s618037; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s518038; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s418039; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec18040; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v218041; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc18042; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec18043; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)18044; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 018045; SKIP-CACHE-INV-NEXT:    s_endpgm18046;18047; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18048; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry18049; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018050; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018051; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818052; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18053; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18054; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s718055; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s618056; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18057; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118058; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18059; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18060; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18061; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm18062;18063; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18064; GFX90A-TGSPLIT:       ; %bb.0: ; %entry18065; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018066; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018067; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818068; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18069; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18070; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s718071; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s618072; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18073; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118074; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18075; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18076; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18077; GFX90A-TGSPLIT-NEXT:    s_endpgm18078;18079; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18080; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry18081; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018082; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018083; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818084; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18085; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18086; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s318087; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s218088; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18089; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118090; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018091; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18092; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18093; GFX942-NOTTGSPLIT-NEXT:    s_endpgm18094;18095; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18096; GFX942-TGSPLIT:       ; %bb.0: ; %entry18097; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018098; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018099; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818100; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18101; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18102; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s318103; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s218104; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18105; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118106; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018107; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18108; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18109; GFX942-TGSPLIT-NEXT:    s_endpgm18110;18111; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18112; GFX11-WGP:       ; %bb.0: ; %entry18113; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 018114; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018115; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818116; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18117; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)18118; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s318119; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s218120; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18121; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v318122; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18123; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)18124; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18125; GFX11-WGP-NEXT:    s_endpgm18126;18127; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18128; GFX11-CU:       ; %bb.0: ; %entry18129; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 018130; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018131; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818132; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18133; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)18134; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s318135; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s218136; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18137; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v318138; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18139; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)18140; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18141; GFX11-CU-NEXT:    s_endpgm18142;18143; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18144; GFX12-WGP:       ; %bb.0: ; %entry18145; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 018146; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018147; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818148; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18149; GFX12-WGP-NEXT:    s_wait_kmcnt 0x018150; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s318151; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s218152; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18153; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v318154; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18155; GFX12-WGP-NEXT:    s_wait_loadcnt 0x018156; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18157; GFX12-WGP-NEXT:    s_endpgm18158;18159; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18160; GFX12-CU:       ; %bb.0: ; %entry18161; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 018162; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018163; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818164; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18165; GFX12-CU-NEXT:    s_wait_kmcnt 0x018166; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s318167; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s218168; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18169; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v318170; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18171; GFX12-CU-NEXT:    s_wait_loadcnt 0x018172; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18173; GFX12-CU-NEXT:    s_endpgm18174;18175; GFX1250-LABEL: global_singlethread_one_as_seq_cst_monotonic_ret_cmpxchg:18176; GFX1250:       ; %bb.0: ; %entry18177; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 118178; GFX1250-NEXT:    v_mov_b32_e32 v0, 018179; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018180; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x818181; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc18182; GFX1250-NEXT:    s_wait_kmcnt 0x018183; GFX1250-NEXT:    v_mov_b32_e32 v2, s318184; GFX1250-NEXT:    v_mov_b32_e32 v1, s218185; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18186; GFX1250-NEXT:    v_mov_b32_e32 v3, v118187; GFX1250-NEXT:    s_wait_xcnt 0x018188; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN18189; GFX1250-NEXT:    s_wait_loadcnt 0x018190; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]18191; GFX1250-NEXT:    s_endpgm18192    ptr addrspace(1) %out, i32 %in, i32 %old) {18193entry:18194  %gep = getelementptr i32, ptr addrspace(1) %out, i32 418195  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") seq_cst monotonic18196  %val0 = extractvalue { i32, i1 } %val, 018197  store i32 %val0, ptr addrspace(1) %out, align 418198  ret void18199}18200 18201define amdgpu_kernel void @global_singlethread_one_as_monotonic_acquire_ret_cmpxchg(18202; GFX6-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18203; GFX6:       ; %bb.0: ; %entry18204; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]18205; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x018206; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x218207; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x318208; GFX6-NEXT:    s_waitcnt lgkmcnt(0)18209; GFX6-NEXT:    s_mov_b32 s12, s518210; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr518211; GFX6-NEXT:    s_mov_b32 s10, 0x100f00018212; GFX6-NEXT:    s_mov_b32 s11, -118213; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr718214; GFX6-NEXT:    s_mov_b32 s5, s1218215; GFX6-NEXT:    s_mov_b32 s6, s1118216; GFX6-NEXT:    s_mov_b32 s7, s1018217; GFX6-NEXT:    v_mov_b32_e32 v0, s918218; GFX6-NEXT:    v_mov_b32_e32 v2, s818219; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec18220; GFX6-NEXT:    v_mov_b32_e32 v1, v218221; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc18222; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec18223; GFX6-NEXT:    s_waitcnt vmcnt(0)18224; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 018225; GFX6-NEXT:    s_endpgm18226;18227; GFX7-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18228; GFX7:       ; %bb.0: ; %entry18229; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1318230; GFX7-NEXT:    s_add_i32 s12, s12, s1718231; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 818232; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]18233; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x018234; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x218235; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x318236; GFX7-NEXT:    s_mov_b64 s[12:13], 1618237; GFX7-NEXT:    s_waitcnt lgkmcnt(0)18238; GFX7-NEXT:    s_mov_b32 s6, s418239; GFX7-NEXT:    s_mov_b32 s7, s518240; GFX7-NEXT:    s_mov_b32 s11, s1218241; GFX7-NEXT:    s_mov_b32 s10, s1318242; GFX7-NEXT:    s_add_u32 s6, s6, s1118243; GFX7-NEXT:    s_addc_u32 s10, s7, s1018244; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr718245; GFX7-NEXT:    s_mov_b32 s7, s1018246; GFX7-NEXT:    v_mov_b32_e32 v2, s918247; GFX7-NEXT:    v_mov_b32_e32 v0, s818248; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18249; GFX7-NEXT:    v_mov_b32_e32 v3, v018250; GFX7-NEXT:    v_mov_b32_e32 v0, s618251; GFX7-NEXT:    v_mov_b32_e32 v1, s718252; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc18253; GFX7-NEXT:    v_mov_b32_e32 v0, s418254; GFX7-NEXT:    v_mov_b32_e32 v1, s518255; GFX7-NEXT:    s_waitcnt vmcnt(0)18256; GFX7-NEXT:    flat_store_dword v[0:1], v218257; GFX7-NEXT:    s_endpgm18258;18259; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18260; GFX10-WGP:       ; %bb.0: ; %entry18261; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 018262; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018263; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x818264; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc18265; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)18266; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s718267; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s618268; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18269; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v318270; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18271; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)18272; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]18273; GFX10-WGP-NEXT:    s_endpgm18274;18275; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18276; GFX10-CU:       ; %bb.0: ; %entry18277; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 018278; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018279; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x818280; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc18281; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)18282; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s718283; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s618284; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18285; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v318286; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18287; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)18288; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]18289; GFX10-CU-NEXT:    s_endpgm18290;18291; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18292; SKIP-CACHE-INV:       ; %bb.0: ; %entry18293; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]18294; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x018295; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x218296; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x318297; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)18298; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s118299; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr118300; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00018301; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -118302; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr318303; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s818304; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s718305; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s618306; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s518307; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s418308; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec18309; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v218310; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc18311; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec18312; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)18313; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 018314; SKIP-CACHE-INV-NEXT:    s_endpgm18315;18316; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18317; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry18318; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018319; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018320; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818321; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18322; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18323; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s718324; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s618325; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18326; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118327; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18328; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18329; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18330; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm18331;18332; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18333; GFX90A-TGSPLIT:       ; %bb.0: ; %entry18334; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018335; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018336; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818337; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18338; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18339; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s718340; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s618341; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18342; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118343; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18344; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18345; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18346; GFX90A-TGSPLIT-NEXT:    s_endpgm18347;18348; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18349; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry18350; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018351; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018352; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818353; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18354; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18355; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s318356; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s218357; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18358; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118359; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018360; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18361; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18362; GFX942-NOTTGSPLIT-NEXT:    s_endpgm18363;18364; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18365; GFX942-TGSPLIT:       ; %bb.0: ; %entry18366; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018367; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018368; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818369; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18370; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18371; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s318372; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s218373; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18374; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118375; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018376; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18377; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18378; GFX942-TGSPLIT-NEXT:    s_endpgm18379;18380; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18381; GFX11-WGP:       ; %bb.0: ; %entry18382; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 018383; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018384; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818385; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18386; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)18387; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s318388; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s218389; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18390; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v318391; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18392; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)18393; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18394; GFX11-WGP-NEXT:    s_endpgm18395;18396; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18397; GFX11-CU:       ; %bb.0: ; %entry18398; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 018399; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018400; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818401; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18402; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)18403; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s318404; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s218405; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18406; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v318407; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18408; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)18409; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18410; GFX11-CU-NEXT:    s_endpgm18411;18412; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18413; GFX12-WGP:       ; %bb.0: ; %entry18414; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 018415; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018416; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818417; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18418; GFX12-WGP-NEXT:    s_wait_kmcnt 0x018419; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s318420; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s218421; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18422; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v318423; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18424; GFX12-WGP-NEXT:    s_wait_loadcnt 0x018425; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18426; GFX12-WGP-NEXT:    s_endpgm18427;18428; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18429; GFX12-CU:       ; %bb.0: ; %entry18430; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 018431; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018432; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818433; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18434; GFX12-CU-NEXT:    s_wait_kmcnt 0x018435; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s318436; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s218437; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18438; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v318439; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18440; GFX12-CU-NEXT:    s_wait_loadcnt 0x018441; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18442; GFX12-CU-NEXT:    s_endpgm18443;18444; GFX1250-LABEL: global_singlethread_one_as_monotonic_acquire_ret_cmpxchg:18445; GFX1250:       ; %bb.0: ; %entry18446; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 118447; GFX1250-NEXT:    v_mov_b32_e32 v0, 018448; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018449; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x818450; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc18451; GFX1250-NEXT:    s_wait_kmcnt 0x018452; GFX1250-NEXT:    v_mov_b32_e32 v2, s318453; GFX1250-NEXT:    v_mov_b32_e32 v1, s218454; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18455; GFX1250-NEXT:    v_mov_b32_e32 v3, v118456; GFX1250-NEXT:    s_wait_xcnt 0x018457; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN18458; GFX1250-NEXT:    s_wait_loadcnt 0x018459; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]18460; GFX1250-NEXT:    s_endpgm18461    ptr addrspace(1) %out, i32 %in, i32 %old) {18462entry:18463  %gep = getelementptr i32, ptr addrspace(1) %out, i32 418464  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") monotonic acquire18465  %val0 = extractvalue { i32, i1 } %val, 018466  store i32 %val0, ptr addrspace(1) %out, align 418467  ret void18468}18469 18470define amdgpu_kernel void @global_singlethread_one_as_acquire_acquire_ret_cmpxchg(18471; GFX6-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18472; GFX6:       ; %bb.0: ; %entry18473; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]18474; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x018475; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x218476; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x318477; GFX6-NEXT:    s_waitcnt lgkmcnt(0)18478; GFX6-NEXT:    s_mov_b32 s12, s518479; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr518480; GFX6-NEXT:    s_mov_b32 s10, 0x100f00018481; GFX6-NEXT:    s_mov_b32 s11, -118482; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr718483; GFX6-NEXT:    s_mov_b32 s5, s1218484; GFX6-NEXT:    s_mov_b32 s6, s1118485; GFX6-NEXT:    s_mov_b32 s7, s1018486; GFX6-NEXT:    v_mov_b32_e32 v0, s918487; GFX6-NEXT:    v_mov_b32_e32 v2, s818488; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec18489; GFX6-NEXT:    v_mov_b32_e32 v1, v218490; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc18491; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec18492; GFX6-NEXT:    s_waitcnt vmcnt(0)18493; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 018494; GFX6-NEXT:    s_endpgm18495;18496; GFX7-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18497; GFX7:       ; %bb.0: ; %entry18498; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1318499; GFX7-NEXT:    s_add_i32 s12, s12, s1718500; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 818501; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]18502; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x018503; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x218504; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x318505; GFX7-NEXT:    s_mov_b64 s[12:13], 1618506; GFX7-NEXT:    s_waitcnt lgkmcnt(0)18507; GFX7-NEXT:    s_mov_b32 s6, s418508; GFX7-NEXT:    s_mov_b32 s7, s518509; GFX7-NEXT:    s_mov_b32 s11, s1218510; GFX7-NEXT:    s_mov_b32 s10, s1318511; GFX7-NEXT:    s_add_u32 s6, s6, s1118512; GFX7-NEXT:    s_addc_u32 s10, s7, s1018513; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr718514; GFX7-NEXT:    s_mov_b32 s7, s1018515; GFX7-NEXT:    v_mov_b32_e32 v2, s918516; GFX7-NEXT:    v_mov_b32_e32 v0, s818517; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18518; GFX7-NEXT:    v_mov_b32_e32 v3, v018519; GFX7-NEXT:    v_mov_b32_e32 v0, s618520; GFX7-NEXT:    v_mov_b32_e32 v1, s718521; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc18522; GFX7-NEXT:    v_mov_b32_e32 v0, s418523; GFX7-NEXT:    v_mov_b32_e32 v1, s518524; GFX7-NEXT:    s_waitcnt vmcnt(0)18525; GFX7-NEXT:    flat_store_dword v[0:1], v218526; GFX7-NEXT:    s_endpgm18527;18528; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18529; GFX10-WGP:       ; %bb.0: ; %entry18530; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 018531; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018532; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x818533; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc18534; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)18535; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s718536; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s618537; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18538; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v318539; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18540; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)18541; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]18542; GFX10-WGP-NEXT:    s_endpgm18543;18544; GFX10-CU-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18545; GFX10-CU:       ; %bb.0: ; %entry18546; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 018547; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018548; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x818549; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc18550; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)18551; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s718552; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s618553; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18554; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v318555; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18556; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)18557; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]18558; GFX10-CU-NEXT:    s_endpgm18559;18560; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18561; SKIP-CACHE-INV:       ; %bb.0: ; %entry18562; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]18563; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x018564; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x218565; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x318566; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)18567; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s118568; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr118569; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00018570; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -118571; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr318572; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s818573; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s718574; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s618575; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s518576; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s418577; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec18578; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v218579; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc18580; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec18581; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)18582; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 018583; SKIP-CACHE-INV-NEXT:    s_endpgm18584;18585; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18586; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry18587; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018588; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018589; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818590; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18591; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18592; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s718593; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s618594; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18595; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118596; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18597; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18598; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18599; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm18600;18601; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18602; GFX90A-TGSPLIT:       ; %bb.0: ; %entry18603; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018604; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018605; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818606; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18607; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18608; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s718609; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s618610; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18611; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118612; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18613; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18614; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18615; GFX90A-TGSPLIT-NEXT:    s_endpgm18616;18617; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18618; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry18619; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018620; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018621; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818622; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18623; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18624; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s318625; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s218626; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18627; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118628; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018629; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18630; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18631; GFX942-NOTTGSPLIT-NEXT:    s_endpgm18632;18633; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18634; GFX942-TGSPLIT:       ; %bb.0: ; %entry18635; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018636; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018637; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818638; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18639; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18640; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s318641; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s218642; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18643; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118644; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018645; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18646; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18647; GFX942-TGSPLIT-NEXT:    s_endpgm18648;18649; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18650; GFX11-WGP:       ; %bb.0: ; %entry18651; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 018652; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018653; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818654; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18655; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)18656; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s318657; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s218658; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18659; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v318660; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18661; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)18662; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18663; GFX11-WGP-NEXT:    s_endpgm18664;18665; GFX11-CU-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18666; GFX11-CU:       ; %bb.0: ; %entry18667; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 018668; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018669; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818670; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18671; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)18672; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s318673; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s218674; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18675; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v318676; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18677; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)18678; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18679; GFX11-CU-NEXT:    s_endpgm18680;18681; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18682; GFX12-WGP:       ; %bb.0: ; %entry18683; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 018684; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018685; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818686; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18687; GFX12-WGP-NEXT:    s_wait_kmcnt 0x018688; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s318689; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s218690; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18691; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v318692; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18693; GFX12-WGP-NEXT:    s_wait_loadcnt 0x018694; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18695; GFX12-WGP-NEXT:    s_endpgm18696;18697; GFX12-CU-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18698; GFX12-CU:       ; %bb.0: ; %entry18699; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 018700; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018701; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818702; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18703; GFX12-CU-NEXT:    s_wait_kmcnt 0x018704; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s318705; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s218706; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18707; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v318708; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18709; GFX12-CU-NEXT:    s_wait_loadcnt 0x018710; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18711; GFX12-CU-NEXT:    s_endpgm18712;18713; GFX1250-LABEL: global_singlethread_one_as_acquire_acquire_ret_cmpxchg:18714; GFX1250:       ; %bb.0: ; %entry18715; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 118716; GFX1250-NEXT:    v_mov_b32_e32 v0, 018717; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018718; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x818719; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc18720; GFX1250-NEXT:    s_wait_kmcnt 0x018721; GFX1250-NEXT:    v_mov_b32_e32 v2, s318722; GFX1250-NEXT:    v_mov_b32_e32 v1, s218723; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18724; GFX1250-NEXT:    v_mov_b32_e32 v3, v118725; GFX1250-NEXT:    s_wait_xcnt 0x018726; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN18727; GFX1250-NEXT:    s_wait_loadcnt 0x018728; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]18729; GFX1250-NEXT:    s_endpgm18730    ptr addrspace(1) %out, i32 %in, i32 %old) {18731entry:18732  %gep = getelementptr i32, ptr addrspace(1) %out, i32 418733  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acquire acquire18734  %val0 = extractvalue { i32, i1 } %val, 018735  store i32 %val0, ptr addrspace(1) %out, align 418736  ret void18737}18738 18739define amdgpu_kernel void @global_singlethread_one_as_release_acquire_ret_cmpxchg(18740; GFX6-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18741; GFX6:       ; %bb.0: ; %entry18742; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]18743; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x018744; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x218745; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x318746; GFX6-NEXT:    s_waitcnt lgkmcnt(0)18747; GFX6-NEXT:    s_mov_b32 s12, s518748; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr518749; GFX6-NEXT:    s_mov_b32 s10, 0x100f00018750; GFX6-NEXT:    s_mov_b32 s11, -118751; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr718752; GFX6-NEXT:    s_mov_b32 s5, s1218753; GFX6-NEXT:    s_mov_b32 s6, s1118754; GFX6-NEXT:    s_mov_b32 s7, s1018755; GFX6-NEXT:    v_mov_b32_e32 v0, s918756; GFX6-NEXT:    v_mov_b32_e32 v2, s818757; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec18758; GFX6-NEXT:    v_mov_b32_e32 v1, v218759; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc18760; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec18761; GFX6-NEXT:    s_waitcnt vmcnt(0)18762; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 018763; GFX6-NEXT:    s_endpgm18764;18765; GFX7-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18766; GFX7:       ; %bb.0: ; %entry18767; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1318768; GFX7-NEXT:    s_add_i32 s12, s12, s1718769; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 818770; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]18771; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x018772; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x218773; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x318774; GFX7-NEXT:    s_mov_b64 s[12:13], 1618775; GFX7-NEXT:    s_waitcnt lgkmcnt(0)18776; GFX7-NEXT:    s_mov_b32 s6, s418777; GFX7-NEXT:    s_mov_b32 s7, s518778; GFX7-NEXT:    s_mov_b32 s11, s1218779; GFX7-NEXT:    s_mov_b32 s10, s1318780; GFX7-NEXT:    s_add_u32 s6, s6, s1118781; GFX7-NEXT:    s_addc_u32 s10, s7, s1018782; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr718783; GFX7-NEXT:    s_mov_b32 s7, s1018784; GFX7-NEXT:    v_mov_b32_e32 v2, s918785; GFX7-NEXT:    v_mov_b32_e32 v0, s818786; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18787; GFX7-NEXT:    v_mov_b32_e32 v3, v018788; GFX7-NEXT:    v_mov_b32_e32 v0, s618789; GFX7-NEXT:    v_mov_b32_e32 v1, s718790; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc18791; GFX7-NEXT:    v_mov_b32_e32 v0, s418792; GFX7-NEXT:    v_mov_b32_e32 v1, s518793; GFX7-NEXT:    s_waitcnt vmcnt(0)18794; GFX7-NEXT:    flat_store_dword v[0:1], v218795; GFX7-NEXT:    s_endpgm18796;18797; GFX10-WGP-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18798; GFX10-WGP:       ; %bb.0: ; %entry18799; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 018800; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018801; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x818802; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc18803; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)18804; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s718805; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s618806; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18807; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v318808; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18809; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)18810; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]18811; GFX10-WGP-NEXT:    s_endpgm18812;18813; GFX10-CU-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18814; GFX10-CU:       ; %bb.0: ; %entry18815; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 018816; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018817; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x818818; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc18819; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)18820; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s718821; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s618822; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18823; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v318824; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc18825; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)18826; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]18827; GFX10-CU-NEXT:    s_endpgm18828;18829; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18830; SKIP-CACHE-INV:       ; %bb.0: ; %entry18831; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]18832; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x018833; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x218834; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x318835; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)18836; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s118837; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr118838; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00018839; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -118840; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr318841; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s818842; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s718843; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s618844; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s518845; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s418846; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec18847; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v218848; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc18849; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec18850; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)18851; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 018852; SKIP-CACHE-INV-NEXT:    s_endpgm18853;18854; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18855; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry18856; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018857; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018858; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818859; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18860; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18861; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s718862; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s618863; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18864; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118865; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18866; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18867; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18868; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm18869;18870; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18871; GFX90A-TGSPLIT:       ; %bb.0: ; %entry18872; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018873; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x018874; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x818875; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc18876; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18877; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s718878; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s618879; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18880; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118881; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc18882; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18883; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]18884; GFX90A-TGSPLIT-NEXT:    s_endpgm18885;18886; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18887; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry18888; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 018889; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018890; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818891; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18892; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18893; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s318894; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s218895; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18896; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v118897; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018898; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)18899; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18900; GFX942-NOTTGSPLIT-NEXT:    s_endpgm18901;18902; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18903; GFX942-TGSPLIT:       ; %bb.0: ; %entry18904; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 018905; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x018906; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x818907; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc18908; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)18909; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s318910; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s218911; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18912; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v118913; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc018914; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)18915; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]18916; GFX942-TGSPLIT-NEXT:    s_endpgm18917;18918; GFX11-WGP-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18919; GFX11-WGP:       ; %bb.0: ; %entry18920; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 018921; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018922; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818923; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18924; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)18925; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s318926; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s218927; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18928; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v318929; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18930; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)18931; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18932; GFX11-WGP-NEXT:    s_endpgm18933;18934; GFX11-CU-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18935; GFX11-CU:       ; %bb.0: ; %entry18936; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 018937; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018938; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818939; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18940; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)18941; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s318942; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s218943; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18944; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v318945; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc18946; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)18947; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18948; GFX11-CU-NEXT:    s_endpgm18949;18950; GFX12-WGP-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18951; GFX12-WGP:       ; %bb.0: ; %entry18952; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 018953; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018954; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x818955; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc18956; GFX12-WGP-NEXT:    s_wait_kmcnt 0x018957; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s318958; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s218959; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18960; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v318961; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18962; GFX12-WGP-NEXT:    s_wait_loadcnt 0x018963; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]18964; GFX12-WGP-NEXT:    s_endpgm18965;18966; GFX12-CU-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18967; GFX12-CU:       ; %bb.0: ; %entry18968; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 018969; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018970; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x818971; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc18972; GFX12-CU-NEXT:    s_wait_kmcnt 0x018973; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s318974; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s218975; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec18976; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v318977; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN18978; GFX12-CU-NEXT:    s_wait_loadcnt 0x018979; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]18980; GFX12-CU-NEXT:    s_endpgm18981;18982; GFX1250-LABEL: global_singlethread_one_as_release_acquire_ret_cmpxchg:18983; GFX1250:       ; %bb.0: ; %entry18984; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 118985; GFX1250-NEXT:    v_mov_b32_e32 v0, 018986; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x018987; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x818988; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc18989; GFX1250-NEXT:    s_wait_kmcnt 0x018990; GFX1250-NEXT:    v_mov_b32_e32 v2, s318991; GFX1250-NEXT:    v_mov_b32_e32 v1, s218992; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec18993; GFX1250-NEXT:    v_mov_b32_e32 v3, v118994; GFX1250-NEXT:    s_wait_xcnt 0x018995; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN18996; GFX1250-NEXT:    s_wait_loadcnt 0x018997; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]18998; GFX1250-NEXT:    s_endpgm18999    ptr addrspace(1) %out, i32 %in, i32 %old) {19000entry:19001  %gep = getelementptr i32, ptr addrspace(1) %out, i32 419002  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") release acquire19003  %val0 = extractvalue { i32, i1 } %val, 019004  store i32 %val0, ptr addrspace(1) %out, align 419005  ret void19006}19007 19008define amdgpu_kernel void @global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg(19009; GFX6-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19010; GFX6:       ; %bb.0: ; %entry19011; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]19012; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019013; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x219014; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x319015; GFX6-NEXT:    s_waitcnt lgkmcnt(0)19016; GFX6-NEXT:    s_mov_b32 s12, s519017; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr519018; GFX6-NEXT:    s_mov_b32 s10, 0x100f00019019; GFX6-NEXT:    s_mov_b32 s11, -119020; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr719021; GFX6-NEXT:    s_mov_b32 s5, s1219022; GFX6-NEXT:    s_mov_b32 s6, s1119023; GFX6-NEXT:    s_mov_b32 s7, s1019024; GFX6-NEXT:    v_mov_b32_e32 v0, s919025; GFX6-NEXT:    v_mov_b32_e32 v2, s819026; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19027; GFX6-NEXT:    v_mov_b32_e32 v1, v219028; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc19029; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19030; GFX6-NEXT:    s_waitcnt vmcnt(0)19031; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 019032; GFX6-NEXT:    s_endpgm19033;19034; GFX7-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19035; GFX7:       ; %bb.0: ; %entry19036; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1319037; GFX7-NEXT:    s_add_i32 s12, s12, s1719038; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 819039; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]19040; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019041; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x219042; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x319043; GFX7-NEXT:    s_mov_b64 s[12:13], 1619044; GFX7-NEXT:    s_waitcnt lgkmcnt(0)19045; GFX7-NEXT:    s_mov_b32 s6, s419046; GFX7-NEXT:    s_mov_b32 s7, s519047; GFX7-NEXT:    s_mov_b32 s11, s1219048; GFX7-NEXT:    s_mov_b32 s10, s1319049; GFX7-NEXT:    s_add_u32 s6, s6, s1119050; GFX7-NEXT:    s_addc_u32 s10, s7, s1019051; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr719052; GFX7-NEXT:    s_mov_b32 s7, s1019053; GFX7-NEXT:    v_mov_b32_e32 v2, s919054; GFX7-NEXT:    v_mov_b32_e32 v0, s819055; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19056; GFX7-NEXT:    v_mov_b32_e32 v3, v019057; GFX7-NEXT:    v_mov_b32_e32 v0, s619058; GFX7-NEXT:    v_mov_b32_e32 v1, s719059; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc19060; GFX7-NEXT:    v_mov_b32_e32 v0, s419061; GFX7-NEXT:    v_mov_b32_e32 v1, s519062; GFX7-NEXT:    s_waitcnt vmcnt(0)19063; GFX7-NEXT:    flat_store_dword v[0:1], v219064; GFX7-NEXT:    s_endpgm19065;19066; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19067; GFX10-WGP:       ; %bb.0: ; %entry19068; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 019069; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019070; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x819071; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc19072; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)19073; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s719074; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s619075; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19076; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v319077; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19078; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)19079; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]19080; GFX10-WGP-NEXT:    s_endpgm19081;19082; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19083; GFX10-CU:       ; %bb.0: ; %entry19084; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 019085; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019086; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x819087; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc19088; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)19089; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s719090; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s619091; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19092; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v319093; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19094; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)19095; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]19096; GFX10-CU-NEXT:    s_endpgm19097;19098; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19099; SKIP-CACHE-INV:       ; %bb.0: ; %entry19100; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]19101; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x019102; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x219103; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x319104; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)19105; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s119106; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr119107; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00019108; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -119109; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr319110; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s819111; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s719112; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s619113; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s519114; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s419115; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19116; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v219117; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc19118; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19119; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)19120; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 019121; SKIP-CACHE-INV-NEXT:    s_endpgm19122;19123; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19124; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry19125; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019126; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019127; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819128; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19129; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19130; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s719131; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s619132; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19133; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119134; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19135; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19136; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19137; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm19138;19139; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19140; GFX90A-TGSPLIT:       ; %bb.0: ; %entry19141; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019142; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019143; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819144; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19145; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19146; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s719147; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s619148; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19149; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119150; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19151; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19152; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19153; GFX90A-TGSPLIT-NEXT:    s_endpgm19154;19155; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19156; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry19157; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019158; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019159; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819160; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19161; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19162; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s319163; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s219164; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19165; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119166; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019167; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19168; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19169; GFX942-NOTTGSPLIT-NEXT:    s_endpgm19170;19171; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19172; GFX942-TGSPLIT:       ; %bb.0: ; %entry19173; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019174; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019175; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819176; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19177; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19178; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s319179; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s219180; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19181; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119182; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019183; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19184; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19185; GFX942-TGSPLIT-NEXT:    s_endpgm19186;19187; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19188; GFX11-WGP:       ; %bb.0: ; %entry19189; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 019190; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019191; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x819192; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc19193; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)19194; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s319195; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s219196; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19197; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v319198; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc19199; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)19200; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]19201; GFX11-WGP-NEXT:    s_endpgm19202;19203; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19204; GFX11-CU:       ; %bb.0: ; %entry19205; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 019206; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019207; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x819208; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc19209; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)19210; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s319211; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s219212; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19213; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v319214; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc19215; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)19216; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]19217; GFX11-CU-NEXT:    s_endpgm19218;19219; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19220; GFX12-WGP:       ; %bb.0: ; %entry19221; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 019222; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019223; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x819224; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc19225; GFX12-WGP-NEXT:    s_wait_kmcnt 0x019226; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s319227; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s219228; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19229; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v319230; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN19231; GFX12-WGP-NEXT:    s_wait_loadcnt 0x019232; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]19233; GFX12-WGP-NEXT:    s_endpgm19234;19235; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19236; GFX12-CU:       ; %bb.0: ; %entry19237; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 019238; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019239; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x819240; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc19241; GFX12-CU-NEXT:    s_wait_kmcnt 0x019242; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s319243; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s219244; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19245; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v319246; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN19247; GFX12-CU-NEXT:    s_wait_loadcnt 0x019248; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]19249; GFX12-CU-NEXT:    s_endpgm19250;19251; GFX1250-LABEL: global_singlethread_one_as_acq_rel_acquire_ret_cmpxchg:19252; GFX1250:       ; %bb.0: ; %entry19253; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 119254; GFX1250-NEXT:    v_mov_b32_e32 v0, 019255; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019256; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x819257; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc19258; GFX1250-NEXT:    s_wait_kmcnt 0x019259; GFX1250-NEXT:    v_mov_b32_e32 v2, s319260; GFX1250-NEXT:    v_mov_b32_e32 v1, s219261; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19262; GFX1250-NEXT:    v_mov_b32_e32 v3, v119263; GFX1250-NEXT:    s_wait_xcnt 0x019264; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN19265; GFX1250-NEXT:    s_wait_loadcnt 0x019266; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]19267; GFX1250-NEXT:    s_endpgm19268    ptr addrspace(1) %out, i32 %in, i32 %old) {19269entry:19270  %gep = getelementptr i32, ptr addrspace(1) %out, i32 419271  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acq_rel acquire19272  %val0 = extractvalue { i32, i1 } %val, 019273  store i32 %val0, ptr addrspace(1) %out, align 419274  ret void19275}19276 19277define amdgpu_kernel void @global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg(19278; GFX6-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19279; GFX6:       ; %bb.0: ; %entry19280; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]19281; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019282; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x219283; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x319284; GFX6-NEXT:    s_waitcnt lgkmcnt(0)19285; GFX6-NEXT:    s_mov_b32 s12, s519286; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr519287; GFX6-NEXT:    s_mov_b32 s10, 0x100f00019288; GFX6-NEXT:    s_mov_b32 s11, -119289; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr719290; GFX6-NEXT:    s_mov_b32 s5, s1219291; GFX6-NEXT:    s_mov_b32 s6, s1119292; GFX6-NEXT:    s_mov_b32 s7, s1019293; GFX6-NEXT:    v_mov_b32_e32 v0, s919294; GFX6-NEXT:    v_mov_b32_e32 v2, s819295; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19296; GFX6-NEXT:    v_mov_b32_e32 v1, v219297; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc19298; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19299; GFX6-NEXT:    s_waitcnt vmcnt(0)19300; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 019301; GFX6-NEXT:    s_endpgm19302;19303; GFX7-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19304; GFX7:       ; %bb.0: ; %entry19305; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1319306; GFX7-NEXT:    s_add_i32 s12, s12, s1719307; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 819308; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]19309; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019310; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x219311; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x319312; GFX7-NEXT:    s_mov_b64 s[12:13], 1619313; GFX7-NEXT:    s_waitcnt lgkmcnt(0)19314; GFX7-NEXT:    s_mov_b32 s6, s419315; GFX7-NEXT:    s_mov_b32 s7, s519316; GFX7-NEXT:    s_mov_b32 s11, s1219317; GFX7-NEXT:    s_mov_b32 s10, s1319318; GFX7-NEXT:    s_add_u32 s6, s6, s1119319; GFX7-NEXT:    s_addc_u32 s10, s7, s1019320; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr719321; GFX7-NEXT:    s_mov_b32 s7, s1019322; GFX7-NEXT:    v_mov_b32_e32 v2, s919323; GFX7-NEXT:    v_mov_b32_e32 v0, s819324; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19325; GFX7-NEXT:    v_mov_b32_e32 v3, v019326; GFX7-NEXT:    v_mov_b32_e32 v0, s619327; GFX7-NEXT:    v_mov_b32_e32 v1, s719328; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc19329; GFX7-NEXT:    v_mov_b32_e32 v0, s419330; GFX7-NEXT:    v_mov_b32_e32 v1, s519331; GFX7-NEXT:    s_waitcnt vmcnt(0)19332; GFX7-NEXT:    flat_store_dword v[0:1], v219333; GFX7-NEXT:    s_endpgm19334;19335; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19336; GFX10-WGP:       ; %bb.0: ; %entry19337; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 019338; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019339; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x819340; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc19341; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)19342; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s719343; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s619344; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19345; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v319346; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19347; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)19348; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]19349; GFX10-WGP-NEXT:    s_endpgm19350;19351; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19352; GFX10-CU:       ; %bb.0: ; %entry19353; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 019354; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019355; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x819356; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc19357; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)19358; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s719359; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s619360; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19361; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v319362; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19363; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)19364; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]19365; GFX10-CU-NEXT:    s_endpgm19366;19367; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19368; SKIP-CACHE-INV:       ; %bb.0: ; %entry19369; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]19370; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x019371; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x219372; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x319373; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)19374; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s119375; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr119376; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00019377; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -119378; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr319379; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s819380; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s719381; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s619382; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s519383; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s419384; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19385; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v219386; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc19387; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19388; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)19389; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 019390; SKIP-CACHE-INV-NEXT:    s_endpgm19391;19392; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19393; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry19394; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019395; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019396; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819397; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19398; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19399; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s719400; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s619401; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19402; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119403; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19404; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19405; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19406; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm19407;19408; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19409; GFX90A-TGSPLIT:       ; %bb.0: ; %entry19410; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019411; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019412; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819413; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19414; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19415; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s719416; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s619417; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19418; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119419; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19420; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19421; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19422; GFX90A-TGSPLIT-NEXT:    s_endpgm19423;19424; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19425; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry19426; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019427; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019428; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819429; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19430; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19431; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s319432; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s219433; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19434; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119435; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019436; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19437; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19438; GFX942-NOTTGSPLIT-NEXT:    s_endpgm19439;19440; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19441; GFX942-TGSPLIT:       ; %bb.0: ; %entry19442; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019443; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019444; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819445; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19446; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19447; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s319448; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s219449; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19450; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119451; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019452; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19453; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19454; GFX942-TGSPLIT-NEXT:    s_endpgm19455;19456; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19457; GFX11-WGP:       ; %bb.0: ; %entry19458; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 019459; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019460; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x819461; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc19462; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)19463; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s319464; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s219465; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19466; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v319467; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc19468; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)19469; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]19470; GFX11-WGP-NEXT:    s_endpgm19471;19472; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19473; GFX11-CU:       ; %bb.0: ; %entry19474; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 019475; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019476; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x819477; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc19478; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)19479; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s319480; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s219481; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19482; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v319483; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc19484; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)19485; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]19486; GFX11-CU-NEXT:    s_endpgm19487;19488; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19489; GFX12-WGP:       ; %bb.0: ; %entry19490; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 019491; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019492; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x819493; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc19494; GFX12-WGP-NEXT:    s_wait_kmcnt 0x019495; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s319496; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s219497; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19498; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v319499; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN19500; GFX12-WGP-NEXT:    s_wait_loadcnt 0x019501; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]19502; GFX12-WGP-NEXT:    s_endpgm19503;19504; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19505; GFX12-CU:       ; %bb.0: ; %entry19506; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 019507; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019508; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x819509; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc19510; GFX12-CU-NEXT:    s_wait_kmcnt 0x019511; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s319512; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s219513; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19514; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v319515; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN19516; GFX12-CU-NEXT:    s_wait_loadcnt 0x019517; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]19518; GFX12-CU-NEXT:    s_endpgm19519;19520; GFX1250-LABEL: global_singlethread_one_as_seq_cst_acquire_ret_cmpxchg:19521; GFX1250:       ; %bb.0: ; %entry19522; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 119523; GFX1250-NEXT:    v_mov_b32_e32 v0, 019524; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019525; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x819526; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc19527; GFX1250-NEXT:    s_wait_kmcnt 0x019528; GFX1250-NEXT:    v_mov_b32_e32 v2, s319529; GFX1250-NEXT:    v_mov_b32_e32 v1, s219530; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19531; GFX1250-NEXT:    v_mov_b32_e32 v3, v119532; GFX1250-NEXT:    s_wait_xcnt 0x019533; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN19534; GFX1250-NEXT:    s_wait_loadcnt 0x019535; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]19536; GFX1250-NEXT:    s_endpgm19537    ptr addrspace(1) %out, i32 %in, i32 %old) {19538entry:19539  %gep = getelementptr i32, ptr addrspace(1) %out, i32 419540  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") seq_cst acquire19541  %val0 = extractvalue { i32, i1 } %val, 019542  store i32 %val0, ptr addrspace(1) %out, align 419543  ret void19544}19545 19546define amdgpu_kernel void @global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg(19547; GFX6-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19548; GFX6:       ; %bb.0: ; %entry19549; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]19550; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019551; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x219552; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x319553; GFX6-NEXT:    s_waitcnt lgkmcnt(0)19554; GFX6-NEXT:    s_mov_b32 s12, s519555; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr519556; GFX6-NEXT:    s_mov_b32 s10, 0x100f00019557; GFX6-NEXT:    s_mov_b32 s11, -119558; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr719559; GFX6-NEXT:    s_mov_b32 s5, s1219560; GFX6-NEXT:    s_mov_b32 s6, s1119561; GFX6-NEXT:    s_mov_b32 s7, s1019562; GFX6-NEXT:    v_mov_b32_e32 v0, s919563; GFX6-NEXT:    v_mov_b32_e32 v2, s819564; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19565; GFX6-NEXT:    v_mov_b32_e32 v1, v219566; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc19567; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19568; GFX6-NEXT:    s_waitcnt vmcnt(0)19569; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 019570; GFX6-NEXT:    s_endpgm19571;19572; GFX7-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19573; GFX7:       ; %bb.0: ; %entry19574; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1319575; GFX7-NEXT:    s_add_i32 s12, s12, s1719576; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 819577; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]19578; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019579; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x219580; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x319581; GFX7-NEXT:    s_mov_b64 s[12:13], 1619582; GFX7-NEXT:    s_waitcnt lgkmcnt(0)19583; GFX7-NEXT:    s_mov_b32 s6, s419584; GFX7-NEXT:    s_mov_b32 s7, s519585; GFX7-NEXT:    s_mov_b32 s11, s1219586; GFX7-NEXT:    s_mov_b32 s10, s1319587; GFX7-NEXT:    s_add_u32 s6, s6, s1119588; GFX7-NEXT:    s_addc_u32 s10, s7, s1019589; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr719590; GFX7-NEXT:    s_mov_b32 s7, s1019591; GFX7-NEXT:    v_mov_b32_e32 v2, s919592; GFX7-NEXT:    v_mov_b32_e32 v0, s819593; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19594; GFX7-NEXT:    v_mov_b32_e32 v3, v019595; GFX7-NEXT:    v_mov_b32_e32 v0, s619596; GFX7-NEXT:    v_mov_b32_e32 v1, s719597; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc19598; GFX7-NEXT:    v_mov_b32_e32 v0, s419599; GFX7-NEXT:    v_mov_b32_e32 v1, s519600; GFX7-NEXT:    s_waitcnt vmcnt(0)19601; GFX7-NEXT:    flat_store_dword v[0:1], v219602; GFX7-NEXT:    s_endpgm19603;19604; GFX10-WGP-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19605; GFX10-WGP:       ; %bb.0: ; %entry19606; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 019607; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019608; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x819609; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc19610; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)19611; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s719612; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s619613; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19614; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v319615; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19616; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)19617; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]19618; GFX10-WGP-NEXT:    s_endpgm19619;19620; GFX10-CU-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19621; GFX10-CU:       ; %bb.0: ; %entry19622; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 019623; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019624; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x819625; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc19626; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)19627; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s719628; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s619629; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19630; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v319631; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19632; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)19633; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]19634; GFX10-CU-NEXT:    s_endpgm19635;19636; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19637; SKIP-CACHE-INV:       ; %bb.0: ; %entry19638; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]19639; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x019640; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x219641; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x319642; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)19643; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s119644; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr119645; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00019646; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -119647; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr319648; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s819649; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s719650; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s619651; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s519652; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s419653; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19654; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v219655; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc19656; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19657; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)19658; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 019659; SKIP-CACHE-INV-NEXT:    s_endpgm19660;19661; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19662; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry19663; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019664; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019665; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819666; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19667; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19668; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s719669; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s619670; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19671; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119672; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19673; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19674; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19675; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm19676;19677; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19678; GFX90A-TGSPLIT:       ; %bb.0: ; %entry19679; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019680; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019681; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819682; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19683; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19684; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s719685; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s619686; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19687; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119688; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19689; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19690; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19691; GFX90A-TGSPLIT-NEXT:    s_endpgm19692;19693; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19694; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry19695; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019696; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019697; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819698; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19699; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19700; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s319701; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s219702; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19703; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119704; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019705; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19706; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19707; GFX942-NOTTGSPLIT-NEXT:    s_endpgm19708;19709; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19710; GFX942-TGSPLIT:       ; %bb.0: ; %entry19711; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019712; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019713; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819714; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19715; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19716; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s319717; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s219718; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19719; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119720; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019721; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19722; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19723; GFX942-TGSPLIT-NEXT:    s_endpgm19724;19725; GFX11-WGP-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19726; GFX11-WGP:       ; %bb.0: ; %entry19727; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 019728; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019729; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x819730; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc19731; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)19732; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s319733; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s219734; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19735; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v319736; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc19737; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)19738; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]19739; GFX11-WGP-NEXT:    s_endpgm19740;19741; GFX11-CU-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19742; GFX11-CU:       ; %bb.0: ; %entry19743; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 019744; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019745; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x819746; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc19747; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)19748; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s319749; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s219750; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19751; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v319752; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc19753; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)19754; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]19755; GFX11-CU-NEXT:    s_endpgm19756;19757; GFX12-WGP-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19758; GFX12-WGP:       ; %bb.0: ; %entry19759; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 019760; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019761; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x819762; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc19763; GFX12-WGP-NEXT:    s_wait_kmcnt 0x019764; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s319765; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s219766; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19767; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v319768; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN19769; GFX12-WGP-NEXT:    s_wait_loadcnt 0x019770; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]19771; GFX12-WGP-NEXT:    s_endpgm19772;19773; GFX12-CU-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19774; GFX12-CU:       ; %bb.0: ; %entry19775; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 019776; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019777; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x819778; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc19779; GFX12-CU-NEXT:    s_wait_kmcnt 0x019780; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s319781; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s219782; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19783; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v319784; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN19785; GFX12-CU-NEXT:    s_wait_loadcnt 0x019786; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]19787; GFX12-CU-NEXT:    s_endpgm19788;19789; GFX1250-LABEL: global_singlethread_one_as_monotonic_seq_cst_ret_cmpxchg:19790; GFX1250:       ; %bb.0: ; %entry19791; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 119792; GFX1250-NEXT:    v_mov_b32_e32 v0, 019793; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019794; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x819795; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc19796; GFX1250-NEXT:    s_wait_kmcnt 0x019797; GFX1250-NEXT:    v_mov_b32_e32 v2, s319798; GFX1250-NEXT:    v_mov_b32_e32 v1, s219799; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19800; GFX1250-NEXT:    v_mov_b32_e32 v3, v119801; GFX1250-NEXT:    s_wait_xcnt 0x019802; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN19803; GFX1250-NEXT:    s_wait_loadcnt 0x019804; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]19805; GFX1250-NEXT:    s_endpgm19806    ptr addrspace(1) %out, i32 %in, i32 %old) {19807entry:19808  %gep = getelementptr i32, ptr addrspace(1) %out, i32 419809  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") monotonic seq_cst19810  %val0 = extractvalue { i32, i1 } %val, 019811  store i32 %val0, ptr addrspace(1) %out, align 419812  ret void19813}19814 19815define amdgpu_kernel void @global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg(19816; GFX6-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19817; GFX6:       ; %bb.0: ; %entry19818; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]19819; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019820; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x219821; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x319822; GFX6-NEXT:    s_waitcnt lgkmcnt(0)19823; GFX6-NEXT:    s_mov_b32 s12, s519824; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr519825; GFX6-NEXT:    s_mov_b32 s10, 0x100f00019826; GFX6-NEXT:    s_mov_b32 s11, -119827; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr719828; GFX6-NEXT:    s_mov_b32 s5, s1219829; GFX6-NEXT:    s_mov_b32 s6, s1119830; GFX6-NEXT:    s_mov_b32 s7, s1019831; GFX6-NEXT:    v_mov_b32_e32 v0, s919832; GFX6-NEXT:    v_mov_b32_e32 v2, s819833; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19834; GFX6-NEXT:    v_mov_b32_e32 v1, v219835; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc19836; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19837; GFX6-NEXT:    s_waitcnt vmcnt(0)19838; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 019839; GFX6-NEXT:    s_endpgm19840;19841; GFX7-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19842; GFX7:       ; %bb.0: ; %entry19843; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1319844; GFX7-NEXT:    s_add_i32 s12, s12, s1719845; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 819846; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]19847; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x019848; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x219849; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x319850; GFX7-NEXT:    s_mov_b64 s[12:13], 1619851; GFX7-NEXT:    s_waitcnt lgkmcnt(0)19852; GFX7-NEXT:    s_mov_b32 s6, s419853; GFX7-NEXT:    s_mov_b32 s7, s519854; GFX7-NEXT:    s_mov_b32 s11, s1219855; GFX7-NEXT:    s_mov_b32 s10, s1319856; GFX7-NEXT:    s_add_u32 s6, s6, s1119857; GFX7-NEXT:    s_addc_u32 s10, s7, s1019858; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr719859; GFX7-NEXT:    s_mov_b32 s7, s1019860; GFX7-NEXT:    v_mov_b32_e32 v2, s919861; GFX7-NEXT:    v_mov_b32_e32 v0, s819862; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19863; GFX7-NEXT:    v_mov_b32_e32 v3, v019864; GFX7-NEXT:    v_mov_b32_e32 v0, s619865; GFX7-NEXT:    v_mov_b32_e32 v1, s719866; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc19867; GFX7-NEXT:    v_mov_b32_e32 v0, s419868; GFX7-NEXT:    v_mov_b32_e32 v1, s519869; GFX7-NEXT:    s_waitcnt vmcnt(0)19870; GFX7-NEXT:    flat_store_dword v[0:1], v219871; GFX7-NEXT:    s_endpgm19872;19873; GFX10-WGP-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19874; GFX10-WGP:       ; %bb.0: ; %entry19875; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 019876; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019877; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x819878; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc19879; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)19880; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s719881; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s619882; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19883; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v319884; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19885; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)19886; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]19887; GFX10-WGP-NEXT:    s_endpgm19888;19889; GFX10-CU-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19890; GFX10-CU:       ; %bb.0: ; %entry19891; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 019892; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019893; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x819894; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc19895; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)19896; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s719897; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s619898; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec19899; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v319900; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc19901; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)19902; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]19903; GFX10-CU-NEXT:    s_endpgm19904;19905; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19906; SKIP-CACHE-INV:       ; %bb.0: ; %entry19907; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]19908; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x019909; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x219910; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x319911; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)19912; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s119913; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr119914; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00019915; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -119916; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr319917; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s819918; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s719919; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s619920; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s519921; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s419922; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec19923; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v219924; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc19925; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec19926; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)19927; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 019928; SKIP-CACHE-INV-NEXT:    s_endpgm19929;19930; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19931; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry19932; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019933; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019934; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819935; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19936; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19937; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s719938; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s619939; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19940; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119941; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19942; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19943; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19944; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm19945;19946; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19947; GFX90A-TGSPLIT:       ; %bb.0: ; %entry19948; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019949; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x019950; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x819951; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc19952; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19953; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s719954; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s619955; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19956; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119957; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc19958; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19959; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]19960; GFX90A-TGSPLIT-NEXT:    s_endpgm19961;19962; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19963; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry19964; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 019965; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019966; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819967; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19968; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19969; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s319970; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s219971; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19972; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v119973; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019974; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)19975; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19976; GFX942-NOTTGSPLIT-NEXT:    s_endpgm19977;19978; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19979; GFX942-TGSPLIT:       ; %bb.0: ; %entry19980; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 019981; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x019982; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x819983; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc19984; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)19985; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s319986; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s219987; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec19988; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v119989; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc019990; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)19991; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]19992; GFX942-TGSPLIT-NEXT:    s_endpgm19993;19994; GFX11-WGP-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:19995; GFX11-WGP:       ; %bb.0: ; %entry19996; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 019997; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x019998; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x819999; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20000; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)20001; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s320002; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s220003; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20004; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v320005; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20006; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)20007; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20008; GFX11-WGP-NEXT:    s_endpgm20009;20010; GFX11-CU-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:20011; GFX11-CU:       ; %bb.0: ; %entry20012; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 020013; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020014; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820015; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20016; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)20017; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s320018; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s220019; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20020; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v320021; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20022; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)20023; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20024; GFX11-CU-NEXT:    s_endpgm20025;20026; GFX12-WGP-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:20027; GFX12-WGP:       ; %bb.0: ; %entry20028; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 020029; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020030; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x820031; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20032; GFX12-WGP-NEXT:    s_wait_kmcnt 0x020033; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s320034; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s220035; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20036; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v320037; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20038; GFX12-WGP-NEXT:    s_wait_loadcnt 0x020039; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20040; GFX12-WGP-NEXT:    s_endpgm20041;20042; GFX12-CU-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:20043; GFX12-CU:       ; %bb.0: ; %entry20044; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 020045; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020046; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820047; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20048; GFX12-CU-NEXT:    s_wait_kmcnt 0x020049; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s320050; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s220051; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20052; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v320053; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20054; GFX12-CU-NEXT:    s_wait_loadcnt 0x020055; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20056; GFX12-CU-NEXT:    s_endpgm20057;20058; GFX1250-LABEL: global_singlethread_one_as_acquire_seq_cst_ret_cmpxchg:20059; GFX1250:       ; %bb.0: ; %entry20060; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 120061; GFX1250-NEXT:    v_mov_b32_e32 v0, 020062; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020063; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x820064; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc20065; GFX1250-NEXT:    s_wait_kmcnt 0x020066; GFX1250-NEXT:    v_mov_b32_e32 v2, s320067; GFX1250-NEXT:    v_mov_b32_e32 v1, s220068; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20069; GFX1250-NEXT:    v_mov_b32_e32 v3, v120070; GFX1250-NEXT:    s_wait_xcnt 0x020071; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN20072; GFX1250-NEXT:    s_wait_loadcnt 0x020073; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]20074; GFX1250-NEXT:    s_endpgm20075    ptr addrspace(1) %out, i32 %in, i32 %old) {20076entry:20077  %gep = getelementptr i32, ptr addrspace(1) %out, i32 420078  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acquire seq_cst20079  %val0 = extractvalue { i32, i1 } %val, 020080  store i32 %val0, ptr addrspace(1) %out, align 420081  ret void20082}20083 20084define amdgpu_kernel void @global_singlethread_one_as_release_seq_cst_ret_cmpxchg(20085; GFX6-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20086; GFX6:       ; %bb.0: ; %entry20087; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]20088; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x020089; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x220090; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x320091; GFX6-NEXT:    s_waitcnt lgkmcnt(0)20092; GFX6-NEXT:    s_mov_b32 s12, s520093; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr520094; GFX6-NEXT:    s_mov_b32 s10, 0x100f00020095; GFX6-NEXT:    s_mov_b32 s11, -120096; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr720097; GFX6-NEXT:    s_mov_b32 s5, s1220098; GFX6-NEXT:    s_mov_b32 s6, s1120099; GFX6-NEXT:    s_mov_b32 s7, s1020100; GFX6-NEXT:    v_mov_b32_e32 v0, s920101; GFX6-NEXT:    v_mov_b32_e32 v2, s820102; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec20103; GFX6-NEXT:    v_mov_b32_e32 v1, v220104; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc20105; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec20106; GFX6-NEXT:    s_waitcnt vmcnt(0)20107; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 020108; GFX6-NEXT:    s_endpgm20109;20110; GFX7-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20111; GFX7:       ; %bb.0: ; %entry20112; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1320113; GFX7-NEXT:    s_add_i32 s12, s12, s1720114; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 820115; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]20116; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x020117; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x220118; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x320119; GFX7-NEXT:    s_mov_b64 s[12:13], 1620120; GFX7-NEXT:    s_waitcnt lgkmcnt(0)20121; GFX7-NEXT:    s_mov_b32 s6, s420122; GFX7-NEXT:    s_mov_b32 s7, s520123; GFX7-NEXT:    s_mov_b32 s11, s1220124; GFX7-NEXT:    s_mov_b32 s10, s1320125; GFX7-NEXT:    s_add_u32 s6, s6, s1120126; GFX7-NEXT:    s_addc_u32 s10, s7, s1020127; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr720128; GFX7-NEXT:    s_mov_b32 s7, s1020129; GFX7-NEXT:    v_mov_b32_e32 v2, s920130; GFX7-NEXT:    v_mov_b32_e32 v0, s820131; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20132; GFX7-NEXT:    v_mov_b32_e32 v3, v020133; GFX7-NEXT:    v_mov_b32_e32 v0, s620134; GFX7-NEXT:    v_mov_b32_e32 v1, s720135; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc20136; GFX7-NEXT:    v_mov_b32_e32 v0, s420137; GFX7-NEXT:    v_mov_b32_e32 v1, s520138; GFX7-NEXT:    s_waitcnt vmcnt(0)20139; GFX7-NEXT:    flat_store_dword v[0:1], v220140; GFX7-NEXT:    s_endpgm20141;20142; GFX10-WGP-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20143; GFX10-WGP:       ; %bb.0: ; %entry20144; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 020145; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020146; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x820147; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc20148; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)20149; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s720150; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s620151; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20152; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v320153; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc20154; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)20155; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]20156; GFX10-WGP-NEXT:    s_endpgm20157;20158; GFX10-CU-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20159; GFX10-CU:       ; %bb.0: ; %entry20160; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 020161; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020162; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x820163; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc20164; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)20165; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s720166; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s620167; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20168; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v320169; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc20170; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)20171; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]20172; GFX10-CU-NEXT:    s_endpgm20173;20174; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20175; SKIP-CACHE-INV:       ; %bb.0: ; %entry20176; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]20177; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x020178; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x220179; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x320180; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)20181; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s120182; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr120183; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00020184; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -120185; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr320186; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s820187; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s720188; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s620189; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s520190; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s420191; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec20192; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v220193; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc20194; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec20195; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)20196; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 020197; SKIP-CACHE-INV-NEXT:    s_endpgm20198;20199; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20200; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry20201; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 020202; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020203; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x820204; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc20205; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20206; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s720207; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s620208; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20209; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v120210; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc20211; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)20212; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]20213; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm20214;20215; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20216; GFX90A-TGSPLIT:       ; %bb.0: ; %entry20217; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 020218; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020219; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x820220; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc20221; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20222; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s720223; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s620224; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20225; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v120226; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc20227; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)20228; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]20229; GFX90A-TGSPLIT-NEXT:    s_endpgm20230;20231; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20232; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry20233; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 020234; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x020235; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x820236; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc20237; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20238; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s320239; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s220240; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20241; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v120242; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc020243; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)20244; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]20245; GFX942-NOTTGSPLIT-NEXT:    s_endpgm20246;20247; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20248; GFX942-TGSPLIT:       ; %bb.0: ; %entry20249; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 020250; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x020251; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x820252; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc20253; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20254; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s320255; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s220256; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20257; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v120258; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc020259; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)20260; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]20261; GFX942-TGSPLIT-NEXT:    s_endpgm20262;20263; GFX11-WGP-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20264; GFX11-WGP:       ; %bb.0: ; %entry20265; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 020266; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020267; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x820268; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20269; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)20270; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s320271; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s220272; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20273; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v320274; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20275; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)20276; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20277; GFX11-WGP-NEXT:    s_endpgm20278;20279; GFX11-CU-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20280; GFX11-CU:       ; %bb.0: ; %entry20281; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 020282; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020283; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820284; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20285; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)20286; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s320287; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s220288; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20289; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v320290; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20291; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)20292; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20293; GFX11-CU-NEXT:    s_endpgm20294;20295; GFX12-WGP-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20296; GFX12-WGP:       ; %bb.0: ; %entry20297; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 020298; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020299; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x820300; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20301; GFX12-WGP-NEXT:    s_wait_kmcnt 0x020302; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s320303; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s220304; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20305; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v320306; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20307; GFX12-WGP-NEXT:    s_wait_loadcnt 0x020308; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20309; GFX12-WGP-NEXT:    s_endpgm20310;20311; GFX12-CU-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20312; GFX12-CU:       ; %bb.0: ; %entry20313; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 020314; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020315; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820316; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20317; GFX12-CU-NEXT:    s_wait_kmcnt 0x020318; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s320319; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s220320; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20321; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v320322; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20323; GFX12-CU-NEXT:    s_wait_loadcnt 0x020324; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20325; GFX12-CU-NEXT:    s_endpgm20326;20327; GFX1250-LABEL: global_singlethread_one_as_release_seq_cst_ret_cmpxchg:20328; GFX1250:       ; %bb.0: ; %entry20329; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 120330; GFX1250-NEXT:    v_mov_b32_e32 v0, 020331; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020332; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x820333; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc20334; GFX1250-NEXT:    s_wait_kmcnt 0x020335; GFX1250-NEXT:    v_mov_b32_e32 v2, s320336; GFX1250-NEXT:    v_mov_b32_e32 v1, s220337; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20338; GFX1250-NEXT:    v_mov_b32_e32 v3, v120339; GFX1250-NEXT:    s_wait_xcnt 0x020340; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN20341; GFX1250-NEXT:    s_wait_loadcnt 0x020342; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]20343; GFX1250-NEXT:    s_endpgm20344    ptr addrspace(1) %out, i32 %in, i32 %old) {20345entry:20346  %gep = getelementptr i32, ptr addrspace(1) %out, i32 420347  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") release seq_cst20348  %val0 = extractvalue { i32, i1 } %val, 020349  store i32 %val0, ptr addrspace(1) %out, align 420350  ret void20351}20352 20353define amdgpu_kernel void @global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg(20354; GFX6-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20355; GFX6:       ; %bb.0: ; %entry20356; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]20357; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x020358; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x220359; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x320360; GFX6-NEXT:    s_waitcnt lgkmcnt(0)20361; GFX6-NEXT:    s_mov_b32 s12, s520362; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr520363; GFX6-NEXT:    s_mov_b32 s10, 0x100f00020364; GFX6-NEXT:    s_mov_b32 s11, -120365; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr720366; GFX6-NEXT:    s_mov_b32 s5, s1220367; GFX6-NEXT:    s_mov_b32 s6, s1120368; GFX6-NEXT:    s_mov_b32 s7, s1020369; GFX6-NEXT:    v_mov_b32_e32 v0, s920370; GFX6-NEXT:    v_mov_b32_e32 v2, s820371; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec20372; GFX6-NEXT:    v_mov_b32_e32 v1, v220373; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc20374; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec20375; GFX6-NEXT:    s_waitcnt vmcnt(0)20376; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 020377; GFX6-NEXT:    s_endpgm20378;20379; GFX7-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20380; GFX7:       ; %bb.0: ; %entry20381; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1320382; GFX7-NEXT:    s_add_i32 s12, s12, s1720383; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 820384; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]20385; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x020386; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x220387; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x320388; GFX7-NEXT:    s_mov_b64 s[12:13], 1620389; GFX7-NEXT:    s_waitcnt lgkmcnt(0)20390; GFX7-NEXT:    s_mov_b32 s6, s420391; GFX7-NEXT:    s_mov_b32 s7, s520392; GFX7-NEXT:    s_mov_b32 s11, s1220393; GFX7-NEXT:    s_mov_b32 s10, s1320394; GFX7-NEXT:    s_add_u32 s6, s6, s1120395; GFX7-NEXT:    s_addc_u32 s10, s7, s1020396; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr720397; GFX7-NEXT:    s_mov_b32 s7, s1020398; GFX7-NEXT:    v_mov_b32_e32 v2, s920399; GFX7-NEXT:    v_mov_b32_e32 v0, s820400; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20401; GFX7-NEXT:    v_mov_b32_e32 v3, v020402; GFX7-NEXT:    v_mov_b32_e32 v0, s620403; GFX7-NEXT:    v_mov_b32_e32 v1, s720404; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc20405; GFX7-NEXT:    v_mov_b32_e32 v0, s420406; GFX7-NEXT:    v_mov_b32_e32 v1, s520407; GFX7-NEXT:    s_waitcnt vmcnt(0)20408; GFX7-NEXT:    flat_store_dword v[0:1], v220409; GFX7-NEXT:    s_endpgm20410;20411; GFX10-WGP-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20412; GFX10-WGP:       ; %bb.0: ; %entry20413; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 020414; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020415; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x820416; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc20417; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)20418; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s720419; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s620420; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20421; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v320422; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc20423; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)20424; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]20425; GFX10-WGP-NEXT:    s_endpgm20426;20427; GFX10-CU-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20428; GFX10-CU:       ; %bb.0: ; %entry20429; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 020430; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020431; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x820432; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc20433; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)20434; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s720435; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s620436; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20437; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v320438; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc20439; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)20440; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]20441; GFX10-CU-NEXT:    s_endpgm20442;20443; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20444; SKIP-CACHE-INV:       ; %bb.0: ; %entry20445; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]20446; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x020447; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x220448; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x320449; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)20450; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s120451; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr120452; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00020453; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -120454; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr320455; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s820456; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s720457; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s620458; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s520459; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s420460; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec20461; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v220462; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc20463; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec20464; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)20465; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 020466; SKIP-CACHE-INV-NEXT:    s_endpgm20467;20468; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20469; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry20470; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 020471; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020472; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x820473; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc20474; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20475; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s720476; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s620477; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20478; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v120479; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc20480; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)20481; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]20482; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm20483;20484; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20485; GFX90A-TGSPLIT:       ; %bb.0: ; %entry20486; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 020487; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020488; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x820489; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc20490; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20491; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s720492; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s620493; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20494; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v120495; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc20496; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)20497; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]20498; GFX90A-TGSPLIT-NEXT:    s_endpgm20499;20500; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20501; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry20502; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 020503; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x020504; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x820505; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc20506; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20507; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s320508; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s220509; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20510; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v120511; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc020512; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)20513; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]20514; GFX942-NOTTGSPLIT-NEXT:    s_endpgm20515;20516; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20517; GFX942-TGSPLIT:       ; %bb.0: ; %entry20518; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 020519; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x020520; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x820521; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc20522; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20523; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s320524; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s220525; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20526; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v120527; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc020528; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)20529; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]20530; GFX942-TGSPLIT-NEXT:    s_endpgm20531;20532; GFX11-WGP-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20533; GFX11-WGP:       ; %bb.0: ; %entry20534; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 020535; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020536; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x820537; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20538; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)20539; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s320540; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s220541; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20542; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v320543; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20544; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)20545; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20546; GFX11-WGP-NEXT:    s_endpgm20547;20548; GFX11-CU-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20549; GFX11-CU:       ; %bb.0: ; %entry20550; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 020551; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020552; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820553; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20554; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)20555; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s320556; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s220557; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20558; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v320559; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20560; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)20561; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20562; GFX11-CU-NEXT:    s_endpgm20563;20564; GFX12-WGP-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20565; GFX12-WGP:       ; %bb.0: ; %entry20566; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 020567; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020568; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x820569; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20570; GFX12-WGP-NEXT:    s_wait_kmcnt 0x020571; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s320572; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s220573; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20574; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v320575; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20576; GFX12-WGP-NEXT:    s_wait_loadcnt 0x020577; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20578; GFX12-WGP-NEXT:    s_endpgm20579;20580; GFX12-CU-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20581; GFX12-CU:       ; %bb.0: ; %entry20582; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 020583; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020584; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820585; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20586; GFX12-CU-NEXT:    s_wait_kmcnt 0x020587; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s320588; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s220589; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20590; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v320591; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20592; GFX12-CU-NEXT:    s_wait_loadcnt 0x020593; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20594; GFX12-CU-NEXT:    s_endpgm20595;20596; GFX1250-LABEL: global_singlethread_one_as_acq_rel_seq_cst_ret_cmpxchg:20597; GFX1250:       ; %bb.0: ; %entry20598; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 120599; GFX1250-NEXT:    v_mov_b32_e32 v0, 020600; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020601; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x820602; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc20603; GFX1250-NEXT:    s_wait_kmcnt 0x020604; GFX1250-NEXT:    v_mov_b32_e32 v2, s320605; GFX1250-NEXT:    v_mov_b32_e32 v1, s220606; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20607; GFX1250-NEXT:    v_mov_b32_e32 v3, v120608; GFX1250-NEXT:    s_wait_xcnt 0x020609; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN20610; GFX1250-NEXT:    s_wait_loadcnt 0x020611; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]20612; GFX1250-NEXT:    s_endpgm20613    ptr addrspace(1) %out, i32 %in, i32 %old) {20614entry:20615  %gep = getelementptr i32, ptr addrspace(1) %out, i32 420616  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") acq_rel seq_cst20617  %val0 = extractvalue { i32, i1 } %val, 020618  store i32 %val0, ptr addrspace(1) %out, align 420619  ret void20620}20621 20622define amdgpu_kernel void @global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg(20623; GFX6-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20624; GFX6:       ; %bb.0: ; %entry20625; GFX6-NEXT:    s_mov_b64 s[6:7], s[8:9]20626; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x020627; GFX6-NEXT:    s_load_dword s9, s[6:7], 0x220628; GFX6-NEXT:    s_load_dword s8, s[6:7], 0x320629; GFX6-NEXT:    s_waitcnt lgkmcnt(0)20630; GFX6-NEXT:    s_mov_b32 s12, s520631; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 killed $sgpr4_sgpr520632; GFX6-NEXT:    s_mov_b32 s10, 0x100f00020633; GFX6-NEXT:    s_mov_b32 s11, -120634; GFX6-NEXT:    ; kill: def $sgpr4 killed $sgpr4 def $sgpr4_sgpr5_sgpr6_sgpr720635; GFX6-NEXT:    s_mov_b32 s5, s1220636; GFX6-NEXT:    s_mov_b32 s6, s1120637; GFX6-NEXT:    s_mov_b32 s7, s1020638; GFX6-NEXT:    v_mov_b32_e32 v0, s920639; GFX6-NEXT:    v_mov_b32_e32 v2, s820640; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec20641; GFX6-NEXT:    v_mov_b32_e32 v1, v220642; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[4:7], 0 offset:16 glc20643; GFX6-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec20644; GFX6-NEXT:    s_waitcnt vmcnt(0)20645; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 020646; GFX6-NEXT:    s_endpgm20647;20648; GFX7-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20649; GFX7:       ; %bb.0: ; %entry20650; GFX7-NEXT:    s_mov_b32 flat_scratch_lo, s1320651; GFX7-NEXT:    s_add_i32 s12, s12, s1720652; GFX7-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 820653; GFX7-NEXT:    s_mov_b64 s[6:7], s[8:9]20654; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x020655; GFX7-NEXT:    s_load_dword s9, s[6:7], 0x220656; GFX7-NEXT:    s_load_dword s8, s[6:7], 0x320657; GFX7-NEXT:    s_mov_b64 s[12:13], 1620658; GFX7-NEXT:    s_waitcnt lgkmcnt(0)20659; GFX7-NEXT:    s_mov_b32 s6, s420660; GFX7-NEXT:    s_mov_b32 s7, s520661; GFX7-NEXT:    s_mov_b32 s11, s1220662; GFX7-NEXT:    s_mov_b32 s10, s1320663; GFX7-NEXT:    s_add_u32 s6, s6, s1120664; GFX7-NEXT:    s_addc_u32 s10, s7, s1020665; GFX7-NEXT:    ; kill: def $sgpr6 killed $sgpr6 def $sgpr6_sgpr720666; GFX7-NEXT:    s_mov_b32 s7, s1020667; GFX7-NEXT:    v_mov_b32_e32 v2, s920668; GFX7-NEXT:    v_mov_b32_e32 v0, s820669; GFX7-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20670; GFX7-NEXT:    v_mov_b32_e32 v3, v020671; GFX7-NEXT:    v_mov_b32_e32 v0, s620672; GFX7-NEXT:    v_mov_b32_e32 v1, s720673; GFX7-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc20674; GFX7-NEXT:    v_mov_b32_e32 v0, s420675; GFX7-NEXT:    v_mov_b32_e32 v1, s520676; GFX7-NEXT:    s_waitcnt vmcnt(0)20677; GFX7-NEXT:    flat_store_dword v[0:1], v220678; GFX7-NEXT:    s_endpgm20679;20680; GFX10-WGP-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20681; GFX10-WGP:       ; %bb.0: ; %entry20682; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, 020683; GFX10-WGP-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020684; GFX10-WGP-NEXT:    s_load_dword s7, s[8:9], 0x820685; GFX10-WGP-NEXT:    s_load_dword s6, s[8:9], 0xc20686; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)20687; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s720688; GFX10-WGP-NEXT:    v_mov_b32_e32 v3, s620689; GFX10-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20690; GFX10-WGP-NEXT:    v_mov_b32_e32 v2, v320691; GFX10-WGP-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc20692; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)20693; GFX10-WGP-NEXT:    global_store_dword v0, v1, s[4:5]20694; GFX10-WGP-NEXT:    s_endpgm20695;20696; GFX10-CU-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20697; GFX10-CU:       ; %bb.0: ; %entry20698; GFX10-CU-NEXT:    v_mov_b32_e32 v0, 020699; GFX10-CU-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020700; GFX10-CU-NEXT:    s_load_dword s7, s[8:9], 0x820701; GFX10-CU-NEXT:    s_load_dword s6, s[8:9], 0xc20702; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)20703; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s720704; GFX10-CU-NEXT:    v_mov_b32_e32 v3, s620705; GFX10-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20706; GFX10-CU-NEXT:    v_mov_b32_e32 v2, v320707; GFX10-CU-NEXT:    global_atomic_cmpswap v1, v0, v[1:2], s[4:5] offset:16 glc20708; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)20709; GFX10-CU-NEXT:    global_store_dword v0, v1, s[4:5]20710; GFX10-CU-NEXT:    s_endpgm20711;20712; SKIP-CACHE-INV-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20713; SKIP-CACHE-INV:       ; %bb.0: ; %entry20714; SKIP-CACHE-INV-NEXT:    s_mov_b64 s[2:3], s[4:5]20715; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x020716; SKIP-CACHE-INV-NEXT:    s_load_dword s5, s[2:3], 0x220717; SKIP-CACHE-INV-NEXT:    s_load_dword s4, s[2:3], 0x320718; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)20719; SKIP-CACHE-INV-NEXT:    s_mov_b32 s8, s120720; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 killed $sgpr0_sgpr120721; SKIP-CACHE-INV-NEXT:    s_mov_b32 s6, 0xf00020722; SKIP-CACHE-INV-NEXT:    s_mov_b32 s7, -120723; SKIP-CACHE-INV-NEXT:    ; kill: def $sgpr0 killed $sgpr0 def $sgpr0_sgpr1_sgpr2_sgpr320724; SKIP-CACHE-INV-NEXT:    s_mov_b32 s1, s820725; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, s720726; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, s620727; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s520728; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v2, s420729; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec20730; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, v220731; SKIP-CACHE-INV-NEXT:    buffer_atomic_cmpswap v[0:1], off, s[0:3], 0 offset:16 glc20732; SKIP-CACHE-INV-NEXT:    ; kill: def $vgpr0 killed $vgpr0 killed $vgpr0_vgpr1 killed $exec20733; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)20734; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 020735; SKIP-CACHE-INV-NEXT:    s_endpgm20736;20737; GFX90A-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20738; GFX90A-NOTTGSPLIT:       ; %bb.0: ; %entry20739; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 020740; GFX90A-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020741; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x820742; GFX90A-NOTTGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc20743; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20744; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s720745; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s620746; GFX90A-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20747; GFX90A-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v120748; GFX90A-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc20749; GFX90A-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)20750; GFX90A-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]20751; GFX90A-NOTTGSPLIT-NEXT:    s_endpgm20752;20753; GFX90A-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20754; GFX90A-TGSPLIT:       ; %bb.0: ; %entry20755; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 020756; GFX90A-TGSPLIT-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x020757; GFX90A-TGSPLIT-NEXT:    s_load_dword s7, s[8:9], 0x820758; GFX90A-TGSPLIT-NEXT:    s_load_dword s6, s[8:9], 0xc20759; GFX90A-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20760; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s720761; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s620762; GFX90A-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20763; GFX90A-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v120764; GFX90A-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[4:5] offset:16 glc20765; GFX90A-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)20766; GFX90A-TGSPLIT-NEXT:    global_store_dword v0, v1, s[4:5]20767; GFX90A-TGSPLIT-NEXT:    s_endpgm20768;20769; GFX942-NOTTGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20770; GFX942-NOTTGSPLIT:       ; %bb.0: ; %entry20771; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v0, 020772; GFX942-NOTTGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x020773; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x820774; GFX942-NOTTGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc20775; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20776; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v2, s320777; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v1, s220778; GFX942-NOTTGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20779; GFX942-NOTTGSPLIT-NEXT:    v_mov_b32_e32 v3, v120780; GFX942-NOTTGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc020781; GFX942-NOTTGSPLIT-NEXT:    s_waitcnt vmcnt(0)20782; GFX942-NOTTGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]20783; GFX942-NOTTGSPLIT-NEXT:    s_endpgm20784;20785; GFX942-TGSPLIT-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20786; GFX942-TGSPLIT:       ; %bb.0: ; %entry20787; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v0, 020788; GFX942-TGSPLIT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x020789; GFX942-TGSPLIT-NEXT:    s_load_dword s3, s[4:5], 0x820790; GFX942-TGSPLIT-NEXT:    s_load_dword s2, s[4:5], 0xc20791; GFX942-TGSPLIT-NEXT:    s_waitcnt lgkmcnt(0)20792; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v2, s320793; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v1, s220794; GFX942-TGSPLIT-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20795; GFX942-TGSPLIT-NEXT:    v_mov_b32_e32 v3, v120796; GFX942-TGSPLIT-NEXT:    global_atomic_cmpswap v1, v0, v[2:3], s[0:1] offset:16 sc020797; GFX942-TGSPLIT-NEXT:    s_waitcnt vmcnt(0)20798; GFX942-TGSPLIT-NEXT:    global_store_dword v0, v1, s[0:1]20799; GFX942-TGSPLIT-NEXT:    s_endpgm20800;20801; GFX11-WGP-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20802; GFX11-WGP:       ; %bb.0: ; %entry20803; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, 020804; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020805; GFX11-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x820806; GFX11-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20807; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)20808; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s320809; GFX11-WGP-NEXT:    v_mov_b32_e32 v3, s220810; GFX11-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20811; GFX11-WGP-NEXT:    v_mov_b32_e32 v2, v320812; GFX11-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20813; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)20814; GFX11-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20815; GFX11-WGP-NEXT:    s_endpgm20816;20817; GFX11-CU-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20818; GFX11-CU:       ; %bb.0: ; %entry20819; GFX11-CU-NEXT:    v_mov_b32_e32 v0, 020820; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020821; GFX11-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820822; GFX11-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20823; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)20824; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s320825; GFX11-CU-NEXT:    v_mov_b32_e32 v3, s220826; GFX11-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20827; GFX11-CU-NEXT:    v_mov_b32_e32 v2, v320828; GFX11-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 glc20829; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)20830; GFX11-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20831; GFX11-CU-NEXT:    s_endpgm20832;20833; GFX12-WGP-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20834; GFX12-WGP:       ; %bb.0: ; %entry20835; GFX12-WGP-NEXT:    v_mov_b32_e32 v0, 020836; GFX12-WGP-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020837; GFX12-WGP-NEXT:    s_load_b32 s3, s[4:5], 0x820838; GFX12-WGP-NEXT:    s_load_b32 s2, s[4:5], 0xc20839; GFX12-WGP-NEXT:    s_wait_kmcnt 0x020840; GFX12-WGP-NEXT:    v_mov_b32_e32 v1, s320841; GFX12-WGP-NEXT:    v_mov_b32_e32 v3, s220842; GFX12-WGP-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20843; GFX12-WGP-NEXT:    v_mov_b32_e32 v2, v320844; GFX12-WGP-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20845; GFX12-WGP-NEXT:    s_wait_loadcnt 0x020846; GFX12-WGP-NEXT:    global_store_b32 v0, v1, s[0:1]20847; GFX12-WGP-NEXT:    s_endpgm20848;20849; GFX12-CU-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20850; GFX12-CU:       ; %bb.0: ; %entry20851; GFX12-CU-NEXT:    v_mov_b32_e32 v0, 020852; GFX12-CU-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020853; GFX12-CU-NEXT:    s_load_b32 s3, s[4:5], 0x820854; GFX12-CU-NEXT:    s_load_b32 s2, s[4:5], 0xc20855; GFX12-CU-NEXT:    s_wait_kmcnt 0x020856; GFX12-CU-NEXT:    v_mov_b32_e32 v1, s320857; GFX12-CU-NEXT:    v_mov_b32_e32 v3, s220858; GFX12-CU-NEXT:    ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec20859; GFX12-CU-NEXT:    v_mov_b32_e32 v2, v320860; GFX12-CU-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[1:2], s[0:1] offset:16 th:TH_ATOMIC_RETURN20861; GFX12-CU-NEXT:    s_wait_loadcnt 0x020862; GFX12-CU-NEXT:    global_store_b32 v0, v1, s[0:1]20863; GFX12-CU-NEXT:    s_endpgm20864;20865; GFX1250-LABEL: global_singlethread_one_as_seq_cst_seq_cst_ret_cmpxchg:20866; GFX1250:       ; %bb.0: ; %entry20867; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 120868; GFX1250-NEXT:    v_mov_b32_e32 v0, 020869; GFX1250-NEXT:    s_load_b64 s[0:1], s[4:5], 0x020870; GFX1250-NEXT:    s_load_b32 s3, s[4:5], 0x820871; GFX1250-NEXT:    s_load_b32 s2, s[4:5], 0xc20872; GFX1250-NEXT:    s_wait_kmcnt 0x020873; GFX1250-NEXT:    v_mov_b32_e32 v2, s320874; GFX1250-NEXT:    v_mov_b32_e32 v1, s220875; GFX1250-NEXT:    ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec20876; GFX1250-NEXT:    v_mov_b32_e32 v3, v120877; GFX1250-NEXT:    s_wait_xcnt 0x020878; GFX1250-NEXT:    global_atomic_cmpswap_b32 v1, v0, v[2:3], s[0:1] offset:16 th:TH_ATOMIC_RETURN20879; GFX1250-NEXT:    s_wait_loadcnt 0x020880; GFX1250-NEXT:    global_store_b32 v0, v1, s[0:1]20881; GFX1250-NEXT:    s_endpgm20882    ptr addrspace(1) %out, i32 %in, i32 %old) {20883entry:20884  %gep = getelementptr i32, ptr addrspace(1) %out, i32 420885  %val = cmpxchg volatile ptr addrspace(1) %gep, i32 %old, i32 %in syncscope("singlethread-one-as") seq_cst seq_cst20886  %val0 = extractvalue { i32, i1 } %val, 020887  store i32 %val0, ptr addrspace(1) %out, align 420888  ret void20889}20890