brintos

brintos / llvm-project-archived public Read only

0
0
Text · 624.3 KiB · b6fe0c7 Raw
14902 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn -mcpu=gfx90a -amdgpu-atomic-optimizer-strategy=None < %s | FileCheck -check-prefixes=CHECK,GFX90A %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx950 -amdgpu-atomic-optimizer-strategy=None < %s | FileCheck -check-prefixes=CHECK,GFX950 %s4 5;---------------------------------------------------------------------6; xchg i32 cases7;---------------------------------------------------------------------8 9; Input and result use AGPR10define void @global_atomic_xchg_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {11; GFX90A-LABEL: global_atomic_xchg_i32_ret_a_a:12; GFX90A:       ; %bb.0:13; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14; GFX90A-NEXT:    ;;#ASMSTART15; GFX90A-NEXT:    ; def a016; GFX90A-NEXT:    ;;#ASMEND17; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a018; GFX90A-NEXT:    buffer_wbl219; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc20; GFX90A-NEXT:    s_waitcnt vmcnt(0)21; GFX90A-NEXT:    buffer_invl222; GFX90A-NEXT:    buffer_wbinvl1_vol23; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v024; GFX90A-NEXT:    ;;#ASMSTART25; GFX90A-NEXT:    ; use a026; GFX90A-NEXT:    ;;#ASMEND27; GFX90A-NEXT:    s_setpc_b64 s[30:31]28;29; GFX950-LABEL: global_atomic_xchg_i32_ret_a_a:30; GFX950:       ; %bb.0:31; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)32; GFX950-NEXT:    ;;#ASMSTART33; GFX950-NEXT:    ; def a034; GFX950-NEXT:    ;;#ASMEND35; GFX950-NEXT:    s_nop 036; GFX950-NEXT:    v_accvgpr_read_b32 v2, a037; GFX950-NEXT:    buffer_wbl2 sc0 sc138; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc139; GFX950-NEXT:    s_waitcnt vmcnt(0)40; GFX950-NEXT:    buffer_inv sc0 sc141; GFX950-NEXT:    v_accvgpr_write_b32 a0, v042; GFX950-NEXT:    ;;#ASMSTART43; GFX950-NEXT:    ; use a044; GFX950-NEXT:    ;;#ASMEND45; GFX950-NEXT:    s_setpc_b64 s[30:31]46  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1047  %data = call i32 asm "; def $0", "=a"()48  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst49  call void asm "; use $0", "a"(i32 %result)50  ret void51}52 53; Input is AGPR, result used as VGPR.54define void @global_atomic_xchg_i32_ret_a_v(ptr addrspace(1) %ptr) #0 {55; GFX90A-LABEL: global_atomic_xchg_i32_ret_a_v:56; GFX90A:       ; %bb.0:57; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)58; GFX90A-NEXT:    ;;#ASMSTART59; GFX90A-NEXT:    ; def a060; GFX90A-NEXT:    ;;#ASMEND61; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a062; GFX90A-NEXT:    buffer_wbl263; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc64; GFX90A-NEXT:    s_waitcnt vmcnt(0)65; GFX90A-NEXT:    buffer_invl266; GFX90A-NEXT:    buffer_wbinvl1_vol67; GFX90A-NEXT:    ;;#ASMSTART68; GFX90A-NEXT:    ; use v069; GFX90A-NEXT:    ;;#ASMEND70; GFX90A-NEXT:    s_setpc_b64 s[30:31]71;72; GFX950-LABEL: global_atomic_xchg_i32_ret_a_v:73; GFX950:       ; %bb.0:74; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)75; GFX950-NEXT:    ;;#ASMSTART76; GFX950-NEXT:    ; def a077; GFX950-NEXT:    ;;#ASMEND78; GFX950-NEXT:    s_nop 079; GFX950-NEXT:    v_accvgpr_read_b32 v2, a080; GFX950-NEXT:    buffer_wbl2 sc0 sc181; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc182; GFX950-NEXT:    s_waitcnt vmcnt(0)83; GFX950-NEXT:    buffer_inv sc0 sc184; GFX950-NEXT:    ;;#ASMSTART85; GFX950-NEXT:    ; use v086; GFX950-NEXT:    ;;#ASMEND87; GFX950-NEXT:    s_setpc_b64 s[30:31]88  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1089  %data = call i32 asm "; def $0", "=a"()90  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst91  call void asm "; use $0", "v"(i32 %result)92  ret void93}94 95; Input is VGPR, result used as AGPR96define void @global_atomic_xchg_i32_ret_v_a(ptr addrspace(1) %ptr) #0 {97; GFX90A-LABEL: global_atomic_xchg_i32_ret_v_a:98; GFX90A:       ; %bb.0:99; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)100; GFX90A-NEXT:    ;;#ASMSTART101; GFX90A-NEXT:    ; def v2102; GFX90A-NEXT:    ;;#ASMEND103; GFX90A-NEXT:    buffer_wbl2104; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc105; GFX90A-NEXT:    s_waitcnt vmcnt(0)106; GFX90A-NEXT:    buffer_invl2107; GFX90A-NEXT:    buffer_wbinvl1_vol108; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v0109; GFX90A-NEXT:    ;;#ASMSTART110; GFX90A-NEXT:    ; use a0111; GFX90A-NEXT:    ;;#ASMEND112; GFX90A-NEXT:    s_setpc_b64 s[30:31]113;114; GFX950-LABEL: global_atomic_xchg_i32_ret_v_a:115; GFX950:       ; %bb.0:116; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)117; GFX950-NEXT:    ;;#ASMSTART118; GFX950-NEXT:    ; def v2119; GFX950-NEXT:    ;;#ASMEND120; GFX950-NEXT:    buffer_wbl2 sc0 sc1121; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc1122; GFX950-NEXT:    s_waitcnt vmcnt(0)123; GFX950-NEXT:    buffer_inv sc0 sc1124; GFX950-NEXT:    v_accvgpr_write_b32 a0, v0125; GFX950-NEXT:    ;;#ASMSTART126; GFX950-NEXT:    ; use a0127; GFX950-NEXT:    ;;#ASMEND128; GFX950-NEXT:    s_setpc_b64 s[30:31]129  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10130  %data = call i32 asm "; def $0", "=v"()131  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst132  call void asm "; use $0", "a"(i32 %result)133  ret void134}135 136; Input is AV, result also used as AV137define void @global_atomic_xchg_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {138; GFX90A-LABEL: global_atomic_xchg_i32_ret_av_av:139; GFX90A:       ; %bb.0:140; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)141; GFX90A-NEXT:    ;;#ASMSTART142; GFX90A-NEXT:    ; def v2143; GFX90A-NEXT:    ;;#ASMEND144; GFX90A-NEXT:    buffer_wbl2145; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc146; GFX90A-NEXT:    s_waitcnt vmcnt(0)147; GFX90A-NEXT:    buffer_invl2148; GFX90A-NEXT:    buffer_wbinvl1_vol149; GFX90A-NEXT:    ;;#ASMSTART150; GFX90A-NEXT:    ; use v0151; GFX90A-NEXT:    ;;#ASMEND152; GFX90A-NEXT:    s_setpc_b64 s[30:31]153;154; GFX950-LABEL: global_atomic_xchg_i32_ret_av_av:155; GFX950:       ; %bb.0:156; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)157; GFX950-NEXT:    ;;#ASMSTART158; GFX950-NEXT:    ; def v2159; GFX950-NEXT:    ;;#ASMEND160; GFX950-NEXT:    buffer_wbl2 sc0 sc1161; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc1162; GFX950-NEXT:    s_waitcnt vmcnt(0)163; GFX950-NEXT:    buffer_inv sc0 sc1164; GFX950-NEXT:    ;;#ASMSTART165; GFX950-NEXT:    ; use v0166; GFX950-NEXT:    ;;#ASMEND167; GFX950-NEXT:    s_setpc_b64 s[30:31]168  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10169  %data = call i32 asm "; def $0", "=^VA"()170  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst171  call void asm "; use $0", "^VA"(i32 %result)172  ret void173}174 175; Input is AV, used as v176define void @global_atomic_xchg_i32_ret_av_v(ptr addrspace(1) %ptr) #0 {177; GFX90A-LABEL: global_atomic_xchg_i32_ret_av_v:178; GFX90A:       ; %bb.0:179; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)180; GFX90A-NEXT:    ;;#ASMSTART181; GFX90A-NEXT:    ; def v2182; GFX90A-NEXT:    ;;#ASMEND183; GFX90A-NEXT:    buffer_wbl2184; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc185; GFX90A-NEXT:    s_waitcnt vmcnt(0)186; GFX90A-NEXT:    buffer_invl2187; GFX90A-NEXT:    buffer_wbinvl1_vol188; GFX90A-NEXT:    ;;#ASMSTART189; GFX90A-NEXT:    ; use v0190; GFX90A-NEXT:    ;;#ASMEND191; GFX90A-NEXT:    s_setpc_b64 s[30:31]192;193; GFX950-LABEL: global_atomic_xchg_i32_ret_av_v:194; GFX950:       ; %bb.0:195; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)196; GFX950-NEXT:    ;;#ASMSTART197; GFX950-NEXT:    ; def v2198; GFX950-NEXT:    ;;#ASMEND199; GFX950-NEXT:    buffer_wbl2 sc0 sc1200; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc1201; GFX950-NEXT:    s_waitcnt vmcnt(0)202; GFX950-NEXT:    buffer_inv sc0 sc1203; GFX950-NEXT:    ;;#ASMSTART204; GFX950-NEXT:    ; use v0205; GFX950-NEXT:    ;;#ASMEND206; GFX950-NEXT:    s_setpc_b64 s[30:31]207  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10208  %data = call i32 asm "; def $0", "=^VA"()209  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst210  call void asm "; use $0", "v"(i32 %result)211  ret void212}213 214; Input is AV, used as a215define void @global_atomic_xchg_i32_ret_av_a(ptr addrspace(1) %ptr) #0 {216; GFX90A-LABEL: global_atomic_xchg_i32_ret_av_a:217; GFX90A:       ; %bb.0:218; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)219; GFX90A-NEXT:    ;;#ASMSTART220; GFX90A-NEXT:    ; def v2221; GFX90A-NEXT:    ;;#ASMEND222; GFX90A-NEXT:    buffer_wbl2223; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc224; GFX90A-NEXT:    s_waitcnt vmcnt(0)225; GFX90A-NEXT:    buffer_invl2226; GFX90A-NEXT:    buffer_wbinvl1_vol227; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v0228; GFX90A-NEXT:    ;;#ASMSTART229; GFX90A-NEXT:    ; use a0230; GFX90A-NEXT:    ;;#ASMEND231; GFX90A-NEXT:    s_setpc_b64 s[30:31]232;233; GFX950-LABEL: global_atomic_xchg_i32_ret_av_a:234; GFX950:       ; %bb.0:235; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)236; GFX950-NEXT:    ;;#ASMSTART237; GFX950-NEXT:    ; def v2238; GFX950-NEXT:    ;;#ASMEND239; GFX950-NEXT:    buffer_wbl2 sc0 sc1240; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc1241; GFX950-NEXT:    s_waitcnt vmcnt(0)242; GFX950-NEXT:    buffer_inv sc0 sc1243; GFX950-NEXT:    v_accvgpr_write_b32 a0, v0244; GFX950-NEXT:    ;;#ASMSTART245; GFX950-NEXT:    ; use a0246; GFX950-NEXT:    ;;#ASMEND247; GFX950-NEXT:    s_setpc_b64 s[30:31]248  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10249  %data = call i32 asm "; def $0", "=^VA"()250  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst251  call void asm "; use $0", "a"(i32 %result)252  ret void253}254 255; Input is a, result used as AV256define void @global_atomic_xchg_i32_ret_a_av(ptr addrspace(1) %ptr) #0 {257; GFX90A-LABEL: global_atomic_xchg_i32_ret_a_av:258; GFX90A:       ; %bb.0:259; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)260; GFX90A-NEXT:    ;;#ASMSTART261; GFX90A-NEXT:    ; def a0262; GFX90A-NEXT:    ;;#ASMEND263; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a0264; GFX90A-NEXT:    buffer_wbl2265; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc266; GFX90A-NEXT:    s_waitcnt vmcnt(0)267; GFX90A-NEXT:    buffer_invl2268; GFX90A-NEXT:    buffer_wbinvl1_vol269; GFX90A-NEXT:    ;;#ASMSTART270; GFX90A-NEXT:    ; use v0271; GFX90A-NEXT:    ;;#ASMEND272; GFX90A-NEXT:    s_setpc_b64 s[30:31]273;274; GFX950-LABEL: global_atomic_xchg_i32_ret_a_av:275; GFX950:       ; %bb.0:276; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)277; GFX950-NEXT:    ;;#ASMSTART278; GFX950-NEXT:    ; def a0279; GFX950-NEXT:    ;;#ASMEND280; GFX950-NEXT:    s_nop 0281; GFX950-NEXT:    v_accvgpr_read_b32 v2, a0282; GFX950-NEXT:    buffer_wbl2 sc0 sc1283; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc1284; GFX950-NEXT:    s_waitcnt vmcnt(0)285; GFX950-NEXT:    buffer_inv sc0 sc1286; GFX950-NEXT:    ;;#ASMSTART287; GFX950-NEXT:    ; use v0288; GFX950-NEXT:    ;;#ASMEND289; GFX950-NEXT:    s_setpc_b64 s[30:31]290  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10291  %data = call i32 asm "; def $0", "=a"()292  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst293  call void asm "; use $0", "^VA"(i32 %result)294  ret void295}296 297; Input is v, result used as AV298define void @global_atomic_xchg_i32_ret_v_av(ptr addrspace(1) %ptr) #0 {299; GFX90A-LABEL: global_atomic_xchg_i32_ret_v_av:300; GFX90A:       ; %bb.0:301; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)302; GFX90A-NEXT:    ;;#ASMSTART303; GFX90A-NEXT:    ; def v2304; GFX90A-NEXT:    ;;#ASMEND305; GFX90A-NEXT:    buffer_wbl2306; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc307; GFX90A-NEXT:    s_waitcnt vmcnt(0)308; GFX90A-NEXT:    buffer_invl2309; GFX90A-NEXT:    buffer_wbinvl1_vol310; GFX90A-NEXT:    ;;#ASMSTART311; GFX90A-NEXT:    ; use v0312; GFX90A-NEXT:    ;;#ASMEND313; GFX90A-NEXT:    s_setpc_b64 s[30:31]314;315; GFX950-LABEL: global_atomic_xchg_i32_ret_v_av:316; GFX950:       ; %bb.0:317; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)318; GFX950-NEXT:    ;;#ASMSTART319; GFX950-NEXT:    ; def v2320; GFX950-NEXT:    ;;#ASMEND321; GFX950-NEXT:    buffer_wbl2 sc0 sc1322; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc1323; GFX950-NEXT:    s_waitcnt vmcnt(0)324; GFX950-NEXT:    buffer_inv sc0 sc1325; GFX950-NEXT:    ;;#ASMSTART326; GFX950-NEXT:    ; use v0327; GFX950-NEXT:    ;;#ASMEND328; GFX950-NEXT:    s_setpc_b64 s[30:31]329  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10330  %data = call i32 asm "; def $0", "=v"()331  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst332  call void asm "; use $0", "^VA"(i32 %result)333  ret void334}335 336define void @global_atomic_xchg_i32_ret_av_av_no_agprs(ptr addrspace(1) %ptr) #0 {337; GFX90A-LABEL: global_atomic_xchg_i32_ret_av_av_no_agprs:338; GFX90A:       ; %bb.0:339; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)340; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v0341; GFX90A-NEXT:    v_accvgpr_write_b32 a3, v40 ; Reload Reuse342; GFX90A-NEXT:    v_accvgpr_write_b32 a4, v41 ; Reload Reuse343; GFX90A-NEXT:    v_accvgpr_write_b32 a5, v42 ; Reload Reuse344; GFX90A-NEXT:    v_accvgpr_write_b32 a6, v43 ; Reload Reuse345; GFX90A-NEXT:    v_accvgpr_write_b32 a7, v44 ; Reload Reuse346; GFX90A-NEXT:    v_accvgpr_write_b32 a8, v45 ; Reload Reuse347; GFX90A-NEXT:    v_accvgpr_write_b32 a9, v46 ; Reload Reuse348; GFX90A-NEXT:    v_accvgpr_write_b32 a10, v47 ; Reload Reuse349; GFX90A-NEXT:    v_accvgpr_write_b32 a11, v56 ; Reload Reuse350; GFX90A-NEXT:    v_accvgpr_write_b32 a12, v57 ; Reload Reuse351; GFX90A-NEXT:    v_accvgpr_write_b32 a13, v58 ; Reload Reuse352; GFX90A-NEXT:    v_accvgpr_write_b32 a14, v59 ; Reload Reuse353; GFX90A-NEXT:    v_accvgpr_write_b32 a15, v60 ; Reload Reuse354; GFX90A-NEXT:    v_accvgpr_write_b32 a16, v61 ; Reload Reuse355; GFX90A-NEXT:    v_accvgpr_write_b32 a17, v62 ; Reload Reuse356; GFX90A-NEXT:    v_accvgpr_write_b32 a18, v63 ; Reload Reuse357; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v1358; GFX90A-NEXT:    ;;#ASMSTART359; GFX90A-NEXT:    ; def v[0:31]360; GFX90A-NEXT:    ;;#ASMEND361; GFX90A-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill362; GFX90A-NEXT:    s_nop 0363; GFX90A-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill364; GFX90A-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill365; GFX90A-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill366; GFX90A-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill367; GFX90A-NEXT:    buffer_store_dword v5, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill368; GFX90A-NEXT:    buffer_store_dword v6, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill369; GFX90A-NEXT:    buffer_store_dword v7, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill370; GFX90A-NEXT:    buffer_store_dword v8, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill371; GFX90A-NEXT:    buffer_store_dword v9, off, s[0:3], s32 offset:36 ; 4-byte Folded Spill372; GFX90A-NEXT:    buffer_store_dword v10, off, s[0:3], s32 offset:40 ; 4-byte Folded Spill373; GFX90A-NEXT:    buffer_store_dword v11, off, s[0:3], s32 offset:44 ; 4-byte Folded Spill374; GFX90A-NEXT:    buffer_store_dword v12, off, s[0:3], s32 offset:48 ; 4-byte Folded Spill375; GFX90A-NEXT:    buffer_store_dword v13, off, s[0:3], s32 offset:52 ; 4-byte Folded Spill376; GFX90A-NEXT:    buffer_store_dword v14, off, s[0:3], s32 offset:56 ; 4-byte Folded Spill377; GFX90A-NEXT:    buffer_store_dword v15, off, s[0:3], s32 offset:60 ; 4-byte Folded Spill378; GFX90A-NEXT:    buffer_store_dword v16, off, s[0:3], s32 offset:64 ; 4-byte Folded Spill379; GFX90A-NEXT:    buffer_store_dword v17, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill380; GFX90A-NEXT:    buffer_store_dword v18, off, s[0:3], s32 offset:72 ; 4-byte Folded Spill381; GFX90A-NEXT:    ;;#ASMSTART382; GFX90A-NEXT:    ; def a2383; GFX90A-NEXT:    ;;#ASMEND384; GFX90A-NEXT:    v_accvgpr_write_b32 a19, v31 ; Reload Reuse385; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a0386; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a1387; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a2388; GFX90A-NEXT:    buffer_wbl2389; GFX90A-NEXT:    s_waitcnt vmcnt(0)390; GFX90A-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 glc391; GFX90A-NEXT:    s_waitcnt vmcnt(0)392; GFX90A-NEXT:    buffer_invl2393; GFX90A-NEXT:    buffer_wbinvl1_vol394; GFX90A-NEXT:    v_accvgpr_write_b32 a31, v19 ; Reload Reuse395; GFX90A-NEXT:    v_accvgpr_write_b32 a30, v20 ; Reload Reuse396; GFX90A-NEXT:    v_accvgpr_write_b32 a29, v21 ; Reload Reuse397; GFX90A-NEXT:    v_accvgpr_write_b32 a28, v22 ; Reload Reuse398; GFX90A-NEXT:    v_accvgpr_write_b32 a27, v23 ; Reload Reuse399; GFX90A-NEXT:    v_accvgpr_write_b32 a26, v24 ; Reload Reuse400; GFX90A-NEXT:    v_accvgpr_write_b32 a25, v25 ; Reload Reuse401; GFX90A-NEXT:    v_accvgpr_write_b32 a24, v26 ; Reload Reuse402; GFX90A-NEXT:    v_accvgpr_write_b32 a23, v27 ; Reload Reuse403; GFX90A-NEXT:    v_accvgpr_write_b32 a22, v28 ; Reload Reuse404; GFX90A-NEXT:    v_accvgpr_write_b32 a21, v29 ; Reload Reuse405; GFX90A-NEXT:    v_accvgpr_write_b32 a20, v30 ; Reload Reuse406; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v0407; GFX90A-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload408; GFX90A-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload409; GFX90A-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload410; GFX90A-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload411; GFX90A-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload412; GFX90A-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload413; GFX90A-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload414; GFX90A-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload415; GFX90A-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload416; GFX90A-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:36 ; 4-byte Folded Reload417; GFX90A-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:40 ; 4-byte Folded Reload418; GFX90A-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:44 ; 4-byte Folded Reload419; GFX90A-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:48 ; 4-byte Folded Reload420; GFX90A-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:52 ; 4-byte Folded Reload421; GFX90A-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:56 ; 4-byte Folded Reload422; GFX90A-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:60 ; 4-byte Folded Reload423; GFX90A-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:64 ; 4-byte Folded Reload424; GFX90A-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload425; GFX90A-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:72 ; 4-byte Folded Reload426; GFX90A-NEXT:    v_accvgpr_read_b32 v19, a31 ; Reload Reuse427; GFX90A-NEXT:    v_accvgpr_read_b32 v20, a30 ; Reload Reuse428; GFX90A-NEXT:    v_accvgpr_read_b32 v21, a29 ; Reload Reuse429; GFX90A-NEXT:    v_accvgpr_read_b32 v22, a28 ; Reload Reuse430; GFX90A-NEXT:    v_accvgpr_read_b32 v23, a27 ; Reload Reuse431; GFX90A-NEXT:    v_accvgpr_read_b32 v24, a26 ; Reload Reuse432; GFX90A-NEXT:    v_accvgpr_read_b32 v25, a25 ; Reload Reuse433; GFX90A-NEXT:    v_accvgpr_read_b32 v26, a24 ; Reload Reuse434; GFX90A-NEXT:    v_accvgpr_read_b32 v27, a23 ; Reload Reuse435; GFX90A-NEXT:    v_accvgpr_read_b32 v28, a22 ; Reload Reuse436; GFX90A-NEXT:    v_accvgpr_read_b32 v29, a21 ; Reload Reuse437; GFX90A-NEXT:    v_accvgpr_read_b32 v30, a20 ; Reload Reuse438; GFX90A-NEXT:    ;;#ASMSTART439; GFX90A-NEXT:    ; use a0440; GFX90A-NEXT:    ;;#ASMEND441; GFX90A-NEXT:    s_waitcnt vmcnt(0)442; GFX90A-NEXT:    v_accvgpr_read_b32 v31, a19 ; Reload Reuse443; GFX90A-NEXT:    ;;#ASMSTART444; GFX90A-NEXT:    ; use v[0:31]445; GFX90A-NEXT:    ;;#ASMEND446; GFX90A-NEXT:    v_accvgpr_read_b32 v63, a18 ; Reload Reuse447; GFX90A-NEXT:    v_accvgpr_read_b32 v62, a17 ; Reload Reuse448; GFX90A-NEXT:    v_accvgpr_read_b32 v61, a16 ; Reload Reuse449; GFX90A-NEXT:    v_accvgpr_read_b32 v60, a15 ; Reload Reuse450; GFX90A-NEXT:    v_accvgpr_read_b32 v59, a14 ; Reload Reuse451; GFX90A-NEXT:    v_accvgpr_read_b32 v58, a13 ; Reload Reuse452; GFX90A-NEXT:    v_accvgpr_read_b32 v57, a12 ; Reload Reuse453; GFX90A-NEXT:    v_accvgpr_read_b32 v56, a11 ; Reload Reuse454; GFX90A-NEXT:    v_accvgpr_read_b32 v47, a10 ; Reload Reuse455; GFX90A-NEXT:    v_accvgpr_read_b32 v46, a9 ; Reload Reuse456; GFX90A-NEXT:    v_accvgpr_read_b32 v45, a8 ; Reload Reuse457; GFX90A-NEXT:    v_accvgpr_read_b32 v44, a7 ; Reload Reuse458; GFX90A-NEXT:    v_accvgpr_read_b32 v43, a6 ; Reload Reuse459; GFX90A-NEXT:    v_accvgpr_read_b32 v42, a5 ; Reload Reuse460; GFX90A-NEXT:    v_accvgpr_read_b32 v41, a4 ; Reload Reuse461; GFX90A-NEXT:    v_accvgpr_read_b32 v40, a3 ; Reload Reuse462; GFX90A-NEXT:    s_setpc_b64 s[30:31]463;464; GFX950-LABEL: global_atomic_xchg_i32_ret_av_av_no_agprs:465; GFX950:       ; %bb.0:466; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)467; GFX950-NEXT:    v_accvgpr_write_b32 a0, v0468; GFX950-NEXT:    v_accvgpr_write_b32 a3, v40 ; Reload Reuse469; GFX950-NEXT:    v_accvgpr_write_b32 a4, v41 ; Reload Reuse470; GFX950-NEXT:    v_accvgpr_write_b32 a5, v42 ; Reload Reuse471; GFX950-NEXT:    v_accvgpr_write_b32 a6, v43 ; Reload Reuse472; GFX950-NEXT:    v_accvgpr_write_b32 a7, v44 ; Reload Reuse473; GFX950-NEXT:    v_accvgpr_write_b32 a8, v45 ; Reload Reuse474; GFX950-NEXT:    v_accvgpr_write_b32 a9, v46 ; Reload Reuse475; GFX950-NEXT:    v_accvgpr_write_b32 a10, v47 ; Reload Reuse476; GFX950-NEXT:    v_accvgpr_write_b32 a11, v56 ; Reload Reuse477; GFX950-NEXT:    v_accvgpr_write_b32 a12, v57 ; Reload Reuse478; GFX950-NEXT:    v_accvgpr_write_b32 a13, v58 ; Reload Reuse479; GFX950-NEXT:    v_accvgpr_write_b32 a14, v59 ; Reload Reuse480; GFX950-NEXT:    v_accvgpr_write_b32 a15, v60 ; Reload Reuse481; GFX950-NEXT:    v_accvgpr_write_b32 a16, v61 ; Reload Reuse482; GFX950-NEXT:    v_accvgpr_write_b32 a17, v62 ; Reload Reuse483; GFX950-NEXT:    v_accvgpr_write_b32 a18, v63 ; Reload Reuse484; GFX950-NEXT:    v_accvgpr_write_b32 a1, v1485; GFX950-NEXT:    ;;#ASMSTART486; GFX950-NEXT:    ; def v[0:31]487; GFX950-NEXT:    ;;#ASMEND488; GFX950-NEXT:    scratch_store_dwordx4 off, v[0:3], s32 ; 16-byte Folded Spill489; GFX950-NEXT:    s_nop 0490; GFX950-NEXT:    scratch_store_dwordx4 off, v[4:7], s32 offset:16 ; 16-byte Folded Spill491; GFX950-NEXT:    scratch_store_dwordx4 off, v[8:11], s32 offset:32 ; 16-byte Folded Spill492; GFX950-NEXT:    scratch_store_dwordx4 off, v[12:15], s32 offset:48 ; 16-byte Folded Spill493; GFX950-NEXT:    ;;#ASMSTART494; GFX950-NEXT:    ; def a2495; GFX950-NEXT:    ;;#ASMEND496; GFX950-NEXT:    v_accvgpr_write_b32 a19, v31 ; Reload Reuse497; GFX950-NEXT:    v_accvgpr_write_b32 a20, v30 ; Reload Reuse498; GFX950-NEXT:    v_accvgpr_write_b32 a21, v29 ; Reload Reuse499; GFX950-NEXT:    v_accvgpr_write_b32 a22, v28 ; Reload Reuse500; GFX950-NEXT:    v_accvgpr_read_b32 v0, a0501; GFX950-NEXT:    scratch_store_dwordx3 off, v[16:18], s32 offset:64 ; 12-byte Folded Spill502; GFX950-NEXT:    v_accvgpr_read_b32 v1, a1503; GFX950-NEXT:    v_accvgpr_read_b32 v2, a2504; GFX950-NEXT:    buffer_wbl2 sc0 sc1505; GFX950-NEXT:    s_waitcnt vmcnt(0)506; GFX950-NEXT:    global_atomic_swap v0, v[0:1], v2, off offset:40 sc0 sc1507; GFX950-NEXT:    s_waitcnt vmcnt(0)508; GFX950-NEXT:    buffer_inv sc0 sc1509; GFX950-NEXT:    v_accvgpr_write_b32 a31, v19 ; Reload Reuse510; GFX950-NEXT:    v_accvgpr_write_b32 a27, v23 ; Reload Reuse511; GFX950-NEXT:    v_accvgpr_write_b32 a28, v22 ; Reload Reuse512; GFX950-NEXT:    v_accvgpr_write_b32 a29, v21 ; Reload Reuse513; GFX950-NEXT:    v_accvgpr_write_b32 a30, v20 ; Reload Reuse514; GFX950-NEXT:    v_accvgpr_write_b32 a23, v27 ; Reload Reuse515; GFX950-NEXT:    v_accvgpr_write_b32 a24, v26 ; Reload Reuse516; GFX950-NEXT:    v_accvgpr_write_b32 a25, v25 ; Reload Reuse517; GFX950-NEXT:    v_accvgpr_write_b32 a26, v24 ; Reload Reuse518; GFX950-NEXT:    v_accvgpr_write_b32 a0, v0519; GFX950-NEXT:    scratch_load_dwordx4 v[0:3], off, s32 ; 16-byte Folded Reload520; GFX950-NEXT:    scratch_load_dwordx4 v[4:7], off, s32 offset:16 ; 16-byte Folded Reload521; GFX950-NEXT:    scratch_load_dwordx4 v[8:11], off, s32 offset:32 ; 16-byte Folded Reload522; GFX950-NEXT:    scratch_load_dwordx4 v[12:15], off, s32 offset:48 ; 16-byte Folded Reload523; GFX950-NEXT:    v_accvgpr_read_b32 v19, a31 ; Reload Reuse524; GFX950-NEXT:    scratch_load_dwordx3 v[16:18], off, s32 offset:64 ; 12-byte Folded Reload525; GFX950-NEXT:    v_accvgpr_read_b32 v23, a27 ; Reload Reuse526; GFX950-NEXT:    v_accvgpr_read_b32 v22, a28 ; Reload Reuse527; GFX950-NEXT:    v_accvgpr_read_b32 v21, a29 ; Reload Reuse528; GFX950-NEXT:    v_accvgpr_read_b32 v20, a30 ; Reload Reuse529; GFX950-NEXT:    v_accvgpr_read_b32 v27, a23 ; Reload Reuse530; GFX950-NEXT:    v_accvgpr_read_b32 v26, a24 ; Reload Reuse531; GFX950-NEXT:    v_accvgpr_read_b32 v25, a25 ; Reload Reuse532; GFX950-NEXT:    v_accvgpr_read_b32 v24, a26 ; Reload Reuse533; GFX950-NEXT:    ;;#ASMSTART534; GFX950-NEXT:    ; use a0535; GFX950-NEXT:    ;;#ASMEND536; GFX950-NEXT:    s_waitcnt vmcnt(0)537; GFX950-NEXT:    v_accvgpr_read_b32 v31, a19 ; Reload Reuse538; GFX950-NEXT:    v_accvgpr_read_b32 v30, a20 ; Reload Reuse539; GFX950-NEXT:    v_accvgpr_read_b32 v29, a21 ; Reload Reuse540; GFX950-NEXT:    v_accvgpr_read_b32 v28, a22 ; Reload Reuse541; GFX950-NEXT:    ;;#ASMSTART542; GFX950-NEXT:    ; use v[0:31]543; GFX950-NEXT:    ;;#ASMEND544; GFX950-NEXT:    v_accvgpr_read_b32 v63, a18 ; Reload Reuse545; GFX950-NEXT:    v_accvgpr_read_b32 v62, a17 ; Reload Reuse546; GFX950-NEXT:    v_accvgpr_read_b32 v61, a16 ; Reload Reuse547; GFX950-NEXT:    v_accvgpr_read_b32 v60, a15 ; Reload Reuse548; GFX950-NEXT:    v_accvgpr_read_b32 v59, a14 ; Reload Reuse549; GFX950-NEXT:    v_accvgpr_read_b32 v58, a13 ; Reload Reuse550; GFX950-NEXT:    v_accvgpr_read_b32 v57, a12 ; Reload Reuse551; GFX950-NEXT:    v_accvgpr_read_b32 v56, a11 ; Reload Reuse552; GFX950-NEXT:    v_accvgpr_read_b32 v47, a10 ; Reload Reuse553; GFX950-NEXT:    v_accvgpr_read_b32 v46, a9 ; Reload Reuse554; GFX950-NEXT:    v_accvgpr_read_b32 v45, a8 ; Reload Reuse555; GFX950-NEXT:    v_accvgpr_read_b32 v44, a7 ; Reload Reuse556; GFX950-NEXT:    v_accvgpr_read_b32 v43, a6 ; Reload Reuse557; GFX950-NEXT:    v_accvgpr_read_b32 v42, a5 ; Reload Reuse558; GFX950-NEXT:    v_accvgpr_read_b32 v41, a4 ; Reload Reuse559; GFX950-NEXT:    v_accvgpr_read_b32 v40, a3 ; Reload Reuse560; GFX950-NEXT:    s_setpc_b64 s[30:31]561  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10562  %data = call i32 asm "; def $0", "=^VA"()563  %vgpr.def = call { <32 x i32>, <32 x i32> }  asm sideeffect "; def $0", "=${v[0:31]},=${v[32:63]}"()564  %vgpr.0 = extractvalue { <32 x i32>, <32 x i32> } %vgpr.def, 0565  %vgpr.1 = extractvalue { <32 x i32>, <32 x i32> } %vgpr.def, 1566  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst567  call void asm sideeffect "; use $0", "{v[0:31]},{v[32:63]}"(<32 x i32> %vgpr.0, <32 x i32> %vgpr.1)568  call void asm "; use $0", "^VA"(i32 %result)569  ret void570}571 572define void @global_atomic_xchg_i32_noret_a(ptr addrspace(1) %ptr) #0 {573; GFX90A-LABEL: global_atomic_xchg_i32_noret_a:574; GFX90A:       ; %bb.0:575; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)576; GFX90A-NEXT:    ;;#ASMSTART577; GFX90A-NEXT:    ; def a0578; GFX90A-NEXT:    ;;#ASMEND579; GFX90A-NEXT:    buffer_wbl2580; GFX90A-NEXT:    global_atomic_swap v[0:1], a0, off offset:40581; GFX90A-NEXT:    s_waitcnt vmcnt(0)582; GFX90A-NEXT:    buffer_invl2583; GFX90A-NEXT:    buffer_wbinvl1_vol584; GFX90A-NEXT:    s_setpc_b64 s[30:31]585;586; GFX950-LABEL: global_atomic_xchg_i32_noret_a:587; GFX950:       ; %bb.0:588; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)589; GFX950-NEXT:    ;;#ASMSTART590; GFX950-NEXT:    ; def a0591; GFX950-NEXT:    ;;#ASMEND592; GFX950-NEXT:    buffer_wbl2 sc0 sc1593; GFX950-NEXT:    global_atomic_swap v[0:1], a0, off offset:40 sc1594; GFX950-NEXT:    s_waitcnt vmcnt(0)595; GFX950-NEXT:    buffer_inv sc0 sc1596; GFX950-NEXT:    s_setpc_b64 s[30:31]597  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10598  %data = call i32 asm "; def $0", "=a"()599  %unused = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst600  ret void601}602 603define void @global_atomic_xchg_i32_noret_av(ptr addrspace(1) %ptr) #0 {604; GFX90A-LABEL: global_atomic_xchg_i32_noret_av:605; GFX90A:       ; %bb.0:606; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)607; GFX90A-NEXT:    ;;#ASMSTART608; GFX90A-NEXT:    ; def v2609; GFX90A-NEXT:    ;;#ASMEND610; GFX90A-NEXT:    buffer_wbl2611; GFX90A-NEXT:    global_atomic_swap v[0:1], v2, off offset:40612; GFX90A-NEXT:    s_waitcnt vmcnt(0)613; GFX90A-NEXT:    buffer_invl2614; GFX90A-NEXT:    buffer_wbinvl1_vol615; GFX90A-NEXT:    s_setpc_b64 s[30:31]616;617; GFX950-LABEL: global_atomic_xchg_i32_noret_av:618; GFX950:       ; %bb.0:619; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)620; GFX950-NEXT:    ;;#ASMSTART621; GFX950-NEXT:    ; def v2622; GFX950-NEXT:    ;;#ASMEND623; GFX950-NEXT:    buffer_wbl2 sc0 sc1624; GFX950-NEXT:    global_atomic_swap v[0:1], v2, off offset:40 sc1625; GFX950-NEXT:    s_waitcnt vmcnt(0)626; GFX950-NEXT:    buffer_inv sc0 sc1627; GFX950-NEXT:    s_setpc_b64 s[30:31]628  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 10629  %data = call i32 asm "; def $0", "=^VA"()630  %unused = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data seq_cst631  ret void632}633 634;---------------------------------------------------------------------635; xchg i64 cases636;---------------------------------------------------------------------637 638; Input and result use AGPR639define void @global_atomic_xchg_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {640; GFX90A-LABEL: global_atomic_xchg_i64_ret_a_a:641; GFX90A:       ; %bb.0:642; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)643; GFX90A-NEXT:    ;;#ASMSTART644; GFX90A-NEXT:    ; def a[0:1]645; GFX90A-NEXT:    ;;#ASMEND646; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a1647; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a0648; GFX90A-NEXT:    buffer_wbl2649; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc650; GFX90A-NEXT:    s_waitcnt vmcnt(0)651; GFX90A-NEXT:    buffer_invl2652; GFX90A-NEXT:    buffer_wbinvl1_vol653; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v0654; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v1655; GFX90A-NEXT:    ;;#ASMSTART656; GFX90A-NEXT:    ; use a[0:1]657; GFX90A-NEXT:    ;;#ASMEND658; GFX90A-NEXT:    s_setpc_b64 s[30:31]659;660; GFX950-LABEL: global_atomic_xchg_i64_ret_a_a:661; GFX950:       ; %bb.0:662; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)663; GFX950-NEXT:    ;;#ASMSTART664; GFX950-NEXT:    ; def a[0:1]665; GFX950-NEXT:    ;;#ASMEND666; GFX950-NEXT:    s_nop 0667; GFX950-NEXT:    v_accvgpr_read_b32 v3, a1668; GFX950-NEXT:    v_accvgpr_read_b32 v2, a0669; GFX950-NEXT:    buffer_wbl2 sc0 sc1670; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1671; GFX950-NEXT:    s_waitcnt vmcnt(0)672; GFX950-NEXT:    buffer_inv sc0 sc1673; GFX950-NEXT:    v_accvgpr_write_b32 a0, v0674; GFX950-NEXT:    v_accvgpr_write_b32 a1, v1675; GFX950-NEXT:    ;;#ASMSTART676; GFX950-NEXT:    ; use a[0:1]677; GFX950-NEXT:    ;;#ASMEND678; GFX950-NEXT:    s_setpc_b64 s[30:31]679  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10680  %data = call i64 asm "; def $0", "=a"()681  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst682  call void asm "; use $0", "a"(i64 %result)683  ret void684}685 686; Input is AGPR, result used as VGPR.687define void @global_atomic_xchg_i64_ret_a_v(ptr addrspace(1) %ptr) #0 {688; GFX90A-LABEL: global_atomic_xchg_i64_ret_a_v:689; GFX90A:       ; %bb.0:690; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)691; GFX90A-NEXT:    ;;#ASMSTART692; GFX90A-NEXT:    ; def a[0:1]693; GFX90A-NEXT:    ;;#ASMEND694; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a1695; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a0696; GFX90A-NEXT:    buffer_wbl2697; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc698; GFX90A-NEXT:    s_waitcnt vmcnt(0)699; GFX90A-NEXT:    buffer_invl2700; GFX90A-NEXT:    buffer_wbinvl1_vol701; GFX90A-NEXT:    ;;#ASMSTART702; GFX90A-NEXT:    ; use v[0:1]703; GFX90A-NEXT:    ;;#ASMEND704; GFX90A-NEXT:    s_setpc_b64 s[30:31]705;706; GFX950-LABEL: global_atomic_xchg_i64_ret_a_v:707; GFX950:       ; %bb.0:708; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)709; GFX950-NEXT:    ;;#ASMSTART710; GFX950-NEXT:    ; def a[0:1]711; GFX950-NEXT:    ;;#ASMEND712; GFX950-NEXT:    s_nop 0713; GFX950-NEXT:    v_accvgpr_read_b32 v3, a1714; GFX950-NEXT:    v_accvgpr_read_b32 v2, a0715; GFX950-NEXT:    buffer_wbl2 sc0 sc1716; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1717; GFX950-NEXT:    s_waitcnt vmcnt(0)718; GFX950-NEXT:    buffer_inv sc0 sc1719; GFX950-NEXT:    ;;#ASMSTART720; GFX950-NEXT:    ; use v[0:1]721; GFX950-NEXT:    ;;#ASMEND722; GFX950-NEXT:    s_setpc_b64 s[30:31]723  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10724  %data = call i64 asm "; def $0", "=a"()725  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst726  call void asm "; use $0", "v"(i64 %result)727  ret void728}729 730; Input is VGPR, result used as AGPR731define void @global_atomic_xchg_i64_ret_v_a(ptr addrspace(1) %ptr) #0 {732; GFX90A-LABEL: global_atomic_xchg_i64_ret_v_a:733; GFX90A:       ; %bb.0:734; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)735; GFX90A-NEXT:    ;;#ASMSTART736; GFX90A-NEXT:    ; def v[2:3]737; GFX90A-NEXT:    ;;#ASMEND738; GFX90A-NEXT:    buffer_wbl2739; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc740; GFX90A-NEXT:    s_waitcnt vmcnt(0)741; GFX90A-NEXT:    buffer_invl2742; GFX90A-NEXT:    buffer_wbinvl1_vol743; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v0744; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v1745; GFX90A-NEXT:    ;;#ASMSTART746; GFX90A-NEXT:    ; use a[0:1]747; GFX90A-NEXT:    ;;#ASMEND748; GFX90A-NEXT:    s_setpc_b64 s[30:31]749;750; GFX950-LABEL: global_atomic_xchg_i64_ret_v_a:751; GFX950:       ; %bb.0:752; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)753; GFX950-NEXT:    ;;#ASMSTART754; GFX950-NEXT:    ; def v[2:3]755; GFX950-NEXT:    ;;#ASMEND756; GFX950-NEXT:    buffer_wbl2 sc0 sc1757; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1758; GFX950-NEXT:    s_waitcnt vmcnt(0)759; GFX950-NEXT:    buffer_inv sc0 sc1760; GFX950-NEXT:    v_accvgpr_write_b32 a0, v0761; GFX950-NEXT:    v_accvgpr_write_b32 a1, v1762; GFX950-NEXT:    ;;#ASMSTART763; GFX950-NEXT:    ; use a[0:1]764; GFX950-NEXT:    ;;#ASMEND765; GFX950-NEXT:    s_setpc_b64 s[30:31]766  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10767  %data = call i64 asm "; def $0", "=v"()768  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst769  call void asm "; use $0", "a"(i64 %result)770  ret void771}772 773; Input is AV, result also used as AV774define void @global_atomic_xchg_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {775; GFX90A-LABEL: global_atomic_xchg_i64_ret_av_av:776; GFX90A:       ; %bb.0:777; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)778; GFX90A-NEXT:    ;;#ASMSTART779; GFX90A-NEXT:    ; def v[2:3]780; GFX90A-NEXT:    ;;#ASMEND781; GFX90A-NEXT:    buffer_wbl2782; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc783; GFX90A-NEXT:    s_waitcnt vmcnt(0)784; GFX90A-NEXT:    buffer_invl2785; GFX90A-NEXT:    buffer_wbinvl1_vol786; GFX90A-NEXT:    ;;#ASMSTART787; GFX90A-NEXT:    ; use v[0:1]788; GFX90A-NEXT:    ;;#ASMEND789; GFX90A-NEXT:    s_setpc_b64 s[30:31]790;791; GFX950-LABEL: global_atomic_xchg_i64_ret_av_av:792; GFX950:       ; %bb.0:793; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)794; GFX950-NEXT:    ;;#ASMSTART795; GFX950-NEXT:    ; def v[2:3]796; GFX950-NEXT:    ;;#ASMEND797; GFX950-NEXT:    buffer_wbl2 sc0 sc1798; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1799; GFX950-NEXT:    s_waitcnt vmcnt(0)800; GFX950-NEXT:    buffer_inv sc0 sc1801; GFX950-NEXT:    ;;#ASMSTART802; GFX950-NEXT:    ; use v[0:1]803; GFX950-NEXT:    ;;#ASMEND804; GFX950-NEXT:    s_setpc_b64 s[30:31]805  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10806  %data = call i64 asm "; def $0", "=^VA"()807  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst808  call void asm "; use $0", "^VA"(i64 %result)809  ret void810}811 812; Input is AV, used as v813define void @global_atomic_xchg_i64_ret_av_v(ptr addrspace(1) %ptr) #0 {814; GFX90A-LABEL: global_atomic_xchg_i64_ret_av_v:815; GFX90A:       ; %bb.0:816; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)817; GFX90A-NEXT:    ;;#ASMSTART818; GFX90A-NEXT:    ; def v[2:3]819; GFX90A-NEXT:    ;;#ASMEND820; GFX90A-NEXT:    buffer_wbl2821; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc822; GFX90A-NEXT:    s_waitcnt vmcnt(0)823; GFX90A-NEXT:    buffer_invl2824; GFX90A-NEXT:    buffer_wbinvl1_vol825; GFX90A-NEXT:    ;;#ASMSTART826; GFX90A-NEXT:    ; use v[0:1]827; GFX90A-NEXT:    ;;#ASMEND828; GFX90A-NEXT:    s_setpc_b64 s[30:31]829;830; GFX950-LABEL: global_atomic_xchg_i64_ret_av_v:831; GFX950:       ; %bb.0:832; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)833; GFX950-NEXT:    ;;#ASMSTART834; GFX950-NEXT:    ; def v[2:3]835; GFX950-NEXT:    ;;#ASMEND836; GFX950-NEXT:    buffer_wbl2 sc0 sc1837; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1838; GFX950-NEXT:    s_waitcnt vmcnt(0)839; GFX950-NEXT:    buffer_inv sc0 sc1840; GFX950-NEXT:    ;;#ASMSTART841; GFX950-NEXT:    ; use v[0:1]842; GFX950-NEXT:    ;;#ASMEND843; GFX950-NEXT:    s_setpc_b64 s[30:31]844  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10845  %data = call i64 asm "; def $0", "=^VA"()846  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst847  call void asm "; use $0", "v"(i64 %result)848  ret void849}850 851; Input is AV, used as a852define void @global_atomic_xchg_i64_ret_av_a(ptr addrspace(1) %ptr) #0 {853; GFX90A-LABEL: global_atomic_xchg_i64_ret_av_a:854; GFX90A:       ; %bb.0:855; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)856; GFX90A-NEXT:    ;;#ASMSTART857; GFX90A-NEXT:    ; def v[2:3]858; GFX90A-NEXT:    ;;#ASMEND859; GFX90A-NEXT:    buffer_wbl2860; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc861; GFX90A-NEXT:    s_waitcnt vmcnt(0)862; GFX90A-NEXT:    buffer_invl2863; GFX90A-NEXT:    buffer_wbinvl1_vol864; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v0865; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v1866; GFX90A-NEXT:    ;;#ASMSTART867; GFX90A-NEXT:    ; use a[0:1]868; GFX90A-NEXT:    ;;#ASMEND869; GFX90A-NEXT:    s_setpc_b64 s[30:31]870;871; GFX950-LABEL: global_atomic_xchg_i64_ret_av_a:872; GFX950:       ; %bb.0:873; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)874; GFX950-NEXT:    ;;#ASMSTART875; GFX950-NEXT:    ; def v[2:3]876; GFX950-NEXT:    ;;#ASMEND877; GFX950-NEXT:    buffer_wbl2 sc0 sc1878; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1879; GFX950-NEXT:    s_waitcnt vmcnt(0)880; GFX950-NEXT:    buffer_inv sc0 sc1881; GFX950-NEXT:    v_accvgpr_write_b32 a0, v0882; GFX950-NEXT:    v_accvgpr_write_b32 a1, v1883; GFX950-NEXT:    ;;#ASMSTART884; GFX950-NEXT:    ; use a[0:1]885; GFX950-NEXT:    ;;#ASMEND886; GFX950-NEXT:    s_setpc_b64 s[30:31]887  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10888  %data = call i64 asm "; def $0", "=^VA"()889  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst890  call void asm "; use $0", "a"(i64 %result)891  ret void892}893 894; Input is a, result used as AV895define void @global_atomic_xchg_i64_ret_a_av(ptr addrspace(1) %ptr) #0 {896; GFX90A-LABEL: global_atomic_xchg_i64_ret_a_av:897; GFX90A:       ; %bb.0:898; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)899; GFX90A-NEXT:    ;;#ASMSTART900; GFX90A-NEXT:    ; def a[0:1]901; GFX90A-NEXT:    ;;#ASMEND902; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a1903; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a0904; GFX90A-NEXT:    buffer_wbl2905; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc906; GFX90A-NEXT:    s_waitcnt vmcnt(0)907; GFX90A-NEXT:    buffer_invl2908; GFX90A-NEXT:    buffer_wbinvl1_vol909; GFX90A-NEXT:    ;;#ASMSTART910; GFX90A-NEXT:    ; use v[0:1]911; GFX90A-NEXT:    ;;#ASMEND912; GFX90A-NEXT:    s_setpc_b64 s[30:31]913;914; GFX950-LABEL: global_atomic_xchg_i64_ret_a_av:915; GFX950:       ; %bb.0:916; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)917; GFX950-NEXT:    ;;#ASMSTART918; GFX950-NEXT:    ; def a[0:1]919; GFX950-NEXT:    ;;#ASMEND920; GFX950-NEXT:    s_nop 0921; GFX950-NEXT:    v_accvgpr_read_b32 v3, a1922; GFX950-NEXT:    v_accvgpr_read_b32 v2, a0923; GFX950-NEXT:    buffer_wbl2 sc0 sc1924; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1925; GFX950-NEXT:    s_waitcnt vmcnt(0)926; GFX950-NEXT:    buffer_inv sc0 sc1927; GFX950-NEXT:    ;;#ASMSTART928; GFX950-NEXT:    ; use v[0:1]929; GFX950-NEXT:    ;;#ASMEND930; GFX950-NEXT:    s_setpc_b64 s[30:31]931  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10932  %data = call i64 asm "; def $0", "=a"()933  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst934  call void asm "; use $0", "^VA"(i64 %result)935  ret void936}937 938; Input is v, result used as AV939define void @global_atomic_xchg_i64_ret_v_av(ptr addrspace(1) %ptr) #0 {940; GFX90A-LABEL: global_atomic_xchg_i64_ret_v_av:941; GFX90A:       ; %bb.0:942; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)943; GFX90A-NEXT:    ;;#ASMSTART944; GFX90A-NEXT:    ; def v[2:3]945; GFX90A-NEXT:    ;;#ASMEND946; GFX90A-NEXT:    buffer_wbl2947; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc948; GFX90A-NEXT:    s_waitcnt vmcnt(0)949; GFX90A-NEXT:    buffer_invl2950; GFX90A-NEXT:    buffer_wbinvl1_vol951; GFX90A-NEXT:    ;;#ASMSTART952; GFX90A-NEXT:    ; use v[0:1]953; GFX90A-NEXT:    ;;#ASMEND954; GFX90A-NEXT:    s_setpc_b64 s[30:31]955;956; GFX950-LABEL: global_atomic_xchg_i64_ret_v_av:957; GFX950:       ; %bb.0:958; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)959; GFX950-NEXT:    ;;#ASMSTART960; GFX950-NEXT:    ; def v[2:3]961; GFX950-NEXT:    ;;#ASMEND962; GFX950-NEXT:    buffer_wbl2 sc0 sc1963; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc0 sc1964; GFX950-NEXT:    s_waitcnt vmcnt(0)965; GFX950-NEXT:    buffer_inv sc0 sc1966; GFX950-NEXT:    ;;#ASMSTART967; GFX950-NEXT:    ; use v[0:1]968; GFX950-NEXT:    ;;#ASMEND969; GFX950-NEXT:    s_setpc_b64 s[30:31]970  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 10971  %data = call i64 asm "; def $0", "=v"()972  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data seq_cst973  call void asm "; use $0", "^VA"(i64 %result)974  ret void975}976 977define void @global_atomic_xchg_i64_noret_a(ptr addrspace(1) %ptr) #0 {978; GFX90A-LABEL: global_atomic_xchg_i64_noret_a:979; GFX90A:       ; %bb.0:980; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)981; GFX90A-NEXT:    ;;#ASMSTART982; GFX90A-NEXT:    ; def a[0:1]983; GFX90A-NEXT:    ;;#ASMEND984; GFX90A-NEXT:    buffer_wbl2985; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], a[0:1], off986; GFX90A-NEXT:    s_waitcnt vmcnt(0)987; GFX90A-NEXT:    buffer_invl2988; GFX90A-NEXT:    buffer_wbinvl1_vol989; GFX90A-NEXT:    s_setpc_b64 s[30:31]990;991; GFX950-LABEL: global_atomic_xchg_i64_noret_a:992; GFX950:       ; %bb.0:993; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)994; GFX950-NEXT:    ;;#ASMSTART995; GFX950-NEXT:    ; def a[0:1]996; GFX950-NEXT:    ;;#ASMEND997; GFX950-NEXT:    buffer_wbl2 sc0 sc1998; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], a[0:1], off sc1999; GFX950-NEXT:    s_waitcnt vmcnt(0)1000; GFX950-NEXT:    buffer_inv sc0 sc11001; GFX950-NEXT:    s_setpc_b64 s[30:31]1002  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 101003  %data = call i64 asm "; def $0", "=a"()1004  %unused = atomicrmw xchg ptr addrspace(1) %ptr, i64 %data seq_cst1005  ret void1006}1007 1008define void @global_atomic_xchg_i64_noret_av(ptr addrspace(1) %ptr) #0 {1009; GFX90A-LABEL: global_atomic_xchg_i64_noret_av:1010; GFX90A:       ; %bb.0:1011; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1012; GFX90A-NEXT:    ;;#ASMSTART1013; GFX90A-NEXT:    ; def v[2:3]1014; GFX90A-NEXT:    ;;#ASMEND1015; GFX90A-NEXT:    buffer_wbl21016; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v[2:3], off1017; GFX90A-NEXT:    s_waitcnt vmcnt(0)1018; GFX90A-NEXT:    buffer_invl21019; GFX90A-NEXT:    buffer_wbinvl1_vol1020; GFX90A-NEXT:    s_setpc_b64 s[30:31]1021;1022; GFX950-LABEL: global_atomic_xchg_i64_noret_av:1023; GFX950:       ; %bb.0:1024; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1025; GFX950-NEXT:    ;;#ASMSTART1026; GFX950-NEXT:    ; def v[2:3]1027; GFX950-NEXT:    ;;#ASMEND1028; GFX950-NEXT:    buffer_wbl2 sc0 sc11029; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v[2:3], off sc11030; GFX950-NEXT:    s_waitcnt vmcnt(0)1031; GFX950-NEXT:    buffer_inv sc0 sc11032; GFX950-NEXT:    s_setpc_b64 s[30:31]1033  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 101034  %data = call i64 asm "; def $0", "=^VA"()1035  %unused = atomicrmw xchg ptr addrspace(1) %ptr, i64 %data seq_cst1036  ret void1037}1038 1039;---------------------------------------------------------------------1040; xor i32 cases with cmpxchg expansion1041;---------------------------------------------------------------------1042 1043; Input and result use AGPR1044define void @global_atomic_xor_expansion_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {1045; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_a_a:1046; GFX90A:       ; %bb.0:1047; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1048; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1049; GFX90A-NEXT:    ;;#ASMSTART1050; GFX90A-NEXT:    ; def a01051; GFX90A-NEXT:    ;;#ASMEND1052; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a01053; GFX90A-NEXT:    s_mov_b64 s[4:5], 01054; GFX90A-NEXT:  .LBB21_1: ; %atomicrmw.start1055; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11056; GFX90A-NEXT:    s_waitcnt vmcnt(0)1057; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41058; GFX90A-NEXT:    buffer_wbl21059; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1060; GFX90A-NEXT:    s_waitcnt vmcnt(0)1061; GFX90A-NEXT:    buffer_invl21062; GFX90A-NEXT:    buffer_wbinvl1_vol1063; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31064; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1065; GFX90A-NEXT:    v_mov_b32_e32 v3, v21066; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1067; GFX90A-NEXT:    s_cbranch_execnz .LBB21_11068; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1069; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1070; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v21071; GFX90A-NEXT:    ;;#ASMSTART1072; GFX90A-NEXT:    ; use a01073; GFX90A-NEXT:    ;;#ASMEND1074; GFX90A-NEXT:    s_setpc_b64 s[30:31]1075;1076; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_a_a:1077; GFX950:       ; %bb.0:1078; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1079; GFX950-NEXT:    global_load_dword v3, v[0:1], off1080; GFX950-NEXT:    ;;#ASMSTART1081; GFX950-NEXT:    ; def a01082; GFX950-NEXT:    ;;#ASMEND1083; GFX950-NEXT:    s_mov_b64 s[0:1], 01084; GFX950-NEXT:    v_accvgpr_read_b32 v4, a01085; GFX950-NEXT:  .LBB21_1: ; %atomicrmw.start1086; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11087; GFX950-NEXT:    s_waitcnt vmcnt(0)1088; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41089; GFX950-NEXT:    buffer_wbl2 sc0 sc11090; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11091; GFX950-NEXT:    s_waitcnt vmcnt(0)1092; GFX950-NEXT:    buffer_inv sc0 sc11093; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31094; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1095; GFX950-NEXT:    v_mov_b32_e32 v3, v21096; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1097; GFX950-NEXT:    s_cbranch_execnz .LBB21_11098; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1099; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1100; GFX950-NEXT:    v_accvgpr_write_b32 a0, v21101; GFX950-NEXT:    ;;#ASMSTART1102; GFX950-NEXT:    ; use a01103; GFX950-NEXT:    ;;#ASMEND1104; GFX950-NEXT:    s_setpc_b64 s[30:31]1105  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101106  %data = call i32 asm "; def $0", "=a"()1107  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1108  call void asm "; use $0", "a"(i32 %result)1109  ret void1110}1111 1112; Input is AGPR, result used as VGPR.1113define void @global_atomic_xor_expansion_i32_ret_a_v(ptr addrspace(1) %ptr) #0 {1114; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_a_v:1115; GFX90A:       ; %bb.0:1116; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1117; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1118; GFX90A-NEXT:    ;;#ASMSTART1119; GFX90A-NEXT:    ; def a01120; GFX90A-NEXT:    ;;#ASMEND1121; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a01122; GFX90A-NEXT:    s_mov_b64 s[4:5], 01123; GFX90A-NEXT:  .LBB22_1: ; %atomicrmw.start1124; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11125; GFX90A-NEXT:    s_waitcnt vmcnt(0)1126; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41127; GFX90A-NEXT:    buffer_wbl21128; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1129; GFX90A-NEXT:    s_waitcnt vmcnt(0)1130; GFX90A-NEXT:    buffer_invl21131; GFX90A-NEXT:    buffer_wbinvl1_vol1132; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31133; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1134; GFX90A-NEXT:    v_mov_b32_e32 v3, v21135; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1136; GFX90A-NEXT:    s_cbranch_execnz .LBB22_11137; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1138; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1139; GFX90A-NEXT:    ;;#ASMSTART1140; GFX90A-NEXT:    ; use v21141; GFX90A-NEXT:    ;;#ASMEND1142; GFX90A-NEXT:    s_setpc_b64 s[30:31]1143;1144; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_a_v:1145; GFX950:       ; %bb.0:1146; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1147; GFX950-NEXT:    global_load_dword v3, v[0:1], off1148; GFX950-NEXT:    ;;#ASMSTART1149; GFX950-NEXT:    ; def a01150; GFX950-NEXT:    ;;#ASMEND1151; GFX950-NEXT:    s_mov_b64 s[0:1], 01152; GFX950-NEXT:    v_accvgpr_read_b32 v4, a01153; GFX950-NEXT:  .LBB22_1: ; %atomicrmw.start1154; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11155; GFX950-NEXT:    s_waitcnt vmcnt(0)1156; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41157; GFX950-NEXT:    buffer_wbl2 sc0 sc11158; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11159; GFX950-NEXT:    s_waitcnt vmcnt(0)1160; GFX950-NEXT:    buffer_inv sc0 sc11161; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31162; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1163; GFX950-NEXT:    v_mov_b32_e32 v3, v21164; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1165; GFX950-NEXT:    s_cbranch_execnz .LBB22_11166; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1167; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1168; GFX950-NEXT:    ;;#ASMSTART1169; GFX950-NEXT:    ; use v21170; GFX950-NEXT:    ;;#ASMEND1171; GFX950-NEXT:    s_setpc_b64 s[30:31]1172  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101173  %data = call i32 asm "; def $0", "=a"()1174  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1175  call void asm "; use $0", "v"(i32 %result)1176  ret void1177}1178 1179; Input is VGPR, result used as AGPR1180define void @global_atomic_xor_expansion_i32_ret_v_a(ptr addrspace(1) %ptr) #0 {1181; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_v_a:1182; GFX90A:       ; %bb.0:1183; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1184; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1185; GFX90A-NEXT:    s_mov_b64 s[4:5], 01186; GFX90A-NEXT:    ;;#ASMSTART1187; GFX90A-NEXT:    ; def v41188; GFX90A-NEXT:    ;;#ASMEND1189; GFX90A-NEXT:  .LBB23_1: ; %atomicrmw.start1190; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11191; GFX90A-NEXT:    s_waitcnt vmcnt(0)1192; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41193; GFX90A-NEXT:    buffer_wbl21194; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1195; GFX90A-NEXT:    s_waitcnt vmcnt(0)1196; GFX90A-NEXT:    buffer_invl21197; GFX90A-NEXT:    buffer_wbinvl1_vol1198; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31199; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1200; GFX90A-NEXT:    v_mov_b32_e32 v3, v21201; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1202; GFX90A-NEXT:    s_cbranch_execnz .LBB23_11203; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1204; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1205; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v21206; GFX90A-NEXT:    ;;#ASMSTART1207; GFX90A-NEXT:    ; use a01208; GFX90A-NEXT:    ;;#ASMEND1209; GFX90A-NEXT:    s_setpc_b64 s[30:31]1210;1211; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_v_a:1212; GFX950:       ; %bb.0:1213; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1214; GFX950-NEXT:    global_load_dword v3, v[0:1], off1215; GFX950-NEXT:    s_mov_b64 s[0:1], 01216; GFX950-NEXT:    ;;#ASMSTART1217; GFX950-NEXT:    ; def v41218; GFX950-NEXT:    ;;#ASMEND1219; GFX950-NEXT:  .LBB23_1: ; %atomicrmw.start1220; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11221; GFX950-NEXT:    s_waitcnt vmcnt(0)1222; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41223; GFX950-NEXT:    buffer_wbl2 sc0 sc11224; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11225; GFX950-NEXT:    s_waitcnt vmcnt(0)1226; GFX950-NEXT:    buffer_inv sc0 sc11227; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31228; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1229; GFX950-NEXT:    v_mov_b32_e32 v3, v21230; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1231; GFX950-NEXT:    s_cbranch_execnz .LBB23_11232; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1233; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1234; GFX950-NEXT:    v_accvgpr_write_b32 a0, v21235; GFX950-NEXT:    ;;#ASMSTART1236; GFX950-NEXT:    ; use a01237; GFX950-NEXT:    ;;#ASMEND1238; GFX950-NEXT:    s_setpc_b64 s[30:31]1239  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101240  %data = call i32 asm "; def $0", "=v"()1241  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1242  call void asm "; use $0", "a"(i32 %result)1243  ret void1244}1245 1246; Input is AV, result also used as AV1247define void @global_atomic_xor_expansion_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {1248; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_av_av:1249; GFX90A:       ; %bb.0:1250; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1251; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1252; GFX90A-NEXT:    s_mov_b64 s[4:5], 01253; GFX90A-NEXT:    ;;#ASMSTART1254; GFX90A-NEXT:    ; def v41255; GFX90A-NEXT:    ;;#ASMEND1256; GFX90A-NEXT:  .LBB24_1: ; %atomicrmw.start1257; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11258; GFX90A-NEXT:    s_waitcnt vmcnt(0)1259; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41260; GFX90A-NEXT:    buffer_wbl21261; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1262; GFX90A-NEXT:    s_waitcnt vmcnt(0)1263; GFX90A-NEXT:    buffer_invl21264; GFX90A-NEXT:    buffer_wbinvl1_vol1265; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31266; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1267; GFX90A-NEXT:    v_mov_b32_e32 v3, v21268; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1269; GFX90A-NEXT:    s_cbranch_execnz .LBB24_11270; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1271; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1272; GFX90A-NEXT:    ;;#ASMSTART1273; GFX90A-NEXT:    ; use v21274; GFX90A-NEXT:    ;;#ASMEND1275; GFX90A-NEXT:    s_setpc_b64 s[30:31]1276;1277; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_av_av:1278; GFX950:       ; %bb.0:1279; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1280; GFX950-NEXT:    global_load_dword v3, v[0:1], off1281; GFX950-NEXT:    s_mov_b64 s[0:1], 01282; GFX950-NEXT:    ;;#ASMSTART1283; GFX950-NEXT:    ; def v41284; GFX950-NEXT:    ;;#ASMEND1285; GFX950-NEXT:  .LBB24_1: ; %atomicrmw.start1286; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11287; GFX950-NEXT:    s_waitcnt vmcnt(0)1288; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41289; GFX950-NEXT:    buffer_wbl2 sc0 sc11290; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11291; GFX950-NEXT:    s_waitcnt vmcnt(0)1292; GFX950-NEXT:    buffer_inv sc0 sc11293; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31294; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1295; GFX950-NEXT:    v_mov_b32_e32 v3, v21296; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1297; GFX950-NEXT:    s_cbranch_execnz .LBB24_11298; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1299; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1300; GFX950-NEXT:    ;;#ASMSTART1301; GFX950-NEXT:    ; use v21302; GFX950-NEXT:    ;;#ASMEND1303; GFX950-NEXT:    s_setpc_b64 s[30:31]1304  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101305  %data = call i32 asm "; def $0", "=^VA"()1306  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1307  call void asm "; use $0", "^VA"(i32 %result)1308  ret void1309}1310 1311; Input is AV, used as v1312define void @global_atomic_xor_expansion_i32_ret_av_v(ptr addrspace(1) %ptr) #0 {1313; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_av_v:1314; GFX90A:       ; %bb.0:1315; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1316; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1317; GFX90A-NEXT:    s_mov_b64 s[4:5], 01318; GFX90A-NEXT:    ;;#ASMSTART1319; GFX90A-NEXT:    ; def v41320; GFX90A-NEXT:    ;;#ASMEND1321; GFX90A-NEXT:  .LBB25_1: ; %atomicrmw.start1322; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11323; GFX90A-NEXT:    s_waitcnt vmcnt(0)1324; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41325; GFX90A-NEXT:    buffer_wbl21326; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1327; GFX90A-NEXT:    s_waitcnt vmcnt(0)1328; GFX90A-NEXT:    buffer_invl21329; GFX90A-NEXT:    buffer_wbinvl1_vol1330; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31331; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1332; GFX90A-NEXT:    v_mov_b32_e32 v3, v21333; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1334; GFX90A-NEXT:    s_cbranch_execnz .LBB25_11335; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1336; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1337; GFX90A-NEXT:    ;;#ASMSTART1338; GFX90A-NEXT:    ; use v21339; GFX90A-NEXT:    ;;#ASMEND1340; GFX90A-NEXT:    s_setpc_b64 s[30:31]1341;1342; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_av_v:1343; GFX950:       ; %bb.0:1344; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; GFX950-NEXT:    global_load_dword v3, v[0:1], off1346; GFX950-NEXT:    s_mov_b64 s[0:1], 01347; GFX950-NEXT:    ;;#ASMSTART1348; GFX950-NEXT:    ; def v41349; GFX950-NEXT:    ;;#ASMEND1350; GFX950-NEXT:  .LBB25_1: ; %atomicrmw.start1351; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11352; GFX950-NEXT:    s_waitcnt vmcnt(0)1353; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41354; GFX950-NEXT:    buffer_wbl2 sc0 sc11355; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11356; GFX950-NEXT:    s_waitcnt vmcnt(0)1357; GFX950-NEXT:    buffer_inv sc0 sc11358; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31359; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1360; GFX950-NEXT:    v_mov_b32_e32 v3, v21361; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1362; GFX950-NEXT:    s_cbranch_execnz .LBB25_11363; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1364; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1365; GFX950-NEXT:    ;;#ASMSTART1366; GFX950-NEXT:    ; use v21367; GFX950-NEXT:    ;;#ASMEND1368; GFX950-NEXT:    s_setpc_b64 s[30:31]1369  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101370  %data = call i32 asm "; def $0", "=^VA"()1371  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1372  call void asm "; use $0", "v"(i32 %result)1373  ret void1374}1375 1376; Input is AV, used as a1377define void @global_atomic_xor_expansion_i32_ret_av_a(ptr addrspace(1) %ptr) #0 {1378; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_av_a:1379; GFX90A:       ; %bb.0:1380; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1381; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1382; GFX90A-NEXT:    s_mov_b64 s[4:5], 01383; GFX90A-NEXT:    ;;#ASMSTART1384; GFX90A-NEXT:    ; def v41385; GFX90A-NEXT:    ;;#ASMEND1386; GFX90A-NEXT:  .LBB26_1: ; %atomicrmw.start1387; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11388; GFX90A-NEXT:    s_waitcnt vmcnt(0)1389; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41390; GFX90A-NEXT:    buffer_wbl21391; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1392; GFX90A-NEXT:    s_waitcnt vmcnt(0)1393; GFX90A-NEXT:    buffer_invl21394; GFX90A-NEXT:    buffer_wbinvl1_vol1395; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31396; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1397; GFX90A-NEXT:    v_mov_b32_e32 v3, v21398; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1399; GFX90A-NEXT:    s_cbranch_execnz .LBB26_11400; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1401; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1402; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v21403; GFX90A-NEXT:    ;;#ASMSTART1404; GFX90A-NEXT:    ; use a01405; GFX90A-NEXT:    ;;#ASMEND1406; GFX90A-NEXT:    s_setpc_b64 s[30:31]1407;1408; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_av_a:1409; GFX950:       ; %bb.0:1410; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1411; GFX950-NEXT:    global_load_dword v3, v[0:1], off1412; GFX950-NEXT:    s_mov_b64 s[0:1], 01413; GFX950-NEXT:    ;;#ASMSTART1414; GFX950-NEXT:    ; def v41415; GFX950-NEXT:    ;;#ASMEND1416; GFX950-NEXT:  .LBB26_1: ; %atomicrmw.start1417; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11418; GFX950-NEXT:    s_waitcnt vmcnt(0)1419; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41420; GFX950-NEXT:    buffer_wbl2 sc0 sc11421; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11422; GFX950-NEXT:    s_waitcnt vmcnt(0)1423; GFX950-NEXT:    buffer_inv sc0 sc11424; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31425; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1426; GFX950-NEXT:    v_mov_b32_e32 v3, v21427; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1428; GFX950-NEXT:    s_cbranch_execnz .LBB26_11429; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1430; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1431; GFX950-NEXT:    v_accvgpr_write_b32 a0, v21432; GFX950-NEXT:    ;;#ASMSTART1433; GFX950-NEXT:    ; use a01434; GFX950-NEXT:    ;;#ASMEND1435; GFX950-NEXT:    s_setpc_b64 s[30:31]1436  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101437  %data = call i32 asm "; def $0", "=^VA"()1438  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1439  call void asm "; use $0", "a"(i32 %result)1440  ret void1441}1442 1443; Input is a, result used as AV1444define void @global_atomic_xor_expansion_i32_ret_a_av(ptr addrspace(1) %ptr) #0 {1445; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_a_av:1446; GFX90A:       ; %bb.0:1447; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1448; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1449; GFX90A-NEXT:    ;;#ASMSTART1450; GFX90A-NEXT:    ; def a01451; GFX90A-NEXT:    ;;#ASMEND1452; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a01453; GFX90A-NEXT:    s_mov_b64 s[4:5], 01454; GFX90A-NEXT:  .LBB27_1: ; %atomicrmw.start1455; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11456; GFX90A-NEXT:    s_waitcnt vmcnt(0)1457; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41458; GFX90A-NEXT:    buffer_wbl21459; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1460; GFX90A-NEXT:    s_waitcnt vmcnt(0)1461; GFX90A-NEXT:    buffer_invl21462; GFX90A-NEXT:    buffer_wbinvl1_vol1463; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31464; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1465; GFX90A-NEXT:    v_mov_b32_e32 v3, v21466; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1467; GFX90A-NEXT:    s_cbranch_execnz .LBB27_11468; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1469; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1470; GFX90A-NEXT:    ;;#ASMSTART1471; GFX90A-NEXT:    ; use v21472; GFX90A-NEXT:    ;;#ASMEND1473; GFX90A-NEXT:    s_setpc_b64 s[30:31]1474;1475; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_a_av:1476; GFX950:       ; %bb.0:1477; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1478; GFX950-NEXT:    global_load_dword v3, v[0:1], off1479; GFX950-NEXT:    ;;#ASMSTART1480; GFX950-NEXT:    ; def a01481; GFX950-NEXT:    ;;#ASMEND1482; GFX950-NEXT:    s_mov_b64 s[0:1], 01483; GFX950-NEXT:    v_accvgpr_read_b32 v4, a01484; GFX950-NEXT:  .LBB27_1: ; %atomicrmw.start1485; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11486; GFX950-NEXT:    s_waitcnt vmcnt(0)1487; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41488; GFX950-NEXT:    buffer_wbl2 sc0 sc11489; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11490; GFX950-NEXT:    s_waitcnt vmcnt(0)1491; GFX950-NEXT:    buffer_inv sc0 sc11492; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31493; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1494; GFX950-NEXT:    v_mov_b32_e32 v3, v21495; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1496; GFX950-NEXT:    s_cbranch_execnz .LBB27_11497; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1498; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1499; GFX950-NEXT:    ;;#ASMSTART1500; GFX950-NEXT:    ; use v21501; GFX950-NEXT:    ;;#ASMEND1502; GFX950-NEXT:    s_setpc_b64 s[30:31]1503  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101504  %data = call i32 asm "; def $0", "=a"()1505  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1506  call void asm "; use $0", "^VA"(i32 %result)1507  ret void1508}1509 1510; Input is v, result used as AV1511define void @global_atomic_xor_expansion_i32_ret_v_av(ptr addrspace(1) %ptr) #0 {1512; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_v_av:1513; GFX90A:       ; %bb.0:1514; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1515; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1516; GFX90A-NEXT:    s_mov_b64 s[4:5], 01517; GFX90A-NEXT:    ;;#ASMSTART1518; GFX90A-NEXT:    ; def v41519; GFX90A-NEXT:    ;;#ASMEND1520; GFX90A-NEXT:  .LBB28_1: ; %atomicrmw.start1521; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11522; GFX90A-NEXT:    s_waitcnt vmcnt(0)1523; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41524; GFX90A-NEXT:    buffer_wbl21525; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1526; GFX90A-NEXT:    s_waitcnt vmcnt(0)1527; GFX90A-NEXT:    buffer_invl21528; GFX90A-NEXT:    buffer_wbinvl1_vol1529; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31530; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1531; GFX90A-NEXT:    v_mov_b32_e32 v3, v21532; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1533; GFX90A-NEXT:    s_cbranch_execnz .LBB28_11534; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1535; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1536; GFX90A-NEXT:    ;;#ASMSTART1537; GFX90A-NEXT:    ; use v21538; GFX90A-NEXT:    ;;#ASMEND1539; GFX90A-NEXT:    s_setpc_b64 s[30:31]1540;1541; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_v_av:1542; GFX950:       ; %bb.0:1543; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1544; GFX950-NEXT:    global_load_dword v3, v[0:1], off1545; GFX950-NEXT:    s_mov_b64 s[0:1], 01546; GFX950-NEXT:    ;;#ASMSTART1547; GFX950-NEXT:    ; def v41548; GFX950-NEXT:    ;;#ASMEND1549; GFX950-NEXT:  .LBB28_1: ; %atomicrmw.start1550; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11551; GFX950-NEXT:    s_waitcnt vmcnt(0)1552; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41553; GFX950-NEXT:    buffer_wbl2 sc0 sc11554; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11555; GFX950-NEXT:    s_waitcnt vmcnt(0)1556; GFX950-NEXT:    buffer_inv sc0 sc11557; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31558; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1559; GFX950-NEXT:    v_mov_b32_e32 v3, v21560; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1561; GFX950-NEXT:    s_cbranch_execnz .LBB28_11562; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1563; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1564; GFX950-NEXT:    ;;#ASMSTART1565; GFX950-NEXT:    ; use v21566; GFX950-NEXT:    ;;#ASMEND1567; GFX950-NEXT:    s_setpc_b64 s[30:31]1568  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101569  %data = call i32 asm "; def $0", "=v"()1570  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1571  call void asm "; use $0", "^VA"(i32 %result)1572  ret void1573}1574 1575define void @global_atomic_xor_expansion_i32_ret_av_av_no_agprs(ptr addrspace(1) %ptr) #0 {1576; GFX90A-LABEL: global_atomic_xor_expansion_i32_ret_av_av_no_agprs:1577; GFX90A:       ; %bb.0:1578; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1579; GFX90A-NEXT:    buffer_store_dword v40, off, s[0:3], s32 offset:72 ; 4-byte Folded Spill1580; GFX90A-NEXT:    buffer_store_dword v41, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill1581; GFX90A-NEXT:    buffer_store_dword v42, off, s[0:3], s32 offset:64 ; 4-byte Folded Spill1582; GFX90A-NEXT:    buffer_store_dword v43, off, s[0:3], s32 offset:60 ; 4-byte Folded Spill1583; GFX90A-NEXT:    buffer_store_dword v44, off, s[0:3], s32 offset:56 ; 4-byte Folded Spill1584; GFX90A-NEXT:    buffer_store_dword v45, off, s[0:3], s32 offset:52 ; 4-byte Folded Spill1585; GFX90A-NEXT:    buffer_store_dword v46, off, s[0:3], s32 offset:48 ; 4-byte Folded Spill1586; GFX90A-NEXT:    buffer_store_dword v47, off, s[0:3], s32 offset:44 ; 4-byte Folded Spill1587; GFX90A-NEXT:    buffer_store_dword v56, off, s[0:3], s32 offset:40 ; 4-byte Folded Spill1588; GFX90A-NEXT:    buffer_store_dword v57, off, s[0:3], s32 offset:36 ; 4-byte Folded Spill1589; GFX90A-NEXT:    buffer_store_dword v58, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill1590; GFX90A-NEXT:    buffer_store_dword v59, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill1591; GFX90A-NEXT:    buffer_store_dword v60, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill1592; GFX90A-NEXT:    buffer_store_dword v61, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill1593; GFX90A-NEXT:    buffer_store_dword v62, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill1594; GFX90A-NEXT:    buffer_store_dword v63, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill1595; GFX90A-NEXT:    buffer_store_dword a32, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill1596; GFX90A-NEXT:    buffer_store_dword a33, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill1597; GFX90A-NEXT:    buffer_store_dword a34, off, s[0:3], s32 ; 4-byte Folded Spill1598; GFX90A-NEXT:    v_accvgpr_write_b32 a33, v11599; GFX90A-NEXT:    v_accvgpr_write_b32 a32, v01600; GFX90A-NEXT:    ;;#ASMSTART1601; GFX90A-NEXT:    ; def v[0:31]1602; GFX90A-NEXT:    ;;#ASMEND1603; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v01604; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v11605; GFX90A-NEXT:    v_accvgpr_write_b32 a2, v21606; GFX90A-NEXT:    v_accvgpr_write_b32 a3, v31607; GFX90A-NEXT:    v_accvgpr_write_b32 a4, v41608; GFX90A-NEXT:    v_accvgpr_write_b32 a5, v51609; GFX90A-NEXT:    v_accvgpr_write_b32 a6, v61610; GFX90A-NEXT:    v_accvgpr_write_b32 a7, v71611; GFX90A-NEXT:    v_accvgpr_write_b32 a8, v81612; GFX90A-NEXT:    v_accvgpr_write_b32 a9, v91613; GFX90A-NEXT:    v_accvgpr_write_b32 a10, v101614; GFX90A-NEXT:    v_accvgpr_write_b32 a11, v111615; GFX90A-NEXT:    v_accvgpr_write_b32 a12, v121616; GFX90A-NEXT:    v_accvgpr_write_b32 a13, v131617; GFX90A-NEXT:    v_accvgpr_write_b32 a14, v141618; GFX90A-NEXT:    v_accvgpr_write_b32 a15, v151619; GFX90A-NEXT:    v_accvgpr_write_b32 a16, v161620; GFX90A-NEXT:    v_accvgpr_write_b32 a17, v171621; GFX90A-NEXT:    v_accvgpr_write_b32 a18, v181622; GFX90A-NEXT:    v_accvgpr_write_b32 a19, v191623; GFX90A-NEXT:    v_accvgpr_write_b32 a20, v201624; GFX90A-NEXT:    v_accvgpr_write_b32 a21, v211625; GFX90A-NEXT:    v_accvgpr_write_b32 a22, v221626; GFX90A-NEXT:    v_accvgpr_write_b32 a23, v231627; GFX90A-NEXT:    v_accvgpr_write_b32 a24, v241628; GFX90A-NEXT:    v_accvgpr_write_b32 a25, v251629; GFX90A-NEXT:    v_accvgpr_write_b32 a26, v261630; GFX90A-NEXT:    v_accvgpr_write_b32 a27, v271631; GFX90A-NEXT:    v_accvgpr_write_b32 a28, v281632; GFX90A-NEXT:    v_accvgpr_write_b32 a29, v291633; GFX90A-NEXT:    v_accvgpr_write_b32 a30, v301634; GFX90A-NEXT:    v_accvgpr_write_b32 a31, v311635; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a321636; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a331637; GFX90A-NEXT:    global_load_dword v1, v[2:3], off1638; GFX90A-NEXT:    ;;#ASMSTART1639; GFX90A-NEXT:    ; def a341640; GFX90A-NEXT:    ;;#ASMEND1641; GFX90A-NEXT:    s_mov_b64 s[4:5], 01642; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a341643; GFX90A-NEXT:  .LBB29_1: ; %atomicrmw.start1644; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11645; GFX90A-NEXT:    s_waitcnt vmcnt(0)1646; GFX90A-NEXT:    v_xor_b32_e32 v0, v1, v41647; GFX90A-NEXT:    buffer_wbl21648; GFX90A-NEXT:    global_atomic_cmpswap v0, v[2:3], v[0:1], off glc1649; GFX90A-NEXT:    s_waitcnt vmcnt(0)1650; GFX90A-NEXT:    buffer_invl21651; GFX90A-NEXT:    buffer_wbinvl1_vol1652; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v11653; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1654; GFX90A-NEXT:    v_mov_b32_e32 v1, v01655; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1656; GFX90A-NEXT:    s_cbranch_execnz .LBB29_11657; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1658; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1659; GFX90A-NEXT:    v_accvgpr_write_b32 a32, v01660; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a01661; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a11662; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a21663; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a31664; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a41665; GFX90A-NEXT:    v_accvgpr_read_b32 v5, a51666; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a61667; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a71668; GFX90A-NEXT:    v_accvgpr_read_b32 v8, a81669; GFX90A-NEXT:    v_accvgpr_read_b32 v9, a91670; GFX90A-NEXT:    v_accvgpr_read_b32 v10, a101671; GFX90A-NEXT:    v_accvgpr_read_b32 v11, a111672; GFX90A-NEXT:    v_accvgpr_read_b32 v12, a121673; GFX90A-NEXT:    v_accvgpr_read_b32 v13, a131674; GFX90A-NEXT:    v_accvgpr_read_b32 v14, a141675; GFX90A-NEXT:    v_accvgpr_read_b32 v15, a151676; GFX90A-NEXT:    v_accvgpr_read_b32 v16, a161677; GFX90A-NEXT:    v_accvgpr_read_b32 v17, a171678; GFX90A-NEXT:    v_accvgpr_read_b32 v18, a181679; GFX90A-NEXT:    v_accvgpr_read_b32 v19, a191680; GFX90A-NEXT:    v_accvgpr_read_b32 v20, a201681; GFX90A-NEXT:    v_accvgpr_read_b32 v21, a211682; GFX90A-NEXT:    v_accvgpr_read_b32 v22, a221683; GFX90A-NEXT:    v_accvgpr_read_b32 v23, a231684; GFX90A-NEXT:    v_accvgpr_read_b32 v24, a241685; GFX90A-NEXT:    v_accvgpr_read_b32 v25, a251686; GFX90A-NEXT:    v_accvgpr_read_b32 v26, a261687; GFX90A-NEXT:    v_accvgpr_read_b32 v27, a271688; GFX90A-NEXT:    v_accvgpr_read_b32 v28, a281689; GFX90A-NEXT:    v_accvgpr_read_b32 v29, a291690; GFX90A-NEXT:    v_accvgpr_read_b32 v30, a301691; GFX90A-NEXT:    v_accvgpr_read_b32 v31, a311692; GFX90A-NEXT:    ;;#ASMSTART1693; GFX90A-NEXT:    ; use v[0:31]1694; GFX90A-NEXT:    ;;#ASMEND1695; GFX90A-NEXT:    ;;#ASMSTART1696; GFX90A-NEXT:    ; use a321697; GFX90A-NEXT:    ;;#ASMEND1698; GFX90A-NEXT:    buffer_load_dword a34, off, s[0:3], s32 ; 4-byte Folded Reload1699; GFX90A-NEXT:    buffer_load_dword a33, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload1700; GFX90A-NEXT:    buffer_load_dword a32, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload1701; GFX90A-NEXT:    buffer_load_dword v63, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload1702; GFX90A-NEXT:    buffer_load_dword v62, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload1703; GFX90A-NEXT:    buffer_load_dword v61, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload1704; GFX90A-NEXT:    buffer_load_dword v60, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload1705; GFX90A-NEXT:    buffer_load_dword v59, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload1706; GFX90A-NEXT:    buffer_load_dword v58, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload1707; GFX90A-NEXT:    buffer_load_dword v57, off, s[0:3], s32 offset:36 ; 4-byte Folded Reload1708; GFX90A-NEXT:    buffer_load_dword v56, off, s[0:3], s32 offset:40 ; 4-byte Folded Reload1709; GFX90A-NEXT:    buffer_load_dword v47, off, s[0:3], s32 offset:44 ; 4-byte Folded Reload1710; GFX90A-NEXT:    buffer_load_dword v46, off, s[0:3], s32 offset:48 ; 4-byte Folded Reload1711; GFX90A-NEXT:    buffer_load_dword v45, off, s[0:3], s32 offset:52 ; 4-byte Folded Reload1712; GFX90A-NEXT:    buffer_load_dword v44, off, s[0:3], s32 offset:56 ; 4-byte Folded Reload1713; GFX90A-NEXT:    buffer_load_dword v43, off, s[0:3], s32 offset:60 ; 4-byte Folded Reload1714; GFX90A-NEXT:    buffer_load_dword v42, off, s[0:3], s32 offset:64 ; 4-byte Folded Reload1715; GFX90A-NEXT:    buffer_load_dword v41, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload1716; GFX90A-NEXT:    buffer_load_dword v40, off, s[0:3], s32 offset:72 ; 4-byte Folded Reload1717; GFX90A-NEXT:    s_waitcnt vmcnt(0)1718; GFX90A-NEXT:    s_setpc_b64 s[30:31]1719;1720; GFX950-LABEL: global_atomic_xor_expansion_i32_ret_av_av_no_agprs:1721; GFX950:       ; %bb.0:1722; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1723; GFX950-NEXT:    scratch_store_dword off, v40, s32 offset:72 ; 4-byte Folded Spill1724; GFX950-NEXT:    scratch_store_dword off, v41, s32 offset:68 ; 4-byte Folded Spill1725; GFX950-NEXT:    scratch_store_dword off, v42, s32 offset:64 ; 4-byte Folded Spill1726; GFX950-NEXT:    scratch_store_dword off, v43, s32 offset:60 ; 4-byte Folded Spill1727; GFX950-NEXT:    scratch_store_dword off, v44, s32 offset:56 ; 4-byte Folded Spill1728; GFX950-NEXT:    scratch_store_dword off, v45, s32 offset:52 ; 4-byte Folded Spill1729; GFX950-NEXT:    scratch_store_dword off, v46, s32 offset:48 ; 4-byte Folded Spill1730; GFX950-NEXT:    scratch_store_dword off, v47, s32 offset:44 ; 4-byte Folded Spill1731; GFX950-NEXT:    scratch_store_dword off, v56, s32 offset:40 ; 4-byte Folded Spill1732; GFX950-NEXT:    scratch_store_dword off, v57, s32 offset:36 ; 4-byte Folded Spill1733; GFX950-NEXT:    scratch_store_dword off, v58, s32 offset:32 ; 4-byte Folded Spill1734; GFX950-NEXT:    scratch_store_dword off, v59, s32 offset:28 ; 4-byte Folded Spill1735; GFX950-NEXT:    scratch_store_dword off, v60, s32 offset:24 ; 4-byte Folded Spill1736; GFX950-NEXT:    scratch_store_dword off, v61, s32 offset:20 ; 4-byte Folded Spill1737; GFX950-NEXT:    scratch_store_dword off, v62, s32 offset:16 ; 4-byte Folded Spill1738; GFX950-NEXT:    scratch_store_dword off, v63, s32 offset:12 ; 4-byte Folded Spill1739; GFX950-NEXT:    scratch_store_dword off, a32, s32 offset:8 ; 4-byte Folded Spill1740; GFX950-NEXT:    scratch_store_dword off, a33, s32 offset:4 ; 4-byte Folded Spill1741; GFX950-NEXT:    scratch_store_dword off, a34, s32 ; 4-byte Folded Spill1742; GFX950-NEXT:    v_accvgpr_write_b32 a33, v11743; GFX950-NEXT:    v_accvgpr_write_b32 a32, v01744; GFX950-NEXT:    ;;#ASMSTART1745; GFX950-NEXT:    ; def v[0:31]1746; GFX950-NEXT:    ;;#ASMEND1747; GFX950-NEXT:    ;;#ASMSTART1748; GFX950-NEXT:    ; def a341749; GFX950-NEXT:    ;;#ASMEND1750; GFX950-NEXT:    s_mov_b64 s[0:1], 01751; GFX950-NEXT:    v_accvgpr_write_b32 a0, v01752; GFX950-NEXT:    v_accvgpr_write_b32 a1, v11753; GFX950-NEXT:    v_accvgpr_write_b32 a2, v21754; GFX950-NEXT:    v_accvgpr_write_b32 a3, v31755; GFX950-NEXT:    v_accvgpr_write_b32 a4, v41756; GFX950-NEXT:    v_accvgpr_write_b32 a5, v51757; GFX950-NEXT:    v_accvgpr_write_b32 a6, v61758; GFX950-NEXT:    v_accvgpr_write_b32 a7, v71759; GFX950-NEXT:    v_accvgpr_write_b32 a8, v81760; GFX950-NEXT:    v_accvgpr_write_b32 a9, v91761; GFX950-NEXT:    v_accvgpr_write_b32 a10, v101762; GFX950-NEXT:    v_accvgpr_write_b32 a11, v111763; GFX950-NEXT:    v_accvgpr_write_b32 a12, v121764; GFX950-NEXT:    v_accvgpr_write_b32 a13, v131765; GFX950-NEXT:    v_accvgpr_write_b32 a14, v141766; GFX950-NEXT:    v_accvgpr_write_b32 a15, v151767; GFX950-NEXT:    v_accvgpr_write_b32 a16, v161768; GFX950-NEXT:    v_accvgpr_write_b32 a17, v171769; GFX950-NEXT:    v_accvgpr_write_b32 a18, v181770; GFX950-NEXT:    v_accvgpr_write_b32 a19, v191771; GFX950-NEXT:    v_accvgpr_write_b32 a20, v201772; GFX950-NEXT:    v_accvgpr_write_b32 a21, v211773; GFX950-NEXT:    v_accvgpr_write_b32 a22, v221774; GFX950-NEXT:    v_accvgpr_write_b32 a23, v231775; GFX950-NEXT:    v_accvgpr_write_b32 a24, v241776; GFX950-NEXT:    v_accvgpr_write_b32 a25, v251777; GFX950-NEXT:    v_accvgpr_write_b32 a26, v261778; GFX950-NEXT:    v_accvgpr_write_b32 a27, v271779; GFX950-NEXT:    v_accvgpr_write_b32 a28, v281780; GFX950-NEXT:    v_accvgpr_write_b32 a29, v291781; GFX950-NEXT:    v_accvgpr_write_b32 a30, v301782; GFX950-NEXT:    v_accvgpr_write_b32 a31, v311783; GFX950-NEXT:    v_accvgpr_read_b32 v2, a321784; GFX950-NEXT:    v_accvgpr_read_b32 v3, a331785; GFX950-NEXT:    global_load_dword v1, v[2:3], off1786; GFX950-NEXT:    v_accvgpr_read_b32 v4, a341787; GFX950-NEXT:  .LBB29_1: ; %atomicrmw.start1788; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11789; GFX950-NEXT:    s_waitcnt vmcnt(0)1790; GFX950-NEXT:    v_xor_b32_e32 v0, v1, v41791; GFX950-NEXT:    buffer_wbl2 sc0 sc11792; GFX950-NEXT:    global_atomic_cmpswap v0, v[2:3], v[0:1], off sc0 sc11793; GFX950-NEXT:    s_waitcnt vmcnt(0)1794; GFX950-NEXT:    buffer_inv sc0 sc11795; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v11796; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1797; GFX950-NEXT:    v_mov_b32_e32 v1, v01798; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1799; GFX950-NEXT:    s_cbranch_execnz .LBB29_11800; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1801; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1802; GFX950-NEXT:    v_accvgpr_write_b32 a32, v01803; GFX950-NEXT:    v_accvgpr_read_b32 v0, a01804; GFX950-NEXT:    v_accvgpr_read_b32 v1, a11805; GFX950-NEXT:    v_accvgpr_read_b32 v2, a21806; GFX950-NEXT:    v_accvgpr_read_b32 v3, a31807; GFX950-NEXT:    v_accvgpr_read_b32 v4, a41808; GFX950-NEXT:    v_accvgpr_read_b32 v5, a51809; GFX950-NEXT:    v_accvgpr_read_b32 v6, a61810; GFX950-NEXT:    v_accvgpr_read_b32 v7, a71811; GFX950-NEXT:    v_accvgpr_read_b32 v8, a81812; GFX950-NEXT:    v_accvgpr_read_b32 v9, a91813; GFX950-NEXT:    v_accvgpr_read_b32 v10, a101814; GFX950-NEXT:    v_accvgpr_read_b32 v11, a111815; GFX950-NEXT:    v_accvgpr_read_b32 v12, a121816; GFX950-NEXT:    v_accvgpr_read_b32 v13, a131817; GFX950-NEXT:    v_accvgpr_read_b32 v14, a141818; GFX950-NEXT:    v_accvgpr_read_b32 v15, a151819; GFX950-NEXT:    v_accvgpr_read_b32 v16, a161820; GFX950-NEXT:    v_accvgpr_read_b32 v17, a171821; GFX950-NEXT:    v_accvgpr_read_b32 v18, a181822; GFX950-NEXT:    v_accvgpr_read_b32 v19, a191823; GFX950-NEXT:    v_accvgpr_read_b32 v20, a201824; GFX950-NEXT:    v_accvgpr_read_b32 v21, a211825; GFX950-NEXT:    v_accvgpr_read_b32 v22, a221826; GFX950-NEXT:    v_accvgpr_read_b32 v23, a231827; GFX950-NEXT:    v_accvgpr_read_b32 v24, a241828; GFX950-NEXT:    v_accvgpr_read_b32 v25, a251829; GFX950-NEXT:    v_accvgpr_read_b32 v26, a261830; GFX950-NEXT:    v_accvgpr_read_b32 v27, a271831; GFX950-NEXT:    v_accvgpr_read_b32 v28, a281832; GFX950-NEXT:    v_accvgpr_read_b32 v29, a291833; GFX950-NEXT:    v_accvgpr_read_b32 v30, a301834; GFX950-NEXT:    v_accvgpr_read_b32 v31, a311835; GFX950-NEXT:    ;;#ASMSTART1836; GFX950-NEXT:    ; use v[0:31]1837; GFX950-NEXT:    ;;#ASMEND1838; GFX950-NEXT:    ;;#ASMSTART1839; GFX950-NEXT:    ; use a321840; GFX950-NEXT:    ;;#ASMEND1841; GFX950-NEXT:    scratch_load_dword a34, off, s32 ; 4-byte Folded Reload1842; GFX950-NEXT:    scratch_load_dword a33, off, s32 offset:4 ; 4-byte Folded Reload1843; GFX950-NEXT:    scratch_load_dword a32, off, s32 offset:8 ; 4-byte Folded Reload1844; GFX950-NEXT:    scratch_load_dword v63, off, s32 offset:12 ; 4-byte Folded Reload1845; GFX950-NEXT:    scratch_load_dword v62, off, s32 offset:16 ; 4-byte Folded Reload1846; GFX950-NEXT:    scratch_load_dword v61, off, s32 offset:20 ; 4-byte Folded Reload1847; GFX950-NEXT:    scratch_load_dword v60, off, s32 offset:24 ; 4-byte Folded Reload1848; GFX950-NEXT:    scratch_load_dword v59, off, s32 offset:28 ; 4-byte Folded Reload1849; GFX950-NEXT:    scratch_load_dword v58, off, s32 offset:32 ; 4-byte Folded Reload1850; GFX950-NEXT:    scratch_load_dword v57, off, s32 offset:36 ; 4-byte Folded Reload1851; GFX950-NEXT:    scratch_load_dword v56, off, s32 offset:40 ; 4-byte Folded Reload1852; GFX950-NEXT:    scratch_load_dword v47, off, s32 offset:44 ; 4-byte Folded Reload1853; GFX950-NEXT:    scratch_load_dword v46, off, s32 offset:48 ; 4-byte Folded Reload1854; GFX950-NEXT:    scratch_load_dword v45, off, s32 offset:52 ; 4-byte Folded Reload1855; GFX950-NEXT:    scratch_load_dword v44, off, s32 offset:56 ; 4-byte Folded Reload1856; GFX950-NEXT:    scratch_load_dword v43, off, s32 offset:60 ; 4-byte Folded Reload1857; GFX950-NEXT:    scratch_load_dword v42, off, s32 offset:64 ; 4-byte Folded Reload1858; GFX950-NEXT:    scratch_load_dword v41, off, s32 offset:68 ; 4-byte Folded Reload1859; GFX950-NEXT:    scratch_load_dword v40, off, s32 offset:72 ; 4-byte Folded Reload1860; GFX950-NEXT:    s_waitcnt vmcnt(0)1861; GFX950-NEXT:    s_setpc_b64 s[30:31]1862  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101863  %data = call i32 asm "; def $0", "=^VA"()1864  %vgpr.def = call { <32 x i32>, <32 x i32> }  asm sideeffect "; def $0", "=${v[0:31]},=${v[32:63]}"()1865  %vgpr.0 = extractvalue { <32 x i32>, <32 x i32> } %vgpr.def, 01866  %vgpr.1 = extractvalue { <32 x i32>, <32 x i32> } %vgpr.def, 11867  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1868  call void asm sideeffect "; use $0", "{v[0:31]},{v[32:63]}"(<32 x i32> %vgpr.0, <32 x i32> %vgpr.1)1869  call void asm "; use $0", "^VA"(i32 %result)1870  ret void1871}1872 1873define void @global_atomic_xor_expansion_i32_noret_a(ptr addrspace(1) %ptr) #0 {1874; GFX90A-LABEL: global_atomic_xor_expansion_i32_noret_a:1875; GFX90A:       ; %bb.0:1876; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1877; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1878; GFX90A-NEXT:    ;;#ASMSTART1879; GFX90A-NEXT:    ; def a01880; GFX90A-NEXT:    ;;#ASMEND1881; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a01882; GFX90A-NEXT:    s_mov_b64 s[4:5], 01883; GFX90A-NEXT:  .LBB30_1: ; %atomicrmw.start1884; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11885; GFX90A-NEXT:    s_waitcnt vmcnt(0)1886; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41887; GFX90A-NEXT:    buffer_wbl21888; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1889; GFX90A-NEXT:    s_waitcnt vmcnt(0)1890; GFX90A-NEXT:    buffer_invl21891; GFX90A-NEXT:    buffer_wbinvl1_vol1892; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31893; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1894; GFX90A-NEXT:    v_mov_b32_e32 v3, v21895; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1896; GFX90A-NEXT:    s_cbranch_execnz .LBB30_11897; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1898; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1899; GFX90A-NEXT:    s_setpc_b64 s[30:31]1900;1901; GFX950-LABEL: global_atomic_xor_expansion_i32_noret_a:1902; GFX950:       ; %bb.0:1903; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1904; GFX950-NEXT:    global_load_dword v3, v[0:1], off1905; GFX950-NEXT:    ;;#ASMSTART1906; GFX950-NEXT:    ; def a01907; GFX950-NEXT:    ;;#ASMEND1908; GFX950-NEXT:    s_mov_b64 s[0:1], 01909; GFX950-NEXT:    v_accvgpr_read_b32 v4, a01910; GFX950-NEXT:  .LBB30_1: ; %atomicrmw.start1911; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11912; GFX950-NEXT:    s_waitcnt vmcnt(0)1913; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41914; GFX950-NEXT:    buffer_wbl2 sc0 sc11915; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11916; GFX950-NEXT:    s_waitcnt vmcnt(0)1917; GFX950-NEXT:    buffer_inv sc0 sc11918; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31919; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1920; GFX950-NEXT:    v_mov_b32_e32 v3, v21921; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1922; GFX950-NEXT:    s_cbranch_execnz .LBB30_11923; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1924; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1925; GFX950-NEXT:    s_setpc_b64 s[30:31]1926  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101927  %data = call i32 asm "; def $0", "=a"()1928  %unused = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1929  ret void1930}1931 1932define void @global_atomic_xor_expansion_i32_noret_av(ptr addrspace(1) %ptr) #0 {1933; GFX90A-LABEL: global_atomic_xor_expansion_i32_noret_av:1934; GFX90A:       ; %bb.0:1935; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1936; GFX90A-NEXT:    global_load_dword v3, v[0:1], off1937; GFX90A-NEXT:    s_mov_b64 s[4:5], 01938; GFX90A-NEXT:    ;;#ASMSTART1939; GFX90A-NEXT:    ; def v41940; GFX90A-NEXT:    ;;#ASMEND1941; GFX90A-NEXT:  .LBB31_1: ; %atomicrmw.start1942; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=11943; GFX90A-NEXT:    s_waitcnt vmcnt(0)1944; GFX90A-NEXT:    v_xor_b32_e32 v2, v3, v41945; GFX90A-NEXT:    buffer_wbl21946; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off glc1947; GFX90A-NEXT:    s_waitcnt vmcnt(0)1948; GFX90A-NEXT:    buffer_invl21949; GFX90A-NEXT:    buffer_wbinvl1_vol1950; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31951; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1952; GFX90A-NEXT:    v_mov_b32_e32 v3, v21953; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]1954; GFX90A-NEXT:    s_cbranch_execnz .LBB31_11955; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end1956; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]1957; GFX90A-NEXT:    s_setpc_b64 s[30:31]1958;1959; GFX950-LABEL: global_atomic_xor_expansion_i32_noret_av:1960; GFX950:       ; %bb.0:1961; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1962; GFX950-NEXT:    global_load_dword v3, v[0:1], off1963; GFX950-NEXT:    s_mov_b64 s[0:1], 01964; GFX950-NEXT:    ;;#ASMSTART1965; GFX950-NEXT:    ; def v41966; GFX950-NEXT:    ;;#ASMEND1967; GFX950-NEXT:  .LBB31_1: ; %atomicrmw.start1968; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=11969; GFX950-NEXT:    s_waitcnt vmcnt(0)1970; GFX950-NEXT:    v_xor_b32_e32 v2, v3, v41971; GFX950-NEXT:    buffer_wbl2 sc0 sc11972; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off sc0 sc11973; GFX950-NEXT:    s_waitcnt vmcnt(0)1974; GFX950-NEXT:    buffer_inv sc0 sc11975; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31976; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]1977; GFX950-NEXT:    v_mov_b32_e32 v3, v21978; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]1979; GFX950-NEXT:    s_cbranch_execnz .LBB31_11980; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end1981; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]1982; GFX950-NEXT:    s_setpc_b64 s[30:31]1983  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 101984  %data = call i32 asm "; def $0", "=^VA"()1985  %unused = atomicrmw xor ptr addrspace(1) %ptr, i32 %data seq_cst1986  ret void1987}1988 1989;---------------------------------------------------------------------1990; xor i64 cases with cmpxchg expansion1991;---------------------------------------------------------------------1992 1993; Input and result use AGPR1994define void @global_atomic_xor_expansion_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {1995; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_a_a:1996; GFX90A:       ; %bb.0:1997; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1998; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off1999; GFX90A-NEXT:    ;;#ASMSTART2000; GFX90A-NEXT:    ; def a[0:1]2001; GFX90A-NEXT:    ;;#ASMEND2002; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a12003; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a02004; GFX90A-NEXT:    s_mov_b64 s[4:5], 02005; GFX90A-NEXT:  .LBB32_1: ; %atomicrmw.start2006; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12007; GFX90A-NEXT:    s_waitcnt vmcnt(0)2008; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72009; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62010; GFX90A-NEXT:    buffer_wbl22011; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2012; GFX90A-NEXT:    s_waitcnt vmcnt(0)2013; GFX90A-NEXT:    buffer_invl22014; GFX90A-NEXT:    buffer_wbinvl1_vol2015; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2016; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2017; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2018; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2019; GFX90A-NEXT:    s_cbranch_execnz .LBB32_12020; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2021; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2022; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v22023; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v32024; GFX90A-NEXT:    ;;#ASMSTART2025; GFX90A-NEXT:    ; use a[0:1]2026; GFX90A-NEXT:    ;;#ASMEND2027; GFX90A-NEXT:    s_setpc_b64 s[30:31]2028;2029; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_a_a:2030; GFX950:       ; %bb.0:2031; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2032; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2033; GFX950-NEXT:    ;;#ASMSTART2034; GFX950-NEXT:    ; def a[0:1]2035; GFX950-NEXT:    ;;#ASMEND2036; GFX950-NEXT:    s_mov_b64 s[0:1], 02037; GFX950-NEXT:    v_accvgpr_read_b32 v7, a12038; GFX950-NEXT:    v_accvgpr_read_b32 v6, a02039; GFX950-NEXT:  .LBB32_1: ; %atomicrmw.start2040; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12041; GFX950-NEXT:    s_waitcnt vmcnt(0)2042; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72043; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62044; GFX950-NEXT:    buffer_wbl2 sc0 sc12045; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12046; GFX950-NEXT:    s_waitcnt vmcnt(0)2047; GFX950-NEXT:    buffer_inv sc0 sc12048; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2049; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2050; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2051; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2052; GFX950-NEXT:    s_cbranch_execnz .LBB32_12053; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2054; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2055; GFX950-NEXT:    v_accvgpr_write_b32 a0, v22056; GFX950-NEXT:    v_accvgpr_write_b32 a1, v32057; GFX950-NEXT:    ;;#ASMSTART2058; GFX950-NEXT:    ; use a[0:1]2059; GFX950-NEXT:    ;;#ASMEND2060; GFX950-NEXT:    s_setpc_b64 s[30:31]2061  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102062  %data = call i64 asm "; def $0", "=a"()2063  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2064  call void asm "; use $0", "a"(i64 %result)2065  ret void2066}2067 2068; Input is AGPR, result used as VGPR.2069define void @global_atomic_xor_expansion_i64_ret_a_v(ptr addrspace(1) %ptr) #0 {2070; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_a_v:2071; GFX90A:       ; %bb.0:2072; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2073; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2074; GFX90A-NEXT:    ;;#ASMSTART2075; GFX90A-NEXT:    ; def a[0:1]2076; GFX90A-NEXT:    ;;#ASMEND2077; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a12078; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a02079; GFX90A-NEXT:    s_mov_b64 s[4:5], 02080; GFX90A-NEXT:  .LBB33_1: ; %atomicrmw.start2081; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12082; GFX90A-NEXT:    s_waitcnt vmcnt(0)2083; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72084; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62085; GFX90A-NEXT:    buffer_wbl22086; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2087; GFX90A-NEXT:    s_waitcnt vmcnt(0)2088; GFX90A-NEXT:    buffer_invl22089; GFX90A-NEXT:    buffer_wbinvl1_vol2090; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2091; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2092; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2093; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2094; GFX90A-NEXT:    s_cbranch_execnz .LBB33_12095; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2096; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2097; GFX90A-NEXT:    ;;#ASMSTART2098; GFX90A-NEXT:    ; use v[2:3]2099; GFX90A-NEXT:    ;;#ASMEND2100; GFX90A-NEXT:    s_setpc_b64 s[30:31]2101;2102; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_a_v:2103; GFX950:       ; %bb.0:2104; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2105; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2106; GFX950-NEXT:    ;;#ASMSTART2107; GFX950-NEXT:    ; def a[0:1]2108; GFX950-NEXT:    ;;#ASMEND2109; GFX950-NEXT:    s_mov_b64 s[0:1], 02110; GFX950-NEXT:    v_accvgpr_read_b32 v7, a12111; GFX950-NEXT:    v_accvgpr_read_b32 v6, a02112; GFX950-NEXT:  .LBB33_1: ; %atomicrmw.start2113; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12114; GFX950-NEXT:    s_waitcnt vmcnt(0)2115; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72116; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62117; GFX950-NEXT:    buffer_wbl2 sc0 sc12118; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12119; GFX950-NEXT:    s_waitcnt vmcnt(0)2120; GFX950-NEXT:    buffer_inv sc0 sc12121; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2122; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2123; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2124; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2125; GFX950-NEXT:    s_cbranch_execnz .LBB33_12126; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2127; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2128; GFX950-NEXT:    ;;#ASMSTART2129; GFX950-NEXT:    ; use v[2:3]2130; GFX950-NEXT:    ;;#ASMEND2131; GFX950-NEXT:    s_setpc_b64 s[30:31]2132  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102133  %data = call i64 asm "; def $0", "=a"()2134  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2135  call void asm "; use $0", "v"(i64 %result)2136  ret void2137}2138 2139; Input is VGPR, result used as AGPR2140define void @global_atomic_xor_expansion_i64_ret_v_a(ptr addrspace(1) %ptr) #0 {2141; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_v_a:2142; GFX90A:       ; %bb.0:2143; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2144; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2145; GFX90A-NEXT:    s_mov_b64 s[4:5], 02146; GFX90A-NEXT:    ;;#ASMSTART2147; GFX90A-NEXT:    ; def v[6:7]2148; GFX90A-NEXT:    ;;#ASMEND2149; GFX90A-NEXT:  .LBB34_1: ; %atomicrmw.start2150; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12151; GFX90A-NEXT:    s_waitcnt vmcnt(0)2152; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72153; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62154; GFX90A-NEXT:    buffer_wbl22155; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2156; GFX90A-NEXT:    s_waitcnt vmcnt(0)2157; GFX90A-NEXT:    buffer_invl22158; GFX90A-NEXT:    buffer_wbinvl1_vol2159; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2160; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2161; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2162; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2163; GFX90A-NEXT:    s_cbranch_execnz .LBB34_12164; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2165; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2166; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v22167; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v32168; GFX90A-NEXT:    ;;#ASMSTART2169; GFX90A-NEXT:    ; use a[0:1]2170; GFX90A-NEXT:    ;;#ASMEND2171; GFX90A-NEXT:    s_setpc_b64 s[30:31]2172;2173; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_v_a:2174; GFX950:       ; %bb.0:2175; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2176; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2177; GFX950-NEXT:    s_mov_b64 s[0:1], 02178; GFX950-NEXT:    ;;#ASMSTART2179; GFX950-NEXT:    ; def v[6:7]2180; GFX950-NEXT:    ;;#ASMEND2181; GFX950-NEXT:  .LBB34_1: ; %atomicrmw.start2182; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12183; GFX950-NEXT:    s_waitcnt vmcnt(0)2184; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72185; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62186; GFX950-NEXT:    buffer_wbl2 sc0 sc12187; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12188; GFX950-NEXT:    s_waitcnt vmcnt(0)2189; GFX950-NEXT:    buffer_inv sc0 sc12190; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2191; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2192; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2193; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2194; GFX950-NEXT:    s_cbranch_execnz .LBB34_12195; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2196; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2197; GFX950-NEXT:    v_accvgpr_write_b32 a0, v22198; GFX950-NEXT:    v_accvgpr_write_b32 a1, v32199; GFX950-NEXT:    ;;#ASMSTART2200; GFX950-NEXT:    ; use a[0:1]2201; GFX950-NEXT:    ;;#ASMEND2202; GFX950-NEXT:    s_setpc_b64 s[30:31]2203  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102204  %data = call i64 asm "; def $0", "=v"()2205  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2206  call void asm "; use $0", "a"(i64 %result)2207  ret void2208}2209 2210; Input is AV, result also used as AV2211define void @global_atomic_xor_expansion_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {2212; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_av_av:2213; GFX90A:       ; %bb.0:2214; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2215; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2216; GFX90A-NEXT:    s_mov_b64 s[4:5], 02217; GFX90A-NEXT:    ;;#ASMSTART2218; GFX90A-NEXT:    ; def v[6:7]2219; GFX90A-NEXT:    ;;#ASMEND2220; GFX90A-NEXT:  .LBB35_1: ; %atomicrmw.start2221; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12222; GFX90A-NEXT:    s_waitcnt vmcnt(0)2223; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72224; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62225; GFX90A-NEXT:    buffer_wbl22226; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2227; GFX90A-NEXT:    s_waitcnt vmcnt(0)2228; GFX90A-NEXT:    buffer_invl22229; GFX90A-NEXT:    buffer_wbinvl1_vol2230; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2231; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2232; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2233; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2234; GFX90A-NEXT:    s_cbranch_execnz .LBB35_12235; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2236; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2237; GFX90A-NEXT:    ;;#ASMSTART2238; GFX90A-NEXT:    ; use v[2:3]2239; GFX90A-NEXT:    ;;#ASMEND2240; GFX90A-NEXT:    s_setpc_b64 s[30:31]2241;2242; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_av_av:2243; GFX950:       ; %bb.0:2244; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2245; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2246; GFX950-NEXT:    s_mov_b64 s[0:1], 02247; GFX950-NEXT:    ;;#ASMSTART2248; GFX950-NEXT:    ; def v[6:7]2249; GFX950-NEXT:    ;;#ASMEND2250; GFX950-NEXT:  .LBB35_1: ; %atomicrmw.start2251; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12252; GFX950-NEXT:    s_waitcnt vmcnt(0)2253; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72254; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62255; GFX950-NEXT:    buffer_wbl2 sc0 sc12256; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12257; GFX950-NEXT:    s_waitcnt vmcnt(0)2258; GFX950-NEXT:    buffer_inv sc0 sc12259; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2260; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2261; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2262; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2263; GFX950-NEXT:    s_cbranch_execnz .LBB35_12264; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2265; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2266; GFX950-NEXT:    ;;#ASMSTART2267; GFX950-NEXT:    ; use v[2:3]2268; GFX950-NEXT:    ;;#ASMEND2269; GFX950-NEXT:    s_setpc_b64 s[30:31]2270  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102271  %data = call i64 asm "; def $0", "=^VA"()2272  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2273  call void asm "; use $0", "^VA"(i64 %result)2274  ret void2275}2276 2277; Input is AV, used as v2278define void @global_atomic_xor_expansion_i64_ret_av_v(ptr addrspace(1) %ptr) #0 {2279; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_av_v:2280; GFX90A:       ; %bb.0:2281; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2282; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2283; GFX90A-NEXT:    s_mov_b64 s[4:5], 02284; GFX90A-NEXT:    ;;#ASMSTART2285; GFX90A-NEXT:    ; def v[6:7]2286; GFX90A-NEXT:    ;;#ASMEND2287; GFX90A-NEXT:  .LBB36_1: ; %atomicrmw.start2288; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12289; GFX90A-NEXT:    s_waitcnt vmcnt(0)2290; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72291; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62292; GFX90A-NEXT:    buffer_wbl22293; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2294; GFX90A-NEXT:    s_waitcnt vmcnt(0)2295; GFX90A-NEXT:    buffer_invl22296; GFX90A-NEXT:    buffer_wbinvl1_vol2297; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2298; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2299; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2300; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2301; GFX90A-NEXT:    s_cbranch_execnz .LBB36_12302; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2303; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2304; GFX90A-NEXT:    ;;#ASMSTART2305; GFX90A-NEXT:    ; use v[2:3]2306; GFX90A-NEXT:    ;;#ASMEND2307; GFX90A-NEXT:    s_setpc_b64 s[30:31]2308;2309; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_av_v:2310; GFX950:       ; %bb.0:2311; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2312; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2313; GFX950-NEXT:    s_mov_b64 s[0:1], 02314; GFX950-NEXT:    ;;#ASMSTART2315; GFX950-NEXT:    ; def v[6:7]2316; GFX950-NEXT:    ;;#ASMEND2317; GFX950-NEXT:  .LBB36_1: ; %atomicrmw.start2318; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12319; GFX950-NEXT:    s_waitcnt vmcnt(0)2320; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72321; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62322; GFX950-NEXT:    buffer_wbl2 sc0 sc12323; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12324; GFX950-NEXT:    s_waitcnt vmcnt(0)2325; GFX950-NEXT:    buffer_inv sc0 sc12326; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2327; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2328; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2329; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2330; GFX950-NEXT:    s_cbranch_execnz .LBB36_12331; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2332; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2333; GFX950-NEXT:    ;;#ASMSTART2334; GFX950-NEXT:    ; use v[2:3]2335; GFX950-NEXT:    ;;#ASMEND2336; GFX950-NEXT:    s_setpc_b64 s[30:31]2337  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102338  %data = call i64 asm "; def $0", "=^VA"()2339  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2340  call void asm "; use $0", "v"(i64 %result)2341  ret void2342}2343 2344; Input is AV, used as a2345define void @global_atomic_xor_expansion_i64_ret_av_a(ptr addrspace(1) %ptr) #0 {2346; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_av_a:2347; GFX90A:       ; %bb.0:2348; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2349; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2350; GFX90A-NEXT:    s_mov_b64 s[4:5], 02351; GFX90A-NEXT:    ;;#ASMSTART2352; GFX90A-NEXT:    ; def v[6:7]2353; GFX90A-NEXT:    ;;#ASMEND2354; GFX90A-NEXT:  .LBB37_1: ; %atomicrmw.start2355; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12356; GFX90A-NEXT:    s_waitcnt vmcnt(0)2357; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72358; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62359; GFX90A-NEXT:    buffer_wbl22360; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2361; GFX90A-NEXT:    s_waitcnt vmcnt(0)2362; GFX90A-NEXT:    buffer_invl22363; GFX90A-NEXT:    buffer_wbinvl1_vol2364; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2365; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2366; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2367; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2368; GFX90A-NEXT:    s_cbranch_execnz .LBB37_12369; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2370; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2371; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v22372; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v32373; GFX90A-NEXT:    ;;#ASMSTART2374; GFX90A-NEXT:    ; use a[0:1]2375; GFX90A-NEXT:    ;;#ASMEND2376; GFX90A-NEXT:    s_setpc_b64 s[30:31]2377;2378; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_av_a:2379; GFX950:       ; %bb.0:2380; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2381; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2382; GFX950-NEXT:    s_mov_b64 s[0:1], 02383; GFX950-NEXT:    ;;#ASMSTART2384; GFX950-NEXT:    ; def v[6:7]2385; GFX950-NEXT:    ;;#ASMEND2386; GFX950-NEXT:  .LBB37_1: ; %atomicrmw.start2387; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12388; GFX950-NEXT:    s_waitcnt vmcnt(0)2389; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72390; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62391; GFX950-NEXT:    buffer_wbl2 sc0 sc12392; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12393; GFX950-NEXT:    s_waitcnt vmcnt(0)2394; GFX950-NEXT:    buffer_inv sc0 sc12395; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2396; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2397; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2398; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2399; GFX950-NEXT:    s_cbranch_execnz .LBB37_12400; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2401; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2402; GFX950-NEXT:    v_accvgpr_write_b32 a0, v22403; GFX950-NEXT:    v_accvgpr_write_b32 a1, v32404; GFX950-NEXT:    ;;#ASMSTART2405; GFX950-NEXT:    ; use a[0:1]2406; GFX950-NEXT:    ;;#ASMEND2407; GFX950-NEXT:    s_setpc_b64 s[30:31]2408  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102409  %data = call i64 asm "; def $0", "=^VA"()2410  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2411  call void asm "; use $0", "a"(i64 %result)2412  ret void2413}2414 2415; Input is a, result used as AV2416define void @global_atomic_xor_expansion_i64_ret_a_av(ptr addrspace(1) %ptr) #0 {2417; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_a_av:2418; GFX90A:       ; %bb.0:2419; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2420; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2421; GFX90A-NEXT:    ;;#ASMSTART2422; GFX90A-NEXT:    ; def a[0:1]2423; GFX90A-NEXT:    ;;#ASMEND2424; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a12425; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a02426; GFX90A-NEXT:    s_mov_b64 s[4:5], 02427; GFX90A-NEXT:  .LBB38_1: ; %atomicrmw.start2428; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12429; GFX90A-NEXT:    s_waitcnt vmcnt(0)2430; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72431; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62432; GFX90A-NEXT:    buffer_wbl22433; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2434; GFX90A-NEXT:    s_waitcnt vmcnt(0)2435; GFX90A-NEXT:    buffer_invl22436; GFX90A-NEXT:    buffer_wbinvl1_vol2437; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2438; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2439; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2440; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2441; GFX90A-NEXT:    s_cbranch_execnz .LBB38_12442; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2443; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2444; GFX90A-NEXT:    ;;#ASMSTART2445; GFX90A-NEXT:    ; use v[2:3]2446; GFX90A-NEXT:    ;;#ASMEND2447; GFX90A-NEXT:    s_setpc_b64 s[30:31]2448;2449; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_a_av:2450; GFX950:       ; %bb.0:2451; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2452; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2453; GFX950-NEXT:    ;;#ASMSTART2454; GFX950-NEXT:    ; def a[0:1]2455; GFX950-NEXT:    ;;#ASMEND2456; GFX950-NEXT:    s_mov_b64 s[0:1], 02457; GFX950-NEXT:    v_accvgpr_read_b32 v7, a12458; GFX950-NEXT:    v_accvgpr_read_b32 v6, a02459; GFX950-NEXT:  .LBB38_1: ; %atomicrmw.start2460; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12461; GFX950-NEXT:    s_waitcnt vmcnt(0)2462; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72463; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62464; GFX950-NEXT:    buffer_wbl2 sc0 sc12465; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12466; GFX950-NEXT:    s_waitcnt vmcnt(0)2467; GFX950-NEXT:    buffer_inv sc0 sc12468; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2469; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2470; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2471; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2472; GFX950-NEXT:    s_cbranch_execnz .LBB38_12473; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2474; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2475; GFX950-NEXT:    ;;#ASMSTART2476; GFX950-NEXT:    ; use v[2:3]2477; GFX950-NEXT:    ;;#ASMEND2478; GFX950-NEXT:    s_setpc_b64 s[30:31]2479  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102480  %data = call i64 asm "; def $0", "=a"()2481  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2482  call void asm "; use $0", "^VA"(i64 %result)2483  ret void2484}2485 2486; Input is v, result used as AV2487define void @global_atomic_xor_expansion_i64_ret_v_av(ptr addrspace(1) %ptr) #0 {2488; GFX90A-LABEL: global_atomic_xor_expansion_i64_ret_v_av:2489; GFX90A:       ; %bb.0:2490; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2491; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2492; GFX90A-NEXT:    s_mov_b64 s[4:5], 02493; GFX90A-NEXT:    ;;#ASMSTART2494; GFX90A-NEXT:    ; def v[6:7]2495; GFX90A-NEXT:    ;;#ASMEND2496; GFX90A-NEXT:  .LBB39_1: ; %atomicrmw.start2497; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12498; GFX90A-NEXT:    s_waitcnt vmcnt(0)2499; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72500; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62501; GFX90A-NEXT:    buffer_wbl22502; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2503; GFX90A-NEXT:    s_waitcnt vmcnt(0)2504; GFX90A-NEXT:    buffer_invl22505; GFX90A-NEXT:    buffer_wbinvl1_vol2506; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2507; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2508; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2509; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2510; GFX90A-NEXT:    s_cbranch_execnz .LBB39_12511; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2512; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2513; GFX90A-NEXT:    ;;#ASMSTART2514; GFX90A-NEXT:    ; use v[2:3]2515; GFX90A-NEXT:    ;;#ASMEND2516; GFX90A-NEXT:    s_setpc_b64 s[30:31]2517;2518; GFX950-LABEL: global_atomic_xor_expansion_i64_ret_v_av:2519; GFX950:       ; %bb.0:2520; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2521; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2522; GFX950-NEXT:    s_mov_b64 s[0:1], 02523; GFX950-NEXT:    ;;#ASMSTART2524; GFX950-NEXT:    ; def v[6:7]2525; GFX950-NEXT:    ;;#ASMEND2526; GFX950-NEXT:  .LBB39_1: ; %atomicrmw.start2527; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12528; GFX950-NEXT:    s_waitcnt vmcnt(0)2529; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72530; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62531; GFX950-NEXT:    buffer_wbl2 sc0 sc12532; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12533; GFX950-NEXT:    s_waitcnt vmcnt(0)2534; GFX950-NEXT:    buffer_inv sc0 sc12535; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2536; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2537; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2538; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2539; GFX950-NEXT:    s_cbranch_execnz .LBB39_12540; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2541; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2542; GFX950-NEXT:    ;;#ASMSTART2543; GFX950-NEXT:    ; use v[2:3]2544; GFX950-NEXT:    ;;#ASMEND2545; GFX950-NEXT:    s_setpc_b64 s[30:31]2546  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102547  %data = call i64 asm "; def $0", "=v"()2548  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2549  call void asm "; use $0", "^VA"(i64 %result)2550  ret void2551}2552 2553define void @global_atomic_xor_expansion_i64_noret_a(ptr addrspace(1) %ptr) #0 {2554; GFX90A-LABEL: global_atomic_xor_expansion_i64_noret_a:2555; GFX90A:       ; %bb.0:2556; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2557; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2558; GFX90A-NEXT:    ;;#ASMSTART2559; GFX90A-NEXT:    ; def a[0:1]2560; GFX90A-NEXT:    ;;#ASMEND2561; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a12562; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a02563; GFX90A-NEXT:    s_mov_b64 s[4:5], 02564; GFX90A-NEXT:  .LBB40_1: ; %atomicrmw.start2565; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12566; GFX90A-NEXT:    s_waitcnt vmcnt(0)2567; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72568; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62569; GFX90A-NEXT:    buffer_wbl22570; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2571; GFX90A-NEXT:    s_waitcnt vmcnt(0)2572; GFX90A-NEXT:    buffer_invl22573; GFX90A-NEXT:    buffer_wbinvl1_vol2574; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2575; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2576; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2577; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2578; GFX90A-NEXT:    s_cbranch_execnz .LBB40_12579; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2580; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2581; GFX90A-NEXT:    s_setpc_b64 s[30:31]2582;2583; GFX950-LABEL: global_atomic_xor_expansion_i64_noret_a:2584; GFX950:       ; %bb.0:2585; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2586; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2587; GFX950-NEXT:    ;;#ASMSTART2588; GFX950-NEXT:    ; def a[0:1]2589; GFX950-NEXT:    ;;#ASMEND2590; GFX950-NEXT:    s_mov_b64 s[0:1], 02591; GFX950-NEXT:    v_accvgpr_read_b32 v7, a12592; GFX950-NEXT:    v_accvgpr_read_b32 v6, a02593; GFX950-NEXT:  .LBB40_1: ; %atomicrmw.start2594; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12595; GFX950-NEXT:    s_waitcnt vmcnt(0)2596; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72597; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62598; GFX950-NEXT:    buffer_wbl2 sc0 sc12599; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12600; GFX950-NEXT:    s_waitcnt vmcnt(0)2601; GFX950-NEXT:    buffer_inv sc0 sc12602; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2603; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2604; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2605; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2606; GFX950-NEXT:    s_cbranch_execnz .LBB40_12607; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2608; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2609; GFX950-NEXT:    s_setpc_b64 s[30:31]2610  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102611  %data = call i64 asm "; def $0", "=a"()2612  %unused = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2613  ret void2614}2615 2616define void @global_atomic_xor_expansion_i64_noret_av(ptr addrspace(1) %ptr) #0 {2617; GFX90A-LABEL: global_atomic_xor_expansion_i64_noret_av:2618; GFX90A:       ; %bb.0:2619; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2620; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2621; GFX90A-NEXT:    s_mov_b64 s[4:5], 02622; GFX90A-NEXT:    ;;#ASMSTART2623; GFX90A-NEXT:    ; def v[6:7]2624; GFX90A-NEXT:    ;;#ASMEND2625; GFX90A-NEXT:  .LBB41_1: ; %atomicrmw.start2626; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=12627; GFX90A-NEXT:    s_waitcnt vmcnt(0)2628; GFX90A-NEXT:    v_xor_b32_e32 v3, v5, v72629; GFX90A-NEXT:    v_xor_b32_e32 v2, v4, v62630; GFX90A-NEXT:    buffer_wbl22631; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off glc2632; GFX90A-NEXT:    s_waitcnt vmcnt(0)2633; GFX90A-NEXT:    buffer_invl22634; GFX90A-NEXT:    buffer_wbinvl1_vol2635; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2636; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2637; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]2638; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]2639; GFX90A-NEXT:    s_cbranch_execnz .LBB41_12640; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end2641; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]2642; GFX90A-NEXT:    s_setpc_b64 s[30:31]2643;2644; GFX950-LABEL: global_atomic_xor_expansion_i64_noret_av:2645; GFX950:       ; %bb.0:2646; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2647; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off2648; GFX950-NEXT:    s_mov_b64 s[0:1], 02649; GFX950-NEXT:    ;;#ASMSTART2650; GFX950-NEXT:    ; def v[6:7]2651; GFX950-NEXT:    ;;#ASMEND2652; GFX950-NEXT:  .LBB41_1: ; %atomicrmw.start2653; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=12654; GFX950-NEXT:    s_waitcnt vmcnt(0)2655; GFX950-NEXT:    v_xor_b32_e32 v3, v5, v72656; GFX950-NEXT:    v_xor_b32_e32 v2, v4, v62657; GFX950-NEXT:    buffer_wbl2 sc0 sc12658; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off sc0 sc12659; GFX950-NEXT:    s_waitcnt vmcnt(0)2660; GFX950-NEXT:    buffer_inv sc0 sc12661; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]2662; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]2663; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]2664; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]2665; GFX950-NEXT:    s_cbranch_execnz .LBB41_12666; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end2667; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]2668; GFX950-NEXT:    s_setpc_b64 s[30:31]2669  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 102670  %data = call i64 asm "; def $0", "=^VA"()2671  %unused = atomicrmw xor ptr addrspace(1) %ptr, i64 %data seq_cst2672  ret void2673}2674 2675;---------------------------------------------------------------------2676; xor i32 cases with instruction2677;---------------------------------------------------------------------2678 2679; Input and result use AGPR2680define void @global_atomic_xor_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {2681; GFX90A-LABEL: global_atomic_xor_i32_ret_a_a:2682; GFX90A:       ; %bb.0:2683; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2684; GFX90A-NEXT:    ;;#ASMSTART2685; GFX90A-NEXT:    ; def a02686; GFX90A-NEXT:    ;;#ASMEND2687; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a02688; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2689; GFX90A-NEXT:    s_waitcnt vmcnt(0)2690; GFX90A-NEXT:    buffer_wbinvl1_vol2691; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v02692; GFX90A-NEXT:    ;;#ASMSTART2693; GFX90A-NEXT:    ; use a02694; GFX90A-NEXT:    ;;#ASMEND2695; GFX90A-NEXT:    s_setpc_b64 s[30:31]2696;2697; GFX950-LABEL: global_atomic_xor_i32_ret_a_a:2698; GFX950:       ; %bb.0:2699; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2700; GFX950-NEXT:    ;;#ASMSTART2701; GFX950-NEXT:    ; def a02702; GFX950-NEXT:    ;;#ASMEND2703; GFX950-NEXT:    s_nop 02704; GFX950-NEXT:    v_accvgpr_read_b32 v2, a02705; GFX950-NEXT:    buffer_wbl2 sc12706; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02707; GFX950-NEXT:    s_waitcnt vmcnt(0)2708; GFX950-NEXT:    buffer_inv sc12709; GFX950-NEXT:    v_accvgpr_write_b32 a0, v02710; GFX950-NEXT:    ;;#ASMSTART2711; GFX950-NEXT:    ; use a02712; GFX950-NEXT:    ;;#ASMEND2713; GFX950-NEXT:    s_setpc_b64 s[30:31]2714  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102715  %data = call i32 asm "; def $0", "=a"()2716  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.fine.grained.memory !02717  call void asm "; use $0", "a"(i32 %result)2718  ret void2719}2720 2721; Input is AGPR, result used as VGPR.2722define void @global_atomic_xor_i32_ret_a_v(ptr addrspace(1) %ptr) #0 {2723; GFX90A-LABEL: global_atomic_xor_i32_ret_a_v:2724; GFX90A:       ; %bb.0:2725; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2726; GFX90A-NEXT:    ;;#ASMSTART2727; GFX90A-NEXT:    ; def a02728; GFX90A-NEXT:    ;;#ASMEND2729; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a02730; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2731; GFX90A-NEXT:    s_waitcnt vmcnt(0)2732; GFX90A-NEXT:    buffer_wbinvl1_vol2733; GFX90A-NEXT:    ;;#ASMSTART2734; GFX90A-NEXT:    ; use v02735; GFX90A-NEXT:    ;;#ASMEND2736; GFX90A-NEXT:    s_setpc_b64 s[30:31]2737;2738; GFX950-LABEL: global_atomic_xor_i32_ret_a_v:2739; GFX950:       ; %bb.0:2740; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2741; GFX950-NEXT:    ;;#ASMSTART2742; GFX950-NEXT:    ; def a02743; GFX950-NEXT:    ;;#ASMEND2744; GFX950-NEXT:    s_nop 02745; GFX950-NEXT:    v_accvgpr_read_b32 v2, a02746; GFX950-NEXT:    buffer_wbl2 sc12747; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02748; GFX950-NEXT:    s_waitcnt vmcnt(0)2749; GFX950-NEXT:    buffer_inv sc12750; GFX950-NEXT:    ;;#ASMSTART2751; GFX950-NEXT:    ; use v02752; GFX950-NEXT:    ;;#ASMEND2753; GFX950-NEXT:    s_setpc_b64 s[30:31]2754  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102755  %data = call i32 asm "; def $0", "=a"()2756  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02757  call void asm "; use $0", "v"(i32 %result)2758  ret void2759}2760 2761; Input is VGPR, result used as AGPR2762define void @global_atomic_xor_i32_ret_v_a(ptr addrspace(1) %ptr) #0 {2763; GFX90A-LABEL: global_atomic_xor_i32_ret_v_a:2764; GFX90A:       ; %bb.0:2765; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2766; GFX90A-NEXT:    ;;#ASMSTART2767; GFX90A-NEXT:    ; def v22768; GFX90A-NEXT:    ;;#ASMEND2769; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2770; GFX90A-NEXT:    s_waitcnt vmcnt(0)2771; GFX90A-NEXT:    buffer_wbinvl1_vol2772; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v02773; GFX90A-NEXT:    ;;#ASMSTART2774; GFX90A-NEXT:    ; use a02775; GFX90A-NEXT:    ;;#ASMEND2776; GFX90A-NEXT:    s_setpc_b64 s[30:31]2777;2778; GFX950-LABEL: global_atomic_xor_i32_ret_v_a:2779; GFX950:       ; %bb.0:2780; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2781; GFX950-NEXT:    ;;#ASMSTART2782; GFX950-NEXT:    ; def v22783; GFX950-NEXT:    ;;#ASMEND2784; GFX950-NEXT:    buffer_wbl2 sc12785; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02786; GFX950-NEXT:    s_waitcnt vmcnt(0)2787; GFX950-NEXT:    buffer_inv sc12788; GFX950-NEXT:    v_accvgpr_write_b32 a0, v02789; GFX950-NEXT:    ;;#ASMSTART2790; GFX950-NEXT:    ; use a02791; GFX950-NEXT:    ;;#ASMEND2792; GFX950-NEXT:    s_setpc_b64 s[30:31]2793  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102794  %data = call i32 asm "; def $0", "=v"()2795  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02796  call void asm "; use $0", "a"(i32 %result)2797  ret void2798}2799 2800; Input is AV, result also used as AV2801define void @global_atomic_xor_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {2802; GFX90A-LABEL: global_atomic_xor_i32_ret_av_av:2803; GFX90A:       ; %bb.0:2804; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2805; GFX90A-NEXT:    ;;#ASMSTART2806; GFX90A-NEXT:    ; def v22807; GFX90A-NEXT:    ;;#ASMEND2808; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2809; GFX90A-NEXT:    s_waitcnt vmcnt(0)2810; GFX90A-NEXT:    buffer_wbinvl1_vol2811; GFX90A-NEXT:    ;;#ASMSTART2812; GFX90A-NEXT:    ; use v02813; GFX90A-NEXT:    ;;#ASMEND2814; GFX90A-NEXT:    s_setpc_b64 s[30:31]2815;2816; GFX950-LABEL: global_atomic_xor_i32_ret_av_av:2817; GFX950:       ; %bb.0:2818; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2819; GFX950-NEXT:    ;;#ASMSTART2820; GFX950-NEXT:    ; def v22821; GFX950-NEXT:    ;;#ASMEND2822; GFX950-NEXT:    buffer_wbl2 sc12823; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02824; GFX950-NEXT:    s_waitcnt vmcnt(0)2825; GFX950-NEXT:    buffer_inv sc12826; GFX950-NEXT:    ;;#ASMSTART2827; GFX950-NEXT:    ; use v02828; GFX950-NEXT:    ;;#ASMEND2829; GFX950-NEXT:    s_setpc_b64 s[30:31]2830  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102831  %data = call i32 asm "; def $0", "=^VA"()2832  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02833  call void asm "; use $0", "^VA"(i32 %result)2834  ret void2835}2836 2837; Input is AV, used as v2838define void @global_atomic_xor_i32_ret_av_v(ptr addrspace(1) %ptr) #0 {2839; GFX90A-LABEL: global_atomic_xor_i32_ret_av_v:2840; GFX90A:       ; %bb.0:2841; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2842; GFX90A-NEXT:    ;;#ASMSTART2843; GFX90A-NEXT:    ; def v22844; GFX90A-NEXT:    ;;#ASMEND2845; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2846; GFX90A-NEXT:    s_waitcnt vmcnt(0)2847; GFX90A-NEXT:    buffer_wbinvl1_vol2848; GFX90A-NEXT:    ;;#ASMSTART2849; GFX90A-NEXT:    ; use v02850; GFX90A-NEXT:    ;;#ASMEND2851; GFX90A-NEXT:    s_setpc_b64 s[30:31]2852;2853; GFX950-LABEL: global_atomic_xor_i32_ret_av_v:2854; GFX950:       ; %bb.0:2855; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2856; GFX950-NEXT:    ;;#ASMSTART2857; GFX950-NEXT:    ; def v22858; GFX950-NEXT:    ;;#ASMEND2859; GFX950-NEXT:    buffer_wbl2 sc12860; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02861; GFX950-NEXT:    s_waitcnt vmcnt(0)2862; GFX950-NEXT:    buffer_inv sc12863; GFX950-NEXT:    ;;#ASMSTART2864; GFX950-NEXT:    ; use v02865; GFX950-NEXT:    ;;#ASMEND2866; GFX950-NEXT:    s_setpc_b64 s[30:31]2867  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102868  %data = call i32 asm "; def $0", "=^VA"()2869  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02870  call void asm "; use $0", "v"(i32 %result)2871  ret void2872}2873 2874; Input is AV, used as a2875define void @global_atomic_xor_i32_ret_av_a(ptr addrspace(1) %ptr) #0 {2876; GFX90A-LABEL: global_atomic_xor_i32_ret_av_a:2877; GFX90A:       ; %bb.0:2878; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2879; GFX90A-NEXT:    ;;#ASMSTART2880; GFX90A-NEXT:    ; def v22881; GFX90A-NEXT:    ;;#ASMEND2882; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2883; GFX90A-NEXT:    s_waitcnt vmcnt(0)2884; GFX90A-NEXT:    buffer_wbinvl1_vol2885; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v02886; GFX90A-NEXT:    ;;#ASMSTART2887; GFX90A-NEXT:    ; use a02888; GFX90A-NEXT:    ;;#ASMEND2889; GFX90A-NEXT:    s_setpc_b64 s[30:31]2890;2891; GFX950-LABEL: global_atomic_xor_i32_ret_av_a:2892; GFX950:       ; %bb.0:2893; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2894; GFX950-NEXT:    ;;#ASMSTART2895; GFX950-NEXT:    ; def v22896; GFX950-NEXT:    ;;#ASMEND2897; GFX950-NEXT:    buffer_wbl2 sc12898; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02899; GFX950-NEXT:    s_waitcnt vmcnt(0)2900; GFX950-NEXT:    buffer_inv sc12901; GFX950-NEXT:    v_accvgpr_write_b32 a0, v02902; GFX950-NEXT:    ;;#ASMSTART2903; GFX950-NEXT:    ; use a02904; GFX950-NEXT:    ;;#ASMEND2905; GFX950-NEXT:    s_setpc_b64 s[30:31]2906  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102907  %data = call i32 asm "; def $0", "=^VA"()2908  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02909  call void asm "; use $0", "a"(i32 %result)2910  ret void2911}2912 2913; Input is a, result used as AV2914define void @global_atomic_xor_i32_ret_a_av(ptr addrspace(1) %ptr) #0 {2915; GFX90A-LABEL: global_atomic_xor_i32_ret_a_av:2916; GFX90A:       ; %bb.0:2917; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2918; GFX90A-NEXT:    ;;#ASMSTART2919; GFX90A-NEXT:    ; def a02920; GFX90A-NEXT:    ;;#ASMEND2921; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a02922; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2923; GFX90A-NEXT:    s_waitcnt vmcnt(0)2924; GFX90A-NEXT:    buffer_wbinvl1_vol2925; GFX90A-NEXT:    ;;#ASMSTART2926; GFX90A-NEXT:    ; use v02927; GFX90A-NEXT:    ;;#ASMEND2928; GFX90A-NEXT:    s_setpc_b64 s[30:31]2929;2930; GFX950-LABEL: global_atomic_xor_i32_ret_a_av:2931; GFX950:       ; %bb.0:2932; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2933; GFX950-NEXT:    ;;#ASMSTART2934; GFX950-NEXT:    ; def a02935; GFX950-NEXT:    ;;#ASMEND2936; GFX950-NEXT:    s_nop 02937; GFX950-NEXT:    v_accvgpr_read_b32 v2, a02938; GFX950-NEXT:    buffer_wbl2 sc12939; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02940; GFX950-NEXT:    s_waitcnt vmcnt(0)2941; GFX950-NEXT:    buffer_inv sc12942; GFX950-NEXT:    ;;#ASMSTART2943; GFX950-NEXT:    ; use v02944; GFX950-NEXT:    ;;#ASMEND2945; GFX950-NEXT:    s_setpc_b64 s[30:31]2946  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102947  %data = call i32 asm "; def $0", "=a"()2948  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02949  call void asm "; use $0", "^VA"(i32 %result)2950  ret void2951}2952 2953; Input is v, result used as AV2954define void @global_atomic_xor_i32_ret_v_av(ptr addrspace(1) %ptr) #0 {2955; GFX90A-LABEL: global_atomic_xor_i32_ret_v_av:2956; GFX90A:       ; %bb.0:2957; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2958; GFX90A-NEXT:    ;;#ASMSTART2959; GFX90A-NEXT:    ; def v22960; GFX90A-NEXT:    ;;#ASMEND2961; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc2962; GFX90A-NEXT:    s_waitcnt vmcnt(0)2963; GFX90A-NEXT:    buffer_wbinvl1_vol2964; GFX90A-NEXT:    ;;#ASMSTART2965; GFX90A-NEXT:    ; use v02966; GFX90A-NEXT:    ;;#ASMEND2967; GFX90A-NEXT:    s_setpc_b64 s[30:31]2968;2969; GFX950-LABEL: global_atomic_xor_i32_ret_v_av:2970; GFX950:       ; %bb.0:2971; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2972; GFX950-NEXT:    ;;#ASMSTART2973; GFX950-NEXT:    ; def v22974; GFX950-NEXT:    ;;#ASMEND2975; GFX950-NEXT:    buffer_wbl2 sc12976; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc02977; GFX950-NEXT:    s_waitcnt vmcnt(0)2978; GFX950-NEXT:    buffer_inv sc12979; GFX950-NEXT:    ;;#ASMSTART2980; GFX950-NEXT:    ; use v02981; GFX950-NEXT:    ;;#ASMEND2982; GFX950-NEXT:    s_setpc_b64 s[30:31]2983  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 102984  %data = call i32 asm "; def $0", "=v"()2985  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02986  call void asm "; use $0", "^VA"(i32 %result)2987  ret void2988}2989 2990define void @global_atomic_xor_i32_ret_av_av_no_agprs(ptr addrspace(1) %ptr) #0 {2991; GFX90A-LABEL: global_atomic_xor_i32_ret_av_av_no_agprs:2992; GFX90A:       ; %bb.0:2993; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2994; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v02995; GFX90A-NEXT:    v_accvgpr_write_b32 a3, v40 ; Reload Reuse2996; GFX90A-NEXT:    v_accvgpr_write_b32 a4, v41 ; Reload Reuse2997; GFX90A-NEXT:    v_accvgpr_write_b32 a5, v42 ; Reload Reuse2998; GFX90A-NEXT:    v_accvgpr_write_b32 a6, v43 ; Reload Reuse2999; GFX90A-NEXT:    v_accvgpr_write_b32 a7, v44 ; Reload Reuse3000; GFX90A-NEXT:    v_accvgpr_write_b32 a8, v45 ; Reload Reuse3001; GFX90A-NEXT:    v_accvgpr_write_b32 a9, v46 ; Reload Reuse3002; GFX90A-NEXT:    v_accvgpr_write_b32 a10, v47 ; Reload Reuse3003; GFX90A-NEXT:    v_accvgpr_write_b32 a11, v56 ; Reload Reuse3004; GFX90A-NEXT:    v_accvgpr_write_b32 a12, v57 ; Reload Reuse3005; GFX90A-NEXT:    v_accvgpr_write_b32 a13, v58 ; Reload Reuse3006; GFX90A-NEXT:    v_accvgpr_write_b32 a14, v59 ; Reload Reuse3007; GFX90A-NEXT:    v_accvgpr_write_b32 a15, v60 ; Reload Reuse3008; GFX90A-NEXT:    v_accvgpr_write_b32 a16, v61 ; Reload Reuse3009; GFX90A-NEXT:    v_accvgpr_write_b32 a17, v62 ; Reload Reuse3010; GFX90A-NEXT:    v_accvgpr_write_b32 a18, v63 ; Reload Reuse3011; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v13012; GFX90A-NEXT:    ;;#ASMSTART3013; GFX90A-NEXT:    ; def v[0:31]3014; GFX90A-NEXT:    ;;#ASMEND3015; GFX90A-NEXT:    buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill3016; GFX90A-NEXT:    s_nop 03017; GFX90A-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill3018; GFX90A-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill3019; GFX90A-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill3020; GFX90A-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill3021; GFX90A-NEXT:    buffer_store_dword v5, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill3022; GFX90A-NEXT:    buffer_store_dword v6, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill3023; GFX90A-NEXT:    buffer_store_dword v7, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill3024; GFX90A-NEXT:    buffer_store_dword v8, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill3025; GFX90A-NEXT:    buffer_store_dword v9, off, s[0:3], s32 offset:36 ; 4-byte Folded Spill3026; GFX90A-NEXT:    buffer_store_dword v10, off, s[0:3], s32 offset:40 ; 4-byte Folded Spill3027; GFX90A-NEXT:    buffer_store_dword v11, off, s[0:3], s32 offset:44 ; 4-byte Folded Spill3028; GFX90A-NEXT:    buffer_store_dword v12, off, s[0:3], s32 offset:48 ; 4-byte Folded Spill3029; GFX90A-NEXT:    buffer_store_dword v13, off, s[0:3], s32 offset:52 ; 4-byte Folded Spill3030; GFX90A-NEXT:    buffer_store_dword v14, off, s[0:3], s32 offset:56 ; 4-byte Folded Spill3031; GFX90A-NEXT:    buffer_store_dword v15, off, s[0:3], s32 offset:60 ; 4-byte Folded Spill3032; GFX90A-NEXT:    buffer_store_dword v16, off, s[0:3], s32 offset:64 ; 4-byte Folded Spill3033; GFX90A-NEXT:    buffer_store_dword v17, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill3034; GFX90A-NEXT:    buffer_store_dword v18, off, s[0:3], s32 offset:72 ; 4-byte Folded Spill3035; GFX90A-NEXT:    ;;#ASMSTART3036; GFX90A-NEXT:    ; def a23037; GFX90A-NEXT:    ;;#ASMEND3038; GFX90A-NEXT:    v_accvgpr_write_b32 a19, v31 ; Reload Reuse3039; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a03040; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a13041; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a23042; GFX90A-NEXT:    s_waitcnt vmcnt(0)3043; GFX90A-NEXT:    global_atomic_xor v0, v[0:1], v2, off glc3044; GFX90A-NEXT:    s_waitcnt vmcnt(0)3045; GFX90A-NEXT:    buffer_wbinvl1_vol3046; GFX90A-NEXT:    v_accvgpr_write_b32 a31, v19 ; Reload Reuse3047; GFX90A-NEXT:    v_accvgpr_write_b32 a30, v20 ; Reload Reuse3048; GFX90A-NEXT:    v_accvgpr_write_b32 a29, v21 ; Reload Reuse3049; GFX90A-NEXT:    v_accvgpr_write_b32 a28, v22 ; Reload Reuse3050; GFX90A-NEXT:    v_accvgpr_write_b32 a27, v23 ; Reload Reuse3051; GFX90A-NEXT:    v_accvgpr_write_b32 a26, v24 ; Reload Reuse3052; GFX90A-NEXT:    v_accvgpr_write_b32 a25, v25 ; Reload Reuse3053; GFX90A-NEXT:    v_accvgpr_write_b32 a24, v26 ; Reload Reuse3054; GFX90A-NEXT:    v_accvgpr_write_b32 a23, v27 ; Reload Reuse3055; GFX90A-NEXT:    v_accvgpr_write_b32 a22, v28 ; Reload Reuse3056; GFX90A-NEXT:    v_accvgpr_write_b32 a21, v29 ; Reload Reuse3057; GFX90A-NEXT:    v_accvgpr_write_b32 a20, v30 ; Reload Reuse3058; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v03059; GFX90A-NEXT:    buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload3060; GFX90A-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload3061; GFX90A-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload3062; GFX90A-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload3063; GFX90A-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload3064; GFX90A-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload3065; GFX90A-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload3066; GFX90A-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload3067; GFX90A-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload3068; GFX90A-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:36 ; 4-byte Folded Reload3069; GFX90A-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:40 ; 4-byte Folded Reload3070; GFX90A-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:44 ; 4-byte Folded Reload3071; GFX90A-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:48 ; 4-byte Folded Reload3072; GFX90A-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:52 ; 4-byte Folded Reload3073; GFX90A-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:56 ; 4-byte Folded Reload3074; GFX90A-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:60 ; 4-byte Folded Reload3075; GFX90A-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:64 ; 4-byte Folded Reload3076; GFX90A-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload3077; GFX90A-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:72 ; 4-byte Folded Reload3078; GFX90A-NEXT:    v_accvgpr_read_b32 v19, a31 ; Reload Reuse3079; GFX90A-NEXT:    v_accvgpr_read_b32 v20, a30 ; Reload Reuse3080; GFX90A-NEXT:    v_accvgpr_read_b32 v21, a29 ; Reload Reuse3081; GFX90A-NEXT:    v_accvgpr_read_b32 v22, a28 ; Reload Reuse3082; GFX90A-NEXT:    v_accvgpr_read_b32 v23, a27 ; Reload Reuse3083; GFX90A-NEXT:    v_accvgpr_read_b32 v24, a26 ; Reload Reuse3084; GFX90A-NEXT:    v_accvgpr_read_b32 v25, a25 ; Reload Reuse3085; GFX90A-NEXT:    v_accvgpr_read_b32 v26, a24 ; Reload Reuse3086; GFX90A-NEXT:    v_accvgpr_read_b32 v27, a23 ; Reload Reuse3087; GFX90A-NEXT:    v_accvgpr_read_b32 v28, a22 ; Reload Reuse3088; GFX90A-NEXT:    v_accvgpr_read_b32 v29, a21 ; Reload Reuse3089; GFX90A-NEXT:    v_accvgpr_read_b32 v30, a20 ; Reload Reuse3090; GFX90A-NEXT:    ;;#ASMSTART3091; GFX90A-NEXT:    ; use a03092; GFX90A-NEXT:    ;;#ASMEND3093; GFX90A-NEXT:    s_waitcnt vmcnt(0)3094; GFX90A-NEXT:    v_accvgpr_read_b32 v31, a19 ; Reload Reuse3095; GFX90A-NEXT:    ;;#ASMSTART3096; GFX90A-NEXT:    ; use v[0:31]3097; GFX90A-NEXT:    ;;#ASMEND3098; GFX90A-NEXT:    v_accvgpr_read_b32 v63, a18 ; Reload Reuse3099; GFX90A-NEXT:    v_accvgpr_read_b32 v62, a17 ; Reload Reuse3100; GFX90A-NEXT:    v_accvgpr_read_b32 v61, a16 ; Reload Reuse3101; GFX90A-NEXT:    v_accvgpr_read_b32 v60, a15 ; Reload Reuse3102; GFX90A-NEXT:    v_accvgpr_read_b32 v59, a14 ; Reload Reuse3103; GFX90A-NEXT:    v_accvgpr_read_b32 v58, a13 ; Reload Reuse3104; GFX90A-NEXT:    v_accvgpr_read_b32 v57, a12 ; Reload Reuse3105; GFX90A-NEXT:    v_accvgpr_read_b32 v56, a11 ; Reload Reuse3106; GFX90A-NEXT:    v_accvgpr_read_b32 v47, a10 ; Reload Reuse3107; GFX90A-NEXT:    v_accvgpr_read_b32 v46, a9 ; Reload Reuse3108; GFX90A-NEXT:    v_accvgpr_read_b32 v45, a8 ; Reload Reuse3109; GFX90A-NEXT:    v_accvgpr_read_b32 v44, a7 ; Reload Reuse3110; GFX90A-NEXT:    v_accvgpr_read_b32 v43, a6 ; Reload Reuse3111; GFX90A-NEXT:    v_accvgpr_read_b32 v42, a5 ; Reload Reuse3112; GFX90A-NEXT:    v_accvgpr_read_b32 v41, a4 ; Reload Reuse3113; GFX90A-NEXT:    v_accvgpr_read_b32 v40, a3 ; Reload Reuse3114; GFX90A-NEXT:    s_setpc_b64 s[30:31]3115;3116; GFX950-LABEL: global_atomic_xor_i32_ret_av_av_no_agprs:3117; GFX950:       ; %bb.0:3118; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3119; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03120; GFX950-NEXT:    v_accvgpr_write_b32 a3, v40 ; Reload Reuse3121; GFX950-NEXT:    v_accvgpr_write_b32 a4, v41 ; Reload Reuse3122; GFX950-NEXT:    v_accvgpr_write_b32 a5, v42 ; Reload Reuse3123; GFX950-NEXT:    v_accvgpr_write_b32 a6, v43 ; Reload Reuse3124; GFX950-NEXT:    v_accvgpr_write_b32 a7, v44 ; Reload Reuse3125; GFX950-NEXT:    v_accvgpr_write_b32 a8, v45 ; Reload Reuse3126; GFX950-NEXT:    v_accvgpr_write_b32 a9, v46 ; Reload Reuse3127; GFX950-NEXT:    v_accvgpr_write_b32 a10, v47 ; Reload Reuse3128; GFX950-NEXT:    v_accvgpr_write_b32 a11, v56 ; Reload Reuse3129; GFX950-NEXT:    v_accvgpr_write_b32 a12, v57 ; Reload Reuse3130; GFX950-NEXT:    v_accvgpr_write_b32 a13, v58 ; Reload Reuse3131; GFX950-NEXT:    v_accvgpr_write_b32 a14, v59 ; Reload Reuse3132; GFX950-NEXT:    v_accvgpr_write_b32 a15, v60 ; Reload Reuse3133; GFX950-NEXT:    v_accvgpr_write_b32 a16, v61 ; Reload Reuse3134; GFX950-NEXT:    v_accvgpr_write_b32 a17, v62 ; Reload Reuse3135; GFX950-NEXT:    v_accvgpr_write_b32 a18, v63 ; Reload Reuse3136; GFX950-NEXT:    v_accvgpr_write_b32 a1, v13137; GFX950-NEXT:    ;;#ASMSTART3138; GFX950-NEXT:    ; def v[0:31]3139; GFX950-NEXT:    ;;#ASMEND3140; GFX950-NEXT:    scratch_store_dwordx4 off, v[0:3], s32 ; 16-byte Folded Spill3141; GFX950-NEXT:    s_nop 03142; GFX950-NEXT:    scratch_store_dwordx4 off, v[4:7], s32 offset:16 ; 16-byte Folded Spill3143; GFX950-NEXT:    scratch_store_dwordx4 off, v[8:11], s32 offset:32 ; 16-byte Folded Spill3144; GFX950-NEXT:    scratch_store_dwordx4 off, v[12:15], s32 offset:48 ; 16-byte Folded Spill3145; GFX950-NEXT:    ;;#ASMSTART3146; GFX950-NEXT:    ; def a23147; GFX950-NEXT:    ;;#ASMEND3148; GFX950-NEXT:    v_accvgpr_write_b32 a19, v31 ; Reload Reuse3149; GFX950-NEXT:    v_accvgpr_write_b32 a20, v30 ; Reload Reuse3150; GFX950-NEXT:    v_accvgpr_write_b32 a21, v29 ; Reload Reuse3151; GFX950-NEXT:    v_accvgpr_write_b32 a22, v28 ; Reload Reuse3152; GFX950-NEXT:    v_accvgpr_read_b32 v0, a03153; GFX950-NEXT:    scratch_store_dwordx3 off, v[16:18], s32 offset:64 ; 12-byte Folded Spill3154; GFX950-NEXT:    v_accvgpr_read_b32 v1, a13155; GFX950-NEXT:    v_accvgpr_read_b32 v2, a23156; GFX950-NEXT:    buffer_wbl2 sc13157; GFX950-NEXT:    s_waitcnt vmcnt(0)3158; GFX950-NEXT:    global_atomic_xor v0, v[0:1], v2, off sc03159; GFX950-NEXT:    s_waitcnt vmcnt(0)3160; GFX950-NEXT:    buffer_inv sc13161; GFX950-NEXT:    v_accvgpr_write_b32 a31, v19 ; Reload Reuse3162; GFX950-NEXT:    v_accvgpr_write_b32 a27, v23 ; Reload Reuse3163; GFX950-NEXT:    v_accvgpr_write_b32 a28, v22 ; Reload Reuse3164; GFX950-NEXT:    v_accvgpr_write_b32 a29, v21 ; Reload Reuse3165; GFX950-NEXT:    v_accvgpr_write_b32 a30, v20 ; Reload Reuse3166; GFX950-NEXT:    v_accvgpr_write_b32 a23, v27 ; Reload Reuse3167; GFX950-NEXT:    v_accvgpr_write_b32 a24, v26 ; Reload Reuse3168; GFX950-NEXT:    v_accvgpr_write_b32 a25, v25 ; Reload Reuse3169; GFX950-NEXT:    v_accvgpr_write_b32 a26, v24 ; Reload Reuse3170; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03171; GFX950-NEXT:    scratch_load_dwordx4 v[0:3], off, s32 ; 16-byte Folded Reload3172; GFX950-NEXT:    scratch_load_dwordx4 v[4:7], off, s32 offset:16 ; 16-byte Folded Reload3173; GFX950-NEXT:    scratch_load_dwordx4 v[8:11], off, s32 offset:32 ; 16-byte Folded Reload3174; GFX950-NEXT:    scratch_load_dwordx4 v[12:15], off, s32 offset:48 ; 16-byte Folded Reload3175; GFX950-NEXT:    v_accvgpr_read_b32 v19, a31 ; Reload Reuse3176; GFX950-NEXT:    scratch_load_dwordx3 v[16:18], off, s32 offset:64 ; 12-byte Folded Reload3177; GFX950-NEXT:    v_accvgpr_read_b32 v23, a27 ; Reload Reuse3178; GFX950-NEXT:    v_accvgpr_read_b32 v22, a28 ; Reload Reuse3179; GFX950-NEXT:    v_accvgpr_read_b32 v21, a29 ; Reload Reuse3180; GFX950-NEXT:    v_accvgpr_read_b32 v20, a30 ; Reload Reuse3181; GFX950-NEXT:    v_accvgpr_read_b32 v27, a23 ; Reload Reuse3182; GFX950-NEXT:    v_accvgpr_read_b32 v26, a24 ; Reload Reuse3183; GFX950-NEXT:    v_accvgpr_read_b32 v25, a25 ; Reload Reuse3184; GFX950-NEXT:    v_accvgpr_read_b32 v24, a26 ; Reload Reuse3185; GFX950-NEXT:    ;;#ASMSTART3186; GFX950-NEXT:    ; use a03187; GFX950-NEXT:    ;;#ASMEND3188; GFX950-NEXT:    s_waitcnt vmcnt(0)3189; GFX950-NEXT:    v_accvgpr_read_b32 v31, a19 ; Reload Reuse3190; GFX950-NEXT:    v_accvgpr_read_b32 v30, a20 ; Reload Reuse3191; GFX950-NEXT:    v_accvgpr_read_b32 v29, a21 ; Reload Reuse3192; GFX950-NEXT:    v_accvgpr_read_b32 v28, a22 ; Reload Reuse3193; GFX950-NEXT:    ;;#ASMSTART3194; GFX950-NEXT:    ; use v[0:31]3195; GFX950-NEXT:    ;;#ASMEND3196; GFX950-NEXT:    v_accvgpr_read_b32 v63, a18 ; Reload Reuse3197; GFX950-NEXT:    v_accvgpr_read_b32 v62, a17 ; Reload Reuse3198; GFX950-NEXT:    v_accvgpr_read_b32 v61, a16 ; Reload Reuse3199; GFX950-NEXT:    v_accvgpr_read_b32 v60, a15 ; Reload Reuse3200; GFX950-NEXT:    v_accvgpr_read_b32 v59, a14 ; Reload Reuse3201; GFX950-NEXT:    v_accvgpr_read_b32 v58, a13 ; Reload Reuse3202; GFX950-NEXT:    v_accvgpr_read_b32 v57, a12 ; Reload Reuse3203; GFX950-NEXT:    v_accvgpr_read_b32 v56, a11 ; Reload Reuse3204; GFX950-NEXT:    v_accvgpr_read_b32 v47, a10 ; Reload Reuse3205; GFX950-NEXT:    v_accvgpr_read_b32 v46, a9 ; Reload Reuse3206; GFX950-NEXT:    v_accvgpr_read_b32 v45, a8 ; Reload Reuse3207; GFX950-NEXT:    v_accvgpr_read_b32 v44, a7 ; Reload Reuse3208; GFX950-NEXT:    v_accvgpr_read_b32 v43, a6 ; Reload Reuse3209; GFX950-NEXT:    v_accvgpr_read_b32 v42, a5 ; Reload Reuse3210; GFX950-NEXT:    v_accvgpr_read_b32 v41, a4 ; Reload Reuse3211; GFX950-NEXT:    v_accvgpr_read_b32 v40, a3 ; Reload Reuse3212; GFX950-NEXT:    s_setpc_b64 s[30:31]3213  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103214  %data = call i32 asm "; def $0", "=^VA"()3215  %vgpr.def = call { <32 x i32>, <32 x i32> }  asm sideeffect "; def $0", "=${v[0:31]},=${v[32:63]}"()3216  %vgpr.0 = extractvalue { <32 x i32>, <32 x i32> } %vgpr.def, 03217  %vgpr.1 = extractvalue { <32 x i32>, <32 x i32> } %vgpr.def, 13218  %result = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03219  call void asm sideeffect "; use $0", "{v[0:31]},{v[32:63]}"(<32 x i32> %vgpr.0, <32 x i32> %vgpr.1)3220  call void asm "; use $0", "^VA"(i32 %result)3221  ret void3222}3223 3224define void @global_atomic_xor_i32_noret_a(ptr addrspace(1) %ptr) #0 {3225; GFX90A-LABEL: global_atomic_xor_i32_noret_a:3226; GFX90A:       ; %bb.0:3227; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3228; GFX90A-NEXT:    ;;#ASMSTART3229; GFX90A-NEXT:    ; def a03230; GFX90A-NEXT:    ;;#ASMEND3231; GFX90A-NEXT:    global_atomic_xor v[0:1], a0, off3232; GFX90A-NEXT:    s_waitcnt vmcnt(0)3233; GFX90A-NEXT:    buffer_wbinvl1_vol3234; GFX90A-NEXT:    s_setpc_b64 s[30:31]3235;3236; GFX950-LABEL: global_atomic_xor_i32_noret_a:3237; GFX950:       ; %bb.0:3238; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3239; GFX950-NEXT:    ;;#ASMSTART3240; GFX950-NEXT:    ; def a03241; GFX950-NEXT:    ;;#ASMEND3242; GFX950-NEXT:    buffer_wbl2 sc13243; GFX950-NEXT:    global_atomic_xor v[0:1], a0, off3244; GFX950-NEXT:    s_waitcnt vmcnt(0)3245; GFX950-NEXT:    buffer_inv sc13246; GFX950-NEXT:    s_setpc_b64 s[30:31]3247  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103248  %data = call i32 asm "; def $0", "=a"()3249  %unused = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03250  ret void3251}3252 3253define void @global_atomic_xor_i32_noret_av(ptr addrspace(1) %ptr) #0 {3254; GFX90A-LABEL: global_atomic_xor_i32_noret_av:3255; GFX90A:       ; %bb.0:3256; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3257; GFX90A-NEXT:    ;;#ASMSTART3258; GFX90A-NEXT:    ; def v23259; GFX90A-NEXT:    ;;#ASMEND3260; GFX90A-NEXT:    global_atomic_xor v[0:1], v2, off3261; GFX90A-NEXT:    s_waitcnt vmcnt(0)3262; GFX90A-NEXT:    buffer_wbinvl1_vol3263; GFX90A-NEXT:    s_setpc_b64 s[30:31]3264;3265; GFX950-LABEL: global_atomic_xor_i32_noret_av:3266; GFX950:       ; %bb.0:3267; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3268; GFX950-NEXT:    ;;#ASMSTART3269; GFX950-NEXT:    ; def v23270; GFX950-NEXT:    ;;#ASMEND3271; GFX950-NEXT:    buffer_wbl2 sc13272; GFX950-NEXT:    global_atomic_xor v[0:1], v2, off3273; GFX950-NEXT:    s_waitcnt vmcnt(0)3274; GFX950-NEXT:    buffer_inv sc13275; GFX950-NEXT:    s_setpc_b64 s[30:31]3276  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103277  %data = call i32 asm "; def $0", "=^VA"()3278  %unused = atomicrmw xor ptr addrspace(1) %ptr, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03279  ret void3280}3281 3282;---------------------------------------------------------------------3283; xor i64 cases with instruction3284;---------------------------------------------------------------------3285 3286; Input and result use AGPR3287define void @global_atomic_xor_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {3288; GFX90A-LABEL: global_atomic_xor_i64_ret_a_a:3289; GFX90A:       ; %bb.0:3290; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3291; GFX90A-NEXT:    ;;#ASMSTART3292; GFX90A-NEXT:    ; def a[0:1]3293; GFX90A-NEXT:    ;;#ASMEND3294; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a13295; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a03296; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3297; GFX90A-NEXT:    s_waitcnt vmcnt(0)3298; GFX90A-NEXT:    buffer_wbinvl1_vol3299; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v03300; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v13301; GFX90A-NEXT:    ;;#ASMSTART3302; GFX90A-NEXT:    ; use a[0:1]3303; GFX90A-NEXT:    ;;#ASMEND3304; GFX90A-NEXT:    s_setpc_b64 s[30:31]3305;3306; GFX950-LABEL: global_atomic_xor_i64_ret_a_a:3307; GFX950:       ; %bb.0:3308; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3309; GFX950-NEXT:    ;;#ASMSTART3310; GFX950-NEXT:    ; def a[0:1]3311; GFX950-NEXT:    ;;#ASMEND3312; GFX950-NEXT:    s_nop 03313; GFX950-NEXT:    v_accvgpr_read_b32 v3, a13314; GFX950-NEXT:    v_accvgpr_read_b32 v2, a03315; GFX950-NEXT:    buffer_wbl2 sc13316; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03317; GFX950-NEXT:    s_waitcnt vmcnt(0)3318; GFX950-NEXT:    buffer_inv sc13319; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03320; GFX950-NEXT:    v_accvgpr_write_b32 a1, v13321; GFX950-NEXT:    ;;#ASMSTART3322; GFX950-NEXT:    ; use a[0:1]3323; GFX950-NEXT:    ;;#ASMEND3324; GFX950-NEXT:    s_setpc_b64 s[30:31]3325  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103326  %data = call i64 asm "; def $0", "=a"()3327  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03328  call void asm "; use $0", "a"(i64 %result)3329  ret void3330}3331 3332; Input is AGPR, result used as VGPR.3333define void @global_atomic_xor_i64_ret_a_v(ptr addrspace(1) %ptr) #0 {3334; GFX90A-LABEL: global_atomic_xor_i64_ret_a_v:3335; GFX90A:       ; %bb.0:3336; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3337; GFX90A-NEXT:    ;;#ASMSTART3338; GFX90A-NEXT:    ; def a[0:1]3339; GFX90A-NEXT:    ;;#ASMEND3340; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a13341; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a03342; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3343; GFX90A-NEXT:    s_waitcnt vmcnt(0)3344; GFX90A-NEXT:    buffer_wbinvl1_vol3345; GFX90A-NEXT:    ;;#ASMSTART3346; GFX90A-NEXT:    ; use v[0:1]3347; GFX90A-NEXT:    ;;#ASMEND3348; GFX90A-NEXT:    s_setpc_b64 s[30:31]3349;3350; GFX950-LABEL: global_atomic_xor_i64_ret_a_v:3351; GFX950:       ; %bb.0:3352; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3353; GFX950-NEXT:    ;;#ASMSTART3354; GFX950-NEXT:    ; def a[0:1]3355; GFX950-NEXT:    ;;#ASMEND3356; GFX950-NEXT:    s_nop 03357; GFX950-NEXT:    v_accvgpr_read_b32 v3, a13358; GFX950-NEXT:    v_accvgpr_read_b32 v2, a03359; GFX950-NEXT:    buffer_wbl2 sc13360; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03361; GFX950-NEXT:    s_waitcnt vmcnt(0)3362; GFX950-NEXT:    buffer_inv sc13363; GFX950-NEXT:    ;;#ASMSTART3364; GFX950-NEXT:    ; use v[0:1]3365; GFX950-NEXT:    ;;#ASMEND3366; GFX950-NEXT:    s_setpc_b64 s[30:31]3367  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103368  %data = call i64 asm "; def $0", "=a"()3369  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03370  call void asm "; use $0", "v"(i64 %result)3371  ret void3372}3373 3374; Input is VGPR, result used as AGPR3375define void @global_atomic_xor_i64_ret_v_a(ptr addrspace(1) %ptr) #0 {3376; GFX90A-LABEL: global_atomic_xor_i64_ret_v_a:3377; GFX90A:       ; %bb.0:3378; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3379; GFX90A-NEXT:    ;;#ASMSTART3380; GFX90A-NEXT:    ; def v[2:3]3381; GFX90A-NEXT:    ;;#ASMEND3382; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3383; GFX90A-NEXT:    s_waitcnt vmcnt(0)3384; GFX90A-NEXT:    buffer_wbinvl1_vol3385; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v03386; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v13387; GFX90A-NEXT:    ;;#ASMSTART3388; GFX90A-NEXT:    ; use a[0:1]3389; GFX90A-NEXT:    ;;#ASMEND3390; GFX90A-NEXT:    s_setpc_b64 s[30:31]3391;3392; GFX950-LABEL: global_atomic_xor_i64_ret_v_a:3393; GFX950:       ; %bb.0:3394; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3395; GFX950-NEXT:    ;;#ASMSTART3396; GFX950-NEXT:    ; def v[2:3]3397; GFX950-NEXT:    ;;#ASMEND3398; GFX950-NEXT:    buffer_wbl2 sc13399; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03400; GFX950-NEXT:    s_waitcnt vmcnt(0)3401; GFX950-NEXT:    buffer_inv sc13402; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03403; GFX950-NEXT:    v_accvgpr_write_b32 a1, v13404; GFX950-NEXT:    ;;#ASMSTART3405; GFX950-NEXT:    ; use a[0:1]3406; GFX950-NEXT:    ;;#ASMEND3407; GFX950-NEXT:    s_setpc_b64 s[30:31]3408  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103409  %data = call i64 asm "; def $0", "=v"()3410  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03411  call void asm "; use $0", "a"(i64 %result)3412  ret void3413}3414 3415; Input is AV, result also used as AV3416define void @global_atomic_xor_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {3417; GFX90A-LABEL: global_atomic_xor_i64_ret_av_av:3418; GFX90A:       ; %bb.0:3419; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3420; GFX90A-NEXT:    ;;#ASMSTART3421; GFX90A-NEXT:    ; def v[2:3]3422; GFX90A-NEXT:    ;;#ASMEND3423; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3424; GFX90A-NEXT:    s_waitcnt vmcnt(0)3425; GFX90A-NEXT:    buffer_wbinvl1_vol3426; GFX90A-NEXT:    ;;#ASMSTART3427; GFX90A-NEXT:    ; use v[0:1]3428; GFX90A-NEXT:    ;;#ASMEND3429; GFX90A-NEXT:    s_setpc_b64 s[30:31]3430;3431; GFX950-LABEL: global_atomic_xor_i64_ret_av_av:3432; GFX950:       ; %bb.0:3433; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3434; GFX950-NEXT:    ;;#ASMSTART3435; GFX950-NEXT:    ; def v[2:3]3436; GFX950-NEXT:    ;;#ASMEND3437; GFX950-NEXT:    buffer_wbl2 sc13438; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03439; GFX950-NEXT:    s_waitcnt vmcnt(0)3440; GFX950-NEXT:    buffer_inv sc13441; GFX950-NEXT:    ;;#ASMSTART3442; GFX950-NEXT:    ; use v[0:1]3443; GFX950-NEXT:    ;;#ASMEND3444; GFX950-NEXT:    s_setpc_b64 s[30:31]3445  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103446  %data = call i64 asm "; def $0", "=^VA"()3447  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03448  call void asm "; use $0", "^VA"(i64 %result)3449  ret void3450}3451 3452; Input is AV, used as v3453define void @global_atomic_xor_i64_ret_av_v(ptr addrspace(1) %ptr) #0 {3454; GFX90A-LABEL: global_atomic_xor_i64_ret_av_v:3455; GFX90A:       ; %bb.0:3456; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3457; GFX90A-NEXT:    ;;#ASMSTART3458; GFX90A-NEXT:    ; def v[2:3]3459; GFX90A-NEXT:    ;;#ASMEND3460; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3461; GFX90A-NEXT:    s_waitcnt vmcnt(0)3462; GFX90A-NEXT:    buffer_wbinvl1_vol3463; GFX90A-NEXT:    ;;#ASMSTART3464; GFX90A-NEXT:    ; use v[0:1]3465; GFX90A-NEXT:    ;;#ASMEND3466; GFX90A-NEXT:    s_setpc_b64 s[30:31]3467;3468; GFX950-LABEL: global_atomic_xor_i64_ret_av_v:3469; GFX950:       ; %bb.0:3470; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3471; GFX950-NEXT:    ;;#ASMSTART3472; GFX950-NEXT:    ; def v[2:3]3473; GFX950-NEXT:    ;;#ASMEND3474; GFX950-NEXT:    buffer_wbl2 sc13475; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03476; GFX950-NEXT:    s_waitcnt vmcnt(0)3477; GFX950-NEXT:    buffer_inv sc13478; GFX950-NEXT:    ;;#ASMSTART3479; GFX950-NEXT:    ; use v[0:1]3480; GFX950-NEXT:    ;;#ASMEND3481; GFX950-NEXT:    s_setpc_b64 s[30:31]3482  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103483  %data = call i64 asm "; def $0", "=^VA"()3484  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03485  call void asm "; use $0", "v"(i64 %result)3486  ret void3487}3488 3489; Input is AV, used as a3490define void @global_atomic_xor_i64_ret_av_a(ptr addrspace(1) %ptr) #0 {3491; GFX90A-LABEL: global_atomic_xor_i64_ret_av_a:3492; GFX90A:       ; %bb.0:3493; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3494; GFX90A-NEXT:    ;;#ASMSTART3495; GFX90A-NEXT:    ; def v[2:3]3496; GFX90A-NEXT:    ;;#ASMEND3497; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3498; GFX90A-NEXT:    s_waitcnt vmcnt(0)3499; GFX90A-NEXT:    buffer_wbinvl1_vol3500; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v03501; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v13502; GFX90A-NEXT:    ;;#ASMSTART3503; GFX90A-NEXT:    ; use a[0:1]3504; GFX90A-NEXT:    ;;#ASMEND3505; GFX90A-NEXT:    s_setpc_b64 s[30:31]3506;3507; GFX950-LABEL: global_atomic_xor_i64_ret_av_a:3508; GFX950:       ; %bb.0:3509; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3510; GFX950-NEXT:    ;;#ASMSTART3511; GFX950-NEXT:    ; def v[2:3]3512; GFX950-NEXT:    ;;#ASMEND3513; GFX950-NEXT:    buffer_wbl2 sc13514; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03515; GFX950-NEXT:    s_waitcnt vmcnt(0)3516; GFX950-NEXT:    buffer_inv sc13517; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03518; GFX950-NEXT:    v_accvgpr_write_b32 a1, v13519; GFX950-NEXT:    ;;#ASMSTART3520; GFX950-NEXT:    ; use a[0:1]3521; GFX950-NEXT:    ;;#ASMEND3522; GFX950-NEXT:    s_setpc_b64 s[30:31]3523  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103524  %data = call i64 asm "; def $0", "=^VA"()3525  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03526  call void asm "; use $0", "a"(i64 %result)3527  ret void3528}3529 3530; Input is a, result used as AV3531define void @global_atomic_xor_i64_ret_a_av(ptr addrspace(1) %ptr) #0 {3532; GFX90A-LABEL: global_atomic_xor_i64_ret_a_av:3533; GFX90A:       ; %bb.0:3534; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3535; GFX90A-NEXT:    ;;#ASMSTART3536; GFX90A-NEXT:    ; def a[0:1]3537; GFX90A-NEXT:    ;;#ASMEND3538; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a13539; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a03540; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3541; GFX90A-NEXT:    s_waitcnt vmcnt(0)3542; GFX90A-NEXT:    buffer_wbinvl1_vol3543; GFX90A-NEXT:    ;;#ASMSTART3544; GFX90A-NEXT:    ; use v[0:1]3545; GFX90A-NEXT:    ;;#ASMEND3546; GFX90A-NEXT:    s_setpc_b64 s[30:31]3547;3548; GFX950-LABEL: global_atomic_xor_i64_ret_a_av:3549; GFX950:       ; %bb.0:3550; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3551; GFX950-NEXT:    ;;#ASMSTART3552; GFX950-NEXT:    ; def a[0:1]3553; GFX950-NEXT:    ;;#ASMEND3554; GFX950-NEXT:    s_nop 03555; GFX950-NEXT:    v_accvgpr_read_b32 v3, a13556; GFX950-NEXT:    v_accvgpr_read_b32 v2, a03557; GFX950-NEXT:    buffer_wbl2 sc13558; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03559; GFX950-NEXT:    s_waitcnt vmcnt(0)3560; GFX950-NEXT:    buffer_inv sc13561; GFX950-NEXT:    ;;#ASMSTART3562; GFX950-NEXT:    ; use v[0:1]3563; GFX950-NEXT:    ;;#ASMEND3564; GFX950-NEXT:    s_setpc_b64 s[30:31]3565  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103566  %data = call i64 asm "; def $0", "=a"()3567  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03568  call void asm "; use $0", "^VA"(i64 %result)3569  ret void3570}3571 3572; Input is v, result used as AV3573define void @global_atomic_xor_i64_ret_v_av(ptr addrspace(1) %ptr) #0 {3574; GFX90A-LABEL: global_atomic_xor_i64_ret_v_av:3575; GFX90A:       ; %bb.0:3576; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3577; GFX90A-NEXT:    ;;#ASMSTART3578; GFX90A-NEXT:    ; def v[2:3]3579; GFX90A-NEXT:    ;;#ASMEND3580; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off glc3581; GFX90A-NEXT:    s_waitcnt vmcnt(0)3582; GFX90A-NEXT:    buffer_wbinvl1_vol3583; GFX90A-NEXT:    ;;#ASMSTART3584; GFX90A-NEXT:    ; use v[0:1]3585; GFX90A-NEXT:    ;;#ASMEND3586; GFX90A-NEXT:    s_setpc_b64 s[30:31]3587;3588; GFX950-LABEL: global_atomic_xor_i64_ret_v_av:3589; GFX950:       ; %bb.0:3590; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3591; GFX950-NEXT:    ;;#ASMSTART3592; GFX950-NEXT:    ; def v[2:3]3593; GFX950-NEXT:    ;;#ASMEND3594; GFX950-NEXT:    buffer_wbl2 sc13595; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[0:1], v[2:3], off sc03596; GFX950-NEXT:    s_waitcnt vmcnt(0)3597; GFX950-NEXT:    buffer_inv sc13598; GFX950-NEXT:    ;;#ASMSTART3599; GFX950-NEXT:    ; use v[0:1]3600; GFX950-NEXT:    ;;#ASMEND3601; GFX950-NEXT:    s_setpc_b64 s[30:31]3602  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103603  %data = call i64 asm "; def $0", "=v"()3604  %result = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03605  call void asm "; use $0", "^VA"(i64 %result)3606  ret void3607}3608 3609define void @global_atomic_xor_i64_noret_a(ptr addrspace(1) %ptr) #0 {3610; GFX90A-LABEL: global_atomic_xor_i64_noret_a:3611; GFX90A:       ; %bb.0:3612; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3613; GFX90A-NEXT:    ;;#ASMSTART3614; GFX90A-NEXT:    ; def a[0:1]3615; GFX90A-NEXT:    ;;#ASMEND3616; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], a[0:1], off3617; GFX90A-NEXT:    s_waitcnt vmcnt(0)3618; GFX90A-NEXT:    buffer_wbinvl1_vol3619; GFX90A-NEXT:    s_setpc_b64 s[30:31]3620;3621; GFX950-LABEL: global_atomic_xor_i64_noret_a:3622; GFX950:       ; %bb.0:3623; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3624; GFX950-NEXT:    ;;#ASMSTART3625; GFX950-NEXT:    ; def a[0:1]3626; GFX950-NEXT:    ;;#ASMEND3627; GFX950-NEXT:    buffer_wbl2 sc13628; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], a[0:1], off3629; GFX950-NEXT:    s_waitcnt vmcnt(0)3630; GFX950-NEXT:    buffer_inv sc13631; GFX950-NEXT:    s_setpc_b64 s[30:31]3632  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103633  %data = call i64 asm "; def $0", "=a"()3634  %unused = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03635  ret void3636}3637 3638define void @global_atomic_xor_i64_noret_av(ptr addrspace(1) %ptr) #0 {3639; GFX90A-LABEL: global_atomic_xor_i64_noret_av:3640; GFX90A:       ; %bb.0:3641; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3642; GFX90A-NEXT:    ;;#ASMSTART3643; GFX90A-NEXT:    ; def v[2:3]3644; GFX90A-NEXT:    ;;#ASMEND3645; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v[2:3], off3646; GFX90A-NEXT:    s_waitcnt vmcnt(0)3647; GFX90A-NEXT:    buffer_wbinvl1_vol3648; GFX90A-NEXT:    s_setpc_b64 s[30:31]3649;3650; GFX950-LABEL: global_atomic_xor_i64_noret_av:3651; GFX950:       ; %bb.0:3652; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3653; GFX950-NEXT:    ;;#ASMSTART3654; GFX950-NEXT:    ; def v[2:3]3655; GFX950-NEXT:    ;;#ASMEND3656; GFX950-NEXT:    buffer_wbl2 sc13657; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v[2:3], off3658; GFX950-NEXT:    s_waitcnt vmcnt(0)3659; GFX950-NEXT:    buffer_inv sc13660; GFX950-NEXT:    s_setpc_b64 s[30:31]3661  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 103662  %data = call i64 asm "; def $0", "=^VA"()3663  %unused = atomicrmw xor ptr addrspace(1) %ptr, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !03664  ret void3665}3666 3667;---------------------------------------------------------------------3668; other atomics i32, with aa+av cases3669;---------------------------------------------------------------------3670 3671define void @global_atomic_add_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {3672; GFX90A-LABEL: global_atomic_add_i32_ret_a_a:3673; GFX90A:       ; %bb.0:3674; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3675; GFX90A-NEXT:    ;;#ASMSTART3676; GFX90A-NEXT:    ; def a03677; GFX90A-NEXT:    ;;#ASMEND3678; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a03679; GFX90A-NEXT:    global_atomic_add v0, v[0:1], v2, off offset:40 glc3680; GFX90A-NEXT:    s_waitcnt vmcnt(0)3681; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v03682; GFX90A-NEXT:    ;;#ASMSTART3683; GFX90A-NEXT:    ; use a03684; GFX90A-NEXT:    ;;#ASMEND3685; GFX90A-NEXT:    s_setpc_b64 s[30:31]3686;3687; GFX950-LABEL: global_atomic_add_i32_ret_a_a:3688; GFX950:       ; %bb.0:3689; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3690; GFX950-NEXT:    ;;#ASMSTART3691; GFX950-NEXT:    ; def a03692; GFX950-NEXT:    ;;#ASMEND3693; GFX950-NEXT:    s_nop 03694; GFX950-NEXT:    v_accvgpr_read_b32 v2, a03695; GFX950-NEXT:    global_atomic_add v0, v[0:1], v2, off offset:40 sc03696; GFX950-NEXT:    s_waitcnt vmcnt(0)3697; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03698; GFX950-NEXT:    ;;#ASMSTART3699; GFX950-NEXT:    ; use a03700; GFX950-NEXT:    ;;#ASMEND3701; GFX950-NEXT:    s_setpc_b64 s[30:31]3702  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103703  %data = call i32 asm "; def $0", "=a"()3704  %result = atomicrmw add ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03705  call void asm "; use $0", "a"(i32 %result)3706  ret void3707}3708 3709define void @global_atomic_add_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {3710; GFX90A-LABEL: global_atomic_add_i32_ret_av_av:3711; GFX90A:       ; %bb.0:3712; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3713; GFX90A-NEXT:    ;;#ASMSTART3714; GFX90A-NEXT:    ; def v23715; GFX90A-NEXT:    ;;#ASMEND3716; GFX90A-NEXT:    global_atomic_add v0, v[0:1], v2, off offset:40 glc3717; GFX90A-NEXT:    s_waitcnt vmcnt(0)3718; GFX90A-NEXT:    ;;#ASMSTART3719; GFX90A-NEXT:    ; use v03720; GFX90A-NEXT:    ;;#ASMEND3721; GFX90A-NEXT:    s_setpc_b64 s[30:31]3722;3723; GFX950-LABEL: global_atomic_add_i32_ret_av_av:3724; GFX950:       ; %bb.0:3725; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3726; GFX950-NEXT:    ;;#ASMSTART3727; GFX950-NEXT:    ; def v23728; GFX950-NEXT:    ;;#ASMEND3729; GFX950-NEXT:    global_atomic_add v0, v[0:1], v2, off offset:40 sc03730; GFX950-NEXT:    s_waitcnt vmcnt(0)3731; GFX950-NEXT:    ;;#ASMSTART3732; GFX950-NEXT:    ; use v03733; GFX950-NEXT:    ;;#ASMEND3734; GFX950-NEXT:    s_setpc_b64 s[30:31]3735  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103736  %data = call i32 asm "; def $0", "=^VA"()3737  %result = atomicrmw add ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03738  call void asm "; use $0", "^VA"(i32 %result)3739  ret void3740}3741 3742define void @global_atomic_sub_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {3743; GFX90A-LABEL: global_atomic_sub_i32_ret_a_a:3744; GFX90A:       ; %bb.0:3745; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3746; GFX90A-NEXT:    ;;#ASMSTART3747; GFX90A-NEXT:    ; def a03748; GFX90A-NEXT:    ;;#ASMEND3749; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a03750; GFX90A-NEXT:    global_atomic_sub v0, v[0:1], v2, off offset:40 glc3751; GFX90A-NEXT:    s_waitcnt vmcnt(0)3752; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v03753; GFX90A-NEXT:    ;;#ASMSTART3754; GFX90A-NEXT:    ; use a03755; GFX90A-NEXT:    ;;#ASMEND3756; GFX90A-NEXT:    s_setpc_b64 s[30:31]3757;3758; GFX950-LABEL: global_atomic_sub_i32_ret_a_a:3759; GFX950:       ; %bb.0:3760; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3761; GFX950-NEXT:    ;;#ASMSTART3762; GFX950-NEXT:    ; def a03763; GFX950-NEXT:    ;;#ASMEND3764; GFX950-NEXT:    s_nop 03765; GFX950-NEXT:    v_accvgpr_read_b32 v2, a03766; GFX950-NEXT:    global_atomic_sub v0, v[0:1], v2, off offset:40 sc03767; GFX950-NEXT:    s_waitcnt vmcnt(0)3768; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03769; GFX950-NEXT:    ;;#ASMSTART3770; GFX950-NEXT:    ; use a03771; GFX950-NEXT:    ;;#ASMEND3772; GFX950-NEXT:    s_setpc_b64 s[30:31]3773  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103774  %data = call i32 asm "; def $0", "=a"()3775  %result = atomicrmw sub ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03776  call void asm "; use $0", "a"(i32 %result)3777  ret void3778}3779 3780define void @global_atomic_sub_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {3781; GFX90A-LABEL: global_atomic_sub_i32_ret_av_av:3782; GFX90A:       ; %bb.0:3783; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3784; GFX90A-NEXT:    ;;#ASMSTART3785; GFX90A-NEXT:    ; def v23786; GFX90A-NEXT:    ;;#ASMEND3787; GFX90A-NEXT:    global_atomic_sub v0, v[0:1], v2, off offset:40 glc3788; GFX90A-NEXT:    s_waitcnt vmcnt(0)3789; GFX90A-NEXT:    ;;#ASMSTART3790; GFX90A-NEXT:    ; use v03791; GFX90A-NEXT:    ;;#ASMEND3792; GFX90A-NEXT:    s_setpc_b64 s[30:31]3793;3794; GFX950-LABEL: global_atomic_sub_i32_ret_av_av:3795; GFX950:       ; %bb.0:3796; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3797; GFX950-NEXT:    ;;#ASMSTART3798; GFX950-NEXT:    ; def v23799; GFX950-NEXT:    ;;#ASMEND3800; GFX950-NEXT:    global_atomic_sub v0, v[0:1], v2, off offset:40 sc03801; GFX950-NEXT:    s_waitcnt vmcnt(0)3802; GFX950-NEXT:    ;;#ASMSTART3803; GFX950-NEXT:    ; use v03804; GFX950-NEXT:    ;;#ASMEND3805; GFX950-NEXT:    s_setpc_b64 s[30:31]3806  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103807  %data = call i32 asm "; def $0", "=^VA"()3808  %result = atomicrmw sub ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03809  call void asm "; use $0", "^VA"(i32 %result)3810  ret void3811}3812 3813define void @global_atomic_and_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {3814; GFX90A-LABEL: global_atomic_and_i32_ret_a_a:3815; GFX90A:       ; %bb.0:3816; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3817; GFX90A-NEXT:    ;;#ASMSTART3818; GFX90A-NEXT:    ; def a03819; GFX90A-NEXT:    ;;#ASMEND3820; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a03821; GFX90A-NEXT:    global_atomic_and v0, v[0:1], v2, off offset:40 glc3822; GFX90A-NEXT:    s_waitcnt vmcnt(0)3823; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v03824; GFX90A-NEXT:    ;;#ASMSTART3825; GFX90A-NEXT:    ; use a03826; GFX90A-NEXT:    ;;#ASMEND3827; GFX90A-NEXT:    s_setpc_b64 s[30:31]3828;3829; GFX950-LABEL: global_atomic_and_i32_ret_a_a:3830; GFX950:       ; %bb.0:3831; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3832; GFX950-NEXT:    ;;#ASMSTART3833; GFX950-NEXT:    ; def a03834; GFX950-NEXT:    ;;#ASMEND3835; GFX950-NEXT:    s_nop 03836; GFX950-NEXT:    v_accvgpr_read_b32 v2, a03837; GFX950-NEXT:    global_atomic_and v0, v[0:1], v2, off offset:40 sc03838; GFX950-NEXT:    s_waitcnt vmcnt(0)3839; GFX950-NEXT:    v_accvgpr_write_b32 a0, v03840; GFX950-NEXT:    ;;#ASMSTART3841; GFX950-NEXT:    ; use a03842; GFX950-NEXT:    ;;#ASMEND3843; GFX950-NEXT:    s_setpc_b64 s[30:31]3844  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103845  %data = call i32 asm "; def $0", "=a"()3846  %result = atomicrmw and ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03847  call void asm "; use $0", "a"(i32 %result)3848  ret void3849}3850 3851define void @global_atomic_and_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {3852; GFX90A-LABEL: global_atomic_and_i32_ret_av_av:3853; GFX90A:       ; %bb.0:3854; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3855; GFX90A-NEXT:    ;;#ASMSTART3856; GFX90A-NEXT:    ; def v23857; GFX90A-NEXT:    ;;#ASMEND3858; GFX90A-NEXT:    global_atomic_and v0, v[0:1], v2, off offset:40 glc3859; GFX90A-NEXT:    s_waitcnt vmcnt(0)3860; GFX90A-NEXT:    ;;#ASMSTART3861; GFX90A-NEXT:    ; use v03862; GFX90A-NEXT:    ;;#ASMEND3863; GFX90A-NEXT:    s_setpc_b64 s[30:31]3864;3865; GFX950-LABEL: global_atomic_and_i32_ret_av_av:3866; GFX950:       ; %bb.0:3867; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3868; GFX950-NEXT:    ;;#ASMSTART3869; GFX950-NEXT:    ; def v23870; GFX950-NEXT:    ;;#ASMEND3871; GFX950-NEXT:    global_atomic_and v0, v[0:1], v2, off offset:40 sc03872; GFX950-NEXT:    s_waitcnt vmcnt(0)3873; GFX950-NEXT:    ;;#ASMSTART3874; GFX950-NEXT:    ; use v03875; GFX950-NEXT:    ;;#ASMEND3876; GFX950-NEXT:    s_setpc_b64 s[30:31]3877  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103878  %data = call i32 asm "; def $0", "=^VA"()3879  %result = atomicrmw and ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03880  call void asm "; use $0", "^VA"(i32 %result)3881  ret void3882}3883 3884define void @global_atomic_nand_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {3885; GFX90A-LABEL: global_atomic_nand_i32_ret_a_a:3886; GFX90A:       ; %bb.0:3887; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3888; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:403889; GFX90A-NEXT:    ;;#ASMSTART3890; GFX90A-NEXT:    ; def a03891; GFX90A-NEXT:    ;;#ASMEND3892; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a03893; GFX90A-NEXT:    s_mov_b64 s[4:5], 03894; GFX90A-NEXT:  .LBB69_1: ; %atomicrmw.start3895; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=13896; GFX90A-NEXT:    s_waitcnt vmcnt(0)3897; GFX90A-NEXT:    v_and_b32_e32 v2, v3, v43898; GFX90A-NEXT:    v_not_b32_e32 v2, v23899; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc3900; GFX90A-NEXT:    s_waitcnt vmcnt(0)3901; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33902; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3903; GFX90A-NEXT:    v_mov_b32_e32 v3, v23904; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]3905; GFX90A-NEXT:    s_cbranch_execnz .LBB69_13906; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end3907; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]3908; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v23909; GFX90A-NEXT:    ;;#ASMSTART3910; GFX90A-NEXT:    ; use a03911; GFX90A-NEXT:    ;;#ASMEND3912; GFX90A-NEXT:    s_setpc_b64 s[30:31]3913;3914; GFX950-LABEL: global_atomic_nand_i32_ret_a_a:3915; GFX950:       ; %bb.0:3916; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3917; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:403918; GFX950-NEXT:    ;;#ASMSTART3919; GFX950-NEXT:    ; def a03920; GFX950-NEXT:    ;;#ASMEND3921; GFX950-NEXT:    s_mov_b64 s[0:1], 03922; GFX950-NEXT:    v_accvgpr_read_b32 v4, a03923; GFX950-NEXT:  .LBB69_1: ; %atomicrmw.start3924; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=13925; GFX950-NEXT:    s_waitcnt vmcnt(0)3926; GFX950-NEXT:    v_bitop3_b32 v2, v3, v4, v3 bitop3:0x3f3927; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc03928; GFX950-NEXT:    s_waitcnt vmcnt(0)3929; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33930; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]3931; GFX950-NEXT:    v_mov_b32_e32 v3, v23932; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]3933; GFX950-NEXT:    s_cbranch_execnz .LBB69_13934; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end3935; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]3936; GFX950-NEXT:    v_accvgpr_write_b32 a0, v23937; GFX950-NEXT:    ;;#ASMSTART3938; GFX950-NEXT:    ; use a03939; GFX950-NEXT:    ;;#ASMEND3940; GFX950-NEXT:    s_setpc_b64 s[30:31]3941  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 103942  %data = call i32 asm "; def $0", "=a"()3943  %result = atomicrmw nand ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03944  call void asm "; use $0", "a"(i32 %result)3945  ret void3946}3947 3948define void @global_atomic_nand_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {3949; GFX90A-LABEL: global_atomic_nand_i32_ret_av_av:3950; GFX90A:       ; %bb.0:3951; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3952; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:403953; GFX90A-NEXT:    s_mov_b64 s[4:5], 03954; GFX90A-NEXT:    ;;#ASMSTART3955; GFX90A-NEXT:    ; def v43956; GFX90A-NEXT:    ;;#ASMEND3957; GFX90A-NEXT:  .LBB70_1: ; %atomicrmw.start3958; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=13959; GFX90A-NEXT:    s_waitcnt vmcnt(0)3960; GFX90A-NEXT:    v_and_b32_e32 v2, v3, v43961; GFX90A-NEXT:    v_not_b32_e32 v2, v23962; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc3963; GFX90A-NEXT:    s_waitcnt vmcnt(0)3964; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33965; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3966; GFX90A-NEXT:    v_mov_b32_e32 v3, v23967; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]3968; GFX90A-NEXT:    s_cbranch_execnz .LBB70_13969; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end3970; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]3971; GFX90A-NEXT:    ;;#ASMSTART3972; GFX90A-NEXT:    ; use v23973; GFX90A-NEXT:    ;;#ASMEND3974; GFX90A-NEXT:    s_setpc_b64 s[30:31]3975;3976; GFX950-LABEL: global_atomic_nand_i32_ret_av_av:3977; GFX950:       ; %bb.0:3978; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3979; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:403980; GFX950-NEXT:    s_mov_b64 s[0:1], 03981; GFX950-NEXT:    ;;#ASMSTART3982; GFX950-NEXT:    ; def v43983; GFX950-NEXT:    ;;#ASMEND3984; GFX950-NEXT:  .LBB70_1: ; %atomicrmw.start3985; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=13986; GFX950-NEXT:    s_waitcnt vmcnt(0)3987; GFX950-NEXT:    v_bitop3_b32 v2, v3, v4, v3 bitop3:0x3f3988; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc03989; GFX950-NEXT:    s_waitcnt vmcnt(0)3990; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33991; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]3992; GFX950-NEXT:    v_mov_b32_e32 v3, v23993; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]3994; GFX950-NEXT:    s_cbranch_execnz .LBB70_13995; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end3996; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]3997; GFX950-NEXT:    ;;#ASMSTART3998; GFX950-NEXT:    ; use v23999; GFX950-NEXT:    ;;#ASMEND4000; GFX950-NEXT:    s_setpc_b64 s[30:31]4001  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104002  %data = call i32 asm "; def $0", "=^VA"()4003  %result = atomicrmw nand ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04004  call void asm "; use $0", "^VA"(i32 %result)4005  ret void4006}4007 4008define void @global_atomic_or_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4009; GFX90A-LABEL: global_atomic_or_i32_ret_a_a:4010; GFX90A:       ; %bb.0:4011; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4012; GFX90A-NEXT:    ;;#ASMSTART4013; GFX90A-NEXT:    ; def a04014; GFX90A-NEXT:    ;;#ASMEND4015; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04016; GFX90A-NEXT:    global_atomic_or v0, v[0:1], v2, off offset:40 glc4017; GFX90A-NEXT:    s_waitcnt vmcnt(0)4018; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04019; GFX90A-NEXT:    ;;#ASMSTART4020; GFX90A-NEXT:    ; use a04021; GFX90A-NEXT:    ;;#ASMEND4022; GFX90A-NEXT:    s_setpc_b64 s[30:31]4023;4024; GFX950-LABEL: global_atomic_or_i32_ret_a_a:4025; GFX950:       ; %bb.0:4026; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4027; GFX950-NEXT:    ;;#ASMSTART4028; GFX950-NEXT:    ; def a04029; GFX950-NEXT:    ;;#ASMEND4030; GFX950-NEXT:    s_nop 04031; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04032; GFX950-NEXT:    global_atomic_or v0, v[0:1], v2, off offset:40 sc04033; GFX950-NEXT:    s_waitcnt vmcnt(0)4034; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04035; GFX950-NEXT:    ;;#ASMSTART4036; GFX950-NEXT:    ; use a04037; GFX950-NEXT:    ;;#ASMEND4038; GFX950-NEXT:    s_setpc_b64 s[30:31]4039  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104040  %data = call i32 asm "; def $0", "=a"()4041  %result = atomicrmw or ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04042  call void asm "; use $0", "a"(i32 %result)4043  ret void4044}4045 4046define void @global_atomic_or_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4047; GFX90A-LABEL: global_atomic_or_i32_ret_av_av:4048; GFX90A:       ; %bb.0:4049; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4050; GFX90A-NEXT:    ;;#ASMSTART4051; GFX90A-NEXT:    ; def v24052; GFX90A-NEXT:    ;;#ASMEND4053; GFX90A-NEXT:    global_atomic_or v0, v[0:1], v2, off offset:40 glc4054; GFX90A-NEXT:    s_waitcnt vmcnt(0)4055; GFX90A-NEXT:    ;;#ASMSTART4056; GFX90A-NEXT:    ; use v04057; GFX90A-NEXT:    ;;#ASMEND4058; GFX90A-NEXT:    s_setpc_b64 s[30:31]4059;4060; GFX950-LABEL: global_atomic_or_i32_ret_av_av:4061; GFX950:       ; %bb.0:4062; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4063; GFX950-NEXT:    ;;#ASMSTART4064; GFX950-NEXT:    ; def v24065; GFX950-NEXT:    ;;#ASMEND4066; GFX950-NEXT:    global_atomic_or v0, v[0:1], v2, off offset:40 sc04067; GFX950-NEXT:    s_waitcnt vmcnt(0)4068; GFX950-NEXT:    ;;#ASMSTART4069; GFX950-NEXT:    ; use v04070; GFX950-NEXT:    ;;#ASMEND4071; GFX950-NEXT:    s_setpc_b64 s[30:31]4072  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104073  %data = call i32 asm "; def $0", "=^VA"()4074  %result = atomicrmw or ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04075  call void asm "; use $0", "^VA"(i32 %result)4076  ret void4077}4078 4079define void @global_atomic_max_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4080; GFX90A-LABEL: global_atomic_max_i32_ret_a_a:4081; GFX90A:       ; %bb.0:4082; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4083; GFX90A-NEXT:    ;;#ASMSTART4084; GFX90A-NEXT:    ; def a04085; GFX90A-NEXT:    ;;#ASMEND4086; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04087; GFX90A-NEXT:    global_atomic_smax v0, v[0:1], v2, off offset:40 glc4088; GFX90A-NEXT:    s_waitcnt vmcnt(0)4089; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04090; GFX90A-NEXT:    ;;#ASMSTART4091; GFX90A-NEXT:    ; use a04092; GFX90A-NEXT:    ;;#ASMEND4093; GFX90A-NEXT:    s_setpc_b64 s[30:31]4094;4095; GFX950-LABEL: global_atomic_max_i32_ret_a_a:4096; GFX950:       ; %bb.0:4097; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4098; GFX950-NEXT:    ;;#ASMSTART4099; GFX950-NEXT:    ; def a04100; GFX950-NEXT:    ;;#ASMEND4101; GFX950-NEXT:    s_nop 04102; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04103; GFX950-NEXT:    global_atomic_smax v0, v[0:1], v2, off offset:40 sc04104; GFX950-NEXT:    s_waitcnt vmcnt(0)4105; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04106; GFX950-NEXT:    ;;#ASMSTART4107; GFX950-NEXT:    ; use a04108; GFX950-NEXT:    ;;#ASMEND4109; GFX950-NEXT:    s_setpc_b64 s[30:31]4110  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104111  %data = call i32 asm "; def $0", "=a"()4112  %result = atomicrmw max ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04113  call void asm "; use $0", "a"(i32 %result)4114  ret void4115}4116 4117define void @global_atomic_max_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4118; GFX90A-LABEL: global_atomic_max_i32_ret_av_av:4119; GFX90A:       ; %bb.0:4120; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4121; GFX90A-NEXT:    ;;#ASMSTART4122; GFX90A-NEXT:    ; def v24123; GFX90A-NEXT:    ;;#ASMEND4124; GFX90A-NEXT:    global_atomic_smax v0, v[0:1], v2, off offset:40 glc4125; GFX90A-NEXT:    s_waitcnt vmcnt(0)4126; GFX90A-NEXT:    ;;#ASMSTART4127; GFX90A-NEXT:    ; use v04128; GFX90A-NEXT:    ;;#ASMEND4129; GFX90A-NEXT:    s_setpc_b64 s[30:31]4130;4131; GFX950-LABEL: global_atomic_max_i32_ret_av_av:4132; GFX950:       ; %bb.0:4133; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4134; GFX950-NEXT:    ;;#ASMSTART4135; GFX950-NEXT:    ; def v24136; GFX950-NEXT:    ;;#ASMEND4137; GFX950-NEXT:    global_atomic_smax v0, v[0:1], v2, off offset:40 sc04138; GFX950-NEXT:    s_waitcnt vmcnt(0)4139; GFX950-NEXT:    ;;#ASMSTART4140; GFX950-NEXT:    ; use v04141; GFX950-NEXT:    ;;#ASMEND4142; GFX950-NEXT:    s_setpc_b64 s[30:31]4143  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104144  %data = call i32 asm "; def $0", "=^VA"()4145  %result = atomicrmw max ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04146  call void asm "; use $0", "^VA"(i32 %result)4147  ret void4148}4149 4150define void @global_atomic_min_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4151; GFX90A-LABEL: global_atomic_min_i32_ret_a_a:4152; GFX90A:       ; %bb.0:4153; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4154; GFX90A-NEXT:    ;;#ASMSTART4155; GFX90A-NEXT:    ; def a04156; GFX90A-NEXT:    ;;#ASMEND4157; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04158; GFX90A-NEXT:    global_atomic_smin v0, v[0:1], v2, off offset:40 glc4159; GFX90A-NEXT:    s_waitcnt vmcnt(0)4160; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04161; GFX90A-NEXT:    ;;#ASMSTART4162; GFX90A-NEXT:    ; use a04163; GFX90A-NEXT:    ;;#ASMEND4164; GFX90A-NEXT:    s_setpc_b64 s[30:31]4165;4166; GFX950-LABEL: global_atomic_min_i32_ret_a_a:4167; GFX950:       ; %bb.0:4168; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4169; GFX950-NEXT:    ;;#ASMSTART4170; GFX950-NEXT:    ; def a04171; GFX950-NEXT:    ;;#ASMEND4172; GFX950-NEXT:    s_nop 04173; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04174; GFX950-NEXT:    global_atomic_smin v0, v[0:1], v2, off offset:40 sc04175; GFX950-NEXT:    s_waitcnt vmcnt(0)4176; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04177; GFX950-NEXT:    ;;#ASMSTART4178; GFX950-NEXT:    ; use a04179; GFX950-NEXT:    ;;#ASMEND4180; GFX950-NEXT:    s_setpc_b64 s[30:31]4181  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104182  %data = call i32 asm "; def $0", "=a"()4183  %result = atomicrmw min ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04184  call void asm "; use $0", "a"(i32 %result)4185  ret void4186}4187 4188define void @global_atomic_min_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4189; GFX90A-LABEL: global_atomic_min_i32_ret_av_av:4190; GFX90A:       ; %bb.0:4191; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4192; GFX90A-NEXT:    ;;#ASMSTART4193; GFX90A-NEXT:    ; def v24194; GFX90A-NEXT:    ;;#ASMEND4195; GFX90A-NEXT:    global_atomic_smin v0, v[0:1], v2, off offset:40 glc4196; GFX90A-NEXT:    s_waitcnt vmcnt(0)4197; GFX90A-NEXT:    ;;#ASMSTART4198; GFX90A-NEXT:    ; use v04199; GFX90A-NEXT:    ;;#ASMEND4200; GFX90A-NEXT:    s_setpc_b64 s[30:31]4201;4202; GFX950-LABEL: global_atomic_min_i32_ret_av_av:4203; GFX950:       ; %bb.0:4204; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4205; GFX950-NEXT:    ;;#ASMSTART4206; GFX950-NEXT:    ; def v24207; GFX950-NEXT:    ;;#ASMEND4208; GFX950-NEXT:    global_atomic_smin v0, v[0:1], v2, off offset:40 sc04209; GFX950-NEXT:    s_waitcnt vmcnt(0)4210; GFX950-NEXT:    ;;#ASMSTART4211; GFX950-NEXT:    ; use v04212; GFX950-NEXT:    ;;#ASMEND4213; GFX950-NEXT:    s_setpc_b64 s[30:31]4214  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104215  %data = call i32 asm "; def $0", "=^VA"()4216  %result = atomicrmw min ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04217  call void asm "; use $0", "^VA"(i32 %result)4218  ret void4219}4220 4221define void @global_atomic_umax_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4222; GFX90A-LABEL: global_atomic_umax_i32_ret_a_a:4223; GFX90A:       ; %bb.0:4224; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4225; GFX90A-NEXT:    ;;#ASMSTART4226; GFX90A-NEXT:    ; def a04227; GFX90A-NEXT:    ;;#ASMEND4228; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04229; GFX90A-NEXT:    global_atomic_umax v0, v[0:1], v2, off offset:40 glc4230; GFX90A-NEXT:    s_waitcnt vmcnt(0)4231; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04232; GFX90A-NEXT:    ;;#ASMSTART4233; GFX90A-NEXT:    ; use a04234; GFX90A-NEXT:    ;;#ASMEND4235; GFX90A-NEXT:    s_setpc_b64 s[30:31]4236;4237; GFX950-LABEL: global_atomic_umax_i32_ret_a_a:4238; GFX950:       ; %bb.0:4239; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4240; GFX950-NEXT:    ;;#ASMSTART4241; GFX950-NEXT:    ; def a04242; GFX950-NEXT:    ;;#ASMEND4243; GFX950-NEXT:    s_nop 04244; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04245; GFX950-NEXT:    global_atomic_umax v0, v[0:1], v2, off offset:40 sc04246; GFX950-NEXT:    s_waitcnt vmcnt(0)4247; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04248; GFX950-NEXT:    ;;#ASMSTART4249; GFX950-NEXT:    ; use a04250; GFX950-NEXT:    ;;#ASMEND4251; GFX950-NEXT:    s_setpc_b64 s[30:31]4252  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104253  %data = call i32 asm "; def $0", "=a"()4254  %result = atomicrmw umax ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04255  call void asm "; use $0", "a"(i32 %result)4256  ret void4257}4258 4259define void @global_atomic_umax_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4260; GFX90A-LABEL: global_atomic_umax_i32_ret_av_av:4261; GFX90A:       ; %bb.0:4262; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4263; GFX90A-NEXT:    ;;#ASMSTART4264; GFX90A-NEXT:    ; def v24265; GFX90A-NEXT:    ;;#ASMEND4266; GFX90A-NEXT:    global_atomic_umax v0, v[0:1], v2, off offset:40 glc4267; GFX90A-NEXT:    s_waitcnt vmcnt(0)4268; GFX90A-NEXT:    ;;#ASMSTART4269; GFX90A-NEXT:    ; use v04270; GFX90A-NEXT:    ;;#ASMEND4271; GFX90A-NEXT:    s_setpc_b64 s[30:31]4272;4273; GFX950-LABEL: global_atomic_umax_i32_ret_av_av:4274; GFX950:       ; %bb.0:4275; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4276; GFX950-NEXT:    ;;#ASMSTART4277; GFX950-NEXT:    ; def v24278; GFX950-NEXT:    ;;#ASMEND4279; GFX950-NEXT:    global_atomic_umax v0, v[0:1], v2, off offset:40 sc04280; GFX950-NEXT:    s_waitcnt vmcnt(0)4281; GFX950-NEXT:    ;;#ASMSTART4282; GFX950-NEXT:    ; use v04283; GFX950-NEXT:    ;;#ASMEND4284; GFX950-NEXT:    s_setpc_b64 s[30:31]4285  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104286  %data = call i32 asm "; def $0", "=^VA"()4287  %result = atomicrmw umax ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04288  call void asm "; use $0", "^VA"(i32 %result)4289  ret void4290}4291 4292define void @global_atomic_umin_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4293; GFX90A-LABEL: global_atomic_umin_i32_ret_a_a:4294; GFX90A:       ; %bb.0:4295; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4296; GFX90A-NEXT:    ;;#ASMSTART4297; GFX90A-NEXT:    ; def a04298; GFX90A-NEXT:    ;;#ASMEND4299; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04300; GFX90A-NEXT:    global_atomic_umin v0, v[0:1], v2, off offset:40 glc4301; GFX90A-NEXT:    s_waitcnt vmcnt(0)4302; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04303; GFX90A-NEXT:    ;;#ASMSTART4304; GFX90A-NEXT:    ; use a04305; GFX90A-NEXT:    ;;#ASMEND4306; GFX90A-NEXT:    s_setpc_b64 s[30:31]4307;4308; GFX950-LABEL: global_atomic_umin_i32_ret_a_a:4309; GFX950:       ; %bb.0:4310; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4311; GFX950-NEXT:    ;;#ASMSTART4312; GFX950-NEXT:    ; def a04313; GFX950-NEXT:    ;;#ASMEND4314; GFX950-NEXT:    s_nop 04315; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04316; GFX950-NEXT:    global_atomic_umin v0, v[0:1], v2, off offset:40 sc04317; GFX950-NEXT:    s_waitcnt vmcnt(0)4318; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04319; GFX950-NEXT:    ;;#ASMSTART4320; GFX950-NEXT:    ; use a04321; GFX950-NEXT:    ;;#ASMEND4322; GFX950-NEXT:    s_setpc_b64 s[30:31]4323  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104324  %data = call i32 asm "; def $0", "=a"()4325  %result = atomicrmw umin ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04326  call void asm "; use $0", "a"(i32 %result)4327  ret void4328}4329 4330define void @global_atomic_umin_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4331; GFX90A-LABEL: global_atomic_umin_i32_ret_av_av:4332; GFX90A:       ; %bb.0:4333; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4334; GFX90A-NEXT:    ;;#ASMSTART4335; GFX90A-NEXT:    ; def v24336; GFX90A-NEXT:    ;;#ASMEND4337; GFX90A-NEXT:    global_atomic_umin v0, v[0:1], v2, off offset:40 glc4338; GFX90A-NEXT:    s_waitcnt vmcnt(0)4339; GFX90A-NEXT:    ;;#ASMSTART4340; GFX90A-NEXT:    ; use v04341; GFX90A-NEXT:    ;;#ASMEND4342; GFX90A-NEXT:    s_setpc_b64 s[30:31]4343;4344; GFX950-LABEL: global_atomic_umin_i32_ret_av_av:4345; GFX950:       ; %bb.0:4346; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4347; GFX950-NEXT:    ;;#ASMSTART4348; GFX950-NEXT:    ; def v24349; GFX950-NEXT:    ;;#ASMEND4350; GFX950-NEXT:    global_atomic_umin v0, v[0:1], v2, off offset:40 sc04351; GFX950-NEXT:    s_waitcnt vmcnt(0)4352; GFX950-NEXT:    ;;#ASMSTART4353; GFX950-NEXT:    ; use v04354; GFX950-NEXT:    ;;#ASMEND4355; GFX950-NEXT:    s_setpc_b64 s[30:31]4356  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104357  %data = call i32 asm "; def $0", "=^VA"()4358  %result = atomicrmw umin ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04359  call void asm "; use $0", "^VA"(i32 %result)4360  ret void4361}4362 4363define void @global_atomic_uinc_wrap_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4364; GFX90A-LABEL: global_atomic_uinc_wrap_i32_ret_a_a:4365; GFX90A:       ; %bb.0:4366; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4367; GFX90A-NEXT:    ;;#ASMSTART4368; GFX90A-NEXT:    ; def a04369; GFX90A-NEXT:    ;;#ASMEND4370; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04371; GFX90A-NEXT:    global_atomic_inc v0, v[0:1], v2, off offset:40 glc4372; GFX90A-NEXT:    s_waitcnt vmcnt(0)4373; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04374; GFX90A-NEXT:    ;;#ASMSTART4375; GFX90A-NEXT:    ; use a04376; GFX90A-NEXT:    ;;#ASMEND4377; GFX90A-NEXT:    s_setpc_b64 s[30:31]4378;4379; GFX950-LABEL: global_atomic_uinc_wrap_i32_ret_a_a:4380; GFX950:       ; %bb.0:4381; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4382; GFX950-NEXT:    ;;#ASMSTART4383; GFX950-NEXT:    ; def a04384; GFX950-NEXT:    ;;#ASMEND4385; GFX950-NEXT:    s_nop 04386; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04387; GFX950-NEXT:    global_atomic_inc v0, v[0:1], v2, off offset:40 sc04388; GFX950-NEXT:    s_waitcnt vmcnt(0)4389; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04390; GFX950-NEXT:    ;;#ASMSTART4391; GFX950-NEXT:    ; use a04392; GFX950-NEXT:    ;;#ASMEND4393; GFX950-NEXT:    s_setpc_b64 s[30:31]4394  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104395  %data = call i32 asm "; def $0", "=a"()4396  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04397  call void asm "; use $0", "a"(i32 %result)4398  ret void4399}4400 4401define void @global_atomic_uinc_wrap_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4402; GFX90A-LABEL: global_atomic_uinc_wrap_i32_ret_av_av:4403; GFX90A:       ; %bb.0:4404; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4405; GFX90A-NEXT:    ;;#ASMSTART4406; GFX90A-NEXT:    ; def v24407; GFX90A-NEXT:    ;;#ASMEND4408; GFX90A-NEXT:    global_atomic_inc v0, v[0:1], v2, off offset:40 glc4409; GFX90A-NEXT:    s_waitcnt vmcnt(0)4410; GFX90A-NEXT:    ;;#ASMSTART4411; GFX90A-NEXT:    ; use v04412; GFX90A-NEXT:    ;;#ASMEND4413; GFX90A-NEXT:    s_setpc_b64 s[30:31]4414;4415; GFX950-LABEL: global_atomic_uinc_wrap_i32_ret_av_av:4416; GFX950:       ; %bb.0:4417; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4418; GFX950-NEXT:    ;;#ASMSTART4419; GFX950-NEXT:    ; def v24420; GFX950-NEXT:    ;;#ASMEND4421; GFX950-NEXT:    global_atomic_inc v0, v[0:1], v2, off offset:40 sc04422; GFX950-NEXT:    s_waitcnt vmcnt(0)4423; GFX950-NEXT:    ;;#ASMSTART4424; GFX950-NEXT:    ; use v04425; GFX950-NEXT:    ;;#ASMEND4426; GFX950-NEXT:    s_setpc_b64 s[30:31]4427  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104428  %data = call i32 asm "; def $0", "=^VA"()4429  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04430  call void asm "; use $0", "^VA"(i32 %result)4431  ret void4432}4433 4434define void @global_atomic_udec_wrap_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4435; GFX90A-LABEL: global_atomic_udec_wrap_i32_ret_a_a:4436; GFX90A:       ; %bb.0:4437; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4438; GFX90A-NEXT:    ;;#ASMSTART4439; GFX90A-NEXT:    ; def a04440; GFX90A-NEXT:    ;;#ASMEND4441; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04442; GFX90A-NEXT:    global_atomic_dec v0, v[0:1], v2, off offset:40 glc4443; GFX90A-NEXT:    s_waitcnt vmcnt(0)4444; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04445; GFX90A-NEXT:    ;;#ASMSTART4446; GFX90A-NEXT:    ; use a04447; GFX90A-NEXT:    ;;#ASMEND4448; GFX90A-NEXT:    s_setpc_b64 s[30:31]4449;4450; GFX950-LABEL: global_atomic_udec_wrap_i32_ret_a_a:4451; GFX950:       ; %bb.0:4452; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4453; GFX950-NEXT:    ;;#ASMSTART4454; GFX950-NEXT:    ; def a04455; GFX950-NEXT:    ;;#ASMEND4456; GFX950-NEXT:    s_nop 04457; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04458; GFX950-NEXT:    global_atomic_dec v0, v[0:1], v2, off offset:40 sc04459; GFX950-NEXT:    s_waitcnt vmcnt(0)4460; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04461; GFX950-NEXT:    ;;#ASMSTART4462; GFX950-NEXT:    ; use a04463; GFX950-NEXT:    ;;#ASMEND4464; GFX950-NEXT:    s_setpc_b64 s[30:31]4465  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104466  %data = call i32 asm "; def $0", "=a"()4467  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04468  call void asm "; use $0", "a"(i32 %result)4469  ret void4470}4471 4472define void @global_atomic_udec_wrap_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4473; GFX90A-LABEL: global_atomic_udec_wrap_i32_ret_av_av:4474; GFX90A:       ; %bb.0:4475; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4476; GFX90A-NEXT:    ;;#ASMSTART4477; GFX90A-NEXT:    ; def v24478; GFX90A-NEXT:    ;;#ASMEND4479; GFX90A-NEXT:    global_atomic_dec v0, v[0:1], v2, off offset:40 glc4480; GFX90A-NEXT:    s_waitcnt vmcnt(0)4481; GFX90A-NEXT:    ;;#ASMSTART4482; GFX90A-NEXT:    ; use v04483; GFX90A-NEXT:    ;;#ASMEND4484; GFX90A-NEXT:    s_setpc_b64 s[30:31]4485;4486; GFX950-LABEL: global_atomic_udec_wrap_i32_ret_av_av:4487; GFX950:       ; %bb.0:4488; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4489; GFX950-NEXT:    ;;#ASMSTART4490; GFX950-NEXT:    ; def v24491; GFX950-NEXT:    ;;#ASMEND4492; GFX950-NEXT:    global_atomic_dec v0, v[0:1], v2, off offset:40 sc04493; GFX950-NEXT:    s_waitcnt vmcnt(0)4494; GFX950-NEXT:    ;;#ASMSTART4495; GFX950-NEXT:    ; use v04496; GFX950-NEXT:    ;;#ASMEND4497; GFX950-NEXT:    s_setpc_b64 s[30:31]4498  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104499  %data = call i32 asm "; def $0", "=^VA"()4500  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04501  call void asm "; use $0", "^VA"(i32 %result)4502  ret void4503}4504 4505define void @global_atomic_usub_cond_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4506; GFX90A-LABEL: global_atomic_usub_cond_i32_ret_a_a:4507; GFX90A:       ; %bb.0:4508; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4509; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:404510; GFX90A-NEXT:    ;;#ASMSTART4511; GFX90A-NEXT:    ; def a04512; GFX90A-NEXT:    ;;#ASMEND4513; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a04514; GFX90A-NEXT:    s_mov_b64 s[4:5], 04515; GFX90A-NEXT:  .LBB85_1: ; %atomicrmw.start4516; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=14517; GFX90A-NEXT:    s_waitcnt vmcnt(0)4518; GFX90A-NEXT:    v_sub_u32_e32 v2, v3, v44519; GFX90A-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v44520; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc4521; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc4522; GFX90A-NEXT:    s_waitcnt vmcnt(0)4523; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34524; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4525; GFX90A-NEXT:    v_mov_b32_e32 v3, v24526; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]4527; GFX90A-NEXT:    s_cbranch_execnz .LBB85_14528; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end4529; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]4530; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v24531; GFX90A-NEXT:    ;;#ASMSTART4532; GFX90A-NEXT:    ; use a04533; GFX90A-NEXT:    ;;#ASMEND4534; GFX90A-NEXT:    s_setpc_b64 s[30:31]4535;4536; GFX950-LABEL: global_atomic_usub_cond_i32_ret_a_a:4537; GFX950:       ; %bb.0:4538; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4539; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:404540; GFX950-NEXT:    ;;#ASMSTART4541; GFX950-NEXT:    ; def a04542; GFX950-NEXT:    ;;#ASMEND4543; GFX950-NEXT:    s_mov_b64 s[0:1], 04544; GFX950-NEXT:    v_accvgpr_read_b32 v4, a04545; GFX950-NEXT:  .LBB85_1: ; %atomicrmw.start4546; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=14547; GFX950-NEXT:    s_waitcnt vmcnt(0)4548; GFX950-NEXT:    v_sub_u32_e32 v2, v3, v44549; GFX950-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v44550; GFX950-NEXT:    s_nop 14551; GFX950-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc4552; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc04553; GFX950-NEXT:    s_waitcnt vmcnt(0)4554; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34555; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]4556; GFX950-NEXT:    v_mov_b32_e32 v3, v24557; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]4558; GFX950-NEXT:    s_cbranch_execnz .LBB85_14559; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end4560; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]4561; GFX950-NEXT:    v_accvgpr_write_b32 a0, v24562; GFX950-NEXT:    ;;#ASMSTART4563; GFX950-NEXT:    ; use a04564; GFX950-NEXT:    ;;#ASMEND4565; GFX950-NEXT:    s_setpc_b64 s[30:31]4566  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104567  %data = call i32 asm "; def $0", "=a"()4568  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04569  call void asm "; use $0", "a"(i32 %result)4570  ret void4571}4572 4573define void @global_atomic_usub_cond_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4574; GFX90A-LABEL: global_atomic_usub_cond_i32_ret_av_av:4575; GFX90A:       ; %bb.0:4576; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4577; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:404578; GFX90A-NEXT:    s_mov_b64 s[4:5], 04579; GFX90A-NEXT:    ;;#ASMSTART4580; GFX90A-NEXT:    ; def v44581; GFX90A-NEXT:    ;;#ASMEND4582; GFX90A-NEXT:  .LBB86_1: ; %atomicrmw.start4583; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=14584; GFX90A-NEXT:    s_waitcnt vmcnt(0)4585; GFX90A-NEXT:    v_sub_u32_e32 v2, v3, v44586; GFX90A-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v44587; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc4588; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc4589; GFX90A-NEXT:    s_waitcnt vmcnt(0)4590; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34591; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4592; GFX90A-NEXT:    v_mov_b32_e32 v3, v24593; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]4594; GFX90A-NEXT:    s_cbranch_execnz .LBB86_14595; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end4596; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]4597; GFX90A-NEXT:    ;;#ASMSTART4598; GFX90A-NEXT:    ; use v24599; GFX90A-NEXT:    ;;#ASMEND4600; GFX90A-NEXT:    s_setpc_b64 s[30:31]4601;4602; GFX950-LABEL: global_atomic_usub_cond_i32_ret_av_av:4603; GFX950:       ; %bb.0:4604; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4605; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:404606; GFX950-NEXT:    s_mov_b64 s[0:1], 04607; GFX950-NEXT:    ;;#ASMSTART4608; GFX950-NEXT:    ; def v44609; GFX950-NEXT:    ;;#ASMEND4610; GFX950-NEXT:  .LBB86_1: ; %atomicrmw.start4611; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=14612; GFX950-NEXT:    s_waitcnt vmcnt(0)4613; GFX950-NEXT:    v_sub_u32_e32 v2, v3, v44614; GFX950-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v44615; GFX950-NEXT:    s_nop 14616; GFX950-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc4617; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc04618; GFX950-NEXT:    s_waitcnt vmcnt(0)4619; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34620; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]4621; GFX950-NEXT:    v_mov_b32_e32 v3, v24622; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]4623; GFX950-NEXT:    s_cbranch_execnz .LBB86_14624; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end4625; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]4626; GFX950-NEXT:    ;;#ASMSTART4627; GFX950-NEXT:    ; use v24628; GFX950-NEXT:    ;;#ASMEND4629; GFX950-NEXT:    s_setpc_b64 s[30:31]4630  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104631  %data = call i32 asm "; def $0", "=^VA"()4632  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04633  call void asm "; use $0", "^VA"(i32 %result)4634  ret void4635}4636 4637define void @global_atomic_usub_sat_i32_ret_a_a(ptr addrspace(1) %ptr) #0 {4638; GFX90A-LABEL: global_atomic_usub_sat_i32_ret_a_a:4639; GFX90A:       ; %bb.0:4640; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4641; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:404642; GFX90A-NEXT:    ;;#ASMSTART4643; GFX90A-NEXT:    ; def a04644; GFX90A-NEXT:    ;;#ASMEND4645; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a04646; GFX90A-NEXT:    s_mov_b64 s[4:5], 04647; GFX90A-NEXT:  .LBB87_1: ; %atomicrmw.start4648; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=14649; GFX90A-NEXT:    s_waitcnt vmcnt(0)4650; GFX90A-NEXT:    v_sub_u32_e64 v2, v3, v4 clamp4651; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc4652; GFX90A-NEXT:    s_waitcnt vmcnt(0)4653; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34654; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4655; GFX90A-NEXT:    v_mov_b32_e32 v3, v24656; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]4657; GFX90A-NEXT:    s_cbranch_execnz .LBB87_14658; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end4659; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]4660; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v24661; GFX90A-NEXT:    ;;#ASMSTART4662; GFX90A-NEXT:    ; use a04663; GFX90A-NEXT:    ;;#ASMEND4664; GFX90A-NEXT:    s_setpc_b64 s[30:31]4665;4666; GFX950-LABEL: global_atomic_usub_sat_i32_ret_a_a:4667; GFX950:       ; %bb.0:4668; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4669; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:404670; GFX950-NEXT:    ;;#ASMSTART4671; GFX950-NEXT:    ; def a04672; GFX950-NEXT:    ;;#ASMEND4673; GFX950-NEXT:    s_mov_b64 s[0:1], 04674; GFX950-NEXT:    v_accvgpr_read_b32 v4, a04675; GFX950-NEXT:  .LBB87_1: ; %atomicrmw.start4676; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=14677; GFX950-NEXT:    s_waitcnt vmcnt(0)4678; GFX950-NEXT:    v_sub_u32_e64 v2, v3, v4 clamp4679; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc04680; GFX950-NEXT:    s_waitcnt vmcnt(0)4681; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34682; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]4683; GFX950-NEXT:    v_mov_b32_e32 v3, v24684; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]4685; GFX950-NEXT:    s_cbranch_execnz .LBB87_14686; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end4687; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]4688; GFX950-NEXT:    v_accvgpr_write_b32 a0, v24689; GFX950-NEXT:    ;;#ASMSTART4690; GFX950-NEXT:    ; use a04691; GFX950-NEXT:    ;;#ASMEND4692; GFX950-NEXT:    s_setpc_b64 s[30:31]4693  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104694  %data = call i32 asm "; def $0", "=a"()4695  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04696  call void asm "; use $0", "a"(i32 %result)4697  ret void4698}4699 4700define void @global_atomic_usub_sat_i32_ret_av_av(ptr addrspace(1) %ptr) #0 {4701; GFX90A-LABEL: global_atomic_usub_sat_i32_ret_av_av:4702; GFX90A:       ; %bb.0:4703; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4704; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:404705; GFX90A-NEXT:    s_mov_b64 s[4:5], 04706; GFX90A-NEXT:    ;;#ASMSTART4707; GFX90A-NEXT:    ; def v44708; GFX90A-NEXT:    ;;#ASMEND4709; GFX90A-NEXT:  .LBB88_1: ; %atomicrmw.start4710; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=14711; GFX90A-NEXT:    s_waitcnt vmcnt(0)4712; GFX90A-NEXT:    v_sub_u32_e64 v2, v3, v4 clamp4713; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc4714; GFX90A-NEXT:    s_waitcnt vmcnt(0)4715; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34716; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4717; GFX90A-NEXT:    v_mov_b32_e32 v3, v24718; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]4719; GFX90A-NEXT:    s_cbranch_execnz .LBB88_14720; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end4721; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]4722; GFX90A-NEXT:    ;;#ASMSTART4723; GFX90A-NEXT:    ; use v24724; GFX90A-NEXT:    ;;#ASMEND4725; GFX90A-NEXT:    s_setpc_b64 s[30:31]4726;4727; GFX950-LABEL: global_atomic_usub_sat_i32_ret_av_av:4728; GFX950:       ; %bb.0:4729; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4730; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:404731; GFX950-NEXT:    s_mov_b64 s[0:1], 04732; GFX950-NEXT:    ;;#ASMSTART4733; GFX950-NEXT:    ; def v44734; GFX950-NEXT:    ;;#ASMEND4735; GFX950-NEXT:  .LBB88_1: ; %atomicrmw.start4736; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=14737; GFX950-NEXT:    s_waitcnt vmcnt(0)4738; GFX950-NEXT:    v_sub_u32_e64 v2, v3, v4 clamp4739; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc04740; GFX950-NEXT:    s_waitcnt vmcnt(0)4741; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34742; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]4743; GFX950-NEXT:    v_mov_b32_e32 v3, v24744; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]4745; GFX950-NEXT:    s_cbranch_execnz .LBB88_14746; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end4747; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]4748; GFX950-NEXT:    ;;#ASMSTART4749; GFX950-NEXT:    ; use v24750; GFX950-NEXT:    ;;#ASMEND4751; GFX950-NEXT:    s_setpc_b64 s[30:31]4752  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 104753  %data = call i32 asm "; def $0", "=^VA"()4754  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04755  call void asm "; use $0", "^VA"(i32 %result)4756  ret void4757}4758 4759;---------------------------------------------------------------------4760; other atomics i64, with aa+av cases4761;---------------------------------------------------------------------4762 4763define void @global_atomic_add_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {4764; GFX90A-LABEL: global_atomic_add_i64_ret_a_a:4765; GFX90A:       ; %bb.0:4766; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4767; GFX90A-NEXT:    ;;#ASMSTART4768; GFX90A-NEXT:    ; def a[0:1]4769; GFX90A-NEXT:    ;;#ASMEND4770; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a14771; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04772; GFX90A-NEXT:    global_atomic_add_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc4773; GFX90A-NEXT:    s_waitcnt vmcnt(0)4774; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04775; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v14776; GFX90A-NEXT:    ;;#ASMSTART4777; GFX90A-NEXT:    ; use a[0:1]4778; GFX90A-NEXT:    ;;#ASMEND4779; GFX90A-NEXT:    s_setpc_b64 s[30:31]4780;4781; GFX950-LABEL: global_atomic_add_i64_ret_a_a:4782; GFX950:       ; %bb.0:4783; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4784; GFX950-NEXT:    ;;#ASMSTART4785; GFX950-NEXT:    ; def a[0:1]4786; GFX950-NEXT:    ;;#ASMEND4787; GFX950-NEXT:    s_nop 04788; GFX950-NEXT:    v_accvgpr_read_b32 v3, a14789; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04790; GFX950-NEXT:    global_atomic_add_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc04791; GFX950-NEXT:    s_waitcnt vmcnt(0)4792; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04793; GFX950-NEXT:    v_accvgpr_write_b32 a1, v14794; GFX950-NEXT:    ;;#ASMSTART4795; GFX950-NEXT:    ; use a[0:1]4796; GFX950-NEXT:    ;;#ASMEND4797; GFX950-NEXT:    s_setpc_b64 s[30:31]4798  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 104799  %data = call i64 asm "; def $0", "=a"()4800  %result = atomicrmw add ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04801  call void asm "; use $0", "a"(i64 %result)4802  ret void4803}4804 4805define void @global_atomic_add_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {4806; GFX90A-LABEL: global_atomic_add_i64_ret_av_av:4807; GFX90A:       ; %bb.0:4808; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4809; GFX90A-NEXT:    ;;#ASMSTART4810; GFX90A-NEXT:    ; def v[2:3]4811; GFX90A-NEXT:    ;;#ASMEND4812; GFX90A-NEXT:    global_atomic_add_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc4813; GFX90A-NEXT:    s_waitcnt vmcnt(0)4814; GFX90A-NEXT:    ;;#ASMSTART4815; GFX90A-NEXT:    ; use v[0:1]4816; GFX90A-NEXT:    ;;#ASMEND4817; GFX90A-NEXT:    s_setpc_b64 s[30:31]4818;4819; GFX950-LABEL: global_atomic_add_i64_ret_av_av:4820; GFX950:       ; %bb.0:4821; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4822; GFX950-NEXT:    ;;#ASMSTART4823; GFX950-NEXT:    ; def v[2:3]4824; GFX950-NEXT:    ;;#ASMEND4825; GFX950-NEXT:    global_atomic_add_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc04826; GFX950-NEXT:    s_waitcnt vmcnt(0)4827; GFX950-NEXT:    ;;#ASMSTART4828; GFX950-NEXT:    ; use v[0:1]4829; GFX950-NEXT:    ;;#ASMEND4830; GFX950-NEXT:    s_setpc_b64 s[30:31]4831  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 104832  %data = call i64 asm "; def $0", "=^VA"()4833  %result = atomicrmw add ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04834  call void asm "; use $0", "^VA"(i64 %result)4835  ret void4836}4837 4838define void @global_atomic_sub_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {4839; GFX90A-LABEL: global_atomic_sub_i64_ret_a_a:4840; GFX90A:       ; %bb.0:4841; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4842; GFX90A-NEXT:    ;;#ASMSTART4843; GFX90A-NEXT:    ; def a[0:1]4844; GFX90A-NEXT:    ;;#ASMEND4845; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a14846; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04847; GFX90A-NEXT:    global_atomic_sub_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc4848; GFX90A-NEXT:    s_waitcnt vmcnt(0)4849; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04850; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v14851; GFX90A-NEXT:    ;;#ASMSTART4852; GFX90A-NEXT:    ; use a[0:1]4853; GFX90A-NEXT:    ;;#ASMEND4854; GFX90A-NEXT:    s_setpc_b64 s[30:31]4855;4856; GFX950-LABEL: global_atomic_sub_i64_ret_a_a:4857; GFX950:       ; %bb.0:4858; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4859; GFX950-NEXT:    ;;#ASMSTART4860; GFX950-NEXT:    ; def a[0:1]4861; GFX950-NEXT:    ;;#ASMEND4862; GFX950-NEXT:    s_nop 04863; GFX950-NEXT:    v_accvgpr_read_b32 v3, a14864; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04865; GFX950-NEXT:    global_atomic_sub_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc04866; GFX950-NEXT:    s_waitcnt vmcnt(0)4867; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04868; GFX950-NEXT:    v_accvgpr_write_b32 a1, v14869; GFX950-NEXT:    ;;#ASMSTART4870; GFX950-NEXT:    ; use a[0:1]4871; GFX950-NEXT:    ;;#ASMEND4872; GFX950-NEXT:    s_setpc_b64 s[30:31]4873  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 104874  %data = call i64 asm "; def $0", "=a"()4875  %result = atomicrmw sub ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04876  call void asm "; use $0", "a"(i64 %result)4877  ret void4878}4879 4880define void @global_atomic_sub_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {4881; GFX90A-LABEL: global_atomic_sub_i64_ret_av_av:4882; GFX90A:       ; %bb.0:4883; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4884; GFX90A-NEXT:    ;;#ASMSTART4885; GFX90A-NEXT:    ; def v[2:3]4886; GFX90A-NEXT:    ;;#ASMEND4887; GFX90A-NEXT:    global_atomic_sub_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc4888; GFX90A-NEXT:    s_waitcnt vmcnt(0)4889; GFX90A-NEXT:    ;;#ASMSTART4890; GFX90A-NEXT:    ; use v[0:1]4891; GFX90A-NEXT:    ;;#ASMEND4892; GFX90A-NEXT:    s_setpc_b64 s[30:31]4893;4894; GFX950-LABEL: global_atomic_sub_i64_ret_av_av:4895; GFX950:       ; %bb.0:4896; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4897; GFX950-NEXT:    ;;#ASMSTART4898; GFX950-NEXT:    ; def v[2:3]4899; GFX950-NEXT:    ;;#ASMEND4900; GFX950-NEXT:    global_atomic_sub_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc04901; GFX950-NEXT:    s_waitcnt vmcnt(0)4902; GFX950-NEXT:    ;;#ASMSTART4903; GFX950-NEXT:    ; use v[0:1]4904; GFX950-NEXT:    ;;#ASMEND4905; GFX950-NEXT:    s_setpc_b64 s[30:31]4906  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 104907  %data = call i64 asm "; def $0", "=^VA"()4908  %result = atomicrmw sub ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04909  call void asm "; use $0", "^VA"(i64 %result)4910  ret void4911}4912 4913define void @global_atomic_and_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {4914; GFX90A-LABEL: global_atomic_and_i64_ret_a_a:4915; GFX90A:       ; %bb.0:4916; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4917; GFX90A-NEXT:    ;;#ASMSTART4918; GFX90A-NEXT:    ; def a[0:1]4919; GFX90A-NEXT:    ;;#ASMEND4920; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a14921; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a04922; GFX90A-NEXT:    global_atomic_and_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc4923; GFX90A-NEXT:    s_waitcnt vmcnt(0)4924; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v04925; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v14926; GFX90A-NEXT:    ;;#ASMSTART4927; GFX90A-NEXT:    ; use a[0:1]4928; GFX90A-NEXT:    ;;#ASMEND4929; GFX90A-NEXT:    s_setpc_b64 s[30:31]4930;4931; GFX950-LABEL: global_atomic_and_i64_ret_a_a:4932; GFX950:       ; %bb.0:4933; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4934; GFX950-NEXT:    ;;#ASMSTART4935; GFX950-NEXT:    ; def a[0:1]4936; GFX950-NEXT:    ;;#ASMEND4937; GFX950-NEXT:    s_nop 04938; GFX950-NEXT:    v_accvgpr_read_b32 v3, a14939; GFX950-NEXT:    v_accvgpr_read_b32 v2, a04940; GFX950-NEXT:    global_atomic_and_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc04941; GFX950-NEXT:    s_waitcnt vmcnt(0)4942; GFX950-NEXT:    v_accvgpr_write_b32 a0, v04943; GFX950-NEXT:    v_accvgpr_write_b32 a1, v14944; GFX950-NEXT:    ;;#ASMSTART4945; GFX950-NEXT:    ; use a[0:1]4946; GFX950-NEXT:    ;;#ASMEND4947; GFX950-NEXT:    s_setpc_b64 s[30:31]4948  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 104949  %data = call i64 asm "; def $0", "=a"()4950  %result = atomicrmw and ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04951  call void asm "; use $0", "a"(i64 %result)4952  ret void4953}4954 4955define void @global_atomic_and_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {4956; GFX90A-LABEL: global_atomic_and_i64_ret_av_av:4957; GFX90A:       ; %bb.0:4958; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4959; GFX90A-NEXT:    ;;#ASMSTART4960; GFX90A-NEXT:    ; def v[2:3]4961; GFX90A-NEXT:    ;;#ASMEND4962; GFX90A-NEXT:    global_atomic_and_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc4963; GFX90A-NEXT:    s_waitcnt vmcnt(0)4964; GFX90A-NEXT:    ;;#ASMSTART4965; GFX90A-NEXT:    ; use v[0:1]4966; GFX90A-NEXT:    ;;#ASMEND4967; GFX90A-NEXT:    s_setpc_b64 s[30:31]4968;4969; GFX950-LABEL: global_atomic_and_i64_ret_av_av:4970; GFX950:       ; %bb.0:4971; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4972; GFX950-NEXT:    ;;#ASMSTART4973; GFX950-NEXT:    ; def v[2:3]4974; GFX950-NEXT:    ;;#ASMEND4975; GFX950-NEXT:    global_atomic_and_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc04976; GFX950-NEXT:    s_waitcnt vmcnt(0)4977; GFX950-NEXT:    ;;#ASMSTART4978; GFX950-NEXT:    ; use v[0:1]4979; GFX950-NEXT:    ;;#ASMEND4980; GFX950-NEXT:    s_setpc_b64 s[30:31]4981  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 104982  %data = call i64 asm "; def $0", "=^VA"()4983  %result = atomicrmw and ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !04984  call void asm "; use $0", "^VA"(i64 %result)4985  ret void4986}4987 4988define void @global_atomic_nand_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {4989; GFX90A-LABEL: global_atomic_nand_i64_ret_a_a:4990; GFX90A:       ; %bb.0:4991; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4992; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:804993; GFX90A-NEXT:    ;;#ASMSTART4994; GFX90A-NEXT:    ; def a[0:1]4995; GFX90A-NEXT:    ;;#ASMEND4996; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a14997; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a04998; GFX90A-NEXT:    s_mov_b64 s[4:5], 04999; GFX90A-NEXT:  .LBB95_1: ; %atomicrmw.start5000; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=15001; GFX90A-NEXT:    s_waitcnt vmcnt(0)5002; GFX90A-NEXT:    v_and_b32_e32 v2, v5, v75003; GFX90A-NEXT:    v_and_b32_e32 v8, v4, v65004; GFX90A-NEXT:    v_not_b32_e32 v3, v25005; GFX90A-NEXT:    v_not_b32_e32 v2, v85006; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc5007; GFX90A-NEXT:    s_waitcnt vmcnt(0)5008; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5009; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5010; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]5011; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]5012; GFX90A-NEXT:    s_cbranch_execnz .LBB95_15013; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end5014; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]5015; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v25016; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v35017; GFX90A-NEXT:    ;;#ASMSTART5018; GFX90A-NEXT:    ; use a[0:1]5019; GFX90A-NEXT:    ;;#ASMEND5020; GFX90A-NEXT:    s_setpc_b64 s[30:31]5021;5022; GFX950-LABEL: global_atomic_nand_i64_ret_a_a:5023; GFX950:       ; %bb.0:5024; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5025; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805026; GFX950-NEXT:    ;;#ASMSTART5027; GFX950-NEXT:    ; def a[0:1]5028; GFX950-NEXT:    ;;#ASMEND5029; GFX950-NEXT:    s_mov_b64 s[0:1], 05030; GFX950-NEXT:    v_accvgpr_read_b32 v7, a15031; GFX950-NEXT:    v_accvgpr_read_b32 v6, a05032; GFX950-NEXT:  .LBB95_1: ; %atomicrmw.start5033; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=15034; GFX950-NEXT:    s_waitcnt vmcnt(0)5035; GFX950-NEXT:    v_and_b32_e32 v2, v5, v75036; GFX950-NEXT:    v_and_b32_e32 v8, v4, v65037; GFX950-NEXT:    v_not_b32_e32 v3, v25038; GFX950-NEXT:    v_not_b32_e32 v2, v85039; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc05040; GFX950-NEXT:    s_waitcnt vmcnt(0)5041; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5042; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5043; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]5044; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]5045; GFX950-NEXT:    s_cbranch_execnz .LBB95_15046; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end5047; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]5048; GFX950-NEXT:    v_accvgpr_write_b32 a0, v25049; GFX950-NEXT:    v_accvgpr_write_b32 a1, v35050; GFX950-NEXT:    ;;#ASMSTART5051; GFX950-NEXT:    ; use a[0:1]5052; GFX950-NEXT:    ;;#ASMEND5053; GFX950-NEXT:    s_setpc_b64 s[30:31]5054  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105055  %data = call i64 asm "; def $0", "=a"()5056  %result = atomicrmw nand ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05057  call void asm "; use $0", "a"(i64 %result)5058  ret void5059}5060 5061define void @global_atomic_nand_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5062; GFX90A-LABEL: global_atomic_nand_i64_ret_av_av:5063; GFX90A:       ; %bb.0:5064; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5065; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805066; GFX90A-NEXT:    s_mov_b64 s[4:5], 05067; GFX90A-NEXT:    ;;#ASMSTART5068; GFX90A-NEXT:    ; def v[6:7]5069; GFX90A-NEXT:    ;;#ASMEND5070; GFX90A-NEXT:  .LBB96_1: ; %atomicrmw.start5071; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=15072; GFX90A-NEXT:    s_waitcnt vmcnt(0)5073; GFX90A-NEXT:    v_and_b32_e32 v2, v5, v75074; GFX90A-NEXT:    v_and_b32_e32 v8, v4, v65075; GFX90A-NEXT:    v_not_b32_e32 v3, v25076; GFX90A-NEXT:    v_not_b32_e32 v2, v85077; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc5078; GFX90A-NEXT:    s_waitcnt vmcnt(0)5079; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5080; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5081; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]5082; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]5083; GFX90A-NEXT:    s_cbranch_execnz .LBB96_15084; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end5085; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]5086; GFX90A-NEXT:    ;;#ASMSTART5087; GFX90A-NEXT:    ; use v[2:3]5088; GFX90A-NEXT:    ;;#ASMEND5089; GFX90A-NEXT:    s_setpc_b64 s[30:31]5090;5091; GFX950-LABEL: global_atomic_nand_i64_ret_av_av:5092; GFX950:       ; %bb.0:5093; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5094; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805095; GFX950-NEXT:    s_mov_b64 s[0:1], 05096; GFX950-NEXT:    ;;#ASMSTART5097; GFX950-NEXT:    ; def v[6:7]5098; GFX950-NEXT:    ;;#ASMEND5099; GFX950-NEXT:  .LBB96_1: ; %atomicrmw.start5100; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=15101; GFX950-NEXT:    s_waitcnt vmcnt(0)5102; GFX950-NEXT:    v_and_b32_e32 v2, v5, v75103; GFX950-NEXT:    v_and_b32_e32 v8, v4, v65104; GFX950-NEXT:    v_not_b32_e32 v3, v25105; GFX950-NEXT:    v_not_b32_e32 v2, v85106; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc05107; GFX950-NEXT:    s_waitcnt vmcnt(0)5108; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5109; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5110; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]5111; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]5112; GFX950-NEXT:    s_cbranch_execnz .LBB96_15113; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end5114; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]5115; GFX950-NEXT:    ;;#ASMSTART5116; GFX950-NEXT:    ; use v[2:3]5117; GFX950-NEXT:    ;;#ASMEND5118; GFX950-NEXT:    s_setpc_b64 s[30:31]5119  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105120  %data = call i64 asm "; def $0", "=^VA"()5121  %result = atomicrmw nand ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05122  call void asm "; use $0", "^VA"(i64 %result)5123  ret void5124}5125 5126define void @global_atomic_or_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5127; GFX90A-LABEL: global_atomic_or_i64_ret_a_a:5128; GFX90A:       ; %bb.0:5129; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5130; GFX90A-NEXT:    ;;#ASMSTART5131; GFX90A-NEXT:    ; def a[0:1]5132; GFX90A-NEXT:    ;;#ASMEND5133; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a15134; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05135; GFX90A-NEXT:    global_atomic_or_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5136; GFX90A-NEXT:    s_waitcnt vmcnt(0)5137; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05138; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v15139; GFX90A-NEXT:    ;;#ASMSTART5140; GFX90A-NEXT:    ; use a[0:1]5141; GFX90A-NEXT:    ;;#ASMEND5142; GFX90A-NEXT:    s_setpc_b64 s[30:31]5143;5144; GFX950-LABEL: global_atomic_or_i64_ret_a_a:5145; GFX950:       ; %bb.0:5146; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5147; GFX950-NEXT:    ;;#ASMSTART5148; GFX950-NEXT:    ; def a[0:1]5149; GFX950-NEXT:    ;;#ASMEND5150; GFX950-NEXT:    s_nop 05151; GFX950-NEXT:    v_accvgpr_read_b32 v3, a15152; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05153; GFX950-NEXT:    global_atomic_or_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05154; GFX950-NEXT:    s_waitcnt vmcnt(0)5155; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05156; GFX950-NEXT:    v_accvgpr_write_b32 a1, v15157; GFX950-NEXT:    ;;#ASMSTART5158; GFX950-NEXT:    ; use a[0:1]5159; GFX950-NEXT:    ;;#ASMEND5160; GFX950-NEXT:    s_setpc_b64 s[30:31]5161  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105162  %data = call i64 asm "; def $0", "=a"()5163  %result = atomicrmw or ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05164  call void asm "; use $0", "a"(i64 %result)5165  ret void5166}5167 5168define void @global_atomic_or_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5169; GFX90A-LABEL: global_atomic_or_i64_ret_av_av:5170; GFX90A:       ; %bb.0:5171; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5172; GFX90A-NEXT:    ;;#ASMSTART5173; GFX90A-NEXT:    ; def v[2:3]5174; GFX90A-NEXT:    ;;#ASMEND5175; GFX90A-NEXT:    global_atomic_or_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5176; GFX90A-NEXT:    s_waitcnt vmcnt(0)5177; GFX90A-NEXT:    ;;#ASMSTART5178; GFX90A-NEXT:    ; use v[0:1]5179; GFX90A-NEXT:    ;;#ASMEND5180; GFX90A-NEXT:    s_setpc_b64 s[30:31]5181;5182; GFX950-LABEL: global_atomic_or_i64_ret_av_av:5183; GFX950:       ; %bb.0:5184; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5185; GFX950-NEXT:    ;;#ASMSTART5186; GFX950-NEXT:    ; def v[2:3]5187; GFX950-NEXT:    ;;#ASMEND5188; GFX950-NEXT:    global_atomic_or_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05189; GFX950-NEXT:    s_waitcnt vmcnt(0)5190; GFX950-NEXT:    ;;#ASMSTART5191; GFX950-NEXT:    ; use v[0:1]5192; GFX950-NEXT:    ;;#ASMEND5193; GFX950-NEXT:    s_setpc_b64 s[30:31]5194  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105195  %data = call i64 asm "; def $0", "=^VA"()5196  %result = atomicrmw or ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05197  call void asm "; use $0", "^VA"(i64 %result)5198  ret void5199}5200 5201define void @global_atomic_max_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5202; GFX90A-LABEL: global_atomic_max_i64_ret_a_a:5203; GFX90A:       ; %bb.0:5204; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5205; GFX90A-NEXT:    ;;#ASMSTART5206; GFX90A-NEXT:    ; def a[0:1]5207; GFX90A-NEXT:    ;;#ASMEND5208; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a15209; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05210; GFX90A-NEXT:    global_atomic_smax_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5211; GFX90A-NEXT:    s_waitcnt vmcnt(0)5212; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05213; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v15214; GFX90A-NEXT:    ;;#ASMSTART5215; GFX90A-NEXT:    ; use a[0:1]5216; GFX90A-NEXT:    ;;#ASMEND5217; GFX90A-NEXT:    s_setpc_b64 s[30:31]5218;5219; GFX950-LABEL: global_atomic_max_i64_ret_a_a:5220; GFX950:       ; %bb.0:5221; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5222; GFX950-NEXT:    ;;#ASMSTART5223; GFX950-NEXT:    ; def a[0:1]5224; GFX950-NEXT:    ;;#ASMEND5225; GFX950-NEXT:    s_nop 05226; GFX950-NEXT:    v_accvgpr_read_b32 v3, a15227; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05228; GFX950-NEXT:    global_atomic_smax_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05229; GFX950-NEXT:    s_waitcnt vmcnt(0)5230; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05231; GFX950-NEXT:    v_accvgpr_write_b32 a1, v15232; GFX950-NEXT:    ;;#ASMSTART5233; GFX950-NEXT:    ; use a[0:1]5234; GFX950-NEXT:    ;;#ASMEND5235; GFX950-NEXT:    s_setpc_b64 s[30:31]5236  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105237  %data = call i64 asm "; def $0", "=a"()5238  %result = atomicrmw max ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05239  call void asm "; use $0", "a"(i64 %result)5240  ret void5241}5242 5243define void @global_atomic_max_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5244; GFX90A-LABEL: global_atomic_max_i64_ret_av_av:5245; GFX90A:       ; %bb.0:5246; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5247; GFX90A-NEXT:    ;;#ASMSTART5248; GFX90A-NEXT:    ; def v[2:3]5249; GFX90A-NEXT:    ;;#ASMEND5250; GFX90A-NEXT:    global_atomic_smax_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5251; GFX90A-NEXT:    s_waitcnt vmcnt(0)5252; GFX90A-NEXT:    ;;#ASMSTART5253; GFX90A-NEXT:    ; use v[0:1]5254; GFX90A-NEXT:    ;;#ASMEND5255; GFX90A-NEXT:    s_setpc_b64 s[30:31]5256;5257; GFX950-LABEL: global_atomic_max_i64_ret_av_av:5258; GFX950:       ; %bb.0:5259; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5260; GFX950-NEXT:    ;;#ASMSTART5261; GFX950-NEXT:    ; def v[2:3]5262; GFX950-NEXT:    ;;#ASMEND5263; GFX950-NEXT:    global_atomic_smax_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05264; GFX950-NEXT:    s_waitcnt vmcnt(0)5265; GFX950-NEXT:    ;;#ASMSTART5266; GFX950-NEXT:    ; use v[0:1]5267; GFX950-NEXT:    ;;#ASMEND5268; GFX950-NEXT:    s_setpc_b64 s[30:31]5269  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105270  %data = call i64 asm "; def $0", "=^VA"()5271  %result = atomicrmw max ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05272  call void asm "; use $0", "^VA"(i64 %result)5273  ret void5274}5275 5276define void @global_atomic_min_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5277; GFX90A-LABEL: global_atomic_min_i64_ret_a_a:5278; GFX90A:       ; %bb.0:5279; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5280; GFX90A-NEXT:    ;;#ASMSTART5281; GFX90A-NEXT:    ; def a[0:1]5282; GFX90A-NEXT:    ;;#ASMEND5283; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a15284; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05285; GFX90A-NEXT:    global_atomic_smin_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5286; GFX90A-NEXT:    s_waitcnt vmcnt(0)5287; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05288; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v15289; GFX90A-NEXT:    ;;#ASMSTART5290; GFX90A-NEXT:    ; use a[0:1]5291; GFX90A-NEXT:    ;;#ASMEND5292; GFX90A-NEXT:    s_setpc_b64 s[30:31]5293;5294; GFX950-LABEL: global_atomic_min_i64_ret_a_a:5295; GFX950:       ; %bb.0:5296; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5297; GFX950-NEXT:    ;;#ASMSTART5298; GFX950-NEXT:    ; def a[0:1]5299; GFX950-NEXT:    ;;#ASMEND5300; GFX950-NEXT:    s_nop 05301; GFX950-NEXT:    v_accvgpr_read_b32 v3, a15302; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05303; GFX950-NEXT:    global_atomic_smin_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05304; GFX950-NEXT:    s_waitcnt vmcnt(0)5305; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05306; GFX950-NEXT:    v_accvgpr_write_b32 a1, v15307; GFX950-NEXT:    ;;#ASMSTART5308; GFX950-NEXT:    ; use a[0:1]5309; GFX950-NEXT:    ;;#ASMEND5310; GFX950-NEXT:    s_setpc_b64 s[30:31]5311  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105312  %data = call i64 asm "; def $0", "=a"()5313  %result = atomicrmw min ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05314  call void asm "; use $0", "a"(i64 %result)5315  ret void5316}5317 5318define void @global_atomic_min_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5319; GFX90A-LABEL: global_atomic_min_i64_ret_av_av:5320; GFX90A:       ; %bb.0:5321; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5322; GFX90A-NEXT:    ;;#ASMSTART5323; GFX90A-NEXT:    ; def v[2:3]5324; GFX90A-NEXT:    ;;#ASMEND5325; GFX90A-NEXT:    global_atomic_smin_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5326; GFX90A-NEXT:    s_waitcnt vmcnt(0)5327; GFX90A-NEXT:    ;;#ASMSTART5328; GFX90A-NEXT:    ; use v[0:1]5329; GFX90A-NEXT:    ;;#ASMEND5330; GFX90A-NEXT:    s_setpc_b64 s[30:31]5331;5332; GFX950-LABEL: global_atomic_min_i64_ret_av_av:5333; GFX950:       ; %bb.0:5334; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5335; GFX950-NEXT:    ;;#ASMSTART5336; GFX950-NEXT:    ; def v[2:3]5337; GFX950-NEXT:    ;;#ASMEND5338; GFX950-NEXT:    global_atomic_smin_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05339; GFX950-NEXT:    s_waitcnt vmcnt(0)5340; GFX950-NEXT:    ;;#ASMSTART5341; GFX950-NEXT:    ; use v[0:1]5342; GFX950-NEXT:    ;;#ASMEND5343; GFX950-NEXT:    s_setpc_b64 s[30:31]5344  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105345  %data = call i64 asm "; def $0", "=^VA"()5346  %result = atomicrmw min ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05347  call void asm "; use $0", "^VA"(i64 %result)5348  ret void5349}5350 5351define void @global_atomic_umax_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5352; GFX90A-LABEL: global_atomic_umax_i64_ret_a_a:5353; GFX90A:       ; %bb.0:5354; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5355; GFX90A-NEXT:    ;;#ASMSTART5356; GFX90A-NEXT:    ; def a[0:1]5357; GFX90A-NEXT:    ;;#ASMEND5358; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a15359; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05360; GFX90A-NEXT:    global_atomic_umax_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5361; GFX90A-NEXT:    s_waitcnt vmcnt(0)5362; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05363; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v15364; GFX90A-NEXT:    ;;#ASMSTART5365; GFX90A-NEXT:    ; use a[0:1]5366; GFX90A-NEXT:    ;;#ASMEND5367; GFX90A-NEXT:    s_setpc_b64 s[30:31]5368;5369; GFX950-LABEL: global_atomic_umax_i64_ret_a_a:5370; GFX950:       ; %bb.0:5371; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5372; GFX950-NEXT:    ;;#ASMSTART5373; GFX950-NEXT:    ; def a[0:1]5374; GFX950-NEXT:    ;;#ASMEND5375; GFX950-NEXT:    s_nop 05376; GFX950-NEXT:    v_accvgpr_read_b32 v3, a15377; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05378; GFX950-NEXT:    global_atomic_umax_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05379; GFX950-NEXT:    s_waitcnt vmcnt(0)5380; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05381; GFX950-NEXT:    v_accvgpr_write_b32 a1, v15382; GFX950-NEXT:    ;;#ASMSTART5383; GFX950-NEXT:    ; use a[0:1]5384; GFX950-NEXT:    ;;#ASMEND5385; GFX950-NEXT:    s_setpc_b64 s[30:31]5386  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105387  %data = call i64 asm "; def $0", "=a"()5388  %result = atomicrmw umax ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05389  call void asm "; use $0", "a"(i64 %result)5390  ret void5391}5392 5393define void @global_atomic_umax_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5394; GFX90A-LABEL: global_atomic_umax_i64_ret_av_av:5395; GFX90A:       ; %bb.0:5396; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5397; GFX90A-NEXT:    ;;#ASMSTART5398; GFX90A-NEXT:    ; def v[2:3]5399; GFX90A-NEXT:    ;;#ASMEND5400; GFX90A-NEXT:    global_atomic_umax_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5401; GFX90A-NEXT:    s_waitcnt vmcnt(0)5402; GFX90A-NEXT:    ;;#ASMSTART5403; GFX90A-NEXT:    ; use v[0:1]5404; GFX90A-NEXT:    ;;#ASMEND5405; GFX90A-NEXT:    s_setpc_b64 s[30:31]5406;5407; GFX950-LABEL: global_atomic_umax_i64_ret_av_av:5408; GFX950:       ; %bb.0:5409; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5410; GFX950-NEXT:    ;;#ASMSTART5411; GFX950-NEXT:    ; def v[2:3]5412; GFX950-NEXT:    ;;#ASMEND5413; GFX950-NEXT:    global_atomic_umax_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05414; GFX950-NEXT:    s_waitcnt vmcnt(0)5415; GFX950-NEXT:    ;;#ASMSTART5416; GFX950-NEXT:    ; use v[0:1]5417; GFX950-NEXT:    ;;#ASMEND5418; GFX950-NEXT:    s_setpc_b64 s[30:31]5419  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105420  %data = call i64 asm "; def $0", "=^VA"()5421  %result = atomicrmw umax ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05422  call void asm "; use $0", "^VA"(i64 %result)5423  ret void5424}5425 5426define void @global_atomic_umin_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5427; GFX90A-LABEL: global_atomic_umin_i64_ret_a_a:5428; GFX90A:       ; %bb.0:5429; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5430; GFX90A-NEXT:    ;;#ASMSTART5431; GFX90A-NEXT:    ; def a[0:1]5432; GFX90A-NEXT:    ;;#ASMEND5433; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a15434; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05435; GFX90A-NEXT:    global_atomic_umin_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5436; GFX90A-NEXT:    s_waitcnt vmcnt(0)5437; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05438; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v15439; GFX90A-NEXT:    ;;#ASMSTART5440; GFX90A-NEXT:    ; use a[0:1]5441; GFX90A-NEXT:    ;;#ASMEND5442; GFX90A-NEXT:    s_setpc_b64 s[30:31]5443;5444; GFX950-LABEL: global_atomic_umin_i64_ret_a_a:5445; GFX950:       ; %bb.0:5446; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5447; GFX950-NEXT:    ;;#ASMSTART5448; GFX950-NEXT:    ; def a[0:1]5449; GFX950-NEXT:    ;;#ASMEND5450; GFX950-NEXT:    s_nop 05451; GFX950-NEXT:    v_accvgpr_read_b32 v3, a15452; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05453; GFX950-NEXT:    global_atomic_umin_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05454; GFX950-NEXT:    s_waitcnt vmcnt(0)5455; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05456; GFX950-NEXT:    v_accvgpr_write_b32 a1, v15457; GFX950-NEXT:    ;;#ASMSTART5458; GFX950-NEXT:    ; use a[0:1]5459; GFX950-NEXT:    ;;#ASMEND5460; GFX950-NEXT:    s_setpc_b64 s[30:31]5461  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105462  %data = call i64 asm "; def $0", "=a"()5463  %result = atomicrmw umin ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05464  call void asm "; use $0", "a"(i64 %result)5465  ret void5466}5467 5468define void @global_atomic_umin_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5469; GFX90A-LABEL: global_atomic_umin_i64_ret_av_av:5470; GFX90A:       ; %bb.0:5471; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5472; GFX90A-NEXT:    ;;#ASMSTART5473; GFX90A-NEXT:    ; def v[2:3]5474; GFX90A-NEXT:    ;;#ASMEND5475; GFX90A-NEXT:    global_atomic_umin_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5476; GFX90A-NEXT:    s_waitcnt vmcnt(0)5477; GFX90A-NEXT:    ;;#ASMSTART5478; GFX90A-NEXT:    ; use v[0:1]5479; GFX90A-NEXT:    ;;#ASMEND5480; GFX90A-NEXT:    s_setpc_b64 s[30:31]5481;5482; GFX950-LABEL: global_atomic_umin_i64_ret_av_av:5483; GFX950:       ; %bb.0:5484; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5485; GFX950-NEXT:    ;;#ASMSTART5486; GFX950-NEXT:    ; def v[2:3]5487; GFX950-NEXT:    ;;#ASMEND5488; GFX950-NEXT:    global_atomic_umin_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05489; GFX950-NEXT:    s_waitcnt vmcnt(0)5490; GFX950-NEXT:    ;;#ASMSTART5491; GFX950-NEXT:    ; use v[0:1]5492; GFX950-NEXT:    ;;#ASMEND5493; GFX950-NEXT:    s_setpc_b64 s[30:31]5494  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105495  %data = call i64 asm "; def $0", "=^VA"()5496  %result = atomicrmw umin ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05497  call void asm "; use $0", "^VA"(i64 %result)5498  ret void5499}5500 5501define void @global_atomic_uinc_wrap_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5502; GFX90A-LABEL: global_atomic_uinc_wrap_i64_ret_a_a:5503; GFX90A:       ; %bb.0:5504; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5505; GFX90A-NEXT:    ;;#ASMSTART5506; GFX90A-NEXT:    ; def a[0:1]5507; GFX90A-NEXT:    ;;#ASMEND5508; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a15509; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05510; GFX90A-NEXT:    global_atomic_inc_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5511; GFX90A-NEXT:    s_waitcnt vmcnt(0)5512; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05513; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v15514; GFX90A-NEXT:    ;;#ASMSTART5515; GFX90A-NEXT:    ; use a[0:1]5516; GFX90A-NEXT:    ;;#ASMEND5517; GFX90A-NEXT:    s_setpc_b64 s[30:31]5518;5519; GFX950-LABEL: global_atomic_uinc_wrap_i64_ret_a_a:5520; GFX950:       ; %bb.0:5521; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5522; GFX950-NEXT:    ;;#ASMSTART5523; GFX950-NEXT:    ; def a[0:1]5524; GFX950-NEXT:    ;;#ASMEND5525; GFX950-NEXT:    s_nop 05526; GFX950-NEXT:    v_accvgpr_read_b32 v3, a15527; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05528; GFX950-NEXT:    global_atomic_inc_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05529; GFX950-NEXT:    s_waitcnt vmcnt(0)5530; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05531; GFX950-NEXT:    v_accvgpr_write_b32 a1, v15532; GFX950-NEXT:    ;;#ASMSTART5533; GFX950-NEXT:    ; use a[0:1]5534; GFX950-NEXT:    ;;#ASMEND5535; GFX950-NEXT:    s_setpc_b64 s[30:31]5536  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105537  %data = call i64 asm "; def $0", "=a"()5538  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05539  call void asm "; use $0", "a"(i64 %result)5540  ret void5541}5542 5543define void @global_atomic_uinc_wrap_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5544; GFX90A-LABEL: global_atomic_uinc_wrap_i64_ret_av_av:5545; GFX90A:       ; %bb.0:5546; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5547; GFX90A-NEXT:    ;;#ASMSTART5548; GFX90A-NEXT:    ; def v[2:3]5549; GFX90A-NEXT:    ;;#ASMEND5550; GFX90A-NEXT:    global_atomic_inc_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5551; GFX90A-NEXT:    s_waitcnt vmcnt(0)5552; GFX90A-NEXT:    ;;#ASMSTART5553; GFX90A-NEXT:    ; use v[0:1]5554; GFX90A-NEXT:    ;;#ASMEND5555; GFX90A-NEXT:    s_setpc_b64 s[30:31]5556;5557; GFX950-LABEL: global_atomic_uinc_wrap_i64_ret_av_av:5558; GFX950:       ; %bb.0:5559; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5560; GFX950-NEXT:    ;;#ASMSTART5561; GFX950-NEXT:    ; def v[2:3]5562; GFX950-NEXT:    ;;#ASMEND5563; GFX950-NEXT:    global_atomic_inc_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05564; GFX950-NEXT:    s_waitcnt vmcnt(0)5565; GFX950-NEXT:    ;;#ASMSTART5566; GFX950-NEXT:    ; use v[0:1]5567; GFX950-NEXT:    ;;#ASMEND5568; GFX950-NEXT:    s_setpc_b64 s[30:31]5569  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105570  %data = call i64 asm "; def $0", "=^VA"()5571  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05572  call void asm "; use $0", "^VA"(i64 %result)5573  ret void5574}5575 5576define void @global_atomic_udec_wrap_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5577; GFX90A-LABEL: global_atomic_udec_wrap_i64_ret_a_a:5578; GFX90A:       ; %bb.0:5579; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5580; GFX90A-NEXT:    ;;#ASMSTART5581; GFX90A-NEXT:    ; def a[0:1]5582; GFX90A-NEXT:    ;;#ASMEND5583; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a15584; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05585; GFX90A-NEXT:    global_atomic_dec_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5586; GFX90A-NEXT:    s_waitcnt vmcnt(0)5587; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05588; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v15589; GFX90A-NEXT:    ;;#ASMSTART5590; GFX90A-NEXT:    ; use a[0:1]5591; GFX90A-NEXT:    ;;#ASMEND5592; GFX90A-NEXT:    s_setpc_b64 s[30:31]5593;5594; GFX950-LABEL: global_atomic_udec_wrap_i64_ret_a_a:5595; GFX950:       ; %bb.0:5596; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5597; GFX950-NEXT:    ;;#ASMSTART5598; GFX950-NEXT:    ; def a[0:1]5599; GFX950-NEXT:    ;;#ASMEND5600; GFX950-NEXT:    s_nop 05601; GFX950-NEXT:    v_accvgpr_read_b32 v3, a15602; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05603; GFX950-NEXT:    global_atomic_dec_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05604; GFX950-NEXT:    s_waitcnt vmcnt(0)5605; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05606; GFX950-NEXT:    v_accvgpr_write_b32 a1, v15607; GFX950-NEXT:    ;;#ASMSTART5608; GFX950-NEXT:    ; use a[0:1]5609; GFX950-NEXT:    ;;#ASMEND5610; GFX950-NEXT:    s_setpc_b64 s[30:31]5611  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105612  %data = call i64 asm "; def $0", "=a"()5613  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05614  call void asm "; use $0", "a"(i64 %result)5615  ret void5616}5617 5618define void @global_atomic_udec_wrap_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5619; GFX90A-LABEL: global_atomic_udec_wrap_i64_ret_av_av:5620; GFX90A:       ; %bb.0:5621; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5622; GFX90A-NEXT:    ;;#ASMSTART5623; GFX90A-NEXT:    ; def v[2:3]5624; GFX90A-NEXT:    ;;#ASMEND5625; GFX90A-NEXT:    global_atomic_dec_x2 v[0:1], v[0:1], v[2:3], off offset:80 glc5626; GFX90A-NEXT:    s_waitcnt vmcnt(0)5627; GFX90A-NEXT:    ;;#ASMSTART5628; GFX90A-NEXT:    ; use v[0:1]5629; GFX90A-NEXT:    ;;#ASMEND5630; GFX90A-NEXT:    s_setpc_b64 s[30:31]5631;5632; GFX950-LABEL: global_atomic_udec_wrap_i64_ret_av_av:5633; GFX950:       ; %bb.0:5634; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5635; GFX950-NEXT:    ;;#ASMSTART5636; GFX950-NEXT:    ; def v[2:3]5637; GFX950-NEXT:    ;;#ASMEND5638; GFX950-NEXT:    global_atomic_dec_x2 v[0:1], v[0:1], v[2:3], off offset:80 sc05639; GFX950-NEXT:    s_waitcnt vmcnt(0)5640; GFX950-NEXT:    ;;#ASMSTART5641; GFX950-NEXT:    ; use v[0:1]5642; GFX950-NEXT:    ;;#ASMEND5643; GFX950-NEXT:    s_setpc_b64 s[30:31]5644  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105645  %data = call i64 asm "; def $0", "=^VA"()5646  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05647  call void asm "; use $0", "^VA"(i64 %result)5648  ret void5649}5650 5651define void @global_atomic_usub_cond_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5652; GFX90A-LABEL: global_atomic_usub_cond_i64_ret_a_a:5653; GFX90A:       ; %bb.0:5654; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5655; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805656; GFX90A-NEXT:    ;;#ASMSTART5657; GFX90A-NEXT:    ; def a[0:1]5658; GFX90A-NEXT:    ;;#ASMEND5659; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a15660; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a05661; GFX90A-NEXT:    s_mov_b64 s[4:5], 05662; GFX90A-NEXT:  .LBB111_1: ; %atomicrmw.start5663; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=15664; GFX90A-NEXT:    s_waitcnt vmcnt(0)5665; GFX90A-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65666; GFX90A-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5667; GFX90A-NEXT:    v_cmp_ge_u64_e32 vcc, v[4:5], v[6:7]5668; GFX90A-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc5669; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc5670; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc5671; GFX90A-NEXT:    s_waitcnt vmcnt(0)5672; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5673; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5674; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]5675; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]5676; GFX90A-NEXT:    s_cbranch_execnz .LBB111_15677; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end5678; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]5679; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v25680; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v35681; GFX90A-NEXT:    ;;#ASMSTART5682; GFX90A-NEXT:    ; use a[0:1]5683; GFX90A-NEXT:    ;;#ASMEND5684; GFX90A-NEXT:    s_setpc_b64 s[30:31]5685;5686; GFX950-LABEL: global_atomic_usub_cond_i64_ret_a_a:5687; GFX950:       ; %bb.0:5688; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5689; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805690; GFX950-NEXT:    ;;#ASMSTART5691; GFX950-NEXT:    ; def a[0:1]5692; GFX950-NEXT:    ;;#ASMEND5693; GFX950-NEXT:    s_mov_b64 s[0:1], 05694; GFX950-NEXT:    v_accvgpr_read_b32 v7, a15695; GFX950-NEXT:    v_accvgpr_read_b32 v6, a05696; GFX950-NEXT:  .LBB111_1: ; %atomicrmw.start5697; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=15698; GFX950-NEXT:    s_waitcnt vmcnt(0)5699; GFX950-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65700; GFX950-NEXT:    s_nop 15701; GFX950-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5702; GFX950-NEXT:    v_cmp_ge_u64_e32 vcc, v[4:5], v[6:7]5703; GFX950-NEXT:    s_nop 15704; GFX950-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc5705; GFX950-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc5706; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc05707; GFX950-NEXT:    s_waitcnt vmcnt(0)5708; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5709; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5710; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]5711; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]5712; GFX950-NEXT:    s_cbranch_execnz .LBB111_15713; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end5714; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]5715; GFX950-NEXT:    v_accvgpr_write_b32 a0, v25716; GFX950-NEXT:    v_accvgpr_write_b32 a1, v35717; GFX950-NEXT:    ;;#ASMSTART5718; GFX950-NEXT:    ; use a[0:1]5719; GFX950-NEXT:    ;;#ASMEND5720; GFX950-NEXT:    s_setpc_b64 s[30:31]5721  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105722  %data = call i64 asm "; def $0", "=a"()5723  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05724  call void asm "; use $0", "a"(i64 %result)5725  ret void5726}5727 5728define void @global_atomic_usub_cond_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5729; GFX90A-LABEL: global_atomic_usub_cond_i64_ret_av_av:5730; GFX90A:       ; %bb.0:5731; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5732; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805733; GFX90A-NEXT:    s_mov_b64 s[4:5], 05734; GFX90A-NEXT:    ;;#ASMSTART5735; GFX90A-NEXT:    ; def v[6:7]5736; GFX90A-NEXT:    ;;#ASMEND5737; GFX90A-NEXT:  .LBB112_1: ; %atomicrmw.start5738; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=15739; GFX90A-NEXT:    s_waitcnt vmcnt(0)5740; GFX90A-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65741; GFX90A-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5742; GFX90A-NEXT:    v_cmp_ge_u64_e32 vcc, v[4:5], v[6:7]5743; GFX90A-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc5744; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc5745; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc5746; GFX90A-NEXT:    s_waitcnt vmcnt(0)5747; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5748; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5749; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]5750; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]5751; GFX90A-NEXT:    s_cbranch_execnz .LBB112_15752; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end5753; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]5754; GFX90A-NEXT:    ;;#ASMSTART5755; GFX90A-NEXT:    ; use v[2:3]5756; GFX90A-NEXT:    ;;#ASMEND5757; GFX90A-NEXT:    s_setpc_b64 s[30:31]5758;5759; GFX950-LABEL: global_atomic_usub_cond_i64_ret_av_av:5760; GFX950:       ; %bb.0:5761; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5762; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805763; GFX950-NEXT:    s_mov_b64 s[0:1], 05764; GFX950-NEXT:    ;;#ASMSTART5765; GFX950-NEXT:    ; def v[6:7]5766; GFX950-NEXT:    ;;#ASMEND5767; GFX950-NEXT:  .LBB112_1: ; %atomicrmw.start5768; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=15769; GFX950-NEXT:    s_waitcnt vmcnt(0)5770; GFX950-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65771; GFX950-NEXT:    s_nop 15772; GFX950-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5773; GFX950-NEXT:    v_cmp_ge_u64_e32 vcc, v[4:5], v[6:7]5774; GFX950-NEXT:    s_nop 15775; GFX950-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc5776; GFX950-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc5777; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc05778; GFX950-NEXT:    s_waitcnt vmcnt(0)5779; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5780; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5781; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]5782; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]5783; GFX950-NEXT:    s_cbranch_execnz .LBB112_15784; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end5785; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]5786; GFX950-NEXT:    ;;#ASMSTART5787; GFX950-NEXT:    ; use v[2:3]5788; GFX950-NEXT:    ;;#ASMEND5789; GFX950-NEXT:    s_setpc_b64 s[30:31]5790  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105791  %data = call i64 asm "; def $0", "=^VA"()5792  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05793  call void asm "; use $0", "^VA"(i64 %result)5794  ret void5795}5796 5797define void @global_atomic_usub_sat_i64_ret_a_a(ptr addrspace(1) %ptr) #0 {5798; GFX90A-LABEL: global_atomic_usub_sat_i64_ret_a_a:5799; GFX90A:       ; %bb.0:5800; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5801; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805802; GFX90A-NEXT:    ;;#ASMSTART5803; GFX90A-NEXT:    ; def a[0:1]5804; GFX90A-NEXT:    ;;#ASMEND5805; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a15806; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a05807; GFX90A-NEXT:    s_mov_b64 s[4:5], 05808; GFX90A-NEXT:  .LBB113_1: ; %atomicrmw.start5809; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=15810; GFX90A-NEXT:    s_waitcnt vmcnt(0)5811; GFX90A-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65812; GFX90A-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5813; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc5814; GFX90A-NEXT:    v_cndmask_b32_e64 v3, v3, 0, vcc5815; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc5816; GFX90A-NEXT:    s_waitcnt vmcnt(0)5817; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5818; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5819; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]5820; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]5821; GFX90A-NEXT:    s_cbranch_execnz .LBB113_15822; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end5823; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]5824; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v25825; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v35826; GFX90A-NEXT:    ;;#ASMSTART5827; GFX90A-NEXT:    ; use a[0:1]5828; GFX90A-NEXT:    ;;#ASMEND5829; GFX90A-NEXT:    s_setpc_b64 s[30:31]5830;5831; GFX950-LABEL: global_atomic_usub_sat_i64_ret_a_a:5832; GFX950:       ; %bb.0:5833; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5834; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805835; GFX950-NEXT:    ;;#ASMSTART5836; GFX950-NEXT:    ; def a[0:1]5837; GFX950-NEXT:    ;;#ASMEND5838; GFX950-NEXT:    s_mov_b64 s[0:1], 05839; GFX950-NEXT:    v_accvgpr_read_b32 v7, a15840; GFX950-NEXT:    v_accvgpr_read_b32 v6, a05841; GFX950-NEXT:  .LBB113_1: ; %atomicrmw.start5842; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=15843; GFX950-NEXT:    s_waitcnt vmcnt(0)5844; GFX950-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65845; GFX950-NEXT:    s_nop 15846; GFX950-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5847; GFX950-NEXT:    s_nop 15848; GFX950-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc5849; GFX950-NEXT:    v_cndmask_b32_e64 v3, v3, 0, vcc5850; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc05851; GFX950-NEXT:    s_waitcnt vmcnt(0)5852; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5853; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5854; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]5855; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]5856; GFX950-NEXT:    s_cbranch_execnz .LBB113_15857; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end5858; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]5859; GFX950-NEXT:    v_accvgpr_write_b32 a0, v25860; GFX950-NEXT:    v_accvgpr_write_b32 a1, v35861; GFX950-NEXT:    ;;#ASMSTART5862; GFX950-NEXT:    ; use a[0:1]5863; GFX950-NEXT:    ;;#ASMEND5864; GFX950-NEXT:    s_setpc_b64 s[30:31]5865  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105866  %data = call i64 asm "; def $0", "=a"()5867  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05868  call void asm "; use $0", "a"(i64 %result)5869  ret void5870}5871 5872define void @global_atomic_usub_sat_i64_ret_av_av(ptr addrspace(1) %ptr) #0 {5873; GFX90A-LABEL: global_atomic_usub_sat_i64_ret_av_av:5874; GFX90A:       ; %bb.0:5875; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5876; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805877; GFX90A-NEXT:    s_mov_b64 s[4:5], 05878; GFX90A-NEXT:    ;;#ASMSTART5879; GFX90A-NEXT:    ; def v[6:7]5880; GFX90A-NEXT:    ;;#ASMEND5881; GFX90A-NEXT:  .LBB114_1: ; %atomicrmw.start5882; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=15883; GFX90A-NEXT:    s_waitcnt vmcnt(0)5884; GFX90A-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65885; GFX90A-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5886; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc5887; GFX90A-NEXT:    v_cndmask_b32_e64 v3, v3, 0, vcc5888; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc5889; GFX90A-NEXT:    s_waitcnt vmcnt(0)5890; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5891; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5892; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]5893; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]5894; GFX90A-NEXT:    s_cbranch_execnz .LBB114_15895; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end5896; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]5897; GFX90A-NEXT:    ;;#ASMSTART5898; GFX90A-NEXT:    ; use v[2:3]5899; GFX90A-NEXT:    ;;#ASMEND5900; GFX90A-NEXT:    s_setpc_b64 s[30:31]5901;5902; GFX950-LABEL: global_atomic_usub_sat_i64_ret_av_av:5903; GFX950:       ; %bb.0:5904; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5905; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:805906; GFX950-NEXT:    s_mov_b64 s[0:1], 05907; GFX950-NEXT:    ;;#ASMSTART5908; GFX950-NEXT:    ; def v[6:7]5909; GFX950-NEXT:    ;;#ASMEND5910; GFX950-NEXT:  .LBB114_1: ; %atomicrmw.start5911; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=15912; GFX950-NEXT:    s_waitcnt vmcnt(0)5913; GFX950-NEXT:    v_sub_co_u32_e32 v2, vcc, v4, v65914; GFX950-NEXT:    s_nop 15915; GFX950-NEXT:    v_subb_co_u32_e32 v3, vcc, v5, v7, vcc5916; GFX950-NEXT:    s_nop 15917; GFX950-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc5918; GFX950-NEXT:    v_cndmask_b32_e64 v3, v3, 0, vcc5919; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc05920; GFX950-NEXT:    s_waitcnt vmcnt(0)5921; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]5922; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5923; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]5924; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]5925; GFX950-NEXT:    s_cbranch_execnz .LBB114_15926; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end5927; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]5928; GFX950-NEXT:    ;;#ASMSTART5929; GFX950-NEXT:    ; use v[2:3]5930; GFX950-NEXT:    ;;#ASMEND5931; GFX950-NEXT:    s_setpc_b64 s[30:31]5932  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 105933  %data = call i64 asm "; def $0", "=^VA"()5934  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !05935  call void asm "; use $0", "^VA"(i64 %result)5936  ret void5937}5938 5939;---------------------------------------------------------------------5940; other atomics f32, with aa+av cases5941;---------------------------------------------------------------------5942 5943define void @global_atomic_fadd_f32_ret_a_a(ptr addrspace(1) %ptr) #0 {5944; GFX90A-LABEL: global_atomic_fadd_f32_ret_a_a:5945; GFX90A:       ; %bb.0:5946; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5947; GFX90A-NEXT:    ;;#ASMSTART5948; GFX90A-NEXT:    ; def a05949; GFX90A-NEXT:    ;;#ASMEND5950; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a05951; GFX90A-NEXT:    global_atomic_add_f32 v0, v[0:1], v2, off offset:40 glc5952; GFX90A-NEXT:    s_waitcnt vmcnt(0)5953; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v05954; GFX90A-NEXT:    ;;#ASMSTART5955; GFX90A-NEXT:    ; use a05956; GFX90A-NEXT:    ;;#ASMEND5957; GFX90A-NEXT:    s_setpc_b64 s[30:31]5958;5959; GFX950-LABEL: global_atomic_fadd_f32_ret_a_a:5960; GFX950:       ; %bb.0:5961; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5962; GFX950-NEXT:    ;;#ASMSTART5963; GFX950-NEXT:    ; def a05964; GFX950-NEXT:    ;;#ASMEND5965; GFX950-NEXT:    s_nop 05966; GFX950-NEXT:    v_accvgpr_read_b32 v2, a05967; GFX950-NEXT:    global_atomic_add_f32 v0, v[0:1], v2, off offset:40 sc05968; GFX950-NEXT:    s_waitcnt vmcnt(0)5969; GFX950-NEXT:    v_accvgpr_write_b32 a0, v05970; GFX950-NEXT:    ;;#ASMSTART5971; GFX950-NEXT:    ; use a05972; GFX950-NEXT:    ;;#ASMEND5973; GFX950-NEXT:    s_setpc_b64 s[30:31]5974  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 105975  %data = call float asm "; def $0", "=a"()5976  %result = atomicrmw fadd ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !05977  call void asm "; use $0", "a"(float %result)5978  ret void5979}5980 5981define void @global_atomic_fadd_f32_ret_av_av(ptr addrspace(1) %ptr) #0 {5982; GFX90A-LABEL: global_atomic_fadd_f32_ret_av_av:5983; GFX90A:       ; %bb.0:5984; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5985; GFX90A-NEXT:    ;;#ASMSTART5986; GFX90A-NEXT:    ; def v25987; GFX90A-NEXT:    ;;#ASMEND5988; GFX90A-NEXT:    global_atomic_add_f32 v0, v[0:1], v2, off offset:40 glc5989; GFX90A-NEXT:    s_waitcnt vmcnt(0)5990; GFX90A-NEXT:    ;;#ASMSTART5991; GFX90A-NEXT:    ; use v05992; GFX90A-NEXT:    ;;#ASMEND5993; GFX90A-NEXT:    s_setpc_b64 s[30:31]5994;5995; GFX950-LABEL: global_atomic_fadd_f32_ret_av_av:5996; GFX950:       ; %bb.0:5997; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5998; GFX950-NEXT:    ;;#ASMSTART5999; GFX950-NEXT:    ; def v26000; GFX950-NEXT:    ;;#ASMEND6001; GFX950-NEXT:    global_atomic_add_f32 v0, v[0:1], v2, off offset:40 sc06002; GFX950-NEXT:    s_waitcnt vmcnt(0)6003; GFX950-NEXT:    ;;#ASMSTART6004; GFX950-NEXT:    ; use v06005; GFX950-NEXT:    ;;#ASMEND6006; GFX950-NEXT:    s_setpc_b64 s[30:31]6007  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106008  %data = call float asm "; def $0", "=^VA"()6009  %result = atomicrmw fadd ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06010  call void asm "; use $0", "^VA"(float %result)6011  ret void6012}6013 6014define void @global_atomic_fsub_f32_ret_a_a(ptr addrspace(1) %ptr) #0 {6015; GFX90A-LABEL: global_atomic_fsub_f32_ret_a_a:6016; GFX90A:       ; %bb.0:6017; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6018; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406019; GFX90A-NEXT:    ;;#ASMSTART6020; GFX90A-NEXT:    ; def a06021; GFX90A-NEXT:    ;;#ASMEND6022; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a06023; GFX90A-NEXT:    s_mov_b64 s[4:5], 06024; GFX90A-NEXT:  .LBB117_1: ; %atomicrmw.start6025; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16026; GFX90A-NEXT:    s_waitcnt vmcnt(0)6027; GFX90A-NEXT:    v_sub_f32_e32 v2, v3, v46028; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6029; GFX90A-NEXT:    s_waitcnt vmcnt(0)6030; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36031; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6032; GFX90A-NEXT:    v_mov_b32_e32 v3, v26033; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6034; GFX90A-NEXT:    s_cbranch_execnz .LBB117_16035; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6036; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6037; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v26038; GFX90A-NEXT:    ;;#ASMSTART6039; GFX90A-NEXT:    ; use a06040; GFX90A-NEXT:    ;;#ASMEND6041; GFX90A-NEXT:    s_setpc_b64 s[30:31]6042;6043; GFX950-LABEL: global_atomic_fsub_f32_ret_a_a:6044; GFX950:       ; %bb.0:6045; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6046; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406047; GFX950-NEXT:    ;;#ASMSTART6048; GFX950-NEXT:    ; def a06049; GFX950-NEXT:    ;;#ASMEND6050; GFX950-NEXT:    s_mov_b64 s[0:1], 06051; GFX950-NEXT:    v_accvgpr_read_b32 v4, a06052; GFX950-NEXT:  .LBB117_1: ; %atomicrmw.start6053; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16054; GFX950-NEXT:    s_waitcnt vmcnt(0)6055; GFX950-NEXT:    v_sub_f32_e32 v2, v3, v46056; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06057; GFX950-NEXT:    s_waitcnt vmcnt(0)6058; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36059; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6060; GFX950-NEXT:    v_mov_b32_e32 v3, v26061; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6062; GFX950-NEXT:    s_cbranch_execnz .LBB117_16063; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6064; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6065; GFX950-NEXT:    v_accvgpr_write_b32 a0, v26066; GFX950-NEXT:    ;;#ASMSTART6067; GFX950-NEXT:    ; use a06068; GFX950-NEXT:    ;;#ASMEND6069; GFX950-NEXT:    s_setpc_b64 s[30:31]6070  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106071  %data = call float asm "; def $0", "=a"()6072  %result = atomicrmw fsub ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06073  call void asm "; use $0", "a"(float %result)6074  ret void6075}6076 6077define void @global_atomic_fsub_f32_ret_av_av(ptr addrspace(1) %ptr) #0 {6078; GFX90A-LABEL: global_atomic_fsub_f32_ret_av_av:6079; GFX90A:       ; %bb.0:6080; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6081; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406082; GFX90A-NEXT:    s_mov_b64 s[4:5], 06083; GFX90A-NEXT:    ;;#ASMSTART6084; GFX90A-NEXT:    ; def v46085; GFX90A-NEXT:    ;;#ASMEND6086; GFX90A-NEXT:  .LBB118_1: ; %atomicrmw.start6087; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16088; GFX90A-NEXT:    s_waitcnt vmcnt(0)6089; GFX90A-NEXT:    v_sub_f32_e32 v2, v3, v46090; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6091; GFX90A-NEXT:    s_waitcnt vmcnt(0)6092; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36093; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6094; GFX90A-NEXT:    v_mov_b32_e32 v3, v26095; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6096; GFX90A-NEXT:    s_cbranch_execnz .LBB118_16097; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6098; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6099; GFX90A-NEXT:    ;;#ASMSTART6100; GFX90A-NEXT:    ; use v26101; GFX90A-NEXT:    ;;#ASMEND6102; GFX90A-NEXT:    s_setpc_b64 s[30:31]6103;6104; GFX950-LABEL: global_atomic_fsub_f32_ret_av_av:6105; GFX950:       ; %bb.0:6106; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6107; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406108; GFX950-NEXT:    s_mov_b64 s[0:1], 06109; GFX950-NEXT:    ;;#ASMSTART6110; GFX950-NEXT:    ; def v46111; GFX950-NEXT:    ;;#ASMEND6112; GFX950-NEXT:  .LBB118_1: ; %atomicrmw.start6113; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16114; GFX950-NEXT:    s_waitcnt vmcnt(0)6115; GFX950-NEXT:    v_sub_f32_e32 v2, v3, v46116; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06117; GFX950-NEXT:    s_waitcnt vmcnt(0)6118; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36119; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6120; GFX950-NEXT:    v_mov_b32_e32 v3, v26121; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6122; GFX950-NEXT:    s_cbranch_execnz .LBB118_16123; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6124; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6125; GFX950-NEXT:    ;;#ASMSTART6126; GFX950-NEXT:    ; use v26127; GFX950-NEXT:    ;;#ASMEND6128; GFX950-NEXT:    s_setpc_b64 s[30:31]6129  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106130  %data = call float asm "; def $0", "=^VA"()6131  %result = atomicrmw fsub ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06132  call void asm "; use $0", "^VA"(float %result)6133  ret void6134}6135 6136define void @global_atomic_fmax_f32_ret_a_a(ptr addrspace(1) %ptr) #0 {6137; GFX90A-LABEL: global_atomic_fmax_f32_ret_a_a:6138; GFX90A:       ; %bb.0:6139; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6140; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406141; GFX90A-NEXT:    ;;#ASMSTART6142; GFX90A-NEXT:    ; def a06143; GFX90A-NEXT:    ;;#ASMEND6144; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a06145; GFX90A-NEXT:    s_mov_b64 s[4:5], 06146; GFX90A-NEXT:    v_max_f32_e32 v4, v2, v26147; GFX90A-NEXT:  .LBB119_1: ; %atomicrmw.start6148; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16149; GFX90A-NEXT:    s_waitcnt vmcnt(0)6150; GFX90A-NEXT:    v_max_f32_e32 v2, v3, v36151; GFX90A-NEXT:    v_max_f32_e32 v2, v2, v46152; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6153; GFX90A-NEXT:    s_waitcnt vmcnt(0)6154; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36155; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6156; GFX90A-NEXT:    v_mov_b32_e32 v3, v26157; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6158; GFX90A-NEXT:    s_cbranch_execnz .LBB119_16159; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6160; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6161; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v26162; GFX90A-NEXT:    ;;#ASMSTART6163; GFX90A-NEXT:    ; use a06164; GFX90A-NEXT:    ;;#ASMEND6165; GFX90A-NEXT:    s_setpc_b64 s[30:31]6166;6167; GFX950-LABEL: global_atomic_fmax_f32_ret_a_a:6168; GFX950:       ; %bb.0:6169; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6170; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406171; GFX950-NEXT:    ;;#ASMSTART6172; GFX950-NEXT:    ; def a06173; GFX950-NEXT:    ;;#ASMEND6174; GFX950-NEXT:    s_mov_b64 s[0:1], 06175; GFX950-NEXT:    v_accvgpr_read_b32 v2, a06176; GFX950-NEXT:    v_max_f32_e32 v4, v2, v26177; GFX950-NEXT:  .LBB119_1: ; %atomicrmw.start6178; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16179; GFX950-NEXT:    s_waitcnt vmcnt(0)6180; GFX950-NEXT:    v_max_f32_e32 v2, v3, v36181; GFX950-NEXT:    v_max_f32_e32 v2, v2, v46182; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06183; GFX950-NEXT:    s_waitcnt vmcnt(0)6184; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36185; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6186; GFX950-NEXT:    v_mov_b32_e32 v3, v26187; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6188; GFX950-NEXT:    s_cbranch_execnz .LBB119_16189; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6190; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6191; GFX950-NEXT:    v_accvgpr_write_b32 a0, v26192; GFX950-NEXT:    ;;#ASMSTART6193; GFX950-NEXT:    ; use a06194; GFX950-NEXT:    ;;#ASMEND6195; GFX950-NEXT:    s_setpc_b64 s[30:31]6196  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106197  %data = call float asm "; def $0", "=a"()6198  %result = atomicrmw fmax ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06199  call void asm "; use $0", "a"(float %result)6200  ret void6201}6202 6203define void @global_atomic_fmax_f32_ret_av_av(ptr addrspace(1) %ptr) #0 {6204; GFX90A-LABEL: global_atomic_fmax_f32_ret_av_av:6205; GFX90A:       ; %bb.0:6206; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6207; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406208; GFX90A-NEXT:    ;;#ASMSTART6209; GFX90A-NEXT:    ; def v26210; GFX90A-NEXT:    ;;#ASMEND6211; GFX90A-NEXT:    s_mov_b64 s[4:5], 06212; GFX90A-NEXT:    v_max_f32_e32 v4, v2, v26213; GFX90A-NEXT:  .LBB120_1: ; %atomicrmw.start6214; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16215; GFX90A-NEXT:    s_waitcnt vmcnt(0)6216; GFX90A-NEXT:    v_max_f32_e32 v2, v3, v36217; GFX90A-NEXT:    v_max_f32_e32 v2, v2, v46218; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6219; GFX90A-NEXT:    s_waitcnt vmcnt(0)6220; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36221; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6222; GFX90A-NEXT:    v_mov_b32_e32 v3, v26223; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6224; GFX90A-NEXT:    s_cbranch_execnz .LBB120_16225; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6226; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6227; GFX90A-NEXT:    ;;#ASMSTART6228; GFX90A-NEXT:    ; use v26229; GFX90A-NEXT:    ;;#ASMEND6230; GFX90A-NEXT:    s_setpc_b64 s[30:31]6231;6232; GFX950-LABEL: global_atomic_fmax_f32_ret_av_av:6233; GFX950:       ; %bb.0:6234; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6235; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406236; GFX950-NEXT:    ;;#ASMSTART6237; GFX950-NEXT:    ; def v26238; GFX950-NEXT:    ;;#ASMEND6239; GFX950-NEXT:    s_mov_b64 s[0:1], 06240; GFX950-NEXT:    v_max_f32_e32 v4, v2, v26241; GFX950-NEXT:  .LBB120_1: ; %atomicrmw.start6242; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16243; GFX950-NEXT:    s_waitcnt vmcnt(0)6244; GFX950-NEXT:    v_max_f32_e32 v2, v3, v36245; GFX950-NEXT:    v_max_f32_e32 v2, v2, v46246; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06247; GFX950-NEXT:    s_waitcnt vmcnt(0)6248; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36249; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6250; GFX950-NEXT:    v_mov_b32_e32 v3, v26251; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6252; GFX950-NEXT:    s_cbranch_execnz .LBB120_16253; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6254; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6255; GFX950-NEXT:    ;;#ASMSTART6256; GFX950-NEXT:    ; use v26257; GFX950-NEXT:    ;;#ASMEND6258; GFX950-NEXT:    s_setpc_b64 s[30:31]6259  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106260  %data = call float asm "; def $0", "=^VA"()6261  %result = atomicrmw fmax ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06262  call void asm "; use $0", "^VA"(float %result)6263  ret void6264}6265 6266define void @global_atomic_fmin_f32_ret_a_a(ptr addrspace(1) %ptr) #0 {6267; GFX90A-LABEL: global_atomic_fmin_f32_ret_a_a:6268; GFX90A:       ; %bb.0:6269; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6270; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406271; GFX90A-NEXT:    ;;#ASMSTART6272; GFX90A-NEXT:    ; def a06273; GFX90A-NEXT:    ;;#ASMEND6274; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a06275; GFX90A-NEXT:    s_mov_b64 s[4:5], 06276; GFX90A-NEXT:    v_max_f32_e32 v4, v2, v26277; GFX90A-NEXT:  .LBB121_1: ; %atomicrmw.start6278; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16279; GFX90A-NEXT:    s_waitcnt vmcnt(0)6280; GFX90A-NEXT:    v_max_f32_e32 v2, v3, v36281; GFX90A-NEXT:    v_min_f32_e32 v2, v2, v46282; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6283; GFX90A-NEXT:    s_waitcnt vmcnt(0)6284; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36285; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6286; GFX90A-NEXT:    v_mov_b32_e32 v3, v26287; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6288; GFX90A-NEXT:    s_cbranch_execnz .LBB121_16289; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6290; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6291; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v26292; GFX90A-NEXT:    ;;#ASMSTART6293; GFX90A-NEXT:    ; use a06294; GFX90A-NEXT:    ;;#ASMEND6295; GFX90A-NEXT:    s_setpc_b64 s[30:31]6296;6297; GFX950-LABEL: global_atomic_fmin_f32_ret_a_a:6298; GFX950:       ; %bb.0:6299; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6300; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406301; GFX950-NEXT:    ;;#ASMSTART6302; GFX950-NEXT:    ; def a06303; GFX950-NEXT:    ;;#ASMEND6304; GFX950-NEXT:    s_mov_b64 s[0:1], 06305; GFX950-NEXT:    v_accvgpr_read_b32 v2, a06306; GFX950-NEXT:    v_max_f32_e32 v4, v2, v26307; GFX950-NEXT:  .LBB121_1: ; %atomicrmw.start6308; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16309; GFX950-NEXT:    s_waitcnt vmcnt(0)6310; GFX950-NEXT:    v_max_f32_e32 v2, v3, v36311; GFX950-NEXT:    v_min_f32_e32 v2, v2, v46312; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06313; GFX950-NEXT:    s_waitcnt vmcnt(0)6314; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36315; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6316; GFX950-NEXT:    v_mov_b32_e32 v3, v26317; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6318; GFX950-NEXT:    s_cbranch_execnz .LBB121_16319; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6320; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6321; GFX950-NEXT:    v_accvgpr_write_b32 a0, v26322; GFX950-NEXT:    ;;#ASMSTART6323; GFX950-NEXT:    ; use a06324; GFX950-NEXT:    ;;#ASMEND6325; GFX950-NEXT:    s_setpc_b64 s[30:31]6326  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106327  %data = call float asm "; def $0", "=a"()6328  %result = atomicrmw fmin ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06329  call void asm "; use $0", "a"(float %result)6330  ret void6331}6332 6333define void @global_atomic_fmin_f32_ret_av_av(ptr addrspace(1) %ptr) #0 {6334; GFX90A-LABEL: global_atomic_fmin_f32_ret_av_av:6335; GFX90A:       ; %bb.0:6336; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6337; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406338; GFX90A-NEXT:    ;;#ASMSTART6339; GFX90A-NEXT:    ; def v26340; GFX90A-NEXT:    ;;#ASMEND6341; GFX90A-NEXT:    s_mov_b64 s[4:5], 06342; GFX90A-NEXT:    v_max_f32_e32 v4, v2, v26343; GFX90A-NEXT:  .LBB122_1: ; %atomicrmw.start6344; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16345; GFX90A-NEXT:    s_waitcnt vmcnt(0)6346; GFX90A-NEXT:    v_max_f32_e32 v2, v3, v36347; GFX90A-NEXT:    v_min_f32_e32 v2, v2, v46348; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6349; GFX90A-NEXT:    s_waitcnt vmcnt(0)6350; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36351; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6352; GFX90A-NEXT:    v_mov_b32_e32 v3, v26353; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6354; GFX90A-NEXT:    s_cbranch_execnz .LBB122_16355; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6356; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6357; GFX90A-NEXT:    ;;#ASMSTART6358; GFX90A-NEXT:    ; use v26359; GFX90A-NEXT:    ;;#ASMEND6360; GFX90A-NEXT:    s_setpc_b64 s[30:31]6361;6362; GFX950-LABEL: global_atomic_fmin_f32_ret_av_av:6363; GFX950:       ; %bb.0:6364; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6365; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406366; GFX950-NEXT:    ;;#ASMSTART6367; GFX950-NEXT:    ; def v26368; GFX950-NEXT:    ;;#ASMEND6369; GFX950-NEXT:    s_mov_b64 s[0:1], 06370; GFX950-NEXT:    v_max_f32_e32 v4, v2, v26371; GFX950-NEXT:  .LBB122_1: ; %atomicrmw.start6372; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16373; GFX950-NEXT:    s_waitcnt vmcnt(0)6374; GFX950-NEXT:    v_max_f32_e32 v2, v3, v36375; GFX950-NEXT:    v_min_f32_e32 v2, v2, v46376; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06377; GFX950-NEXT:    s_waitcnt vmcnt(0)6378; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36379; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6380; GFX950-NEXT:    v_mov_b32_e32 v3, v26381; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6382; GFX950-NEXT:    s_cbranch_execnz .LBB122_16383; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6384; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6385; GFX950-NEXT:    ;;#ASMSTART6386; GFX950-NEXT:    ; use v26387; GFX950-NEXT:    ;;#ASMEND6388; GFX950-NEXT:    s_setpc_b64 s[30:31]6389  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106390  %data = call float asm "; def $0", "=^VA"()6391  %result = atomicrmw fmin ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06392  call void asm "; use $0", "^VA"(float %result)6393  ret void6394}6395 6396define void @global_atomic_fmaximum_f32_ret_a_a(ptr addrspace(1) %ptr) #0 {6397; GFX90A-LABEL: global_atomic_fmaximum_f32_ret_a_a:6398; GFX90A:       ; %bb.0:6399; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6400; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406401; GFX90A-NEXT:    ;;#ASMSTART6402; GFX90A-NEXT:    ; def a06403; GFX90A-NEXT:    ;;#ASMEND6404; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a06405; GFX90A-NEXT:    s_mov_b64 s[4:5], 06406; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000006407; GFX90A-NEXT:  .LBB123_1: ; %atomicrmw.start6408; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16409; GFX90A-NEXT:    s_waitcnt vmcnt(0)6410; GFX90A-NEXT:    v_max_f32_e32 v2, v3, v46411; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v3, v46412; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc6413; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6414; GFX90A-NEXT:    s_waitcnt vmcnt(0)6415; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36416; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6417; GFX90A-NEXT:    v_mov_b32_e32 v3, v26418; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6419; GFX90A-NEXT:    s_cbranch_execnz .LBB123_16420; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6421; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6422; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v26423; GFX90A-NEXT:    ;;#ASMSTART6424; GFX90A-NEXT:    ; use a06425; GFX90A-NEXT:    ;;#ASMEND6426; GFX90A-NEXT:    s_setpc_b64 s[30:31]6427;6428; GFX950-LABEL: global_atomic_fmaximum_f32_ret_a_a:6429; GFX950:       ; %bb.0:6430; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6431; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406432; GFX950-NEXT:    ;;#ASMSTART6433; GFX950-NEXT:    ; def a06434; GFX950-NEXT:    ;;#ASMEND6435; GFX950-NEXT:    s_mov_b64 s[0:1], 06436; GFX950-NEXT:    v_accvgpr_read_b32 v4, a06437; GFX950-NEXT:  .LBB123_1: ; %atomicrmw.start6438; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16439; GFX950-NEXT:    s_waitcnt vmcnt(0)6440; GFX950-NEXT:    v_maximum3_f32 v2, v3, v4, v46441; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06442; GFX950-NEXT:    s_waitcnt vmcnt(0)6443; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36444; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6445; GFX950-NEXT:    v_mov_b32_e32 v3, v26446; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6447; GFX950-NEXT:    s_cbranch_execnz .LBB123_16448; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6449; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6450; GFX950-NEXT:    v_accvgpr_write_b32 a0, v26451; GFX950-NEXT:    ;;#ASMSTART6452; GFX950-NEXT:    ; use a06453; GFX950-NEXT:    ;;#ASMEND6454; GFX950-NEXT:    s_setpc_b64 s[30:31]6455  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106456  %data = call float asm "; def $0", "=a"()6457  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06458  call void asm "; use $0", "a"(float %result)6459  ret void6460}6461 6462define void @global_atomic_fmaximum_f32_ret_av_av(ptr addrspace(1) %ptr) #0 {6463; GFX90A-LABEL: global_atomic_fmaximum_f32_ret_av_av:6464; GFX90A:       ; %bb.0:6465; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6466; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406467; GFX90A-NEXT:    s_mov_b64 s[4:5], 06468; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000006469; GFX90A-NEXT:    ;;#ASMSTART6470; GFX90A-NEXT:    ; def v46471; GFX90A-NEXT:    ;;#ASMEND6472; GFX90A-NEXT:  .LBB124_1: ; %atomicrmw.start6473; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16474; GFX90A-NEXT:    s_waitcnt vmcnt(0)6475; GFX90A-NEXT:    v_max_f32_e32 v2, v3, v46476; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v3, v46477; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc6478; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6479; GFX90A-NEXT:    s_waitcnt vmcnt(0)6480; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36481; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6482; GFX90A-NEXT:    v_mov_b32_e32 v3, v26483; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6484; GFX90A-NEXT:    s_cbranch_execnz .LBB124_16485; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6486; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6487; GFX90A-NEXT:    ;;#ASMSTART6488; GFX90A-NEXT:    ; use v26489; GFX90A-NEXT:    ;;#ASMEND6490; GFX90A-NEXT:    s_setpc_b64 s[30:31]6491;6492; GFX950-LABEL: global_atomic_fmaximum_f32_ret_av_av:6493; GFX950:       ; %bb.0:6494; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6495; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406496; GFX950-NEXT:    s_mov_b64 s[0:1], 06497; GFX950-NEXT:    ;;#ASMSTART6498; GFX950-NEXT:    ; def v46499; GFX950-NEXT:    ;;#ASMEND6500; GFX950-NEXT:  .LBB124_1: ; %atomicrmw.start6501; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16502; GFX950-NEXT:    s_waitcnt vmcnt(0)6503; GFX950-NEXT:    v_maximum3_f32 v2, v3, v4, v46504; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06505; GFX950-NEXT:    s_waitcnt vmcnt(0)6506; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36507; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6508; GFX950-NEXT:    v_mov_b32_e32 v3, v26509; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6510; GFX950-NEXT:    s_cbranch_execnz .LBB124_16511; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6512; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6513; GFX950-NEXT:    ;;#ASMSTART6514; GFX950-NEXT:    ; use v26515; GFX950-NEXT:    ;;#ASMEND6516; GFX950-NEXT:    s_setpc_b64 s[30:31]6517  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106518  %data = call float asm "; def $0", "=^VA"()6519  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06520  call void asm "; use $0", "^VA"(float %result)6521  ret void6522}6523 6524define void @global_atomic_fminimum_f32_ret_a_a(ptr addrspace(1) %ptr) #0 {6525; GFX90A-LABEL: global_atomic_fminimum_f32_ret_a_a:6526; GFX90A:       ; %bb.0:6527; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6528; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406529; GFX90A-NEXT:    ;;#ASMSTART6530; GFX90A-NEXT:    ; def a06531; GFX90A-NEXT:    ;;#ASMEND6532; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a06533; GFX90A-NEXT:    s_mov_b64 s[4:5], 06534; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000006535; GFX90A-NEXT:  .LBB125_1: ; %atomicrmw.start6536; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16537; GFX90A-NEXT:    s_waitcnt vmcnt(0)6538; GFX90A-NEXT:    v_min_f32_e32 v2, v3, v46539; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v3, v46540; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc6541; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6542; GFX90A-NEXT:    s_waitcnt vmcnt(0)6543; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36544; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6545; GFX90A-NEXT:    v_mov_b32_e32 v3, v26546; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6547; GFX90A-NEXT:    s_cbranch_execnz .LBB125_16548; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6549; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6550; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v26551; GFX90A-NEXT:    ;;#ASMSTART6552; GFX90A-NEXT:    ; use a06553; GFX90A-NEXT:    ;;#ASMEND6554; GFX90A-NEXT:    s_setpc_b64 s[30:31]6555;6556; GFX950-LABEL: global_atomic_fminimum_f32_ret_a_a:6557; GFX950:       ; %bb.0:6558; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6559; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406560; GFX950-NEXT:    ;;#ASMSTART6561; GFX950-NEXT:    ; def a06562; GFX950-NEXT:    ;;#ASMEND6563; GFX950-NEXT:    s_mov_b64 s[0:1], 06564; GFX950-NEXT:    v_accvgpr_read_b32 v4, a06565; GFX950-NEXT:  .LBB125_1: ; %atomicrmw.start6566; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16567; GFX950-NEXT:    s_waitcnt vmcnt(0)6568; GFX950-NEXT:    v_minimum3_f32 v2, v3, v4, v46569; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06570; GFX950-NEXT:    s_waitcnt vmcnt(0)6571; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36572; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6573; GFX950-NEXT:    v_mov_b32_e32 v3, v26574; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6575; GFX950-NEXT:    s_cbranch_execnz .LBB125_16576; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6577; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6578; GFX950-NEXT:    v_accvgpr_write_b32 a0, v26579; GFX950-NEXT:    ;;#ASMSTART6580; GFX950-NEXT:    ; use a06581; GFX950-NEXT:    ;;#ASMEND6582; GFX950-NEXT:    s_setpc_b64 s[30:31]6583  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106584  %data = call float asm "; def $0", "=a"()6585  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06586  call void asm "; use $0", "a"(float %result)6587  ret void6588}6589 6590define void @global_atomic_fminimum_f32_ret_av_av(ptr addrspace(1) %ptr) #0 {6591; GFX90A-LABEL: global_atomic_fminimum_f32_ret_av_av:6592; GFX90A:       ; %bb.0:6593; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6594; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:406595; GFX90A-NEXT:    s_mov_b64 s[4:5], 06596; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000006597; GFX90A-NEXT:    ;;#ASMSTART6598; GFX90A-NEXT:    ; def v46599; GFX90A-NEXT:    ;;#ASMEND6600; GFX90A-NEXT:  .LBB126_1: ; %atomicrmw.start6601; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16602; GFX90A-NEXT:    s_waitcnt vmcnt(0)6603; GFX90A-NEXT:    v_min_f32_e32 v2, v3, v46604; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v3, v46605; GFX90A-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc6606; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc6607; GFX90A-NEXT:    s_waitcnt vmcnt(0)6608; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36609; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6610; GFX90A-NEXT:    v_mov_b32_e32 v3, v26611; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6612; GFX90A-NEXT:    s_cbranch_execnz .LBB126_16613; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6614; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6615; GFX90A-NEXT:    ;;#ASMSTART6616; GFX90A-NEXT:    ; use v26617; GFX90A-NEXT:    ;;#ASMEND6618; GFX90A-NEXT:    s_setpc_b64 s[30:31]6619;6620; GFX950-LABEL: global_atomic_fminimum_f32_ret_av_av:6621; GFX950:       ; %bb.0:6622; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6623; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:406624; GFX950-NEXT:    s_mov_b64 s[0:1], 06625; GFX950-NEXT:    ;;#ASMSTART6626; GFX950-NEXT:    ; def v46627; GFX950-NEXT:    ;;#ASMEND6628; GFX950-NEXT:  .LBB126_1: ; %atomicrmw.start6629; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16630; GFX950-NEXT:    s_waitcnt vmcnt(0)6631; GFX950-NEXT:    v_minimum3_f32 v2, v3, v4, v46632; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc06633; GFX950-NEXT:    s_waitcnt vmcnt(0)6634; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36635; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6636; GFX950-NEXT:    v_mov_b32_e32 v3, v26637; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6638; GFX950-NEXT:    s_cbranch_execnz .LBB126_16639; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6640; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6641; GFX950-NEXT:    ;;#ASMSTART6642; GFX950-NEXT:    ; use v26643; GFX950-NEXT:    ;;#ASMEND6644; GFX950-NEXT:    s_setpc_b64 s[30:31]6645  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 106646  %data = call float asm "; def $0", "=^VA"()6647  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !06648  call void asm "; use $0", "^VA"(float %result)6649  ret void6650}6651 6652;---------------------------------------------------------------------6653; other atomics f64, with aa+av cases6654;---------------------------------------------------------------------6655 6656define void @global_atomic_fadd_f64_ret_a_a(ptr addrspace(1) %ptr) #0 {6657; GFX90A-LABEL: global_atomic_fadd_f64_ret_a_a:6658; GFX90A:       ; %bb.0:6659; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6660; GFX90A-NEXT:    ;;#ASMSTART6661; GFX90A-NEXT:    ; def a[0:1]6662; GFX90A-NEXT:    ;;#ASMEND6663; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a16664; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a06665; GFX90A-NEXT:    global_atomic_add_f64 v[0:1], v[0:1], v[2:3], off offset:80 glc6666; GFX90A-NEXT:    s_waitcnt vmcnt(0)6667; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v06668; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v16669; GFX90A-NEXT:    ;;#ASMSTART6670; GFX90A-NEXT:    ; use a[0:1]6671; GFX90A-NEXT:    ;;#ASMEND6672; GFX90A-NEXT:    s_setpc_b64 s[30:31]6673;6674; GFX950-LABEL: global_atomic_fadd_f64_ret_a_a:6675; GFX950:       ; %bb.0:6676; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6677; GFX950-NEXT:    ;;#ASMSTART6678; GFX950-NEXT:    ; def a[0:1]6679; GFX950-NEXT:    ;;#ASMEND6680; GFX950-NEXT:    s_nop 06681; GFX950-NEXT:    v_accvgpr_read_b32 v3, a16682; GFX950-NEXT:    v_accvgpr_read_b32 v2, a06683; GFX950-NEXT:    global_atomic_add_f64 v[0:1], v[0:1], v[2:3], off offset:80 sc06684; GFX950-NEXT:    s_waitcnt vmcnt(0)6685; GFX950-NEXT:    v_accvgpr_write_b32 a0, v06686; GFX950-NEXT:    v_accvgpr_write_b32 a1, v16687; GFX950-NEXT:    ;;#ASMSTART6688; GFX950-NEXT:    ; use a[0:1]6689; GFX950-NEXT:    ;;#ASMEND6690; GFX950-NEXT:    s_setpc_b64 s[30:31]6691  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 106692  %data = call double asm "; def $0", "=a"()6693  %result = atomicrmw fadd ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !06694  call void asm "; use $0", "a"(double %result)6695  ret void6696}6697 6698define void @global_atomic_fadd_f64_ret_av_av(ptr addrspace(1) %ptr) #0 {6699; GFX90A-LABEL: global_atomic_fadd_f64_ret_av_av:6700; GFX90A:       ; %bb.0:6701; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6702; GFX90A-NEXT:    ;;#ASMSTART6703; GFX90A-NEXT:    ; def v[2:3]6704; GFX90A-NEXT:    ;;#ASMEND6705; GFX90A-NEXT:    global_atomic_add_f64 v[0:1], v[0:1], v[2:3], off offset:80 glc6706; GFX90A-NEXT:    s_waitcnt vmcnt(0)6707; GFX90A-NEXT:    ;;#ASMSTART6708; GFX90A-NEXT:    ; use v[0:1]6709; GFX90A-NEXT:    ;;#ASMEND6710; GFX90A-NEXT:    s_setpc_b64 s[30:31]6711;6712; GFX950-LABEL: global_atomic_fadd_f64_ret_av_av:6713; GFX950:       ; %bb.0:6714; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6715; GFX950-NEXT:    ;;#ASMSTART6716; GFX950-NEXT:    ; def v[2:3]6717; GFX950-NEXT:    ;;#ASMEND6718; GFX950-NEXT:    global_atomic_add_f64 v[0:1], v[0:1], v[2:3], off offset:80 sc06719; GFX950-NEXT:    s_waitcnt vmcnt(0)6720; GFX950-NEXT:    ;;#ASMSTART6721; GFX950-NEXT:    ; use v[0:1]6722; GFX950-NEXT:    ;;#ASMEND6723; GFX950-NEXT:    s_setpc_b64 s[30:31]6724  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 106725  %data = call double asm "; def $0", "=^VA"()6726  %result = atomicrmw fadd ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !06727  call void asm "; use $0", "^VA"(double %result)6728  ret void6729}6730 6731define void @global_atomic_fsub_f64_ret_a_a(ptr addrspace(1) %ptr) #0 {6732; GFX90A-LABEL: global_atomic_fsub_f64_ret_a_a:6733; GFX90A:       ; %bb.0:6734; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6735; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:806736; GFX90A-NEXT:    ;;#ASMSTART6737; GFX90A-NEXT:    ; def a[0:1]6738; GFX90A-NEXT:    ;;#ASMEND6739; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a16740; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a06741; GFX90A-NEXT:    s_mov_b64 s[4:5], 06742; GFX90A-NEXT:  .LBB129_1: ; %atomicrmw.start6743; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16744; GFX90A-NEXT:    s_waitcnt vmcnt(0)6745; GFX90A-NEXT:    v_add_f64 v[2:3], v[4:5], -v[6:7]6746; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc6747; GFX90A-NEXT:    s_waitcnt vmcnt(0)6748; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]6749; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6750; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]6751; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6752; GFX90A-NEXT:    s_cbranch_execnz .LBB129_16753; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6754; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6755; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v26756; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v36757; GFX90A-NEXT:    ;;#ASMSTART6758; GFX90A-NEXT:    ; use a[0:1]6759; GFX90A-NEXT:    ;;#ASMEND6760; GFX90A-NEXT:    s_setpc_b64 s[30:31]6761;6762; GFX950-LABEL: global_atomic_fsub_f64_ret_a_a:6763; GFX950:       ; %bb.0:6764; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6765; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:806766; GFX950-NEXT:    ;;#ASMSTART6767; GFX950-NEXT:    ; def a[0:1]6768; GFX950-NEXT:    ;;#ASMEND6769; GFX950-NEXT:    s_mov_b64 s[0:1], 06770; GFX950-NEXT:    v_accvgpr_read_b32 v7, a16771; GFX950-NEXT:    v_accvgpr_read_b32 v6, a06772; GFX950-NEXT:  .LBB129_1: ; %atomicrmw.start6773; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16774; GFX950-NEXT:    s_waitcnt vmcnt(0)6775; GFX950-NEXT:    v_add_f64 v[2:3], v[4:5], -v[6:7]6776; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc06777; GFX950-NEXT:    s_waitcnt vmcnt(0)6778; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]6779; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6780; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]6781; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6782; GFX950-NEXT:    s_cbranch_execnz .LBB129_16783; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6784; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6785; GFX950-NEXT:    v_accvgpr_write_b32 a0, v26786; GFX950-NEXT:    v_accvgpr_write_b32 a1, v36787; GFX950-NEXT:    ;;#ASMSTART6788; GFX950-NEXT:    ; use a[0:1]6789; GFX950-NEXT:    ;;#ASMEND6790; GFX950-NEXT:    s_setpc_b64 s[30:31]6791  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 106792  %data = call double asm "; def $0", "=a"()6793  %result = atomicrmw fsub ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !06794  call void asm "; use $0", "a"(double %result)6795  ret void6796}6797 6798define void @global_atomic_fsub_f64_ret_av_av(ptr addrspace(1) %ptr) #0 {6799; GFX90A-LABEL: global_atomic_fsub_f64_ret_av_av:6800; GFX90A:       ; %bb.0:6801; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6802; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:806803; GFX90A-NEXT:    s_mov_b64 s[4:5], 06804; GFX90A-NEXT:    ;;#ASMSTART6805; GFX90A-NEXT:    ; def v[6:7]6806; GFX90A-NEXT:    ;;#ASMEND6807; GFX90A-NEXT:  .LBB130_1: ; %atomicrmw.start6808; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=16809; GFX90A-NEXT:    s_waitcnt vmcnt(0)6810; GFX90A-NEXT:    v_add_f64 v[2:3], v[4:5], -v[6:7]6811; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc6812; GFX90A-NEXT:    s_waitcnt vmcnt(0)6813; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]6814; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6815; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]6816; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]6817; GFX90A-NEXT:    s_cbranch_execnz .LBB130_16818; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end6819; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]6820; GFX90A-NEXT:    ;;#ASMSTART6821; GFX90A-NEXT:    ; use v[2:3]6822; GFX90A-NEXT:    ;;#ASMEND6823; GFX90A-NEXT:    s_setpc_b64 s[30:31]6824;6825; GFX950-LABEL: global_atomic_fsub_f64_ret_av_av:6826; GFX950:       ; %bb.0:6827; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6828; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:806829; GFX950-NEXT:    s_mov_b64 s[0:1], 06830; GFX950-NEXT:    ;;#ASMSTART6831; GFX950-NEXT:    ; def v[6:7]6832; GFX950-NEXT:    ;;#ASMEND6833; GFX950-NEXT:  .LBB130_1: ; %atomicrmw.start6834; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=16835; GFX950-NEXT:    s_waitcnt vmcnt(0)6836; GFX950-NEXT:    v_add_f64 v[2:3], v[4:5], -v[6:7]6837; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc06838; GFX950-NEXT:    s_waitcnt vmcnt(0)6839; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]6840; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6841; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]6842; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]6843; GFX950-NEXT:    s_cbranch_execnz .LBB130_16844; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end6845; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]6846; GFX950-NEXT:    ;;#ASMSTART6847; GFX950-NEXT:    ; use v[2:3]6848; GFX950-NEXT:    ;;#ASMEND6849; GFX950-NEXT:    s_setpc_b64 s[30:31]6850  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 106851  %data = call double asm "; def $0", "=^VA"()6852  %result = atomicrmw fsub ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !06853  call void asm "; use $0", "^VA"(double %result)6854  ret void6855}6856 6857define void @global_atomic_fmax_f64_ret_a_a(ptr addrspace(1) %ptr) #0 {6858; GFX90A-LABEL: global_atomic_fmax_f64_ret_a_a:6859; GFX90A:       ; %bb.0:6860; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6861; GFX90A-NEXT:    ;;#ASMSTART6862; GFX90A-NEXT:    ; def a[0:1]6863; GFX90A-NEXT:    ;;#ASMEND6864; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a16865; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a06866; GFX90A-NEXT:    global_atomic_max_f64 v[0:1], v[0:1], v[2:3], off offset:80 glc6867; GFX90A-NEXT:    s_waitcnt vmcnt(0)6868; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v06869; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v16870; GFX90A-NEXT:    ;;#ASMSTART6871; GFX90A-NEXT:    ; use a[0:1]6872; GFX90A-NEXT:    ;;#ASMEND6873; GFX90A-NEXT:    s_setpc_b64 s[30:31]6874;6875; GFX950-LABEL: global_atomic_fmax_f64_ret_a_a:6876; GFX950:       ; %bb.0:6877; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6878; GFX950-NEXT:    ;;#ASMSTART6879; GFX950-NEXT:    ; def a[0:1]6880; GFX950-NEXT:    ;;#ASMEND6881; GFX950-NEXT:    s_nop 06882; GFX950-NEXT:    v_accvgpr_read_b32 v3, a16883; GFX950-NEXT:    v_accvgpr_read_b32 v2, a06884; GFX950-NEXT:    global_atomic_max_f64 v[0:1], v[0:1], v[2:3], off offset:80 sc06885; GFX950-NEXT:    s_waitcnt vmcnt(0)6886; GFX950-NEXT:    v_accvgpr_write_b32 a0, v06887; GFX950-NEXT:    v_accvgpr_write_b32 a1, v16888; GFX950-NEXT:    ;;#ASMSTART6889; GFX950-NEXT:    ; use a[0:1]6890; GFX950-NEXT:    ;;#ASMEND6891; GFX950-NEXT:    s_setpc_b64 s[30:31]6892  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 106893  %data = call double asm "; def $0", "=a"()6894  %result = atomicrmw fmax ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !06895  call void asm "; use $0", "a"(double %result)6896  ret void6897}6898 6899define void @global_atomic_fmax_f64_ret_av_av(ptr addrspace(1) %ptr) #0 {6900; GFX90A-LABEL: global_atomic_fmax_f64_ret_av_av:6901; GFX90A:       ; %bb.0:6902; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6903; GFX90A-NEXT:    ;;#ASMSTART6904; GFX90A-NEXT:    ; def v[2:3]6905; GFX90A-NEXT:    ;;#ASMEND6906; GFX90A-NEXT:    global_atomic_max_f64 v[0:1], v[0:1], v[2:3], off offset:80 glc6907; GFX90A-NEXT:    s_waitcnt vmcnt(0)6908; GFX90A-NEXT:    ;;#ASMSTART6909; GFX90A-NEXT:    ; use v[0:1]6910; GFX90A-NEXT:    ;;#ASMEND6911; GFX90A-NEXT:    s_setpc_b64 s[30:31]6912;6913; GFX950-LABEL: global_atomic_fmax_f64_ret_av_av:6914; GFX950:       ; %bb.0:6915; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6916; GFX950-NEXT:    ;;#ASMSTART6917; GFX950-NEXT:    ; def v[2:3]6918; GFX950-NEXT:    ;;#ASMEND6919; GFX950-NEXT:    global_atomic_max_f64 v[0:1], v[0:1], v[2:3], off offset:80 sc06920; GFX950-NEXT:    s_waitcnt vmcnt(0)6921; GFX950-NEXT:    ;;#ASMSTART6922; GFX950-NEXT:    ; use v[0:1]6923; GFX950-NEXT:    ;;#ASMEND6924; GFX950-NEXT:    s_setpc_b64 s[30:31]6925  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 106926  %data = call double asm "; def $0", "=^VA"()6927  %result = atomicrmw fmax ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !06928  call void asm "; use $0", "^VA"(double %result)6929  ret void6930}6931 6932define void @global_atomic_fmin_f64_ret_a_a(ptr addrspace(1) %ptr) #0 {6933; GFX90A-LABEL: global_atomic_fmin_f64_ret_a_a:6934; GFX90A:       ; %bb.0:6935; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6936; GFX90A-NEXT:    ;;#ASMSTART6937; GFX90A-NEXT:    ; def a[0:1]6938; GFX90A-NEXT:    ;;#ASMEND6939; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a16940; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a06941; GFX90A-NEXT:    global_atomic_min_f64 v[0:1], v[0:1], v[2:3], off offset:80 glc6942; GFX90A-NEXT:    s_waitcnt vmcnt(0)6943; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v06944; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v16945; GFX90A-NEXT:    ;;#ASMSTART6946; GFX90A-NEXT:    ; use a[0:1]6947; GFX90A-NEXT:    ;;#ASMEND6948; GFX90A-NEXT:    s_setpc_b64 s[30:31]6949;6950; GFX950-LABEL: global_atomic_fmin_f64_ret_a_a:6951; GFX950:       ; %bb.0:6952; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6953; GFX950-NEXT:    ;;#ASMSTART6954; GFX950-NEXT:    ; def a[0:1]6955; GFX950-NEXT:    ;;#ASMEND6956; GFX950-NEXT:    s_nop 06957; GFX950-NEXT:    v_accvgpr_read_b32 v3, a16958; GFX950-NEXT:    v_accvgpr_read_b32 v2, a06959; GFX950-NEXT:    global_atomic_min_f64 v[0:1], v[0:1], v[2:3], off offset:80 sc06960; GFX950-NEXT:    s_waitcnt vmcnt(0)6961; GFX950-NEXT:    v_accvgpr_write_b32 a0, v06962; GFX950-NEXT:    v_accvgpr_write_b32 a1, v16963; GFX950-NEXT:    ;;#ASMSTART6964; GFX950-NEXT:    ; use a[0:1]6965; GFX950-NEXT:    ;;#ASMEND6966; GFX950-NEXT:    s_setpc_b64 s[30:31]6967  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 106968  %data = call double asm "; def $0", "=a"()6969  %result = atomicrmw fmin ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !06970  call void asm "; use $0", "a"(double %result)6971  ret void6972}6973 6974define void @global_atomic_fmin_f64_ret_av_av(ptr addrspace(1) %ptr) #0 {6975; GFX90A-LABEL: global_atomic_fmin_f64_ret_av_av:6976; GFX90A:       ; %bb.0:6977; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6978; GFX90A-NEXT:    ;;#ASMSTART6979; GFX90A-NEXT:    ; def v[2:3]6980; GFX90A-NEXT:    ;;#ASMEND6981; GFX90A-NEXT:    global_atomic_min_f64 v[0:1], v[0:1], v[2:3], off offset:80 glc6982; GFX90A-NEXT:    s_waitcnt vmcnt(0)6983; GFX90A-NEXT:    ;;#ASMSTART6984; GFX90A-NEXT:    ; use v[0:1]6985; GFX90A-NEXT:    ;;#ASMEND6986; GFX90A-NEXT:    s_setpc_b64 s[30:31]6987;6988; GFX950-LABEL: global_atomic_fmin_f64_ret_av_av:6989; GFX950:       ; %bb.0:6990; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6991; GFX950-NEXT:    ;;#ASMSTART6992; GFX950-NEXT:    ; def v[2:3]6993; GFX950-NEXT:    ;;#ASMEND6994; GFX950-NEXT:    global_atomic_min_f64 v[0:1], v[0:1], v[2:3], off offset:80 sc06995; GFX950-NEXT:    s_waitcnt vmcnt(0)6996; GFX950-NEXT:    ;;#ASMSTART6997; GFX950-NEXT:    ; use v[0:1]6998; GFX950-NEXT:    ;;#ASMEND6999; GFX950-NEXT:    s_setpc_b64 s[30:31]7000  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 107001  %data = call double asm "; def $0", "=^VA"()7002  %result = atomicrmw fmin ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07003  call void asm "; use $0", "^VA"(double %result)7004  ret void7005}7006 7007define void @global_atomic_fmaximum_f64_ret_a_a(ptr addrspace(1) %ptr) #0 {7008; GFX90A-LABEL: global_atomic_fmaximum_f64_ret_a_a:7009; GFX90A:       ; %bb.0:7010; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7011; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807012; GFX90A-NEXT:    ;;#ASMSTART7013; GFX90A-NEXT:    ; def a[0:1]7014; GFX90A-NEXT:    ;;#ASMEND7015; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a17016; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a07017; GFX90A-NEXT:    s_mov_b64 s[4:5], 07018; GFX90A-NEXT:    v_mov_b32_e32 v8, 0x7ff800007019; GFX90A-NEXT:  .LBB135_1: ; %atomicrmw.start7020; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17021; GFX90A-NEXT:    s_waitcnt vmcnt(0)7022; GFX90A-NEXT:    v_max_f64 v[2:3], v[4:5], v[6:7]7023; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7024; GFX90A-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7025; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7026; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc7027; GFX90A-NEXT:    s_waitcnt vmcnt(0)7028; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7029; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7030; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]7031; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7032; GFX90A-NEXT:    s_cbranch_execnz .LBB135_17033; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7034; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7035; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v27036; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v37037; GFX90A-NEXT:    ;;#ASMSTART7038; GFX90A-NEXT:    ; use a[0:1]7039; GFX90A-NEXT:    ;;#ASMEND7040; GFX90A-NEXT:    s_setpc_b64 s[30:31]7041;7042; GFX950-LABEL: global_atomic_fmaximum_f64_ret_a_a:7043; GFX950:       ; %bb.0:7044; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7045; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807046; GFX950-NEXT:    ;;#ASMSTART7047; GFX950-NEXT:    ; def a[0:1]7048; GFX950-NEXT:    ;;#ASMEND7049; GFX950-NEXT:    s_mov_b64 s[0:1], 07050; GFX950-NEXT:    v_accvgpr_read_b32 v7, a17051; GFX950-NEXT:    v_accvgpr_read_b32 v6, a07052; GFX950-NEXT:    v_mov_b32_e32 v8, 0x7ff800007053; GFX950-NEXT:  .LBB135_1: ; %atomicrmw.start7054; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17055; GFX950-NEXT:    s_waitcnt vmcnt(0)7056; GFX950-NEXT:    v_max_f64 v[2:3], v[4:5], v[6:7]7057; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7058; GFX950-NEXT:    s_nop 17059; GFX950-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7060; GFX950-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7061; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc07062; GFX950-NEXT:    s_waitcnt vmcnt(0)7063; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7064; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7065; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]7066; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7067; GFX950-NEXT:    s_cbranch_execnz .LBB135_17068; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7069; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7070; GFX950-NEXT:    v_accvgpr_write_b32 a0, v27071; GFX950-NEXT:    v_accvgpr_write_b32 a1, v37072; GFX950-NEXT:    ;;#ASMSTART7073; GFX950-NEXT:    ; use a[0:1]7074; GFX950-NEXT:    ;;#ASMEND7075; GFX950-NEXT:    s_setpc_b64 s[30:31]7076  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 107077  %data = call double asm "; def $0", "=a"()7078  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07079  call void asm "; use $0", "a"(double %result)7080  ret void7081}7082 7083define void @global_atomic_fmaximum_f64_ret_av_av(ptr addrspace(1) %ptr) #0 {7084; GFX90A-LABEL: global_atomic_fmaximum_f64_ret_av_av:7085; GFX90A:       ; %bb.0:7086; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7087; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807088; GFX90A-NEXT:    s_mov_b64 s[4:5], 07089; GFX90A-NEXT:    v_mov_b32_e32 v8, 0x7ff800007090; GFX90A-NEXT:    ;;#ASMSTART7091; GFX90A-NEXT:    ; def v[6:7]7092; GFX90A-NEXT:    ;;#ASMEND7093; GFX90A-NEXT:  .LBB136_1: ; %atomicrmw.start7094; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17095; GFX90A-NEXT:    s_waitcnt vmcnt(0)7096; GFX90A-NEXT:    v_max_f64 v[2:3], v[4:5], v[6:7]7097; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7098; GFX90A-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7099; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7100; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc7101; GFX90A-NEXT:    s_waitcnt vmcnt(0)7102; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7103; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7104; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]7105; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7106; GFX90A-NEXT:    s_cbranch_execnz .LBB136_17107; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7108; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7109; GFX90A-NEXT:    ;;#ASMSTART7110; GFX90A-NEXT:    ; use v[2:3]7111; GFX90A-NEXT:    ;;#ASMEND7112; GFX90A-NEXT:    s_setpc_b64 s[30:31]7113;7114; GFX950-LABEL: global_atomic_fmaximum_f64_ret_av_av:7115; GFX950:       ; %bb.0:7116; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7117; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807118; GFX950-NEXT:    s_mov_b64 s[0:1], 07119; GFX950-NEXT:    v_mov_b32_e32 v8, 0x7ff800007120; GFX950-NEXT:    ;;#ASMSTART7121; GFX950-NEXT:    ; def v[6:7]7122; GFX950-NEXT:    ;;#ASMEND7123; GFX950-NEXT:  .LBB136_1: ; %atomicrmw.start7124; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17125; GFX950-NEXT:    s_waitcnt vmcnt(0)7126; GFX950-NEXT:    v_max_f64 v[2:3], v[4:5], v[6:7]7127; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7128; GFX950-NEXT:    s_nop 17129; GFX950-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7130; GFX950-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7131; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc07132; GFX950-NEXT:    s_waitcnt vmcnt(0)7133; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7134; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7135; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]7136; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7137; GFX950-NEXT:    s_cbranch_execnz .LBB136_17138; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7139; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7140; GFX950-NEXT:    ;;#ASMSTART7141; GFX950-NEXT:    ; use v[2:3]7142; GFX950-NEXT:    ;;#ASMEND7143; GFX950-NEXT:    s_setpc_b64 s[30:31]7144  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 107145  %data = call double asm "; def $0", "=^VA"()7146  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07147  call void asm "; use $0", "^VA"(double %result)7148  ret void7149}7150 7151define void @global_atomic_fminimum_f64_ret_a_a(ptr addrspace(1) %ptr) #0 {7152; GFX90A-LABEL: global_atomic_fminimum_f64_ret_a_a:7153; GFX90A:       ; %bb.0:7154; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7155; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807156; GFX90A-NEXT:    ;;#ASMSTART7157; GFX90A-NEXT:    ; def a[0:1]7158; GFX90A-NEXT:    ;;#ASMEND7159; GFX90A-NEXT:    v_accvgpr_read_b32 v7, a17160; GFX90A-NEXT:    v_accvgpr_read_b32 v6, a07161; GFX90A-NEXT:    s_mov_b64 s[4:5], 07162; GFX90A-NEXT:    v_mov_b32_e32 v8, 0x7ff800007163; GFX90A-NEXT:  .LBB137_1: ; %atomicrmw.start7164; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17165; GFX90A-NEXT:    s_waitcnt vmcnt(0)7166; GFX90A-NEXT:    v_min_f64 v[2:3], v[4:5], v[6:7]7167; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7168; GFX90A-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7169; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7170; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc7171; GFX90A-NEXT:    s_waitcnt vmcnt(0)7172; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7173; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7174; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]7175; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7176; GFX90A-NEXT:    s_cbranch_execnz .LBB137_17177; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7178; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7179; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v27180; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v37181; GFX90A-NEXT:    ;;#ASMSTART7182; GFX90A-NEXT:    ; use a[0:1]7183; GFX90A-NEXT:    ;;#ASMEND7184; GFX90A-NEXT:    s_setpc_b64 s[30:31]7185;7186; GFX950-LABEL: global_atomic_fminimum_f64_ret_a_a:7187; GFX950:       ; %bb.0:7188; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7189; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807190; GFX950-NEXT:    ;;#ASMSTART7191; GFX950-NEXT:    ; def a[0:1]7192; GFX950-NEXT:    ;;#ASMEND7193; GFX950-NEXT:    s_mov_b64 s[0:1], 07194; GFX950-NEXT:    v_accvgpr_read_b32 v7, a17195; GFX950-NEXT:    v_accvgpr_read_b32 v6, a07196; GFX950-NEXT:    v_mov_b32_e32 v8, 0x7ff800007197; GFX950-NEXT:  .LBB137_1: ; %atomicrmw.start7198; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17199; GFX950-NEXT:    s_waitcnt vmcnt(0)7200; GFX950-NEXT:    v_min_f64 v[2:3], v[4:5], v[6:7]7201; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7202; GFX950-NEXT:    s_nop 17203; GFX950-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7204; GFX950-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7205; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc07206; GFX950-NEXT:    s_waitcnt vmcnt(0)7207; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7208; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7209; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]7210; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7211; GFX950-NEXT:    s_cbranch_execnz .LBB137_17212; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7213; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7214; GFX950-NEXT:    v_accvgpr_write_b32 a0, v27215; GFX950-NEXT:    v_accvgpr_write_b32 a1, v37216; GFX950-NEXT:    ;;#ASMSTART7217; GFX950-NEXT:    ; use a[0:1]7218; GFX950-NEXT:    ;;#ASMEND7219; GFX950-NEXT:    s_setpc_b64 s[30:31]7220  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 107221  %data = call double asm "; def $0", "=a"()7222  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07223  call void asm "; use $0", "a"(double %result)7224  ret void7225}7226 7227define void @global_atomic_fminimum_f64_ret_av_av(ptr addrspace(1) %ptr) #0 {7228; GFX90A-LABEL: global_atomic_fminimum_f64_ret_av_av:7229; GFX90A:       ; %bb.0:7230; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7231; GFX90A-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807232; GFX90A-NEXT:    s_mov_b64 s[4:5], 07233; GFX90A-NEXT:    v_mov_b32_e32 v8, 0x7ff800007234; GFX90A-NEXT:    ;;#ASMSTART7235; GFX90A-NEXT:    ; def v[6:7]7236; GFX90A-NEXT:    ;;#ASMEND7237; GFX90A-NEXT:  .LBB138_1: ; %atomicrmw.start7238; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17239; GFX90A-NEXT:    s_waitcnt vmcnt(0)7240; GFX90A-NEXT:    v_min_f64 v[2:3], v[4:5], v[6:7]7241; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7242; GFX90A-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7243; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7244; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 glc7245; GFX90A-NEXT:    s_waitcnt vmcnt(0)7246; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7247; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7248; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]7249; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7250; GFX90A-NEXT:    s_cbranch_execnz .LBB138_17251; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7252; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7253; GFX90A-NEXT:    ;;#ASMSTART7254; GFX90A-NEXT:    ; use v[2:3]7255; GFX90A-NEXT:    ;;#ASMEND7256; GFX90A-NEXT:    s_setpc_b64 s[30:31]7257;7258; GFX950-LABEL: global_atomic_fminimum_f64_ret_av_av:7259; GFX950:       ; %bb.0:7260; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7261; GFX950-NEXT:    global_load_dwordx2 v[4:5], v[0:1], off offset:807262; GFX950-NEXT:    s_mov_b64 s[0:1], 07263; GFX950-NEXT:    v_mov_b32_e32 v8, 0x7ff800007264; GFX950-NEXT:    ;;#ASMSTART7265; GFX950-NEXT:    ; def v[6:7]7266; GFX950-NEXT:    ;;#ASMEND7267; GFX950-NEXT:  .LBB138_1: ; %atomicrmw.start7268; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17269; GFX950-NEXT:    s_waitcnt vmcnt(0)7270; GFX950-NEXT:    v_min_f64 v[2:3], v[4:5], v[6:7]7271; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[4:5], v[6:7]7272; GFX950-NEXT:    s_nop 17273; GFX950-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc7274; GFX950-NEXT:    v_cndmask_b32_e64 v2, v2, 0, vcc7275; GFX950-NEXT:    global_atomic_cmpswap_x2 v[2:3], v[0:1], v[2:5], off offset:80 sc07276; GFX950-NEXT:    s_waitcnt vmcnt(0)7277; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[2:3], v[4:5]7278; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7279; GFX950-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]7280; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7281; GFX950-NEXT:    s_cbranch_execnz .LBB138_17282; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7283; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7284; GFX950-NEXT:    ;;#ASMSTART7285; GFX950-NEXT:    ; use v[2:3]7286; GFX950-NEXT:    ;;#ASMEND7287; GFX950-NEXT:    s_setpc_b64 s[30:31]7288  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 107289  %data = call double asm "; def $0", "=^VA"()7290  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07291  call void asm "; use $0", "^VA"(double %result)7292  ret void7293}7294 7295;---------------------------------------------------------------------7296; other atomics v2f16, with aa+av cases7297;---------------------------------------------------------------------7298 7299define void @global_atomic_fadd_v2f16_ret_a_a(ptr addrspace(1) %ptr) #0 {7300; GFX90A-LABEL: global_atomic_fadd_v2f16_ret_a_a:7301; GFX90A:       ; %bb.0:7302; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7303; GFX90A-NEXT:    ;;#ASMSTART7304; GFX90A-NEXT:    ; def a07305; GFX90A-NEXT:    ;;#ASMEND7306; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a07307; GFX90A-NEXT:    global_atomic_pk_add_f16 v0, v[0:1], v2, off offset:40 glc7308; GFX90A-NEXT:    s_waitcnt vmcnt(0)7309; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v07310; GFX90A-NEXT:    ;;#ASMSTART7311; GFX90A-NEXT:    ; use a07312; GFX90A-NEXT:    ;;#ASMEND7313; GFX90A-NEXT:    s_setpc_b64 s[30:31]7314;7315; GFX950-LABEL: global_atomic_fadd_v2f16_ret_a_a:7316; GFX950:       ; %bb.0:7317; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7318; GFX950-NEXT:    ;;#ASMSTART7319; GFX950-NEXT:    ; def a07320; GFX950-NEXT:    ;;#ASMEND7321; GFX950-NEXT:    s_nop 07322; GFX950-NEXT:    v_accvgpr_read_b32 v2, a07323; GFX950-NEXT:    global_atomic_pk_add_f16 v0, v[0:1], v2, off offset:40 sc07324; GFX950-NEXT:    s_waitcnt vmcnt(0)7325; GFX950-NEXT:    v_accvgpr_write_b32 a0, v07326; GFX950-NEXT:    ;;#ASMSTART7327; GFX950-NEXT:    ; use a07328; GFX950-NEXT:    ;;#ASMEND7329; GFX950-NEXT:    s_setpc_b64 s[30:31]7330  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107331  %data = call <2 x half> asm "; def $0", "=a"()7332  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07333  call void asm "; use $0", "a"(<2 x half> %result)7334  ret void7335}7336 7337define void @global_atomic_fadd_v2f16_ret_av_av(ptr addrspace(1) %ptr) #0 {7338; GFX90A-LABEL: global_atomic_fadd_v2f16_ret_av_av:7339; GFX90A:       ; %bb.0:7340; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7341; GFX90A-NEXT:    ;;#ASMSTART7342; GFX90A-NEXT:    ; def v27343; GFX90A-NEXT:    ;;#ASMEND7344; GFX90A-NEXT:    global_atomic_pk_add_f16 v0, v[0:1], v2, off offset:40 glc7345; GFX90A-NEXT:    s_waitcnt vmcnt(0)7346; GFX90A-NEXT:    ;;#ASMSTART7347; GFX90A-NEXT:    ; use v07348; GFX90A-NEXT:    ;;#ASMEND7349; GFX90A-NEXT:    s_setpc_b64 s[30:31]7350;7351; GFX950-LABEL: global_atomic_fadd_v2f16_ret_av_av:7352; GFX950:       ; %bb.0:7353; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7354; GFX950-NEXT:    ;;#ASMSTART7355; GFX950-NEXT:    ; def v27356; GFX950-NEXT:    ;;#ASMEND7357; GFX950-NEXT:    global_atomic_pk_add_f16 v0, v[0:1], v2, off offset:40 sc07358; GFX950-NEXT:    s_waitcnt vmcnt(0)7359; GFX950-NEXT:    ;;#ASMSTART7360; GFX950-NEXT:    ; use v07361; GFX950-NEXT:    ;;#ASMEND7362; GFX950-NEXT:    s_setpc_b64 s[30:31]7363  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107364  %data = call <2 x half> asm "; def $0", "=^VA"()7365  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07366  call void asm "; use $0", "^VA"(<2 x half> %result)7367  ret void7368}7369 7370define void @global_atomic_fsub_v2f16_ret_a_a(ptr addrspace(1) %ptr) #0 {7371; GFX90A-LABEL: global_atomic_fsub_v2f16_ret_a_a:7372; GFX90A:       ; %bb.0:7373; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7374; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407375; GFX90A-NEXT:    ;;#ASMSTART7376; GFX90A-NEXT:    ; def a07377; GFX90A-NEXT:    ;;#ASMEND7378; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a07379; GFX90A-NEXT:    s_mov_b64 s[4:5], 07380; GFX90A-NEXT:  .LBB141_1: ; %atomicrmw.start7381; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17382; GFX90A-NEXT:    s_waitcnt vmcnt(0)7383; GFX90A-NEXT:    v_pk_add_f16 v2, v3, v4 neg_lo:[0,1] neg_hi:[0,1]7384; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7385; GFX90A-NEXT:    s_waitcnt vmcnt(0)7386; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37387; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7388; GFX90A-NEXT:    v_mov_b32_e32 v3, v27389; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7390; GFX90A-NEXT:    s_cbranch_execnz .LBB141_17391; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7392; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7393; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v27394; GFX90A-NEXT:    ;;#ASMSTART7395; GFX90A-NEXT:    ; use a07396; GFX90A-NEXT:    ;;#ASMEND7397; GFX90A-NEXT:    s_setpc_b64 s[30:31]7398;7399; GFX950-LABEL: global_atomic_fsub_v2f16_ret_a_a:7400; GFX950:       ; %bb.0:7401; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7402; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407403; GFX950-NEXT:    ;;#ASMSTART7404; GFX950-NEXT:    ; def a07405; GFX950-NEXT:    ;;#ASMEND7406; GFX950-NEXT:    s_mov_b64 s[0:1], 07407; GFX950-NEXT:    v_accvgpr_read_b32 v4, a07408; GFX950-NEXT:  .LBB141_1: ; %atomicrmw.start7409; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17410; GFX950-NEXT:    s_waitcnt vmcnt(0)7411; GFX950-NEXT:    v_pk_add_f16 v2, v3, v4 neg_lo:[0,1] neg_hi:[0,1]7412; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07413; GFX950-NEXT:    s_waitcnt vmcnt(0)7414; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37415; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7416; GFX950-NEXT:    v_mov_b32_e32 v3, v27417; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7418; GFX950-NEXT:    s_cbranch_execnz .LBB141_17419; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7420; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7421; GFX950-NEXT:    v_accvgpr_write_b32 a0, v27422; GFX950-NEXT:    ;;#ASMSTART7423; GFX950-NEXT:    ; use a07424; GFX950-NEXT:    ;;#ASMEND7425; GFX950-NEXT:    s_setpc_b64 s[30:31]7426  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107427  %data = call <2 x half> asm "; def $0", "=a"()7428  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07429  call void asm "; use $0", "a"(<2 x half> %result)7430  ret void7431}7432 7433define void @global_atomic_fsub_v2f16_ret_av_av(ptr addrspace(1) %ptr) #0 {7434; GFX90A-LABEL: global_atomic_fsub_v2f16_ret_av_av:7435; GFX90A:       ; %bb.0:7436; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7437; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407438; GFX90A-NEXT:    s_mov_b64 s[4:5], 07439; GFX90A-NEXT:    ;;#ASMSTART7440; GFX90A-NEXT:    ; def v47441; GFX90A-NEXT:    ;;#ASMEND7442; GFX90A-NEXT:  .LBB142_1: ; %atomicrmw.start7443; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17444; GFX90A-NEXT:    s_waitcnt vmcnt(0)7445; GFX90A-NEXT:    v_pk_add_f16 v2, v3, v4 neg_lo:[0,1] neg_hi:[0,1]7446; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7447; GFX90A-NEXT:    s_waitcnt vmcnt(0)7448; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37449; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7450; GFX90A-NEXT:    v_mov_b32_e32 v3, v27451; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7452; GFX90A-NEXT:    s_cbranch_execnz .LBB142_17453; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7454; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7455; GFX90A-NEXT:    ;;#ASMSTART7456; GFX90A-NEXT:    ; use v27457; GFX90A-NEXT:    ;;#ASMEND7458; GFX90A-NEXT:    s_setpc_b64 s[30:31]7459;7460; GFX950-LABEL: global_atomic_fsub_v2f16_ret_av_av:7461; GFX950:       ; %bb.0:7462; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7463; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407464; GFX950-NEXT:    s_mov_b64 s[0:1], 07465; GFX950-NEXT:    ;;#ASMSTART7466; GFX950-NEXT:    ; def v47467; GFX950-NEXT:    ;;#ASMEND7468; GFX950-NEXT:  .LBB142_1: ; %atomicrmw.start7469; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17470; GFX950-NEXT:    s_waitcnt vmcnt(0)7471; GFX950-NEXT:    v_pk_add_f16 v2, v3, v4 neg_lo:[0,1] neg_hi:[0,1]7472; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07473; GFX950-NEXT:    s_waitcnt vmcnt(0)7474; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37475; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7476; GFX950-NEXT:    v_mov_b32_e32 v3, v27477; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7478; GFX950-NEXT:    s_cbranch_execnz .LBB142_17479; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7480; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7481; GFX950-NEXT:    ;;#ASMSTART7482; GFX950-NEXT:    ; use v27483; GFX950-NEXT:    ;;#ASMEND7484; GFX950-NEXT:    s_setpc_b64 s[30:31]7485  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107486  %data = call <2 x half> asm "; def $0", "=^VA"()7487  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07488  call void asm "; use $0", "^VA"(<2 x half> %result)7489  ret void7490}7491 7492define void @global_atomic_fmax_v2f16_ret_a_a(ptr addrspace(1) %ptr) #0 {7493; GFX90A-LABEL: global_atomic_fmax_v2f16_ret_a_a:7494; GFX90A:       ; %bb.0:7495; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7496; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407497; GFX90A-NEXT:    ;;#ASMSTART7498; GFX90A-NEXT:    ; def a07499; GFX90A-NEXT:    ;;#ASMEND7500; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a07501; GFX90A-NEXT:    s_mov_b64 s[4:5], 07502; GFX90A-NEXT:    v_pk_max_f16 v4, v2, v27503; GFX90A-NEXT:  .LBB143_1: ; %atomicrmw.start7504; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17505; GFX90A-NEXT:    s_waitcnt vmcnt(0)7506; GFX90A-NEXT:    v_pk_max_f16 v2, v3, v37507; GFX90A-NEXT:    v_pk_max_f16 v2, v2, v47508; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7509; GFX90A-NEXT:    s_waitcnt vmcnt(0)7510; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37511; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7512; GFX90A-NEXT:    v_mov_b32_e32 v3, v27513; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7514; GFX90A-NEXT:    s_cbranch_execnz .LBB143_17515; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7516; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7517; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v27518; GFX90A-NEXT:    ;;#ASMSTART7519; GFX90A-NEXT:    ; use a07520; GFX90A-NEXT:    ;;#ASMEND7521; GFX90A-NEXT:    s_setpc_b64 s[30:31]7522;7523; GFX950-LABEL: global_atomic_fmax_v2f16_ret_a_a:7524; GFX950:       ; %bb.0:7525; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7526; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407527; GFX950-NEXT:    ;;#ASMSTART7528; GFX950-NEXT:    ; def a07529; GFX950-NEXT:    ;;#ASMEND7530; GFX950-NEXT:    s_mov_b64 s[0:1], 07531; GFX950-NEXT:    v_accvgpr_read_b32 v2, a07532; GFX950-NEXT:    v_pk_max_f16 v4, v2, v27533; GFX950-NEXT:  .LBB143_1: ; %atomicrmw.start7534; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17535; GFX950-NEXT:    s_waitcnt vmcnt(0)7536; GFX950-NEXT:    v_pk_max_f16 v2, v3, v37537; GFX950-NEXT:    s_nop 07538; GFX950-NEXT:    v_pk_max_f16 v2, v2, v47539; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07540; GFX950-NEXT:    s_waitcnt vmcnt(0)7541; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37542; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7543; GFX950-NEXT:    v_mov_b32_e32 v3, v27544; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7545; GFX950-NEXT:    s_cbranch_execnz .LBB143_17546; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7547; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7548; GFX950-NEXT:    v_accvgpr_write_b32 a0, v27549; GFX950-NEXT:    ;;#ASMSTART7550; GFX950-NEXT:    ; use a07551; GFX950-NEXT:    ;;#ASMEND7552; GFX950-NEXT:    s_setpc_b64 s[30:31]7553  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107554  %data = call <2 x half> asm "; def $0", "=a"()7555  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07556  call void asm "; use $0", "a"(<2 x half> %result)7557  ret void7558}7559 7560define void @global_atomic_fmax_v2f16_ret_av_av(ptr addrspace(1) %ptr) #0 {7561; GFX90A-LABEL: global_atomic_fmax_v2f16_ret_av_av:7562; GFX90A:       ; %bb.0:7563; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7564; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407565; GFX90A-NEXT:    ;;#ASMSTART7566; GFX90A-NEXT:    ; def v27567; GFX90A-NEXT:    ;;#ASMEND7568; GFX90A-NEXT:    s_mov_b64 s[4:5], 07569; GFX90A-NEXT:    v_pk_max_f16 v4, v2, v27570; GFX90A-NEXT:  .LBB144_1: ; %atomicrmw.start7571; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17572; GFX90A-NEXT:    s_waitcnt vmcnt(0)7573; GFX90A-NEXT:    v_pk_max_f16 v2, v3, v37574; GFX90A-NEXT:    v_pk_max_f16 v2, v2, v47575; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7576; GFX90A-NEXT:    s_waitcnt vmcnt(0)7577; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37578; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7579; GFX90A-NEXT:    v_mov_b32_e32 v3, v27580; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7581; GFX90A-NEXT:    s_cbranch_execnz .LBB144_17582; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7583; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7584; GFX90A-NEXT:    ;;#ASMSTART7585; GFX90A-NEXT:    ; use v27586; GFX90A-NEXT:    ;;#ASMEND7587; GFX90A-NEXT:    s_setpc_b64 s[30:31]7588;7589; GFX950-LABEL: global_atomic_fmax_v2f16_ret_av_av:7590; GFX950:       ; %bb.0:7591; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7592; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407593; GFX950-NEXT:    ;;#ASMSTART7594; GFX950-NEXT:    ; def v27595; GFX950-NEXT:    ;;#ASMEND7596; GFX950-NEXT:    s_mov_b64 s[0:1], 07597; GFX950-NEXT:    v_pk_max_f16 v4, v2, v27598; GFX950-NEXT:  .LBB144_1: ; %atomicrmw.start7599; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17600; GFX950-NEXT:    s_waitcnt vmcnt(0)7601; GFX950-NEXT:    v_pk_max_f16 v2, v3, v37602; GFX950-NEXT:    s_nop 07603; GFX950-NEXT:    v_pk_max_f16 v2, v2, v47604; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07605; GFX950-NEXT:    s_waitcnt vmcnt(0)7606; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37607; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7608; GFX950-NEXT:    v_mov_b32_e32 v3, v27609; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7610; GFX950-NEXT:    s_cbranch_execnz .LBB144_17611; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7612; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7613; GFX950-NEXT:    ;;#ASMSTART7614; GFX950-NEXT:    ; use v27615; GFX950-NEXT:    ;;#ASMEND7616; GFX950-NEXT:    s_setpc_b64 s[30:31]7617  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107618  %data = call <2 x half> asm "; def $0", "=^VA"()7619  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07620  call void asm "; use $0", "^VA"(<2 x half> %result)7621  ret void7622}7623 7624define void @global_atomic_fmin_v2f16_ret_a_a(ptr addrspace(1) %ptr) #0 {7625; GFX90A-LABEL: global_atomic_fmin_v2f16_ret_a_a:7626; GFX90A:       ; %bb.0:7627; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7628; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407629; GFX90A-NEXT:    ;;#ASMSTART7630; GFX90A-NEXT:    ; def a07631; GFX90A-NEXT:    ;;#ASMEND7632; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a07633; GFX90A-NEXT:    s_mov_b64 s[4:5], 07634; GFX90A-NEXT:    v_pk_max_f16 v4, v2, v27635; GFX90A-NEXT:  .LBB145_1: ; %atomicrmw.start7636; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17637; GFX90A-NEXT:    s_waitcnt vmcnt(0)7638; GFX90A-NEXT:    v_pk_max_f16 v2, v3, v37639; GFX90A-NEXT:    v_pk_min_f16 v2, v2, v47640; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7641; GFX90A-NEXT:    s_waitcnt vmcnt(0)7642; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37643; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7644; GFX90A-NEXT:    v_mov_b32_e32 v3, v27645; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7646; GFX90A-NEXT:    s_cbranch_execnz .LBB145_17647; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7648; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7649; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v27650; GFX90A-NEXT:    ;;#ASMSTART7651; GFX90A-NEXT:    ; use a07652; GFX90A-NEXT:    ;;#ASMEND7653; GFX90A-NEXT:    s_setpc_b64 s[30:31]7654;7655; GFX950-LABEL: global_atomic_fmin_v2f16_ret_a_a:7656; GFX950:       ; %bb.0:7657; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7658; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407659; GFX950-NEXT:    ;;#ASMSTART7660; GFX950-NEXT:    ; def a07661; GFX950-NEXT:    ;;#ASMEND7662; GFX950-NEXT:    s_mov_b64 s[0:1], 07663; GFX950-NEXT:    v_accvgpr_read_b32 v2, a07664; GFX950-NEXT:    v_pk_max_f16 v4, v2, v27665; GFX950-NEXT:  .LBB145_1: ; %atomicrmw.start7666; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17667; GFX950-NEXT:    s_waitcnt vmcnt(0)7668; GFX950-NEXT:    v_pk_max_f16 v2, v3, v37669; GFX950-NEXT:    s_nop 07670; GFX950-NEXT:    v_pk_min_f16 v2, v2, v47671; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07672; GFX950-NEXT:    s_waitcnt vmcnt(0)7673; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37674; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7675; GFX950-NEXT:    v_mov_b32_e32 v3, v27676; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7677; GFX950-NEXT:    s_cbranch_execnz .LBB145_17678; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7679; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7680; GFX950-NEXT:    v_accvgpr_write_b32 a0, v27681; GFX950-NEXT:    ;;#ASMSTART7682; GFX950-NEXT:    ; use a07683; GFX950-NEXT:    ;;#ASMEND7684; GFX950-NEXT:    s_setpc_b64 s[30:31]7685  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107686  %data = call <2 x half> asm "; def $0", "=a"()7687  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07688  call void asm "; use $0", "a"(<2 x half> %result)7689  ret void7690}7691 7692define void @global_atomic_fmin_v2f16_ret_av_av(ptr addrspace(1) %ptr) #0 {7693; GFX90A-LABEL: global_atomic_fmin_v2f16_ret_av_av:7694; GFX90A:       ; %bb.0:7695; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7696; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407697; GFX90A-NEXT:    ;;#ASMSTART7698; GFX90A-NEXT:    ; def v27699; GFX90A-NEXT:    ;;#ASMEND7700; GFX90A-NEXT:    s_mov_b64 s[4:5], 07701; GFX90A-NEXT:    v_pk_max_f16 v4, v2, v27702; GFX90A-NEXT:  .LBB146_1: ; %atomicrmw.start7703; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17704; GFX90A-NEXT:    s_waitcnt vmcnt(0)7705; GFX90A-NEXT:    v_pk_max_f16 v2, v3, v37706; GFX90A-NEXT:    v_pk_min_f16 v2, v2, v47707; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7708; GFX90A-NEXT:    s_waitcnt vmcnt(0)7709; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37710; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7711; GFX90A-NEXT:    v_mov_b32_e32 v3, v27712; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]7713; GFX90A-NEXT:    s_cbranch_execnz .LBB146_17714; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7715; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]7716; GFX90A-NEXT:    ;;#ASMSTART7717; GFX90A-NEXT:    ; use v27718; GFX90A-NEXT:    ;;#ASMEND7719; GFX90A-NEXT:    s_setpc_b64 s[30:31]7720;7721; GFX950-LABEL: global_atomic_fmin_v2f16_ret_av_av:7722; GFX950:       ; %bb.0:7723; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7724; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407725; GFX950-NEXT:    ;;#ASMSTART7726; GFX950-NEXT:    ; def v27727; GFX950-NEXT:    ;;#ASMEND7728; GFX950-NEXT:    s_mov_b64 s[0:1], 07729; GFX950-NEXT:    v_pk_max_f16 v4, v2, v27730; GFX950-NEXT:  .LBB146_1: ; %atomicrmw.start7731; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17732; GFX950-NEXT:    s_waitcnt vmcnt(0)7733; GFX950-NEXT:    v_pk_max_f16 v2, v3, v37734; GFX950-NEXT:    s_nop 07735; GFX950-NEXT:    v_pk_min_f16 v2, v2, v47736; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07737; GFX950-NEXT:    s_waitcnt vmcnt(0)7738; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37739; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7740; GFX950-NEXT:    v_mov_b32_e32 v3, v27741; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7742; GFX950-NEXT:    s_cbranch_execnz .LBB146_17743; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7744; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7745; GFX950-NEXT:    ;;#ASMSTART7746; GFX950-NEXT:    ; use v27747; GFX950-NEXT:    ;;#ASMEND7748; GFX950-NEXT:    s_setpc_b64 s[30:31]7749  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107750  %data = call <2 x half> asm "; def $0", "=^VA"()7751  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07752  call void asm "; use $0", "^VA"(<2 x half> %result)7753  ret void7754}7755 7756define void @global_atomic_fmaximum_v2f16_ret_a_a(ptr addrspace(1) %ptr) #0 {7757; GFX90A-LABEL: global_atomic_fmaximum_v2f16_ret_a_a:7758; GFX90A:       ; %bb.0:7759; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7760; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407761; GFX90A-NEXT:    ;;#ASMSTART7762; GFX90A-NEXT:    ; def a07763; GFX90A-NEXT:    ;;#ASMEND7764; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a07765; GFX90A-NEXT:    s_mov_b64 s[6:7], 07766; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7e007767; GFX90A-NEXT:    s_mov_b32 s8, 0x50401007768; GFX90A-NEXT:  .LBB147_1: ; %atomicrmw.start7769; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17770; GFX90A-NEXT:    s_waitcnt vmcnt(0)7771; GFX90A-NEXT:    v_pk_max_f16 v2, v3, v47772; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v4 src0_sel:WORD_1 src1_sel:WORD_17773; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v3, v47774; GFX90A-NEXT:    v_cndmask_b32_e64 v6, v5, v2, s[4:5]7775; GFX90A-NEXT:    v_cndmask_b32_sdwa v2, v5, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_17776; GFX90A-NEXT:    v_perm_b32 v2, v2, v6, s87777; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7778; GFX90A-NEXT:    s_waitcnt vmcnt(0)7779; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37780; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]7781; GFX90A-NEXT:    v_mov_b32_e32 v3, v27782; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]7783; GFX90A-NEXT:    s_cbranch_execnz .LBB147_17784; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7785; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]7786; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v27787; GFX90A-NEXT:    ;;#ASMSTART7788; GFX90A-NEXT:    ; use a07789; GFX90A-NEXT:    ;;#ASMEND7790; GFX90A-NEXT:    s_setpc_b64 s[30:31]7791;7792; GFX950-LABEL: global_atomic_fmaximum_v2f16_ret_a_a:7793; GFX950:       ; %bb.0:7794; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7795; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407796; GFX950-NEXT:    ;;#ASMSTART7797; GFX950-NEXT:    ; def a07798; GFX950-NEXT:    ;;#ASMEND7799; GFX950-NEXT:    s_mov_b64 s[0:1], 07800; GFX950-NEXT:    v_accvgpr_read_b32 v4, a07801; GFX950-NEXT:  .LBB147_1: ; %atomicrmw.start7802; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17803; GFX950-NEXT:    s_waitcnt vmcnt(0)7804; GFX950-NEXT:    v_pk_maximum3_f16 v2, v3, v4, v47805; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07806; GFX950-NEXT:    s_waitcnt vmcnt(0)7807; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37808; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7809; GFX950-NEXT:    v_mov_b32_e32 v3, v27810; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7811; GFX950-NEXT:    s_cbranch_execnz .LBB147_17812; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7813; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7814; GFX950-NEXT:    v_accvgpr_write_b32 a0, v27815; GFX950-NEXT:    ;;#ASMSTART7816; GFX950-NEXT:    ; use a07817; GFX950-NEXT:    ;;#ASMEND7818; GFX950-NEXT:    s_setpc_b64 s[30:31]7819  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107820  %data = call <2 x half> asm "; def $0", "=a"()7821  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07822  call void asm "; use $0", "a"(<2 x half> %result)7823  ret void7824}7825 7826define void @global_atomic_fmaximum_v2f16_ret_av_av(ptr addrspace(1) %ptr) #0 {7827; GFX90A-LABEL: global_atomic_fmaximum_v2f16_ret_av_av:7828; GFX90A:       ; %bb.0:7829; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7830; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407831; GFX90A-NEXT:    s_mov_b64 s[6:7], 07832; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7e007833; GFX90A-NEXT:    s_mov_b32 s8, 0x50401007834; GFX90A-NEXT:    ;;#ASMSTART7835; GFX90A-NEXT:    ; def v47836; GFX90A-NEXT:    ;;#ASMEND7837; GFX90A-NEXT:  .LBB148_1: ; %atomicrmw.start7838; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17839; GFX90A-NEXT:    s_waitcnt vmcnt(0)7840; GFX90A-NEXT:    v_pk_max_f16 v2, v3, v47841; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v4 src0_sel:WORD_1 src1_sel:WORD_17842; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v3, v47843; GFX90A-NEXT:    v_cndmask_b32_e64 v6, v5, v2, s[4:5]7844; GFX90A-NEXT:    v_cndmask_b32_sdwa v2, v5, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_17845; GFX90A-NEXT:    v_perm_b32 v2, v2, v6, s87846; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7847; GFX90A-NEXT:    s_waitcnt vmcnt(0)7848; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37849; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]7850; GFX90A-NEXT:    v_mov_b32_e32 v3, v27851; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]7852; GFX90A-NEXT:    s_cbranch_execnz .LBB148_17853; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7854; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]7855; GFX90A-NEXT:    ;;#ASMSTART7856; GFX90A-NEXT:    ; use v27857; GFX90A-NEXT:    ;;#ASMEND7858; GFX90A-NEXT:    s_setpc_b64 s[30:31]7859;7860; GFX950-LABEL: global_atomic_fmaximum_v2f16_ret_av_av:7861; GFX950:       ; %bb.0:7862; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7863; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407864; GFX950-NEXT:    s_mov_b64 s[0:1], 07865; GFX950-NEXT:    ;;#ASMSTART7866; GFX950-NEXT:    ; def v47867; GFX950-NEXT:    ;;#ASMEND7868; GFX950-NEXT:  .LBB148_1: ; %atomicrmw.start7869; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17870; GFX950-NEXT:    s_waitcnt vmcnt(0)7871; GFX950-NEXT:    v_pk_maximum3_f16 v2, v3, v4, v47872; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07873; GFX950-NEXT:    s_waitcnt vmcnt(0)7874; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37875; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7876; GFX950-NEXT:    v_mov_b32_e32 v3, v27877; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7878; GFX950-NEXT:    s_cbranch_execnz .LBB148_17879; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7880; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7881; GFX950-NEXT:    ;;#ASMSTART7882; GFX950-NEXT:    ; use v27883; GFX950-NEXT:    ;;#ASMEND7884; GFX950-NEXT:    s_setpc_b64 s[30:31]7885  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107886  %data = call <2 x half> asm "; def $0", "=^VA"()7887  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07888  call void asm "; use $0", "^VA"(<2 x half> %result)7889  ret void7890}7891 7892define void @global_atomic_fminimum_v2f16_ret_a_a(ptr addrspace(1) %ptr) #0 {7893; GFX90A-LABEL: global_atomic_fminimum_v2f16_ret_a_a:7894; GFX90A:       ; %bb.0:7895; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7896; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407897; GFX90A-NEXT:    ;;#ASMSTART7898; GFX90A-NEXT:    ; def a07899; GFX90A-NEXT:    ;;#ASMEND7900; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a07901; GFX90A-NEXT:    s_mov_b64 s[6:7], 07902; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7e007903; GFX90A-NEXT:    s_mov_b32 s8, 0x50401007904; GFX90A-NEXT:  .LBB149_1: ; %atomicrmw.start7905; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17906; GFX90A-NEXT:    s_waitcnt vmcnt(0)7907; GFX90A-NEXT:    v_pk_min_f16 v2, v3, v47908; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v4 src0_sel:WORD_1 src1_sel:WORD_17909; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v3, v47910; GFX90A-NEXT:    v_cndmask_b32_e64 v6, v5, v2, s[4:5]7911; GFX90A-NEXT:    v_cndmask_b32_sdwa v2, v5, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_17912; GFX90A-NEXT:    v_perm_b32 v2, v2, v6, s87913; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7914; GFX90A-NEXT:    s_waitcnt vmcnt(0)7915; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37916; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]7917; GFX90A-NEXT:    v_mov_b32_e32 v3, v27918; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]7919; GFX90A-NEXT:    s_cbranch_execnz .LBB149_17920; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7921; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]7922; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v27923; GFX90A-NEXT:    ;;#ASMSTART7924; GFX90A-NEXT:    ; use a07925; GFX90A-NEXT:    ;;#ASMEND7926; GFX90A-NEXT:    s_setpc_b64 s[30:31]7927;7928; GFX950-LABEL: global_atomic_fminimum_v2f16_ret_a_a:7929; GFX950:       ; %bb.0:7930; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7931; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:407932; GFX950-NEXT:    ;;#ASMSTART7933; GFX950-NEXT:    ; def a07934; GFX950-NEXT:    ;;#ASMEND7935; GFX950-NEXT:    s_mov_b64 s[0:1], 07936; GFX950-NEXT:    v_accvgpr_read_b32 v4, a07937; GFX950-NEXT:  .LBB149_1: ; %atomicrmw.start7938; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=17939; GFX950-NEXT:    s_waitcnt vmcnt(0)7940; GFX950-NEXT:    v_pk_minimum3_f16 v2, v3, v4, v47941; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc07942; GFX950-NEXT:    s_waitcnt vmcnt(0)7943; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37944; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7945; GFX950-NEXT:    v_mov_b32_e32 v3, v27946; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]7947; GFX950-NEXT:    s_cbranch_execnz .LBB149_17948; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end7949; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]7950; GFX950-NEXT:    v_accvgpr_write_b32 a0, v27951; GFX950-NEXT:    ;;#ASMSTART7952; GFX950-NEXT:    ; use a07953; GFX950-NEXT:    ;;#ASMEND7954; GFX950-NEXT:    s_setpc_b64 s[30:31]7955  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 107956  %data = call <2 x half> asm "; def $0", "=a"()7957  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !07958  call void asm "; use $0", "a"(<2 x half> %result)7959  ret void7960}7961 7962define void @global_atomic_fminimum_v2f16_ret_av_av(ptr addrspace(1) %ptr) #0 {7963; GFX90A-LABEL: global_atomic_fminimum_v2f16_ret_av_av:7964; GFX90A:       ; %bb.0:7965; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7966; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:407967; GFX90A-NEXT:    s_mov_b64 s[6:7], 07968; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7e007969; GFX90A-NEXT:    s_mov_b32 s8, 0x50401007970; GFX90A-NEXT:    ;;#ASMSTART7971; GFX90A-NEXT:    ; def v47972; GFX90A-NEXT:    ;;#ASMEND7973; GFX90A-NEXT:  .LBB150_1: ; %atomicrmw.start7974; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=17975; GFX90A-NEXT:    s_waitcnt vmcnt(0)7976; GFX90A-NEXT:    v_pk_min_f16 v2, v3, v47977; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v4 src0_sel:WORD_1 src1_sel:WORD_17978; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v3, v47979; GFX90A-NEXT:    v_cndmask_b32_e64 v6, v5, v2, s[4:5]7980; GFX90A-NEXT:    v_cndmask_b32_sdwa v2, v5, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_17981; GFX90A-NEXT:    v_perm_b32 v2, v2, v6, s87982; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc7983; GFX90A-NEXT:    s_waitcnt vmcnt(0)7984; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37985; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]7986; GFX90A-NEXT:    v_mov_b32_e32 v3, v27987; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]7988; GFX90A-NEXT:    s_cbranch_execnz .LBB150_17989; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end7990; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]7991; GFX90A-NEXT:    ;;#ASMSTART7992; GFX90A-NEXT:    ; use v27993; GFX90A-NEXT:    ;;#ASMEND7994; GFX90A-NEXT:    s_setpc_b64 s[30:31]7995;7996; GFX950-LABEL: global_atomic_fminimum_v2f16_ret_av_av:7997; GFX950:       ; %bb.0:7998; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7999; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408000; GFX950-NEXT:    s_mov_b64 s[0:1], 08001; GFX950-NEXT:    ;;#ASMSTART8002; GFX950-NEXT:    ; def v48003; GFX950-NEXT:    ;;#ASMEND8004; GFX950-NEXT:  .LBB150_1: ; %atomicrmw.start8005; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18006; GFX950-NEXT:    s_waitcnt vmcnt(0)8007; GFX950-NEXT:    v_pk_minimum3_f16 v2, v3, v4, v48008; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08009; GFX950-NEXT:    s_waitcnt vmcnt(0)8010; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38011; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8012; GFX950-NEXT:    v_mov_b32_e32 v3, v28013; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8014; GFX950-NEXT:    s_cbranch_execnz .LBB150_18015; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8016; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8017; GFX950-NEXT:    ;;#ASMSTART8018; GFX950-NEXT:    ; use v28019; GFX950-NEXT:    ;;#ASMEND8020; GFX950-NEXT:    s_setpc_b64 s[30:31]8021  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 108022  %data = call <2 x half> asm "; def $0", "=^VA"()8023  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08024  call void asm "; use $0", "^VA"(<2 x half> %result)8025  ret void8026}8027 8028;---------------------------------------------------------------------8029; other atomics v2bf16, with aa+av cases8030;---------------------------------------------------------------------8031 8032define void @global_atomic_fadd_v2bf16_ret_a_a(ptr addrspace(1) %ptr) #0 {8033; GFX90A-LABEL: global_atomic_fadd_v2bf16_ret_a_a:8034; GFX90A:       ; %bb.0:8035; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8036; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408037; GFX90A-NEXT:    ;;#ASMSTART8038; GFX90A-NEXT:    ; def a08039; GFX90A-NEXT:    ;;#ASMEND8040; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a08041; GFX90A-NEXT:    s_mov_b64 s[6:7], 08042; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28043; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8044; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28045; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028046; GFX90A-NEXT:  .LBB151_1: ; %atomicrmw.start8047; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18048; GFX90A-NEXT:    s_waitcnt vmcnt(0)8049; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38050; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38051; GFX90A-NEXT:    v_add_f32_e32 v2, v2, v48052; GFX90A-NEXT:    v_add_f32_e32 v6, v6, v58053; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18054; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18055; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28056; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68057; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88058; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88059; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68060; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28061; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8062; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8063; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98064; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8065; GFX90A-NEXT:    s_waitcnt vmcnt(0)8066; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38067; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8068; GFX90A-NEXT:    v_mov_b32_e32 v3, v28069; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8070; GFX90A-NEXT:    s_cbranch_execnz .LBB151_18071; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8072; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8073; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v28074; GFX90A-NEXT:    ;;#ASMSTART8075; GFX90A-NEXT:    ; use a08076; GFX90A-NEXT:    ;;#ASMEND8077; GFX90A-NEXT:    s_setpc_b64 s[30:31]8078;8079; GFX950-LABEL: global_atomic_fadd_v2bf16_ret_a_a:8080; GFX950:       ; %bb.0:8081; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8082; GFX950-NEXT:    ;;#ASMSTART8083; GFX950-NEXT:    ; def a08084; GFX950-NEXT:    ;;#ASMEND8085; GFX950-NEXT:    s_nop 08086; GFX950-NEXT:    v_accvgpr_read_b32 v2, a08087; GFX950-NEXT:    global_atomic_pk_add_bf16 v0, v[0:1], v2, off offset:40 sc08088; GFX950-NEXT:    s_waitcnt vmcnt(0)8089; GFX950-NEXT:    v_accvgpr_write_b32 a0, v08090; GFX950-NEXT:    ;;#ASMSTART8091; GFX950-NEXT:    ; use a08092; GFX950-NEXT:    ;;#ASMEND8093; GFX950-NEXT:    s_setpc_b64 s[30:31]8094  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108095  %data = call <2 x bfloat> asm "; def $0", "=a"()8096  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08097  call void asm "; use $0", "a"(<2 x bfloat> %result)8098  ret void8099}8100 8101define void @global_atomic_fadd_v2bf16_ret_av_av(ptr addrspace(1) %ptr) #0 {8102; GFX90A-LABEL: global_atomic_fadd_v2bf16_ret_av_av:8103; GFX90A:       ; %bb.0:8104; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8105; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408106; GFX90A-NEXT:    ;;#ASMSTART8107; GFX90A-NEXT:    ; def v28108; GFX90A-NEXT:    ;;#ASMEND8109; GFX90A-NEXT:    s_mov_b64 s[6:7], 08110; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28111; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8112; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28113; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028114; GFX90A-NEXT:  .LBB152_1: ; %atomicrmw.start8115; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18116; GFX90A-NEXT:    s_waitcnt vmcnt(0)8117; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38118; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38119; GFX90A-NEXT:    v_add_f32_e32 v2, v2, v48120; GFX90A-NEXT:    v_add_f32_e32 v6, v6, v58121; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18122; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18123; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28124; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68125; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88126; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88127; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68128; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28129; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8130; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8131; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98132; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8133; GFX90A-NEXT:    s_waitcnt vmcnt(0)8134; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38135; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8136; GFX90A-NEXT:    v_mov_b32_e32 v3, v28137; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8138; GFX90A-NEXT:    s_cbranch_execnz .LBB152_18139; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8140; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8141; GFX90A-NEXT:    ;;#ASMSTART8142; GFX90A-NEXT:    ; use v28143; GFX90A-NEXT:    ;;#ASMEND8144; GFX90A-NEXT:    s_setpc_b64 s[30:31]8145;8146; GFX950-LABEL: global_atomic_fadd_v2bf16_ret_av_av:8147; GFX950:       ; %bb.0:8148; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8149; GFX950-NEXT:    ;;#ASMSTART8150; GFX950-NEXT:    ; def v28151; GFX950-NEXT:    ;;#ASMEND8152; GFX950-NEXT:    global_atomic_pk_add_bf16 v0, v[0:1], v2, off offset:40 sc08153; GFX950-NEXT:    s_waitcnt vmcnt(0)8154; GFX950-NEXT:    ;;#ASMSTART8155; GFX950-NEXT:    ; use v08156; GFX950-NEXT:    ;;#ASMEND8157; GFX950-NEXT:    s_setpc_b64 s[30:31]8158  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108159  %data = call <2 x bfloat> asm "; def $0", "=^VA"()8160  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08161  call void asm "; use $0", "^VA"(<2 x bfloat> %result)8162  ret void8163}8164 8165define void @global_atomic_fsub_v2bf16_ret_a_a(ptr addrspace(1) %ptr) #0 {8166; GFX90A-LABEL: global_atomic_fsub_v2bf16_ret_a_a:8167; GFX90A:       ; %bb.0:8168; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8169; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408170; GFX90A-NEXT:    ;;#ASMSTART8171; GFX90A-NEXT:    ; def a08172; GFX90A-NEXT:    ;;#ASMEND8173; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a08174; GFX90A-NEXT:    s_mov_b64 s[6:7], 08175; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28176; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8177; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28178; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028179; GFX90A-NEXT:  .LBB153_1: ; %atomicrmw.start8180; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18181; GFX90A-NEXT:    s_waitcnt vmcnt(0)8182; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38183; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38184; GFX90A-NEXT:    v_sub_f32_e32 v2, v2, v48185; GFX90A-NEXT:    v_sub_f32_e32 v6, v6, v58186; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18187; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18188; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28189; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68190; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88191; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88192; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68193; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28194; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8195; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8196; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98197; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8198; GFX90A-NEXT:    s_waitcnt vmcnt(0)8199; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38200; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8201; GFX90A-NEXT:    v_mov_b32_e32 v3, v28202; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8203; GFX90A-NEXT:    s_cbranch_execnz .LBB153_18204; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8205; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8206; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v28207; GFX90A-NEXT:    ;;#ASMSTART8208; GFX90A-NEXT:    ; use a08209; GFX90A-NEXT:    ;;#ASMEND8210; GFX90A-NEXT:    s_setpc_b64 s[30:31]8211;8212; GFX950-LABEL: global_atomic_fsub_v2bf16_ret_a_a:8213; GFX950:       ; %bb.0:8214; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8215; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408216; GFX950-NEXT:    ;;#ASMSTART8217; GFX950-NEXT:    ; def a08218; GFX950-NEXT:    ;;#ASMEND8219; GFX950-NEXT:    s_mov_b64 s[0:1], 08220; GFX950-NEXT:    v_accvgpr_read_b32 v2, a08221; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28222; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28223; GFX950-NEXT:  .LBB153_1: ; %atomicrmw.start8224; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18225; GFX950-NEXT:    s_waitcnt vmcnt(0)8226; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38227; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38228; GFX950-NEXT:    v_sub_f32_e32 v2, v2, v48229; GFX950-NEXT:    v_sub_f32_e32 v6, v6, v58230; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28231; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08232; GFX950-NEXT:    s_waitcnt vmcnt(0)8233; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38234; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8235; GFX950-NEXT:    v_mov_b32_e32 v3, v28236; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8237; GFX950-NEXT:    s_cbranch_execnz .LBB153_18238; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8239; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8240; GFX950-NEXT:    v_accvgpr_write_b32 a0, v28241; GFX950-NEXT:    ;;#ASMSTART8242; GFX950-NEXT:    ; use a08243; GFX950-NEXT:    ;;#ASMEND8244; GFX950-NEXT:    s_setpc_b64 s[30:31]8245  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108246  %data = call <2 x bfloat> asm "; def $0", "=a"()8247  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08248  call void asm "; use $0", "a"(<2 x bfloat> %result)8249  ret void8250}8251 8252define void @global_atomic_fsub_v2bf16_ret_av_av(ptr addrspace(1) %ptr) #0 {8253; GFX90A-LABEL: global_atomic_fsub_v2bf16_ret_av_av:8254; GFX90A:       ; %bb.0:8255; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8256; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408257; GFX90A-NEXT:    ;;#ASMSTART8258; GFX90A-NEXT:    ; def v28259; GFX90A-NEXT:    ;;#ASMEND8260; GFX90A-NEXT:    s_mov_b64 s[6:7], 08261; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28262; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8263; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28264; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028265; GFX90A-NEXT:  .LBB154_1: ; %atomicrmw.start8266; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18267; GFX90A-NEXT:    s_waitcnt vmcnt(0)8268; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38269; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38270; GFX90A-NEXT:    v_sub_f32_e32 v2, v2, v48271; GFX90A-NEXT:    v_sub_f32_e32 v6, v6, v58272; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18273; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18274; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28275; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68276; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88277; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88278; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68279; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28280; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8281; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8282; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98283; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8284; GFX90A-NEXT:    s_waitcnt vmcnt(0)8285; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38286; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8287; GFX90A-NEXT:    v_mov_b32_e32 v3, v28288; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8289; GFX90A-NEXT:    s_cbranch_execnz .LBB154_18290; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8291; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8292; GFX90A-NEXT:    ;;#ASMSTART8293; GFX90A-NEXT:    ; use v28294; GFX90A-NEXT:    ;;#ASMEND8295; GFX90A-NEXT:    s_setpc_b64 s[30:31]8296;8297; GFX950-LABEL: global_atomic_fsub_v2bf16_ret_av_av:8298; GFX950:       ; %bb.0:8299; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8300; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408301; GFX950-NEXT:    ;;#ASMSTART8302; GFX950-NEXT:    ; def v28303; GFX950-NEXT:    ;;#ASMEND8304; GFX950-NEXT:    s_mov_b64 s[0:1], 08305; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28306; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28307; GFX950-NEXT:  .LBB154_1: ; %atomicrmw.start8308; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18309; GFX950-NEXT:    s_waitcnt vmcnt(0)8310; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38311; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38312; GFX950-NEXT:    v_sub_f32_e32 v2, v2, v48313; GFX950-NEXT:    v_sub_f32_e32 v6, v6, v58314; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28315; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08316; GFX950-NEXT:    s_waitcnt vmcnt(0)8317; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38318; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8319; GFX950-NEXT:    v_mov_b32_e32 v3, v28320; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8321; GFX950-NEXT:    s_cbranch_execnz .LBB154_18322; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8323; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8324; GFX950-NEXT:    ;;#ASMSTART8325; GFX950-NEXT:    ; use v28326; GFX950-NEXT:    ;;#ASMEND8327; GFX950-NEXT:    s_setpc_b64 s[30:31]8328  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108329  %data = call <2 x bfloat> asm "; def $0", "=^VA"()8330  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08331  call void asm "; use $0", "^VA"(<2 x bfloat> %result)8332  ret void8333}8334 8335define void @global_atomic_fmax_v2bf16_ret_a_a(ptr addrspace(1) %ptr) #0 {8336; GFX90A-LABEL: global_atomic_fmax_v2bf16_ret_a_a:8337; GFX90A:       ; %bb.0:8338; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8339; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408340; GFX90A-NEXT:    ;;#ASMSTART8341; GFX90A-NEXT:    ; def a08342; GFX90A-NEXT:    ;;#ASMEND8343; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a08344; GFX90A-NEXT:    s_mov_b64 s[6:7], 08345; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28346; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8347; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28348; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028349; GFX90A-NEXT:  .LBB155_1: ; %atomicrmw.start8350; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18351; GFX90A-NEXT:    s_waitcnt vmcnt(0)8352; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38353; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38354; GFX90A-NEXT:    v_max_f32_e32 v2, v2, v48355; GFX90A-NEXT:    v_max_f32_e32 v6, v6, v58356; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18357; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18358; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28359; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68360; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88361; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88362; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68363; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28364; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8365; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8366; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98367; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8368; GFX90A-NEXT:    s_waitcnt vmcnt(0)8369; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38370; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8371; GFX90A-NEXT:    v_mov_b32_e32 v3, v28372; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8373; GFX90A-NEXT:    s_cbranch_execnz .LBB155_18374; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8375; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8376; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v28377; GFX90A-NEXT:    ;;#ASMSTART8378; GFX90A-NEXT:    ; use a08379; GFX90A-NEXT:    ;;#ASMEND8380; GFX90A-NEXT:    s_setpc_b64 s[30:31]8381;8382; GFX950-LABEL: global_atomic_fmax_v2bf16_ret_a_a:8383; GFX950:       ; %bb.0:8384; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8385; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408386; GFX950-NEXT:    ;;#ASMSTART8387; GFX950-NEXT:    ; def a08388; GFX950-NEXT:    ;;#ASMEND8389; GFX950-NEXT:    s_mov_b64 s[0:1], 08390; GFX950-NEXT:    v_accvgpr_read_b32 v2, a08391; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28392; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28393; GFX950-NEXT:  .LBB155_1: ; %atomicrmw.start8394; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18395; GFX950-NEXT:    s_waitcnt vmcnt(0)8396; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38397; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38398; GFX950-NEXT:    v_max_f32_e32 v2, v2, v48399; GFX950-NEXT:    v_max_f32_e32 v6, v6, v58400; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28401; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08402; GFX950-NEXT:    s_waitcnt vmcnt(0)8403; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38404; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8405; GFX950-NEXT:    v_mov_b32_e32 v3, v28406; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8407; GFX950-NEXT:    s_cbranch_execnz .LBB155_18408; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8409; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8410; GFX950-NEXT:    v_accvgpr_write_b32 a0, v28411; GFX950-NEXT:    ;;#ASMSTART8412; GFX950-NEXT:    ; use a08413; GFX950-NEXT:    ;;#ASMEND8414; GFX950-NEXT:    s_setpc_b64 s[30:31]8415  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108416  %data = call <2 x bfloat> asm "; def $0", "=a"()8417  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08418  call void asm "; use $0", "a"(<2 x bfloat> %result)8419  ret void8420}8421 8422define void @global_atomic_fmax_v2bf16_ret_av_av(ptr addrspace(1) %ptr) #0 {8423; GFX90A-LABEL: global_atomic_fmax_v2bf16_ret_av_av:8424; GFX90A:       ; %bb.0:8425; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8426; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408427; GFX90A-NEXT:    ;;#ASMSTART8428; GFX90A-NEXT:    ; def v28429; GFX90A-NEXT:    ;;#ASMEND8430; GFX90A-NEXT:    s_mov_b64 s[6:7], 08431; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28432; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8433; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28434; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028435; GFX90A-NEXT:  .LBB156_1: ; %atomicrmw.start8436; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18437; GFX90A-NEXT:    s_waitcnt vmcnt(0)8438; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38439; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38440; GFX90A-NEXT:    v_max_f32_e32 v2, v2, v48441; GFX90A-NEXT:    v_max_f32_e32 v6, v6, v58442; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18443; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18444; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28445; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68446; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88447; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88448; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68449; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28450; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8451; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8452; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98453; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8454; GFX90A-NEXT:    s_waitcnt vmcnt(0)8455; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38456; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8457; GFX90A-NEXT:    v_mov_b32_e32 v3, v28458; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8459; GFX90A-NEXT:    s_cbranch_execnz .LBB156_18460; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8461; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8462; GFX90A-NEXT:    ;;#ASMSTART8463; GFX90A-NEXT:    ; use v28464; GFX90A-NEXT:    ;;#ASMEND8465; GFX90A-NEXT:    s_setpc_b64 s[30:31]8466;8467; GFX950-LABEL: global_atomic_fmax_v2bf16_ret_av_av:8468; GFX950:       ; %bb.0:8469; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8470; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408471; GFX950-NEXT:    ;;#ASMSTART8472; GFX950-NEXT:    ; def v28473; GFX950-NEXT:    ;;#ASMEND8474; GFX950-NEXT:    s_mov_b64 s[0:1], 08475; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28476; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28477; GFX950-NEXT:  .LBB156_1: ; %atomicrmw.start8478; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18479; GFX950-NEXT:    s_waitcnt vmcnt(0)8480; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38481; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38482; GFX950-NEXT:    v_max_f32_e32 v2, v2, v48483; GFX950-NEXT:    v_max_f32_e32 v6, v6, v58484; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28485; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08486; GFX950-NEXT:    s_waitcnt vmcnt(0)8487; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38488; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8489; GFX950-NEXT:    v_mov_b32_e32 v3, v28490; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8491; GFX950-NEXT:    s_cbranch_execnz .LBB156_18492; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8493; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8494; GFX950-NEXT:    ;;#ASMSTART8495; GFX950-NEXT:    ; use v28496; GFX950-NEXT:    ;;#ASMEND8497; GFX950-NEXT:    s_setpc_b64 s[30:31]8498  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108499  %data = call <2 x bfloat> asm "; def $0", "=^VA"()8500  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08501  call void asm "; use $0", "^VA"(<2 x bfloat> %result)8502  ret void8503}8504 8505define void @global_atomic_fmin_v2bf16_ret_a_a(ptr addrspace(1) %ptr) #0 {8506; GFX90A-LABEL: global_atomic_fmin_v2bf16_ret_a_a:8507; GFX90A:       ; %bb.0:8508; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8509; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408510; GFX90A-NEXT:    ;;#ASMSTART8511; GFX90A-NEXT:    ; def a08512; GFX90A-NEXT:    ;;#ASMEND8513; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a08514; GFX90A-NEXT:    s_mov_b64 s[6:7], 08515; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28516; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8517; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28518; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028519; GFX90A-NEXT:  .LBB157_1: ; %atomicrmw.start8520; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18521; GFX90A-NEXT:    s_waitcnt vmcnt(0)8522; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38523; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38524; GFX90A-NEXT:    v_min_f32_e32 v2, v2, v48525; GFX90A-NEXT:    v_min_f32_e32 v6, v6, v58526; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18527; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18528; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28529; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68530; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88531; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88532; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68533; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28534; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8535; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8536; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98537; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8538; GFX90A-NEXT:    s_waitcnt vmcnt(0)8539; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38540; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8541; GFX90A-NEXT:    v_mov_b32_e32 v3, v28542; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8543; GFX90A-NEXT:    s_cbranch_execnz .LBB157_18544; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8545; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8546; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v28547; GFX90A-NEXT:    ;;#ASMSTART8548; GFX90A-NEXT:    ; use a08549; GFX90A-NEXT:    ;;#ASMEND8550; GFX90A-NEXT:    s_setpc_b64 s[30:31]8551;8552; GFX950-LABEL: global_atomic_fmin_v2bf16_ret_a_a:8553; GFX950:       ; %bb.0:8554; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8555; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408556; GFX950-NEXT:    ;;#ASMSTART8557; GFX950-NEXT:    ; def a08558; GFX950-NEXT:    ;;#ASMEND8559; GFX950-NEXT:    s_mov_b64 s[0:1], 08560; GFX950-NEXT:    v_accvgpr_read_b32 v2, a08561; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28562; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28563; GFX950-NEXT:  .LBB157_1: ; %atomicrmw.start8564; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18565; GFX950-NEXT:    s_waitcnt vmcnt(0)8566; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38567; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38568; GFX950-NEXT:    v_min_f32_e32 v2, v2, v48569; GFX950-NEXT:    v_min_f32_e32 v6, v6, v58570; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28571; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08572; GFX950-NEXT:    s_waitcnt vmcnt(0)8573; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38574; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8575; GFX950-NEXT:    v_mov_b32_e32 v3, v28576; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8577; GFX950-NEXT:    s_cbranch_execnz .LBB157_18578; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8579; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8580; GFX950-NEXT:    v_accvgpr_write_b32 a0, v28581; GFX950-NEXT:    ;;#ASMSTART8582; GFX950-NEXT:    ; use a08583; GFX950-NEXT:    ;;#ASMEND8584; GFX950-NEXT:    s_setpc_b64 s[30:31]8585  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108586  %data = call <2 x bfloat> asm "; def $0", "=a"()8587  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08588  call void asm "; use $0", "a"(<2 x bfloat> %result)8589  ret void8590}8591 8592define void @global_atomic_fmin_v2bf16_ret_av_av(ptr addrspace(1) %ptr) #0 {8593; GFX90A-LABEL: global_atomic_fmin_v2bf16_ret_av_av:8594; GFX90A:       ; %bb.0:8595; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8596; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408597; GFX90A-NEXT:    ;;#ASMSTART8598; GFX90A-NEXT:    ; def v28599; GFX90A-NEXT:    ;;#ASMEND8600; GFX90A-NEXT:    s_mov_b64 s[6:7], 08601; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28602; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8603; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v28604; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028605; GFX90A-NEXT:  .LBB158_1: ; %atomicrmw.start8606; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18607; GFX90A-NEXT:    s_waitcnt vmcnt(0)8608; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38609; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v38610; GFX90A-NEXT:    v_min_f32_e32 v2, v2, v48611; GFX90A-NEXT:    v_min_f32_e32 v6, v6, v58612; GFX90A-NEXT:    v_bfe_u32 v7, v2, 16, 18613; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 18614; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v28615; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v68616; GFX90A-NEXT:    v_add3_u32 v7, v7, v2, s88617; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s88618; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v68619; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28620; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v7, v8, s[4:5]8621; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc8622; GFX90A-NEXT:    v_perm_b32 v2, v6, v2, s98623; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8624; GFX90A-NEXT:    s_waitcnt vmcnt(0)8625; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38626; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8627; GFX90A-NEXT:    v_mov_b32_e32 v3, v28628; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8629; GFX90A-NEXT:    s_cbranch_execnz .LBB158_18630; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8631; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8632; GFX90A-NEXT:    ;;#ASMSTART8633; GFX90A-NEXT:    ; use v28634; GFX90A-NEXT:    ;;#ASMEND8635; GFX90A-NEXT:    s_setpc_b64 s[30:31]8636;8637; GFX950-LABEL: global_atomic_fmin_v2bf16_ret_av_av:8638; GFX950:       ; %bb.0:8639; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8640; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408641; GFX950-NEXT:    ;;#ASMSTART8642; GFX950-NEXT:    ; def v28643; GFX950-NEXT:    ;;#ASMEND8644; GFX950-NEXT:    s_mov_b64 s[0:1], 08645; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28646; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28647; GFX950-NEXT:  .LBB158_1: ; %atomicrmw.start8648; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18649; GFX950-NEXT:    s_waitcnt vmcnt(0)8650; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38651; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38652; GFX950-NEXT:    v_min_f32_e32 v2, v2, v48653; GFX950-NEXT:    v_min_f32_e32 v6, v6, v58654; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28655; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08656; GFX950-NEXT:    s_waitcnt vmcnt(0)8657; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38658; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8659; GFX950-NEXT:    v_mov_b32_e32 v3, v28660; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8661; GFX950-NEXT:    s_cbranch_execnz .LBB158_18662; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8663; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8664; GFX950-NEXT:    ;;#ASMSTART8665; GFX950-NEXT:    ; use v28666; GFX950-NEXT:    ;;#ASMEND8667; GFX950-NEXT:    s_setpc_b64 s[30:31]8668  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108669  %data = call <2 x bfloat> asm "; def $0", "=^VA"()8670  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08671  call void asm "; use $0", "^VA"(<2 x bfloat> %result)8672  ret void8673}8674 8675define void @global_atomic_fmaximum_v2bf16_ret_a_a(ptr addrspace(1) %ptr) #0 {8676; GFX90A-LABEL: global_atomic_fmaximum_v2bf16_ret_a_a:8677; GFX90A:       ; %bb.0:8678; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8679; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408680; GFX90A-NEXT:    ;;#ASMSTART8681; GFX90A-NEXT:    ; def a08682; GFX90A-NEXT:    ;;#ASMEND8683; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a08684; GFX90A-NEXT:    s_mov_b64 s[6:7], 08685; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28686; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000008687; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8688; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v28689; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028690; GFX90A-NEXT:  .LBB159_1: ; %atomicrmw.start8691; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18692; GFX90A-NEXT:    s_waitcnt vmcnt(0)8693; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38694; GFX90A-NEXT:    v_and_b32_e32 v7, 0xffff0000, v38695; GFX90A-NEXT:    v_max_f32_e32 v8, v2, v48696; GFX90A-NEXT:    v_max_f32_e32 v9, v7, v68697; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v7, v68698; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v2, v48699; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v5, v8, s[4:5]8700; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v5, v9, vcc8701; GFX90A-NEXT:    v_bfe_u32 v8, v2, 16, 18702; GFX90A-NEXT:    v_bfe_u32 v10, v7, 16, 18703; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v28704; GFX90A-NEXT:    v_or_b32_e32 v11, 0x400000, v78705; GFX90A-NEXT:    v_add3_u32 v8, v8, v2, s88706; GFX90A-NEXT:    v_add3_u32 v10, v10, v7, s88707; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v7, v78708; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28709; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v8, v9, s[4:5]8710; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v10, v11, vcc8711; GFX90A-NEXT:    v_perm_b32 v2, v7, v2, s98712; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8713; GFX90A-NEXT:    s_waitcnt vmcnt(0)8714; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38715; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8716; GFX90A-NEXT:    v_mov_b32_e32 v3, v28717; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8718; GFX90A-NEXT:    s_cbranch_execnz .LBB159_18719; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8720; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8721; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v28722; GFX90A-NEXT:    ;;#ASMSTART8723; GFX90A-NEXT:    ; use a08724; GFX90A-NEXT:    ;;#ASMEND8725; GFX90A-NEXT:    s_setpc_b64 s[30:31]8726;8727; GFX950-LABEL: global_atomic_fmaximum_v2bf16_ret_a_a:8728; GFX950:       ; %bb.0:8729; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8730; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408731; GFX950-NEXT:    ;;#ASMSTART8732; GFX950-NEXT:    ; def a08733; GFX950-NEXT:    ;;#ASMEND8734; GFX950-NEXT:    s_mov_b64 s[0:1], 08735; GFX950-NEXT:    v_accvgpr_read_b32 v2, a08736; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28737; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28738; GFX950-NEXT:  .LBB159_1: ; %atomicrmw.start8739; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18740; GFX950-NEXT:    s_waitcnt vmcnt(0)8741; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38742; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38743; GFX950-NEXT:    v_maximum3_f32 v2, v2, v4, v48744; GFX950-NEXT:    v_maximum3_f32 v6, v6, v5, v58745; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28746; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08747; GFX950-NEXT:    s_waitcnt vmcnt(0)8748; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38749; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8750; GFX950-NEXT:    v_mov_b32_e32 v3, v28751; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8752; GFX950-NEXT:    s_cbranch_execnz .LBB159_18753; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8754; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8755; GFX950-NEXT:    v_accvgpr_write_b32 a0, v28756; GFX950-NEXT:    ;;#ASMSTART8757; GFX950-NEXT:    ; use a08758; GFX950-NEXT:    ;;#ASMEND8759; GFX950-NEXT:    s_setpc_b64 s[30:31]8760  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108761  %data = call <2 x bfloat> asm "; def $0", "=a"()8762  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08763  call void asm "; use $0", "a"(<2 x bfloat> %result)8764  ret void8765}8766 8767define void @global_atomic_fmaximum_v2bf16_ret_av_av(ptr addrspace(1) %ptr) #0 {8768; GFX90A-LABEL: global_atomic_fmaximum_v2bf16_ret_av_av:8769; GFX90A:       ; %bb.0:8770; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8771; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408772; GFX90A-NEXT:    ;;#ASMSTART8773; GFX90A-NEXT:    ; def v28774; GFX90A-NEXT:    ;;#ASMEND8775; GFX90A-NEXT:    s_mov_b64 s[6:7], 08776; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28777; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000008778; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8779; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v28780; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028781; GFX90A-NEXT:  .LBB160_1: ; %atomicrmw.start8782; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18783; GFX90A-NEXT:    s_waitcnt vmcnt(0)8784; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38785; GFX90A-NEXT:    v_and_b32_e32 v7, 0xffff0000, v38786; GFX90A-NEXT:    v_max_f32_e32 v8, v2, v48787; GFX90A-NEXT:    v_max_f32_e32 v9, v7, v68788; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v7, v68789; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v2, v48790; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v5, v8, s[4:5]8791; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v5, v9, vcc8792; GFX90A-NEXT:    v_bfe_u32 v8, v2, 16, 18793; GFX90A-NEXT:    v_bfe_u32 v10, v7, 16, 18794; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v28795; GFX90A-NEXT:    v_or_b32_e32 v11, 0x400000, v78796; GFX90A-NEXT:    v_add3_u32 v8, v8, v2, s88797; GFX90A-NEXT:    v_add3_u32 v10, v10, v7, s88798; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v7, v78799; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28800; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v8, v9, s[4:5]8801; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v10, v11, vcc8802; GFX90A-NEXT:    v_perm_b32 v2, v7, v2, s98803; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8804; GFX90A-NEXT:    s_waitcnt vmcnt(0)8805; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38806; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8807; GFX90A-NEXT:    v_mov_b32_e32 v3, v28808; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8809; GFX90A-NEXT:    s_cbranch_execnz .LBB160_18810; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8811; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8812; GFX90A-NEXT:    ;;#ASMSTART8813; GFX90A-NEXT:    ; use v28814; GFX90A-NEXT:    ;;#ASMEND8815; GFX90A-NEXT:    s_setpc_b64 s[30:31]8816;8817; GFX950-LABEL: global_atomic_fmaximum_v2bf16_ret_av_av:8818; GFX950:       ; %bb.0:8819; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8820; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408821; GFX950-NEXT:    ;;#ASMSTART8822; GFX950-NEXT:    ; def v28823; GFX950-NEXT:    ;;#ASMEND8824; GFX950-NEXT:    s_mov_b64 s[0:1], 08825; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28826; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28827; GFX950-NEXT:  .LBB160_1: ; %atomicrmw.start8828; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18829; GFX950-NEXT:    s_waitcnt vmcnt(0)8830; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38831; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38832; GFX950-NEXT:    v_maximum3_f32 v2, v2, v4, v48833; GFX950-NEXT:    v_maximum3_f32 v6, v6, v5, v58834; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28835; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08836; GFX950-NEXT:    s_waitcnt vmcnt(0)8837; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38838; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8839; GFX950-NEXT:    v_mov_b32_e32 v3, v28840; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8841; GFX950-NEXT:    s_cbranch_execnz .LBB160_18842; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8843; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8844; GFX950-NEXT:    ;;#ASMSTART8845; GFX950-NEXT:    ; use v28846; GFX950-NEXT:    ;;#ASMEND8847; GFX950-NEXT:    s_setpc_b64 s[30:31]8848  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108849  %data = call <2 x bfloat> asm "; def $0", "=^VA"()8850  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08851  call void asm "; use $0", "^VA"(<2 x bfloat> %result)8852  ret void8853}8854 8855define void @global_atomic_fminimum_v2bf16_ret_a_a(ptr addrspace(1) %ptr) #0 {8856; GFX90A-LABEL: global_atomic_fminimum_v2bf16_ret_a_a:8857; GFX90A:       ; %bb.0:8858; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8859; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408860; GFX90A-NEXT:    ;;#ASMSTART8861; GFX90A-NEXT:    ; def a08862; GFX90A-NEXT:    ;;#ASMEND8863; GFX90A-NEXT:    v_accvgpr_read_b32 v2, a08864; GFX90A-NEXT:    s_mov_b64 s[6:7], 08865; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28866; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000008867; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8868; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v28869; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028870; GFX90A-NEXT:  .LBB161_1: ; %atomicrmw.start8871; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18872; GFX90A-NEXT:    s_waitcnt vmcnt(0)8873; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38874; GFX90A-NEXT:    v_and_b32_e32 v7, 0xffff0000, v38875; GFX90A-NEXT:    v_min_f32_e32 v8, v2, v48876; GFX90A-NEXT:    v_min_f32_e32 v9, v7, v68877; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v7, v68878; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v2, v48879; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v5, v8, s[4:5]8880; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v5, v9, vcc8881; GFX90A-NEXT:    v_bfe_u32 v8, v2, 16, 18882; GFX90A-NEXT:    v_bfe_u32 v10, v7, 16, 18883; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v28884; GFX90A-NEXT:    v_or_b32_e32 v11, 0x400000, v78885; GFX90A-NEXT:    v_add3_u32 v8, v8, v2, s88886; GFX90A-NEXT:    v_add3_u32 v10, v10, v7, s88887; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v7, v78888; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28889; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v8, v9, s[4:5]8890; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v10, v11, vcc8891; GFX90A-NEXT:    v_perm_b32 v2, v7, v2, s98892; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8893; GFX90A-NEXT:    s_waitcnt vmcnt(0)8894; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38895; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8896; GFX90A-NEXT:    v_mov_b32_e32 v3, v28897; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8898; GFX90A-NEXT:    s_cbranch_execnz .LBB161_18899; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8900; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8901; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v28902; GFX90A-NEXT:    ;;#ASMSTART8903; GFX90A-NEXT:    ; use a08904; GFX90A-NEXT:    ;;#ASMEND8905; GFX90A-NEXT:    s_setpc_b64 s[30:31]8906;8907; GFX950-LABEL: global_atomic_fminimum_v2bf16_ret_a_a:8908; GFX950:       ; %bb.0:8909; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8910; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:408911; GFX950-NEXT:    ;;#ASMSTART8912; GFX950-NEXT:    ; def a08913; GFX950-NEXT:    ;;#ASMEND8914; GFX950-NEXT:    s_mov_b64 s[0:1], 08915; GFX950-NEXT:    v_accvgpr_read_b32 v2, a08916; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v28917; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v28918; GFX950-NEXT:  .LBB161_1: ; %atomicrmw.start8919; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=18920; GFX950-NEXT:    s_waitcnt vmcnt(0)8921; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v38922; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v38923; GFX950-NEXT:    v_minimum3_f32 v2, v2, v4, v48924; GFX950-NEXT:    v_minimum3_f32 v6, v6, v5, v58925; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v28926; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc08927; GFX950-NEXT:    s_waitcnt vmcnt(0)8928; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38929; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8930; GFX950-NEXT:    v_mov_b32_e32 v3, v28931; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]8932; GFX950-NEXT:    s_cbranch_execnz .LBB161_18933; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end8934; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]8935; GFX950-NEXT:    v_accvgpr_write_b32 a0, v28936; GFX950-NEXT:    ;;#ASMSTART8937; GFX950-NEXT:    ; use a08938; GFX950-NEXT:    ;;#ASMEND8939; GFX950-NEXT:    s_setpc_b64 s[30:31]8940  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 108941  %data = call <2 x bfloat> asm "; def $0", "=a"()8942  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !08943  call void asm "; use $0", "a"(<2 x bfloat> %result)8944  ret void8945}8946 8947define void @global_atomic_fminimum_v2bf16_ret_av_av(ptr addrspace(1) %ptr) #0 {8948; GFX90A-LABEL: global_atomic_fminimum_v2bf16_ret_av_av:8949; GFX90A:       ; %bb.0:8950; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8951; GFX90A-NEXT:    global_load_dword v3, v[0:1], off offset:408952; GFX90A-NEXT:    ;;#ASMSTART8953; GFX90A-NEXT:    ; def v28954; GFX90A-NEXT:    ;;#ASMEND8955; GFX90A-NEXT:    s_mov_b64 s[6:7], 08956; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v28957; GFX90A-NEXT:    v_mov_b32_e32 v5, 0x7fc000008958; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff8959; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v28960; GFX90A-NEXT:    s_mov_b32 s9, 0x70603028961; GFX90A-NEXT:  .LBB162_1: ; %atomicrmw.start8962; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=18963; GFX90A-NEXT:    s_waitcnt vmcnt(0)8964; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v38965; GFX90A-NEXT:    v_and_b32_e32 v7, 0xffff0000, v38966; GFX90A-NEXT:    v_min_f32_e32 v8, v2, v48967; GFX90A-NEXT:    v_min_f32_e32 v9, v7, v68968; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v7, v68969; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v2, v48970; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v5, v8, s[4:5]8971; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v5, v9, vcc8972; GFX90A-NEXT:    v_bfe_u32 v8, v2, 16, 18973; GFX90A-NEXT:    v_bfe_u32 v10, v7, 16, 18974; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v28975; GFX90A-NEXT:    v_or_b32_e32 v11, 0x400000, v78976; GFX90A-NEXT:    v_add3_u32 v8, v8, v2, s88977; GFX90A-NEXT:    v_add3_u32 v10, v10, v7, s88978; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v7, v78979; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v2, v28980; GFX90A-NEXT:    v_cndmask_b32_e64 v2, v8, v9, s[4:5]8981; GFX90A-NEXT:    v_cndmask_b32_e32 v7, v10, v11, vcc8982; GFX90A-NEXT:    v_perm_b32 v2, v7, v2, s98983; GFX90A-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 glc8984; GFX90A-NEXT:    s_waitcnt vmcnt(0)8985; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38986; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8987; GFX90A-NEXT:    v_mov_b32_e32 v3, v28988; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]8989; GFX90A-NEXT:    s_cbranch_execnz .LBB162_18990; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end8991; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]8992; GFX90A-NEXT:    ;;#ASMSTART8993; GFX90A-NEXT:    ; use v28994; GFX90A-NEXT:    ;;#ASMEND8995; GFX90A-NEXT:    s_setpc_b64 s[30:31]8996;8997; GFX950-LABEL: global_atomic_fminimum_v2bf16_ret_av_av:8998; GFX950:       ; %bb.0:8999; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9000; GFX950-NEXT:    global_load_dword v3, v[0:1], off offset:409001; GFX950-NEXT:    ;;#ASMSTART9002; GFX950-NEXT:    ; def v29003; GFX950-NEXT:    ;;#ASMEND9004; GFX950-NEXT:    s_mov_b64 s[0:1], 09005; GFX950-NEXT:    v_and_b32_e32 v4, 0xffff0000, v29006; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v29007; GFX950-NEXT:  .LBB162_1: ; %atomicrmw.start9008; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=19009; GFX950-NEXT:    s_waitcnt vmcnt(0)9010; GFX950-NEXT:    v_and_b32_e32 v2, 0xffff0000, v39011; GFX950-NEXT:    v_lshlrev_b32_e32 v6, 16, v39012; GFX950-NEXT:    v_minimum3_f32 v2, v2, v4, v49013; GFX950-NEXT:    v_minimum3_f32 v6, v6, v5, v59014; GFX950-NEXT:    v_cvt_pk_bf16_f32 v2, v6, v29015; GFX950-NEXT:    global_atomic_cmpswap v2, v[0:1], v[2:3], off offset:40 sc09016; GFX950-NEXT:    s_waitcnt vmcnt(0)9017; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v39018; GFX950-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]9019; GFX950-NEXT:    v_mov_b32_e32 v3, v29020; GFX950-NEXT:    s_andn2_b64 exec, exec, s[0:1]9021; GFX950-NEXT:    s_cbranch_execnz .LBB162_19022; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end9023; GFX950-NEXT:    s_or_b64 exec, exec, s[0:1]9024; GFX950-NEXT:    ;;#ASMSTART9025; GFX950-NEXT:    ; use v29026; GFX950-NEXT:    ;;#ASMEND9027; GFX950-NEXT:    s_setpc_b64 s[30:31]9028  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 109029  %data = call <2 x bfloat> asm "; def $0", "=^VA"()9030  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09031  call void asm "; use $0", "^VA"(<2 x bfloat> %result)9032  ret void9033}9034 9035;---------------------------------------------------------------------9036; other atomics i32, with aa+av cases using saddr9037;---------------------------------------------------------------------9038 9039define void @global_atomic_xchg_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9040; GFX90A-LABEL: global_atomic_xchg_i32_saddr_ret_a_a:9041; GFX90A:       ; %bb.0:9042; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9043; GFX90A-NEXT:    v_mov_b32_e32 v0, 09044; GFX90A-NEXT:    ;;#ASMSTART9045; GFX90A-NEXT:    ; def a09046; GFX90A-NEXT:    ;;#ASMEND9047; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09048; GFX90A-NEXT:    global_atomic_swap v0, v0, v1, s[16:17] offset:40 glc9049; GFX90A-NEXT:    s_waitcnt vmcnt(0)9050; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09051; GFX90A-NEXT:    ;;#ASMSTART9052; GFX90A-NEXT:    ; use a09053; GFX90A-NEXT:    ;;#ASMEND9054; GFX90A-NEXT:    s_setpc_b64 s[30:31]9055;9056; GFX950-LABEL: global_atomic_xchg_i32_saddr_ret_a_a:9057; GFX950:       ; %bb.0:9058; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9059; GFX950-NEXT:    v_mov_b32_e32 v0, 09060; GFX950-NEXT:    ;;#ASMSTART9061; GFX950-NEXT:    ; def a09062; GFX950-NEXT:    ;;#ASMEND9063; GFX950-NEXT:    s_nop 09064; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09065; GFX950-NEXT:    global_atomic_swap v0, v0, v1, s[0:1] offset:40 sc09066; GFX950-NEXT:    s_waitcnt vmcnt(0)9067; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09068; GFX950-NEXT:    ;;#ASMSTART9069; GFX950-NEXT:    ; use a09070; GFX950-NEXT:    ;;#ASMEND9071; GFX950-NEXT:    s_setpc_b64 s[30:31]9072  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109073  %data = call i32 asm "; def $0", "=a"()9074  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09075  call void asm "; use $0", "a"(i32 %result)9076  ret void9077}9078 9079define void @global_atomic_xchg_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9080; GFX90A-LABEL: global_atomic_xchg_i32_saddr_ret_av_av:9081; GFX90A:       ; %bb.0:9082; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9083; GFX90A-NEXT:    v_mov_b32_e32 v0, 09084; GFX90A-NEXT:    ;;#ASMSTART9085; GFX90A-NEXT:    ; def v19086; GFX90A-NEXT:    ;;#ASMEND9087; GFX90A-NEXT:    global_atomic_swap v0, v0, v1, s[16:17] offset:40 glc9088; GFX90A-NEXT:    s_waitcnt vmcnt(0)9089; GFX90A-NEXT:    ;;#ASMSTART9090; GFX90A-NEXT:    ; use v09091; GFX90A-NEXT:    ;;#ASMEND9092; GFX90A-NEXT:    s_setpc_b64 s[30:31]9093;9094; GFX950-LABEL: global_atomic_xchg_i32_saddr_ret_av_av:9095; GFX950:       ; %bb.0:9096; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9097; GFX950-NEXT:    v_mov_b32_e32 v0, 09098; GFX950-NEXT:    ;;#ASMSTART9099; GFX950-NEXT:    ; def v19100; GFX950-NEXT:    ;;#ASMEND9101; GFX950-NEXT:    global_atomic_swap v0, v0, v1, s[0:1] offset:40 sc09102; GFX950-NEXT:    s_waitcnt vmcnt(0)9103; GFX950-NEXT:    ;;#ASMSTART9104; GFX950-NEXT:    ; use v09105; GFX950-NEXT:    ;;#ASMEND9106; GFX950-NEXT:    s_setpc_b64 s[30:31]9107  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109108  %data = call i32 asm "; def $0", "=^VA"()9109  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09110  call void asm "; use $0", "^VA"(i32 %result)9111  ret void9112}9113 9114define void @global_atomic_add_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9115; GFX90A-LABEL: global_atomic_add_i32_saddr_ret_a_a:9116; GFX90A:       ; %bb.0:9117; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9118; GFX90A-NEXT:    v_mov_b32_e32 v0, 09119; GFX90A-NEXT:    ;;#ASMSTART9120; GFX90A-NEXT:    ; def a09121; GFX90A-NEXT:    ;;#ASMEND9122; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09123; GFX90A-NEXT:    global_atomic_add v0, v0, v1, s[16:17] offset:40 glc9124; GFX90A-NEXT:    s_waitcnt vmcnt(0)9125; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09126; GFX90A-NEXT:    ;;#ASMSTART9127; GFX90A-NEXT:    ; use a09128; GFX90A-NEXT:    ;;#ASMEND9129; GFX90A-NEXT:    s_setpc_b64 s[30:31]9130;9131; GFX950-LABEL: global_atomic_add_i32_saddr_ret_a_a:9132; GFX950:       ; %bb.0:9133; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9134; GFX950-NEXT:    v_mov_b32_e32 v0, 09135; GFX950-NEXT:    ;;#ASMSTART9136; GFX950-NEXT:    ; def a09137; GFX950-NEXT:    ;;#ASMEND9138; GFX950-NEXT:    s_nop 09139; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09140; GFX950-NEXT:    global_atomic_add v0, v0, v1, s[0:1] offset:40 sc09141; GFX950-NEXT:    s_waitcnt vmcnt(0)9142; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09143; GFX950-NEXT:    ;;#ASMSTART9144; GFX950-NEXT:    ; use a09145; GFX950-NEXT:    ;;#ASMEND9146; GFX950-NEXT:    s_setpc_b64 s[30:31]9147  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109148  %data = call i32 asm "; def $0", "=a"()9149  %result = atomicrmw add ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09150  call void asm "; use $0", "a"(i32 %result)9151  ret void9152}9153 9154define void @global_atomic_add_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9155; GFX90A-LABEL: global_atomic_add_i32_saddr_ret_av_av:9156; GFX90A:       ; %bb.0:9157; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9158; GFX90A-NEXT:    v_mov_b32_e32 v0, 09159; GFX90A-NEXT:    ;;#ASMSTART9160; GFX90A-NEXT:    ; def v19161; GFX90A-NEXT:    ;;#ASMEND9162; GFX90A-NEXT:    global_atomic_add v0, v0, v1, s[16:17] offset:40 glc9163; GFX90A-NEXT:    s_waitcnt vmcnt(0)9164; GFX90A-NEXT:    ;;#ASMSTART9165; GFX90A-NEXT:    ; use v09166; GFX90A-NEXT:    ;;#ASMEND9167; GFX90A-NEXT:    s_setpc_b64 s[30:31]9168;9169; GFX950-LABEL: global_atomic_add_i32_saddr_ret_av_av:9170; GFX950:       ; %bb.0:9171; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9172; GFX950-NEXT:    v_mov_b32_e32 v0, 09173; GFX950-NEXT:    ;;#ASMSTART9174; GFX950-NEXT:    ; def v19175; GFX950-NEXT:    ;;#ASMEND9176; GFX950-NEXT:    global_atomic_add v0, v0, v1, s[0:1] offset:40 sc09177; GFX950-NEXT:    s_waitcnt vmcnt(0)9178; GFX950-NEXT:    ;;#ASMSTART9179; GFX950-NEXT:    ; use v09180; GFX950-NEXT:    ;;#ASMEND9181; GFX950-NEXT:    s_setpc_b64 s[30:31]9182  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109183  %data = call i32 asm "; def $0", "=^VA"()9184  %result = atomicrmw add ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09185  call void asm "; use $0", "^VA"(i32 %result)9186  ret void9187}9188 9189define void @global_atomic_sub_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9190; GFX90A-LABEL: global_atomic_sub_i32_saddr_ret_a_a:9191; GFX90A:       ; %bb.0:9192; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9193; GFX90A-NEXT:    v_mov_b32_e32 v0, 09194; GFX90A-NEXT:    ;;#ASMSTART9195; GFX90A-NEXT:    ; def a09196; GFX90A-NEXT:    ;;#ASMEND9197; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09198; GFX90A-NEXT:    global_atomic_sub v0, v0, v1, s[16:17] offset:40 glc9199; GFX90A-NEXT:    s_waitcnt vmcnt(0)9200; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09201; GFX90A-NEXT:    ;;#ASMSTART9202; GFX90A-NEXT:    ; use a09203; GFX90A-NEXT:    ;;#ASMEND9204; GFX90A-NEXT:    s_setpc_b64 s[30:31]9205;9206; GFX950-LABEL: global_atomic_sub_i32_saddr_ret_a_a:9207; GFX950:       ; %bb.0:9208; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9209; GFX950-NEXT:    v_mov_b32_e32 v0, 09210; GFX950-NEXT:    ;;#ASMSTART9211; GFX950-NEXT:    ; def a09212; GFX950-NEXT:    ;;#ASMEND9213; GFX950-NEXT:    s_nop 09214; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09215; GFX950-NEXT:    global_atomic_sub v0, v0, v1, s[0:1] offset:40 sc09216; GFX950-NEXT:    s_waitcnt vmcnt(0)9217; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09218; GFX950-NEXT:    ;;#ASMSTART9219; GFX950-NEXT:    ; use a09220; GFX950-NEXT:    ;;#ASMEND9221; GFX950-NEXT:    s_setpc_b64 s[30:31]9222  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109223  %data = call i32 asm "; def $0", "=a"()9224  %result = atomicrmw sub ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09225  call void asm "; use $0", "a"(i32 %result)9226  ret void9227}9228 9229define void @global_atomic_sub_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9230; GFX90A-LABEL: global_atomic_sub_i32_saddr_ret_av_av:9231; GFX90A:       ; %bb.0:9232; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9233; GFX90A-NEXT:    v_mov_b32_e32 v0, 09234; GFX90A-NEXT:    ;;#ASMSTART9235; GFX90A-NEXT:    ; def v19236; GFX90A-NEXT:    ;;#ASMEND9237; GFX90A-NEXT:    global_atomic_sub v0, v0, v1, s[16:17] offset:40 glc9238; GFX90A-NEXT:    s_waitcnt vmcnt(0)9239; GFX90A-NEXT:    ;;#ASMSTART9240; GFX90A-NEXT:    ; use v09241; GFX90A-NEXT:    ;;#ASMEND9242; GFX90A-NEXT:    s_setpc_b64 s[30:31]9243;9244; GFX950-LABEL: global_atomic_sub_i32_saddr_ret_av_av:9245; GFX950:       ; %bb.0:9246; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9247; GFX950-NEXT:    v_mov_b32_e32 v0, 09248; GFX950-NEXT:    ;;#ASMSTART9249; GFX950-NEXT:    ; def v19250; GFX950-NEXT:    ;;#ASMEND9251; GFX950-NEXT:    global_atomic_sub v0, v0, v1, s[0:1] offset:40 sc09252; GFX950-NEXT:    s_waitcnt vmcnt(0)9253; GFX950-NEXT:    ;;#ASMSTART9254; GFX950-NEXT:    ; use v09255; GFX950-NEXT:    ;;#ASMEND9256; GFX950-NEXT:    s_setpc_b64 s[30:31]9257  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109258  %data = call i32 asm "; def $0", "=^VA"()9259  %result = atomicrmw sub ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09260  call void asm "; use $0", "^VA"(i32 %result)9261  ret void9262}9263 9264define void @global_atomic_and_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9265; GFX90A-LABEL: global_atomic_and_i32_saddr_ret_a_a:9266; GFX90A:       ; %bb.0:9267; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9268; GFX90A-NEXT:    v_mov_b32_e32 v0, 09269; GFX90A-NEXT:    ;;#ASMSTART9270; GFX90A-NEXT:    ; def a09271; GFX90A-NEXT:    ;;#ASMEND9272; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09273; GFX90A-NEXT:    global_atomic_and v0, v0, v1, s[16:17] offset:40 glc9274; GFX90A-NEXT:    s_waitcnt vmcnt(0)9275; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09276; GFX90A-NEXT:    ;;#ASMSTART9277; GFX90A-NEXT:    ; use a09278; GFX90A-NEXT:    ;;#ASMEND9279; GFX90A-NEXT:    s_setpc_b64 s[30:31]9280;9281; GFX950-LABEL: global_atomic_and_i32_saddr_ret_a_a:9282; GFX950:       ; %bb.0:9283; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9284; GFX950-NEXT:    v_mov_b32_e32 v0, 09285; GFX950-NEXT:    ;;#ASMSTART9286; GFX950-NEXT:    ; def a09287; GFX950-NEXT:    ;;#ASMEND9288; GFX950-NEXT:    s_nop 09289; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09290; GFX950-NEXT:    global_atomic_and v0, v0, v1, s[0:1] offset:40 sc09291; GFX950-NEXT:    s_waitcnt vmcnt(0)9292; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09293; GFX950-NEXT:    ;;#ASMSTART9294; GFX950-NEXT:    ; use a09295; GFX950-NEXT:    ;;#ASMEND9296; GFX950-NEXT:    s_setpc_b64 s[30:31]9297  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109298  %data = call i32 asm "; def $0", "=a"()9299  %result = atomicrmw and ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09300  call void asm "; use $0", "a"(i32 %result)9301  ret void9302}9303 9304define void @global_atomic_and_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9305; GFX90A-LABEL: global_atomic_and_i32_saddr_ret_av_av:9306; GFX90A:       ; %bb.0:9307; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9308; GFX90A-NEXT:    v_mov_b32_e32 v0, 09309; GFX90A-NEXT:    ;;#ASMSTART9310; GFX90A-NEXT:    ; def v19311; GFX90A-NEXT:    ;;#ASMEND9312; GFX90A-NEXT:    global_atomic_and v0, v0, v1, s[16:17] offset:40 glc9313; GFX90A-NEXT:    s_waitcnt vmcnt(0)9314; GFX90A-NEXT:    ;;#ASMSTART9315; GFX90A-NEXT:    ; use v09316; GFX90A-NEXT:    ;;#ASMEND9317; GFX90A-NEXT:    s_setpc_b64 s[30:31]9318;9319; GFX950-LABEL: global_atomic_and_i32_saddr_ret_av_av:9320; GFX950:       ; %bb.0:9321; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9322; GFX950-NEXT:    v_mov_b32_e32 v0, 09323; GFX950-NEXT:    ;;#ASMSTART9324; GFX950-NEXT:    ; def v19325; GFX950-NEXT:    ;;#ASMEND9326; GFX950-NEXT:    global_atomic_and v0, v0, v1, s[0:1] offset:40 sc09327; GFX950-NEXT:    s_waitcnt vmcnt(0)9328; GFX950-NEXT:    ;;#ASMSTART9329; GFX950-NEXT:    ; use v09330; GFX950-NEXT:    ;;#ASMEND9331; GFX950-NEXT:    s_setpc_b64 s[30:31]9332  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109333  %data = call i32 asm "; def $0", "=^VA"()9334  %result = atomicrmw and ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09335  call void asm "; use $0", "^VA"(i32 %result)9336  ret void9337}9338 9339define void @global_atomic_nand_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9340; GFX90A-LABEL: global_atomic_nand_i32_saddr_ret_a_a:9341; GFX90A:       ; %bb.0:9342; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9343; GFX90A-NEXT:    v_mov_b32_e32 v2, 09344; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:409345; GFX90A-NEXT:    ;;#ASMSTART9346; GFX90A-NEXT:    ; def a09347; GFX90A-NEXT:    ;;#ASMEND9348; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a09349; GFX90A-NEXT:    s_mov_b64 s[4:5], 09350; GFX90A-NEXT:  .LBB171_1: ; %atomicrmw.start9351; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=19352; GFX90A-NEXT:    s_waitcnt vmcnt(0)9353; GFX90A-NEXT:    v_and_b32_e32 v0, v1, v39354; GFX90A-NEXT:    v_not_b32_e32 v0, v09355; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc9356; GFX90A-NEXT:    s_waitcnt vmcnt(0)9357; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19358; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]9359; GFX90A-NEXT:    v_mov_b32_e32 v1, v09360; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]9361; GFX90A-NEXT:    s_cbranch_execnz .LBB171_19362; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end9363; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]9364; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09365; GFX90A-NEXT:    ;;#ASMSTART9366; GFX90A-NEXT:    ; use a09367; GFX90A-NEXT:    ;;#ASMEND9368; GFX90A-NEXT:    s_setpc_b64 s[30:31]9369;9370; GFX950-LABEL: global_atomic_nand_i32_saddr_ret_a_a:9371; GFX950:       ; %bb.0:9372; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9373; GFX950-NEXT:    v_mov_b32_e32 v2, 09374; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:409375; GFX950-NEXT:    ;;#ASMSTART9376; GFX950-NEXT:    ; def a09377; GFX950-NEXT:    ;;#ASMEND9378; GFX950-NEXT:    s_mov_b64 s[2:3], 09379; GFX950-NEXT:    v_accvgpr_read_b32 v3, a09380; GFX950-NEXT:  .LBB171_1: ; %atomicrmw.start9381; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=19382; GFX950-NEXT:    s_waitcnt vmcnt(0)9383; GFX950-NEXT:    v_bitop3_b32 v0, v1, v3, v1 bitop3:0x3f9384; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc09385; GFX950-NEXT:    s_waitcnt vmcnt(0)9386; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19387; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]9388; GFX950-NEXT:    v_mov_b32_e32 v1, v09389; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]9390; GFX950-NEXT:    s_cbranch_execnz .LBB171_19391; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end9392; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]9393; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09394; GFX950-NEXT:    ;;#ASMSTART9395; GFX950-NEXT:    ; use a09396; GFX950-NEXT:    ;;#ASMEND9397; GFX950-NEXT:    s_setpc_b64 s[30:31]9398  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109399  %data = call i32 asm "; def $0", "=a"()9400  %result = atomicrmw nand ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09401  call void asm "; use $0", "a"(i32 %result)9402  ret void9403}9404 9405define void @global_atomic_nand_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9406; GFX90A-LABEL: global_atomic_nand_i32_saddr_ret_av_av:9407; GFX90A:       ; %bb.0:9408; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9409; GFX90A-NEXT:    v_mov_b32_e32 v2, 09410; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:409411; GFX90A-NEXT:    s_mov_b64 s[4:5], 09412; GFX90A-NEXT:    ;;#ASMSTART9413; GFX90A-NEXT:    ; def v39414; GFX90A-NEXT:    ;;#ASMEND9415; GFX90A-NEXT:  .LBB172_1: ; %atomicrmw.start9416; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=19417; GFX90A-NEXT:    s_waitcnt vmcnt(0)9418; GFX90A-NEXT:    v_and_b32_e32 v0, v1, v39419; GFX90A-NEXT:    v_not_b32_e32 v0, v09420; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc9421; GFX90A-NEXT:    s_waitcnt vmcnt(0)9422; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19423; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]9424; GFX90A-NEXT:    v_mov_b32_e32 v1, v09425; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]9426; GFX90A-NEXT:    s_cbranch_execnz .LBB172_19427; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end9428; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]9429; GFX90A-NEXT:    ;;#ASMSTART9430; GFX90A-NEXT:    ; use v09431; GFX90A-NEXT:    ;;#ASMEND9432; GFX90A-NEXT:    s_setpc_b64 s[30:31]9433;9434; GFX950-LABEL: global_atomic_nand_i32_saddr_ret_av_av:9435; GFX950:       ; %bb.0:9436; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9437; GFX950-NEXT:    v_mov_b32_e32 v2, 09438; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:409439; GFX950-NEXT:    s_mov_b64 s[2:3], 09440; GFX950-NEXT:    ;;#ASMSTART9441; GFX950-NEXT:    ; def v39442; GFX950-NEXT:    ;;#ASMEND9443; GFX950-NEXT:  .LBB172_1: ; %atomicrmw.start9444; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=19445; GFX950-NEXT:    s_waitcnt vmcnt(0)9446; GFX950-NEXT:    v_bitop3_b32 v0, v1, v3, v1 bitop3:0x3f9447; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc09448; GFX950-NEXT:    s_waitcnt vmcnt(0)9449; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19450; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]9451; GFX950-NEXT:    v_mov_b32_e32 v1, v09452; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]9453; GFX950-NEXT:    s_cbranch_execnz .LBB172_19454; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end9455; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]9456; GFX950-NEXT:    ;;#ASMSTART9457; GFX950-NEXT:    ; use v09458; GFX950-NEXT:    ;;#ASMEND9459; GFX950-NEXT:    s_setpc_b64 s[30:31]9460  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109461  %data = call i32 asm "; def $0", "=^VA"()9462  %result = atomicrmw nand ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09463  call void asm "; use $0", "^VA"(i32 %result)9464  ret void9465}9466 9467define void @global_atomic_or_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9468; GFX90A-LABEL: global_atomic_or_i32_saddr_ret_a_a:9469; GFX90A:       ; %bb.0:9470; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9471; GFX90A-NEXT:    v_mov_b32_e32 v0, 09472; GFX90A-NEXT:    ;;#ASMSTART9473; GFX90A-NEXT:    ; def a09474; GFX90A-NEXT:    ;;#ASMEND9475; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09476; GFX90A-NEXT:    global_atomic_or v0, v0, v1, s[16:17] offset:40 glc9477; GFX90A-NEXT:    s_waitcnt vmcnt(0)9478; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09479; GFX90A-NEXT:    ;;#ASMSTART9480; GFX90A-NEXT:    ; use a09481; GFX90A-NEXT:    ;;#ASMEND9482; GFX90A-NEXT:    s_setpc_b64 s[30:31]9483;9484; GFX950-LABEL: global_atomic_or_i32_saddr_ret_a_a:9485; GFX950:       ; %bb.0:9486; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9487; GFX950-NEXT:    v_mov_b32_e32 v0, 09488; GFX950-NEXT:    ;;#ASMSTART9489; GFX950-NEXT:    ; def a09490; GFX950-NEXT:    ;;#ASMEND9491; GFX950-NEXT:    s_nop 09492; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09493; GFX950-NEXT:    global_atomic_or v0, v0, v1, s[0:1] offset:40 sc09494; GFX950-NEXT:    s_waitcnt vmcnt(0)9495; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09496; GFX950-NEXT:    ;;#ASMSTART9497; GFX950-NEXT:    ; use a09498; GFX950-NEXT:    ;;#ASMEND9499; GFX950-NEXT:    s_setpc_b64 s[30:31]9500  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109501  %data = call i32 asm "; def $0", "=a"()9502  %result = atomicrmw or ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09503  call void asm "; use $0", "a"(i32 %result)9504  ret void9505}9506 9507define void @global_atomic_or_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9508; GFX90A-LABEL: global_atomic_or_i32_saddr_ret_av_av:9509; GFX90A:       ; %bb.0:9510; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9511; GFX90A-NEXT:    v_mov_b32_e32 v0, 09512; GFX90A-NEXT:    ;;#ASMSTART9513; GFX90A-NEXT:    ; def v19514; GFX90A-NEXT:    ;;#ASMEND9515; GFX90A-NEXT:    global_atomic_or v0, v0, v1, s[16:17] offset:40 glc9516; GFX90A-NEXT:    s_waitcnt vmcnt(0)9517; GFX90A-NEXT:    ;;#ASMSTART9518; GFX90A-NEXT:    ; use v09519; GFX90A-NEXT:    ;;#ASMEND9520; GFX90A-NEXT:    s_setpc_b64 s[30:31]9521;9522; GFX950-LABEL: global_atomic_or_i32_saddr_ret_av_av:9523; GFX950:       ; %bb.0:9524; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9525; GFX950-NEXT:    v_mov_b32_e32 v0, 09526; GFX950-NEXT:    ;;#ASMSTART9527; GFX950-NEXT:    ; def v19528; GFX950-NEXT:    ;;#ASMEND9529; GFX950-NEXT:    global_atomic_or v0, v0, v1, s[0:1] offset:40 sc09530; GFX950-NEXT:    s_waitcnt vmcnt(0)9531; GFX950-NEXT:    ;;#ASMSTART9532; GFX950-NEXT:    ; use v09533; GFX950-NEXT:    ;;#ASMEND9534; GFX950-NEXT:    s_setpc_b64 s[30:31]9535  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109536  %data = call i32 asm "; def $0", "=^VA"()9537  %result = atomicrmw or ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09538  call void asm "; use $0", "^VA"(i32 %result)9539  ret void9540}9541 9542define void @global_atomic_xor_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9543; GFX90A-LABEL: global_atomic_xor_i32_saddr_ret_a_a:9544; GFX90A:       ; %bb.0:9545; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9546; GFX90A-NEXT:    v_mov_b32_e32 v0, 09547; GFX90A-NEXT:    ;;#ASMSTART9548; GFX90A-NEXT:    ; def a09549; GFX90A-NEXT:    ;;#ASMEND9550; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09551; GFX90A-NEXT:    global_atomic_xor v0, v0, v1, s[16:17] offset:40 glc9552; GFX90A-NEXT:    s_waitcnt vmcnt(0)9553; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09554; GFX90A-NEXT:    ;;#ASMSTART9555; GFX90A-NEXT:    ; use a09556; GFX90A-NEXT:    ;;#ASMEND9557; GFX90A-NEXT:    s_setpc_b64 s[30:31]9558;9559; GFX950-LABEL: global_atomic_xor_i32_saddr_ret_a_a:9560; GFX950:       ; %bb.0:9561; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9562; GFX950-NEXT:    v_mov_b32_e32 v0, 09563; GFX950-NEXT:    ;;#ASMSTART9564; GFX950-NEXT:    ; def a09565; GFX950-NEXT:    ;;#ASMEND9566; GFX950-NEXT:    s_nop 09567; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09568; GFX950-NEXT:    global_atomic_xor v0, v0, v1, s[0:1] offset:40 sc09569; GFX950-NEXT:    s_waitcnt vmcnt(0)9570; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09571; GFX950-NEXT:    ;;#ASMSTART9572; GFX950-NEXT:    ; use a09573; GFX950-NEXT:    ;;#ASMEND9574; GFX950-NEXT:    s_setpc_b64 s[30:31]9575  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109576  %data = call i32 asm "; def $0", "=a"()9577  %result = atomicrmw xor ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09578  call void asm "; use $0", "a"(i32 %result)9579  ret void9580}9581 9582define void @global_atomic_xor_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9583; GFX90A-LABEL: global_atomic_xor_i32_saddr_ret_av_av:9584; GFX90A:       ; %bb.0:9585; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9586; GFX90A-NEXT:    v_mov_b32_e32 v0, 09587; GFX90A-NEXT:    ;;#ASMSTART9588; GFX90A-NEXT:    ; def v19589; GFX90A-NEXT:    ;;#ASMEND9590; GFX90A-NEXT:    global_atomic_xor v0, v0, v1, s[16:17] offset:40 glc9591; GFX90A-NEXT:    s_waitcnt vmcnt(0)9592; GFX90A-NEXT:    ;;#ASMSTART9593; GFX90A-NEXT:    ; use v09594; GFX90A-NEXT:    ;;#ASMEND9595; GFX90A-NEXT:    s_setpc_b64 s[30:31]9596;9597; GFX950-LABEL: global_atomic_xor_i32_saddr_ret_av_av:9598; GFX950:       ; %bb.0:9599; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9600; GFX950-NEXT:    v_mov_b32_e32 v0, 09601; GFX950-NEXT:    ;;#ASMSTART9602; GFX950-NEXT:    ; def v19603; GFX950-NEXT:    ;;#ASMEND9604; GFX950-NEXT:    global_atomic_xor v0, v0, v1, s[0:1] offset:40 sc09605; GFX950-NEXT:    s_waitcnt vmcnt(0)9606; GFX950-NEXT:    ;;#ASMSTART9607; GFX950-NEXT:    ; use v09608; GFX950-NEXT:    ;;#ASMEND9609; GFX950-NEXT:    s_setpc_b64 s[30:31]9610  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109611  %data = call i32 asm "; def $0", "=^VA"()9612  %result = atomicrmw xor ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09613  call void asm "; use $0", "^VA"(i32 %result)9614  ret void9615}9616 9617define void @global_atomic_max_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9618; GFX90A-LABEL: global_atomic_max_i32_saddr_ret_a_a:9619; GFX90A:       ; %bb.0:9620; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9621; GFX90A-NEXT:    v_mov_b32_e32 v0, 09622; GFX90A-NEXT:    ;;#ASMSTART9623; GFX90A-NEXT:    ; def a09624; GFX90A-NEXT:    ;;#ASMEND9625; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09626; GFX90A-NEXT:    global_atomic_smax v0, v0, v1, s[16:17] offset:40 glc9627; GFX90A-NEXT:    s_waitcnt vmcnt(0)9628; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09629; GFX90A-NEXT:    ;;#ASMSTART9630; GFX90A-NEXT:    ; use a09631; GFX90A-NEXT:    ;;#ASMEND9632; GFX90A-NEXT:    s_setpc_b64 s[30:31]9633;9634; GFX950-LABEL: global_atomic_max_i32_saddr_ret_a_a:9635; GFX950:       ; %bb.0:9636; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9637; GFX950-NEXT:    v_mov_b32_e32 v0, 09638; GFX950-NEXT:    ;;#ASMSTART9639; GFX950-NEXT:    ; def a09640; GFX950-NEXT:    ;;#ASMEND9641; GFX950-NEXT:    s_nop 09642; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09643; GFX950-NEXT:    global_atomic_smax v0, v0, v1, s[0:1] offset:40 sc09644; GFX950-NEXT:    s_waitcnt vmcnt(0)9645; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09646; GFX950-NEXT:    ;;#ASMSTART9647; GFX950-NEXT:    ; use a09648; GFX950-NEXT:    ;;#ASMEND9649; GFX950-NEXT:    s_setpc_b64 s[30:31]9650  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109651  %data = call i32 asm "; def $0", "=a"()9652  %result = atomicrmw max ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09653  call void asm "; use $0", "a"(i32 %result)9654  ret void9655}9656 9657define void @global_atomic_max_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9658; GFX90A-LABEL: global_atomic_max_i32_saddr_ret_av_av:9659; GFX90A:       ; %bb.0:9660; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9661; GFX90A-NEXT:    v_mov_b32_e32 v0, 09662; GFX90A-NEXT:    ;;#ASMSTART9663; GFX90A-NEXT:    ; def v19664; GFX90A-NEXT:    ;;#ASMEND9665; GFX90A-NEXT:    global_atomic_smax v0, v0, v1, s[16:17] offset:40 glc9666; GFX90A-NEXT:    s_waitcnt vmcnt(0)9667; GFX90A-NEXT:    ;;#ASMSTART9668; GFX90A-NEXT:    ; use v09669; GFX90A-NEXT:    ;;#ASMEND9670; GFX90A-NEXT:    s_setpc_b64 s[30:31]9671;9672; GFX950-LABEL: global_atomic_max_i32_saddr_ret_av_av:9673; GFX950:       ; %bb.0:9674; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9675; GFX950-NEXT:    v_mov_b32_e32 v0, 09676; GFX950-NEXT:    ;;#ASMSTART9677; GFX950-NEXT:    ; def v19678; GFX950-NEXT:    ;;#ASMEND9679; GFX950-NEXT:    global_atomic_smax v0, v0, v1, s[0:1] offset:40 sc09680; GFX950-NEXT:    s_waitcnt vmcnt(0)9681; GFX950-NEXT:    ;;#ASMSTART9682; GFX950-NEXT:    ; use v09683; GFX950-NEXT:    ;;#ASMEND9684; GFX950-NEXT:    s_setpc_b64 s[30:31]9685  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109686  %data = call i32 asm "; def $0", "=^VA"()9687  %result = atomicrmw max ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09688  call void asm "; use $0", "^VA"(i32 %result)9689  ret void9690}9691 9692define void @global_atomic_min_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9693; GFX90A-LABEL: global_atomic_min_i32_saddr_ret_a_a:9694; GFX90A:       ; %bb.0:9695; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9696; GFX90A-NEXT:    v_mov_b32_e32 v0, 09697; GFX90A-NEXT:    ;;#ASMSTART9698; GFX90A-NEXT:    ; def a09699; GFX90A-NEXT:    ;;#ASMEND9700; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09701; GFX90A-NEXT:    global_atomic_smin v0, v0, v1, s[16:17] offset:40 glc9702; GFX90A-NEXT:    s_waitcnt vmcnt(0)9703; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09704; GFX90A-NEXT:    ;;#ASMSTART9705; GFX90A-NEXT:    ; use a09706; GFX90A-NEXT:    ;;#ASMEND9707; GFX90A-NEXT:    s_setpc_b64 s[30:31]9708;9709; GFX950-LABEL: global_atomic_min_i32_saddr_ret_a_a:9710; GFX950:       ; %bb.0:9711; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9712; GFX950-NEXT:    v_mov_b32_e32 v0, 09713; GFX950-NEXT:    ;;#ASMSTART9714; GFX950-NEXT:    ; def a09715; GFX950-NEXT:    ;;#ASMEND9716; GFX950-NEXT:    s_nop 09717; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09718; GFX950-NEXT:    global_atomic_smin v0, v0, v1, s[0:1] offset:40 sc09719; GFX950-NEXT:    s_waitcnt vmcnt(0)9720; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09721; GFX950-NEXT:    ;;#ASMSTART9722; GFX950-NEXT:    ; use a09723; GFX950-NEXT:    ;;#ASMEND9724; GFX950-NEXT:    s_setpc_b64 s[30:31]9725  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109726  %data = call i32 asm "; def $0", "=a"()9727  %result = atomicrmw min ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09728  call void asm "; use $0", "a"(i32 %result)9729  ret void9730}9731 9732define void @global_atomic_min_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9733; GFX90A-LABEL: global_atomic_min_i32_saddr_ret_av_av:9734; GFX90A:       ; %bb.0:9735; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9736; GFX90A-NEXT:    v_mov_b32_e32 v0, 09737; GFX90A-NEXT:    ;;#ASMSTART9738; GFX90A-NEXT:    ; def v19739; GFX90A-NEXT:    ;;#ASMEND9740; GFX90A-NEXT:    global_atomic_smin v0, v0, v1, s[16:17] offset:40 glc9741; GFX90A-NEXT:    s_waitcnt vmcnt(0)9742; GFX90A-NEXT:    ;;#ASMSTART9743; GFX90A-NEXT:    ; use v09744; GFX90A-NEXT:    ;;#ASMEND9745; GFX90A-NEXT:    s_setpc_b64 s[30:31]9746;9747; GFX950-LABEL: global_atomic_min_i32_saddr_ret_av_av:9748; GFX950:       ; %bb.0:9749; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9750; GFX950-NEXT:    v_mov_b32_e32 v0, 09751; GFX950-NEXT:    ;;#ASMSTART9752; GFX950-NEXT:    ; def v19753; GFX950-NEXT:    ;;#ASMEND9754; GFX950-NEXT:    global_atomic_smin v0, v0, v1, s[0:1] offset:40 sc09755; GFX950-NEXT:    s_waitcnt vmcnt(0)9756; GFX950-NEXT:    ;;#ASMSTART9757; GFX950-NEXT:    ; use v09758; GFX950-NEXT:    ;;#ASMEND9759; GFX950-NEXT:    s_setpc_b64 s[30:31]9760  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109761  %data = call i32 asm "; def $0", "=^VA"()9762  %result = atomicrmw min ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09763  call void asm "; use $0", "^VA"(i32 %result)9764  ret void9765}9766 9767define void @global_atomic_umax_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9768; GFX90A-LABEL: global_atomic_umax_i32_saddr_ret_a_a:9769; GFX90A:       ; %bb.0:9770; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9771; GFX90A-NEXT:    v_mov_b32_e32 v0, 09772; GFX90A-NEXT:    ;;#ASMSTART9773; GFX90A-NEXT:    ; def a09774; GFX90A-NEXT:    ;;#ASMEND9775; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09776; GFX90A-NEXT:    global_atomic_umax v0, v0, v1, s[16:17] offset:40 glc9777; GFX90A-NEXT:    s_waitcnt vmcnt(0)9778; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09779; GFX90A-NEXT:    ;;#ASMSTART9780; GFX90A-NEXT:    ; use a09781; GFX90A-NEXT:    ;;#ASMEND9782; GFX90A-NEXT:    s_setpc_b64 s[30:31]9783;9784; GFX950-LABEL: global_atomic_umax_i32_saddr_ret_a_a:9785; GFX950:       ; %bb.0:9786; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9787; GFX950-NEXT:    v_mov_b32_e32 v0, 09788; GFX950-NEXT:    ;;#ASMSTART9789; GFX950-NEXT:    ; def a09790; GFX950-NEXT:    ;;#ASMEND9791; GFX950-NEXT:    s_nop 09792; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09793; GFX950-NEXT:    global_atomic_umax v0, v0, v1, s[0:1] offset:40 sc09794; GFX950-NEXT:    s_waitcnt vmcnt(0)9795; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09796; GFX950-NEXT:    ;;#ASMSTART9797; GFX950-NEXT:    ; use a09798; GFX950-NEXT:    ;;#ASMEND9799; GFX950-NEXT:    s_setpc_b64 s[30:31]9800  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109801  %data = call i32 asm "; def $0", "=a"()9802  %result = atomicrmw umax ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09803  call void asm "; use $0", "a"(i32 %result)9804  ret void9805}9806 9807define void @global_atomic_umax_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9808; GFX90A-LABEL: global_atomic_umax_i32_saddr_ret_av_av:9809; GFX90A:       ; %bb.0:9810; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9811; GFX90A-NEXT:    v_mov_b32_e32 v0, 09812; GFX90A-NEXT:    ;;#ASMSTART9813; GFX90A-NEXT:    ; def v19814; GFX90A-NEXT:    ;;#ASMEND9815; GFX90A-NEXT:    global_atomic_umax v0, v0, v1, s[16:17] offset:40 glc9816; GFX90A-NEXT:    s_waitcnt vmcnt(0)9817; GFX90A-NEXT:    ;;#ASMSTART9818; GFX90A-NEXT:    ; use v09819; GFX90A-NEXT:    ;;#ASMEND9820; GFX90A-NEXT:    s_setpc_b64 s[30:31]9821;9822; GFX950-LABEL: global_atomic_umax_i32_saddr_ret_av_av:9823; GFX950:       ; %bb.0:9824; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9825; GFX950-NEXT:    v_mov_b32_e32 v0, 09826; GFX950-NEXT:    ;;#ASMSTART9827; GFX950-NEXT:    ; def v19828; GFX950-NEXT:    ;;#ASMEND9829; GFX950-NEXT:    global_atomic_umax v0, v0, v1, s[0:1] offset:40 sc09830; GFX950-NEXT:    s_waitcnt vmcnt(0)9831; GFX950-NEXT:    ;;#ASMSTART9832; GFX950-NEXT:    ; use v09833; GFX950-NEXT:    ;;#ASMEND9834; GFX950-NEXT:    s_setpc_b64 s[30:31]9835  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109836  %data = call i32 asm "; def $0", "=^VA"()9837  %result = atomicrmw umax ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09838  call void asm "; use $0", "^VA"(i32 %result)9839  ret void9840}9841 9842define void @global_atomic_umin_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9843; GFX90A-LABEL: global_atomic_umin_i32_saddr_ret_a_a:9844; GFX90A:       ; %bb.0:9845; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9846; GFX90A-NEXT:    v_mov_b32_e32 v0, 09847; GFX90A-NEXT:    ;;#ASMSTART9848; GFX90A-NEXT:    ; def a09849; GFX90A-NEXT:    ;;#ASMEND9850; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09851; GFX90A-NEXT:    global_atomic_umin v0, v0, v1, s[16:17] offset:40 glc9852; GFX90A-NEXT:    s_waitcnt vmcnt(0)9853; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09854; GFX90A-NEXT:    ;;#ASMSTART9855; GFX90A-NEXT:    ; use a09856; GFX90A-NEXT:    ;;#ASMEND9857; GFX90A-NEXT:    s_setpc_b64 s[30:31]9858;9859; GFX950-LABEL: global_atomic_umin_i32_saddr_ret_a_a:9860; GFX950:       ; %bb.0:9861; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9862; GFX950-NEXT:    v_mov_b32_e32 v0, 09863; GFX950-NEXT:    ;;#ASMSTART9864; GFX950-NEXT:    ; def a09865; GFX950-NEXT:    ;;#ASMEND9866; GFX950-NEXT:    s_nop 09867; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09868; GFX950-NEXT:    global_atomic_umin v0, v0, v1, s[0:1] offset:40 sc09869; GFX950-NEXT:    s_waitcnt vmcnt(0)9870; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09871; GFX950-NEXT:    ;;#ASMSTART9872; GFX950-NEXT:    ; use a09873; GFX950-NEXT:    ;;#ASMEND9874; GFX950-NEXT:    s_setpc_b64 s[30:31]9875  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109876  %data = call i32 asm "; def $0", "=a"()9877  %result = atomicrmw umin ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09878  call void asm "; use $0", "a"(i32 %result)9879  ret void9880}9881 9882define void @global_atomic_umin_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9883; GFX90A-LABEL: global_atomic_umin_i32_saddr_ret_av_av:9884; GFX90A:       ; %bb.0:9885; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9886; GFX90A-NEXT:    v_mov_b32_e32 v0, 09887; GFX90A-NEXT:    ;;#ASMSTART9888; GFX90A-NEXT:    ; def v19889; GFX90A-NEXT:    ;;#ASMEND9890; GFX90A-NEXT:    global_atomic_umin v0, v0, v1, s[16:17] offset:40 glc9891; GFX90A-NEXT:    s_waitcnt vmcnt(0)9892; GFX90A-NEXT:    ;;#ASMSTART9893; GFX90A-NEXT:    ; use v09894; GFX90A-NEXT:    ;;#ASMEND9895; GFX90A-NEXT:    s_setpc_b64 s[30:31]9896;9897; GFX950-LABEL: global_atomic_umin_i32_saddr_ret_av_av:9898; GFX950:       ; %bb.0:9899; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9900; GFX950-NEXT:    v_mov_b32_e32 v0, 09901; GFX950-NEXT:    ;;#ASMSTART9902; GFX950-NEXT:    ; def v19903; GFX950-NEXT:    ;;#ASMEND9904; GFX950-NEXT:    global_atomic_umin v0, v0, v1, s[0:1] offset:40 sc09905; GFX950-NEXT:    s_waitcnt vmcnt(0)9906; GFX950-NEXT:    ;;#ASMSTART9907; GFX950-NEXT:    ; use v09908; GFX950-NEXT:    ;;#ASMEND9909; GFX950-NEXT:    s_setpc_b64 s[30:31]9910  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109911  %data = call i32 asm "; def $0", "=^VA"()9912  %result = atomicrmw umin ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09913  call void asm "; use $0", "^VA"(i32 %result)9914  ret void9915}9916 9917define void @global_atomic_uinc_wrap_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9918; GFX90A-LABEL: global_atomic_uinc_wrap_i32_saddr_ret_a_a:9919; GFX90A:       ; %bb.0:9920; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9921; GFX90A-NEXT:    v_mov_b32_e32 v0, 09922; GFX90A-NEXT:    ;;#ASMSTART9923; GFX90A-NEXT:    ; def a09924; GFX90A-NEXT:    ;;#ASMEND9925; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a09926; GFX90A-NEXT:    global_atomic_inc v0, v0, v1, s[16:17] offset:40 glc9927; GFX90A-NEXT:    s_waitcnt vmcnt(0)9928; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v09929; GFX90A-NEXT:    ;;#ASMSTART9930; GFX90A-NEXT:    ; use a09931; GFX90A-NEXT:    ;;#ASMEND9932; GFX90A-NEXT:    s_setpc_b64 s[30:31]9933;9934; GFX950-LABEL: global_atomic_uinc_wrap_i32_saddr_ret_a_a:9935; GFX950:       ; %bb.0:9936; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9937; GFX950-NEXT:    v_mov_b32_e32 v0, 09938; GFX950-NEXT:    ;;#ASMSTART9939; GFX950-NEXT:    ; def a09940; GFX950-NEXT:    ;;#ASMEND9941; GFX950-NEXT:    s_nop 09942; GFX950-NEXT:    v_accvgpr_read_b32 v1, a09943; GFX950-NEXT:    global_atomic_inc v0, v0, v1, s[0:1] offset:40 sc09944; GFX950-NEXT:    s_waitcnt vmcnt(0)9945; GFX950-NEXT:    v_accvgpr_write_b32 a0, v09946; GFX950-NEXT:    ;;#ASMSTART9947; GFX950-NEXT:    ; use a09948; GFX950-NEXT:    ;;#ASMEND9949; GFX950-NEXT:    s_setpc_b64 s[30:31]9950  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109951  %data = call i32 asm "; def $0", "=a"()9952  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09953  call void asm "; use $0", "a"(i32 %result)9954  ret void9955}9956 9957define void @global_atomic_uinc_wrap_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {9958; GFX90A-LABEL: global_atomic_uinc_wrap_i32_saddr_ret_av_av:9959; GFX90A:       ; %bb.0:9960; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9961; GFX90A-NEXT:    v_mov_b32_e32 v0, 09962; GFX90A-NEXT:    ;;#ASMSTART9963; GFX90A-NEXT:    ; def v19964; GFX90A-NEXT:    ;;#ASMEND9965; GFX90A-NEXT:    global_atomic_inc v0, v0, v1, s[16:17] offset:40 glc9966; GFX90A-NEXT:    s_waitcnt vmcnt(0)9967; GFX90A-NEXT:    ;;#ASMSTART9968; GFX90A-NEXT:    ; use v09969; GFX90A-NEXT:    ;;#ASMEND9970; GFX90A-NEXT:    s_setpc_b64 s[30:31]9971;9972; GFX950-LABEL: global_atomic_uinc_wrap_i32_saddr_ret_av_av:9973; GFX950:       ; %bb.0:9974; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9975; GFX950-NEXT:    v_mov_b32_e32 v0, 09976; GFX950-NEXT:    ;;#ASMSTART9977; GFX950-NEXT:    ; def v19978; GFX950-NEXT:    ;;#ASMEND9979; GFX950-NEXT:    global_atomic_inc v0, v0, v1, s[0:1] offset:40 sc09980; GFX950-NEXT:    s_waitcnt vmcnt(0)9981; GFX950-NEXT:    ;;#ASMSTART9982; GFX950-NEXT:    ; use v09983; GFX950-NEXT:    ;;#ASMEND9984; GFX950-NEXT:    s_setpc_b64 s[30:31]9985  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 109986  %data = call i32 asm "; def $0", "=^VA"()9987  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !09988  call void asm "; use $0", "^VA"(i32 %result)9989  ret void9990}9991 9992define void @global_atomic_udec_wrap_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {9993; GFX90A-LABEL: global_atomic_udec_wrap_i32_saddr_ret_a_a:9994; GFX90A:       ; %bb.0:9995; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9996; GFX90A-NEXT:    v_mov_b32_e32 v0, 09997; GFX90A-NEXT:    ;;#ASMSTART9998; GFX90A-NEXT:    ; def a09999; GFX90A-NEXT:    ;;#ASMEND10000; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a010001; GFX90A-NEXT:    global_atomic_dec v0, v0, v1, s[16:17] offset:40 glc10002; GFX90A-NEXT:    s_waitcnt vmcnt(0)10003; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010004; GFX90A-NEXT:    ;;#ASMSTART10005; GFX90A-NEXT:    ; use a010006; GFX90A-NEXT:    ;;#ASMEND10007; GFX90A-NEXT:    s_setpc_b64 s[30:31]10008;10009; GFX950-LABEL: global_atomic_udec_wrap_i32_saddr_ret_a_a:10010; GFX950:       ; %bb.0:10011; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10012; GFX950-NEXT:    v_mov_b32_e32 v0, 010013; GFX950-NEXT:    ;;#ASMSTART10014; GFX950-NEXT:    ; def a010015; GFX950-NEXT:    ;;#ASMEND10016; GFX950-NEXT:    s_nop 010017; GFX950-NEXT:    v_accvgpr_read_b32 v1, a010018; GFX950-NEXT:    global_atomic_dec v0, v0, v1, s[0:1] offset:40 sc010019; GFX950-NEXT:    s_waitcnt vmcnt(0)10020; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010021; GFX950-NEXT:    ;;#ASMSTART10022; GFX950-NEXT:    ; use a010023; GFX950-NEXT:    ;;#ASMEND10024; GFX950-NEXT:    s_setpc_b64 s[30:31]10025  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1010026  %data = call i32 asm "; def $0", "=a"()10027  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010028  call void asm "; use $0", "a"(i32 %result)10029  ret void10030}10031 10032define void @global_atomic_udec_wrap_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10033; GFX90A-LABEL: global_atomic_udec_wrap_i32_saddr_ret_av_av:10034; GFX90A:       ; %bb.0:10035; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10036; GFX90A-NEXT:    v_mov_b32_e32 v0, 010037; GFX90A-NEXT:    ;;#ASMSTART10038; GFX90A-NEXT:    ; def v110039; GFX90A-NEXT:    ;;#ASMEND10040; GFX90A-NEXT:    global_atomic_dec v0, v0, v1, s[16:17] offset:40 glc10041; GFX90A-NEXT:    s_waitcnt vmcnt(0)10042; GFX90A-NEXT:    ;;#ASMSTART10043; GFX90A-NEXT:    ; use v010044; GFX90A-NEXT:    ;;#ASMEND10045; GFX90A-NEXT:    s_setpc_b64 s[30:31]10046;10047; GFX950-LABEL: global_atomic_udec_wrap_i32_saddr_ret_av_av:10048; GFX950:       ; %bb.0:10049; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10050; GFX950-NEXT:    v_mov_b32_e32 v0, 010051; GFX950-NEXT:    ;;#ASMSTART10052; GFX950-NEXT:    ; def v110053; GFX950-NEXT:    ;;#ASMEND10054; GFX950-NEXT:    global_atomic_dec v0, v0, v1, s[0:1] offset:40 sc010055; GFX950-NEXT:    s_waitcnt vmcnt(0)10056; GFX950-NEXT:    ;;#ASMSTART10057; GFX950-NEXT:    ; use v010058; GFX950-NEXT:    ;;#ASMEND10059; GFX950-NEXT:    s_setpc_b64 s[30:31]10060  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1010061  %data = call i32 asm "; def $0", "=^VA"()10062  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010063  call void asm "; use $0", "^VA"(i32 %result)10064  ret void10065}10066 10067define void @global_atomic_usub_cond_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10068; GFX90A-LABEL: global_atomic_usub_cond_i32_saddr_ret_a_a:10069; GFX90A:       ; %bb.0:10070; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10071; GFX90A-NEXT:    v_mov_b32_e32 v2, 010072; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4010073; GFX90A-NEXT:    ;;#ASMSTART10074; GFX90A-NEXT:    ; def a010075; GFX90A-NEXT:    ;;#ASMEND10076; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a010077; GFX90A-NEXT:    s_mov_b64 s[4:5], 010078; GFX90A-NEXT:  .LBB189_1: ; %atomicrmw.start10079; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=110080; GFX90A-NEXT:    s_waitcnt vmcnt(0)10081; GFX90A-NEXT:    v_sub_u32_e32 v0, v1, v310082; GFX90A-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v310083; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc10084; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc10085; GFX90A-NEXT:    s_waitcnt vmcnt(0)10086; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110087; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]10088; GFX90A-NEXT:    v_mov_b32_e32 v1, v010089; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]10090; GFX90A-NEXT:    s_cbranch_execnz .LBB189_110091; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end10092; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]10093; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010094; GFX90A-NEXT:    ;;#ASMSTART10095; GFX90A-NEXT:    ; use a010096; GFX90A-NEXT:    ;;#ASMEND10097; GFX90A-NEXT:    s_setpc_b64 s[30:31]10098;10099; GFX950-LABEL: global_atomic_usub_cond_i32_saddr_ret_a_a:10100; GFX950:       ; %bb.0:10101; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10102; GFX950-NEXT:    v_mov_b32_e32 v2, 010103; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4010104; GFX950-NEXT:    ;;#ASMSTART10105; GFX950-NEXT:    ; def a010106; GFX950-NEXT:    ;;#ASMEND10107; GFX950-NEXT:    s_mov_b64 s[2:3], 010108; GFX950-NEXT:    v_accvgpr_read_b32 v3, a010109; GFX950-NEXT:  .LBB189_1: ; %atomicrmw.start10110; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=110111; GFX950-NEXT:    s_waitcnt vmcnt(0)10112; GFX950-NEXT:    v_sub_u32_e32 v0, v1, v310113; GFX950-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v310114; GFX950-NEXT:    s_nop 110115; GFX950-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc10116; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc010117; GFX950-NEXT:    s_waitcnt vmcnt(0)10118; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110119; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]10120; GFX950-NEXT:    v_mov_b32_e32 v1, v010121; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]10122; GFX950-NEXT:    s_cbranch_execnz .LBB189_110123; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end10124; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]10125; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010126; GFX950-NEXT:    ;;#ASMSTART10127; GFX950-NEXT:    ; use a010128; GFX950-NEXT:    ;;#ASMEND10129; GFX950-NEXT:    s_setpc_b64 s[30:31]10130  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1010131  %data = call i32 asm "; def $0", "=a"()10132  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010133  call void asm "; use $0", "a"(i32 %result)10134  ret void10135}10136 10137define void @global_atomic_usub_cond_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10138; GFX90A-LABEL: global_atomic_usub_cond_i32_saddr_ret_av_av:10139; GFX90A:       ; %bb.0:10140; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10141; GFX90A-NEXT:    v_mov_b32_e32 v2, 010142; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4010143; GFX90A-NEXT:    s_mov_b64 s[4:5], 010144; GFX90A-NEXT:    ;;#ASMSTART10145; GFX90A-NEXT:    ; def v310146; GFX90A-NEXT:    ;;#ASMEND10147; GFX90A-NEXT:  .LBB190_1: ; %atomicrmw.start10148; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=110149; GFX90A-NEXT:    s_waitcnt vmcnt(0)10150; GFX90A-NEXT:    v_sub_u32_e32 v0, v1, v310151; GFX90A-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v310152; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc10153; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc10154; GFX90A-NEXT:    s_waitcnt vmcnt(0)10155; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110156; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]10157; GFX90A-NEXT:    v_mov_b32_e32 v1, v010158; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]10159; GFX90A-NEXT:    s_cbranch_execnz .LBB190_110160; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end10161; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]10162; GFX90A-NEXT:    ;;#ASMSTART10163; GFX90A-NEXT:    ; use v010164; GFX90A-NEXT:    ;;#ASMEND10165; GFX90A-NEXT:    s_setpc_b64 s[30:31]10166;10167; GFX950-LABEL: global_atomic_usub_cond_i32_saddr_ret_av_av:10168; GFX950:       ; %bb.0:10169; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10170; GFX950-NEXT:    v_mov_b32_e32 v2, 010171; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4010172; GFX950-NEXT:    s_mov_b64 s[2:3], 010173; GFX950-NEXT:    ;;#ASMSTART10174; GFX950-NEXT:    ; def v310175; GFX950-NEXT:    ;;#ASMEND10176; GFX950-NEXT:  .LBB190_1: ; %atomicrmw.start10177; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=110178; GFX950-NEXT:    s_waitcnt vmcnt(0)10179; GFX950-NEXT:    v_sub_u32_e32 v0, v1, v310180; GFX950-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v310181; GFX950-NEXT:    s_nop 110182; GFX950-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc10183; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc010184; GFX950-NEXT:    s_waitcnt vmcnt(0)10185; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110186; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]10187; GFX950-NEXT:    v_mov_b32_e32 v1, v010188; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]10189; GFX950-NEXT:    s_cbranch_execnz .LBB190_110190; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end10191; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]10192; GFX950-NEXT:    ;;#ASMSTART10193; GFX950-NEXT:    ; use v010194; GFX950-NEXT:    ;;#ASMEND10195; GFX950-NEXT:    s_setpc_b64 s[30:31]10196  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1010197  %data = call i32 asm "; def $0", "=^VA"()10198  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010199  call void asm "; use $0", "^VA"(i32 %result)10200  ret void10201}10202 10203define void @global_atomic_usub_sat_i32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10204; GFX90A-LABEL: global_atomic_usub_sat_i32_saddr_ret_a_a:10205; GFX90A:       ; %bb.0:10206; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10207; GFX90A-NEXT:    v_mov_b32_e32 v2, 010208; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4010209; GFX90A-NEXT:    ;;#ASMSTART10210; GFX90A-NEXT:    ; def a010211; GFX90A-NEXT:    ;;#ASMEND10212; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a010213; GFX90A-NEXT:    s_mov_b64 s[4:5], 010214; GFX90A-NEXT:  .LBB191_1: ; %atomicrmw.start10215; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=110216; GFX90A-NEXT:    s_waitcnt vmcnt(0)10217; GFX90A-NEXT:    v_sub_u32_e64 v0, v1, v3 clamp10218; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc10219; GFX90A-NEXT:    s_waitcnt vmcnt(0)10220; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110221; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]10222; GFX90A-NEXT:    v_mov_b32_e32 v1, v010223; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]10224; GFX90A-NEXT:    s_cbranch_execnz .LBB191_110225; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end10226; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]10227; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010228; GFX90A-NEXT:    ;;#ASMSTART10229; GFX90A-NEXT:    ; use a010230; GFX90A-NEXT:    ;;#ASMEND10231; GFX90A-NEXT:    s_setpc_b64 s[30:31]10232;10233; GFX950-LABEL: global_atomic_usub_sat_i32_saddr_ret_a_a:10234; GFX950:       ; %bb.0:10235; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10236; GFX950-NEXT:    v_mov_b32_e32 v2, 010237; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4010238; GFX950-NEXT:    ;;#ASMSTART10239; GFX950-NEXT:    ; def a010240; GFX950-NEXT:    ;;#ASMEND10241; GFX950-NEXT:    s_mov_b64 s[2:3], 010242; GFX950-NEXT:    v_accvgpr_read_b32 v3, a010243; GFX950-NEXT:  .LBB191_1: ; %atomicrmw.start10244; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=110245; GFX950-NEXT:    s_waitcnt vmcnt(0)10246; GFX950-NEXT:    v_sub_u32_e64 v0, v1, v3 clamp10247; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc010248; GFX950-NEXT:    s_waitcnt vmcnt(0)10249; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110250; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]10251; GFX950-NEXT:    v_mov_b32_e32 v1, v010252; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]10253; GFX950-NEXT:    s_cbranch_execnz .LBB191_110254; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end10255; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]10256; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010257; GFX950-NEXT:    ;;#ASMSTART10258; GFX950-NEXT:    ; use a010259; GFX950-NEXT:    ;;#ASMEND10260; GFX950-NEXT:    s_setpc_b64 s[30:31]10261  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1010262  %data = call i32 asm "; def $0", "=a"()10263  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010264  call void asm "; use $0", "a"(i32 %result)10265  ret void10266}10267 10268define void @global_atomic_usub_sat_i32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10269; GFX90A-LABEL: global_atomic_usub_sat_i32_saddr_ret_av_av:10270; GFX90A:       ; %bb.0:10271; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10272; GFX90A-NEXT:    v_mov_b32_e32 v2, 010273; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4010274; GFX90A-NEXT:    s_mov_b64 s[4:5], 010275; GFX90A-NEXT:    ;;#ASMSTART10276; GFX90A-NEXT:    ; def v310277; GFX90A-NEXT:    ;;#ASMEND10278; GFX90A-NEXT:  .LBB192_1: ; %atomicrmw.start10279; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=110280; GFX90A-NEXT:    s_waitcnt vmcnt(0)10281; GFX90A-NEXT:    v_sub_u32_e64 v0, v1, v3 clamp10282; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc10283; GFX90A-NEXT:    s_waitcnt vmcnt(0)10284; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110285; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]10286; GFX90A-NEXT:    v_mov_b32_e32 v1, v010287; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]10288; GFX90A-NEXT:    s_cbranch_execnz .LBB192_110289; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end10290; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]10291; GFX90A-NEXT:    ;;#ASMSTART10292; GFX90A-NEXT:    ; use v010293; GFX90A-NEXT:    ;;#ASMEND10294; GFX90A-NEXT:    s_setpc_b64 s[30:31]10295;10296; GFX950-LABEL: global_atomic_usub_sat_i32_saddr_ret_av_av:10297; GFX950:       ; %bb.0:10298; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10299; GFX950-NEXT:    v_mov_b32_e32 v2, 010300; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4010301; GFX950-NEXT:    s_mov_b64 s[2:3], 010302; GFX950-NEXT:    ;;#ASMSTART10303; GFX950-NEXT:    ; def v310304; GFX950-NEXT:    ;;#ASMEND10305; GFX950-NEXT:  .LBB192_1: ; %atomicrmw.start10306; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=110307; GFX950-NEXT:    s_waitcnt vmcnt(0)10308; GFX950-NEXT:    v_sub_u32_e64 v0, v1, v3 clamp10309; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc010310; GFX950-NEXT:    s_waitcnt vmcnt(0)10311; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v110312; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]10313; GFX950-NEXT:    v_mov_b32_e32 v1, v010314; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]10315; GFX950-NEXT:    s_cbranch_execnz .LBB192_110316; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end10317; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]10318; GFX950-NEXT:    ;;#ASMSTART10319; GFX950-NEXT:    ; use v010320; GFX950-NEXT:    ;;#ASMEND10321; GFX950-NEXT:    s_setpc_b64 s[30:31]10322  %gep.0 = getelementptr inbounds [512 x i32], ptr addrspace(1) %ptr, i64 0, i64 1010323  %data = call i32 asm "; def $0", "=^VA"()10324  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010325  call void asm "; use $0", "^VA"(i32 %result)10326  ret void10327}10328 10329;---------------------------------------------------------------------10330; other atomics i64, with aa+av cases using saddr10331;---------------------------------------------------------------------10332 10333define void @global_atomic_xchg_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10334; GFX90A-LABEL: global_atomic_xchg_i64_saddr_ret_a_a:10335; GFX90A:       ; %bb.0:10336; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10337; GFX90A-NEXT:    ;;#ASMSTART10338; GFX90A-NEXT:    ; def a[0:1]10339; GFX90A-NEXT:    ;;#ASMEND10340; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a010341; GFX90A-NEXT:    v_mov_b32_e32 v2, 010342; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a110343; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10344; GFX90A-NEXT:    s_waitcnt vmcnt(0)10345; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010346; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110347; GFX90A-NEXT:    ;;#ASMSTART10348; GFX90A-NEXT:    ; use a[0:1]10349; GFX90A-NEXT:    ;;#ASMEND10350; GFX90A-NEXT:    s_setpc_b64 s[30:31]10351;10352; GFX950-LABEL: global_atomic_xchg_i64_saddr_ret_a_a:10353; GFX950:       ; %bb.0:10354; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10355; GFX950-NEXT:    ;;#ASMSTART10356; GFX950-NEXT:    ; def a[0:1]10357; GFX950-NEXT:    ;;#ASMEND10358; GFX950-NEXT:    v_mov_b32_e32 v2, 010359; GFX950-NEXT:    v_accvgpr_read_b32 v0, a010360; GFX950-NEXT:    v_accvgpr_read_b32 v1, a110361; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010362; GFX950-NEXT:    s_waitcnt vmcnt(0)10363; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010364; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110365; GFX950-NEXT:    ;;#ASMSTART10366; GFX950-NEXT:    ; use a[0:1]10367; GFX950-NEXT:    ;;#ASMEND10368; GFX950-NEXT:    s_setpc_b64 s[30:31]10369  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010370  %data = call i64 asm "; def $0", "=a"()10371  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010372  call void asm "; use $0", "a"(i64 %result)10373  ret void10374}10375 10376define void @global_atomic_xchg_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10377; GFX90A-LABEL: global_atomic_xchg_i64_saddr_ret_av_av:10378; GFX90A:       ; %bb.0:10379; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10380; GFX90A-NEXT:    v_mov_b32_e32 v2, 010381; GFX90A-NEXT:    ;;#ASMSTART10382; GFX90A-NEXT:    ; def v[0:1]10383; GFX90A-NEXT:    ;;#ASMEND10384; GFX90A-NEXT:    global_atomic_swap_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10385; GFX90A-NEXT:    s_waitcnt vmcnt(0)10386; GFX90A-NEXT:    ;;#ASMSTART10387; GFX90A-NEXT:    ; use v[0:1]10388; GFX90A-NEXT:    ;;#ASMEND10389; GFX90A-NEXT:    s_setpc_b64 s[30:31]10390;10391; GFX950-LABEL: global_atomic_xchg_i64_saddr_ret_av_av:10392; GFX950:       ; %bb.0:10393; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10394; GFX950-NEXT:    v_mov_b32_e32 v2, 010395; GFX950-NEXT:    ;;#ASMSTART10396; GFX950-NEXT:    ; def v[0:1]10397; GFX950-NEXT:    ;;#ASMEND10398; GFX950-NEXT:    global_atomic_swap_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010399; GFX950-NEXT:    s_waitcnt vmcnt(0)10400; GFX950-NEXT:    ;;#ASMSTART10401; GFX950-NEXT:    ; use v[0:1]10402; GFX950-NEXT:    ;;#ASMEND10403; GFX950-NEXT:    s_setpc_b64 s[30:31]10404  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010405  %data = call i64 asm "; def $0", "=^VA"()10406  %result = atomicrmw xchg ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010407  call void asm "; use $0", "^VA"(i64 %result)10408  ret void10409}10410 10411define void @global_atomic_add_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10412; GFX90A-LABEL: global_atomic_add_i64_saddr_ret_a_a:10413; GFX90A:       ; %bb.0:10414; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10415; GFX90A-NEXT:    ;;#ASMSTART10416; GFX90A-NEXT:    ; def a[0:1]10417; GFX90A-NEXT:    ;;#ASMEND10418; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a010419; GFX90A-NEXT:    v_mov_b32_e32 v2, 010420; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a110421; GFX90A-NEXT:    global_atomic_add_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10422; GFX90A-NEXT:    s_waitcnt vmcnt(0)10423; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010424; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110425; GFX90A-NEXT:    ;;#ASMSTART10426; GFX90A-NEXT:    ; use a[0:1]10427; GFX90A-NEXT:    ;;#ASMEND10428; GFX90A-NEXT:    s_setpc_b64 s[30:31]10429;10430; GFX950-LABEL: global_atomic_add_i64_saddr_ret_a_a:10431; GFX950:       ; %bb.0:10432; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10433; GFX950-NEXT:    ;;#ASMSTART10434; GFX950-NEXT:    ; def a[0:1]10435; GFX950-NEXT:    ;;#ASMEND10436; GFX950-NEXT:    v_mov_b32_e32 v2, 010437; GFX950-NEXT:    v_accvgpr_read_b32 v0, a010438; GFX950-NEXT:    v_accvgpr_read_b32 v1, a110439; GFX950-NEXT:    global_atomic_add_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010440; GFX950-NEXT:    s_waitcnt vmcnt(0)10441; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010442; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110443; GFX950-NEXT:    ;;#ASMSTART10444; GFX950-NEXT:    ; use a[0:1]10445; GFX950-NEXT:    ;;#ASMEND10446; GFX950-NEXT:    s_setpc_b64 s[30:31]10447  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010448  %data = call i64 asm "; def $0", "=a"()10449  %result = atomicrmw add ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010450  call void asm "; use $0", "a"(i64 %result)10451  ret void10452}10453 10454define void @global_atomic_add_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10455; GFX90A-LABEL: global_atomic_add_i64_saddr_ret_av_av:10456; GFX90A:       ; %bb.0:10457; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10458; GFX90A-NEXT:    v_mov_b32_e32 v2, 010459; GFX90A-NEXT:    ;;#ASMSTART10460; GFX90A-NEXT:    ; def v[0:1]10461; GFX90A-NEXT:    ;;#ASMEND10462; GFX90A-NEXT:    global_atomic_add_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10463; GFX90A-NEXT:    s_waitcnt vmcnt(0)10464; GFX90A-NEXT:    ;;#ASMSTART10465; GFX90A-NEXT:    ; use v[0:1]10466; GFX90A-NEXT:    ;;#ASMEND10467; GFX90A-NEXT:    s_setpc_b64 s[30:31]10468;10469; GFX950-LABEL: global_atomic_add_i64_saddr_ret_av_av:10470; GFX950:       ; %bb.0:10471; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10472; GFX950-NEXT:    v_mov_b32_e32 v2, 010473; GFX950-NEXT:    ;;#ASMSTART10474; GFX950-NEXT:    ; def v[0:1]10475; GFX950-NEXT:    ;;#ASMEND10476; GFX950-NEXT:    global_atomic_add_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010477; GFX950-NEXT:    s_waitcnt vmcnt(0)10478; GFX950-NEXT:    ;;#ASMSTART10479; GFX950-NEXT:    ; use v[0:1]10480; GFX950-NEXT:    ;;#ASMEND10481; GFX950-NEXT:    s_setpc_b64 s[30:31]10482  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010483  %data = call i64 asm "; def $0", "=^VA"()10484  %result = atomicrmw add ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010485  call void asm "; use $0", "^VA"(i64 %result)10486  ret void10487}10488 10489define void @global_atomic_sub_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10490; GFX90A-LABEL: global_atomic_sub_i64_saddr_ret_a_a:10491; GFX90A:       ; %bb.0:10492; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10493; GFX90A-NEXT:    ;;#ASMSTART10494; GFX90A-NEXT:    ; def a[0:1]10495; GFX90A-NEXT:    ;;#ASMEND10496; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a010497; GFX90A-NEXT:    v_mov_b32_e32 v2, 010498; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a110499; GFX90A-NEXT:    global_atomic_sub_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10500; GFX90A-NEXT:    s_waitcnt vmcnt(0)10501; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010502; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110503; GFX90A-NEXT:    ;;#ASMSTART10504; GFX90A-NEXT:    ; use a[0:1]10505; GFX90A-NEXT:    ;;#ASMEND10506; GFX90A-NEXT:    s_setpc_b64 s[30:31]10507;10508; GFX950-LABEL: global_atomic_sub_i64_saddr_ret_a_a:10509; GFX950:       ; %bb.0:10510; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10511; GFX950-NEXT:    ;;#ASMSTART10512; GFX950-NEXT:    ; def a[0:1]10513; GFX950-NEXT:    ;;#ASMEND10514; GFX950-NEXT:    v_mov_b32_e32 v2, 010515; GFX950-NEXT:    v_accvgpr_read_b32 v0, a010516; GFX950-NEXT:    v_accvgpr_read_b32 v1, a110517; GFX950-NEXT:    global_atomic_sub_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010518; GFX950-NEXT:    s_waitcnt vmcnt(0)10519; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010520; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110521; GFX950-NEXT:    ;;#ASMSTART10522; GFX950-NEXT:    ; use a[0:1]10523; GFX950-NEXT:    ;;#ASMEND10524; GFX950-NEXT:    s_setpc_b64 s[30:31]10525  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010526  %data = call i64 asm "; def $0", "=a"()10527  %result = atomicrmw sub ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010528  call void asm "; use $0", "a"(i64 %result)10529  ret void10530}10531 10532define void @global_atomic_sub_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10533; GFX90A-LABEL: global_atomic_sub_i64_saddr_ret_av_av:10534; GFX90A:       ; %bb.0:10535; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10536; GFX90A-NEXT:    v_mov_b32_e32 v2, 010537; GFX90A-NEXT:    ;;#ASMSTART10538; GFX90A-NEXT:    ; def v[0:1]10539; GFX90A-NEXT:    ;;#ASMEND10540; GFX90A-NEXT:    global_atomic_sub_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10541; GFX90A-NEXT:    s_waitcnt vmcnt(0)10542; GFX90A-NEXT:    ;;#ASMSTART10543; GFX90A-NEXT:    ; use v[0:1]10544; GFX90A-NEXT:    ;;#ASMEND10545; GFX90A-NEXT:    s_setpc_b64 s[30:31]10546;10547; GFX950-LABEL: global_atomic_sub_i64_saddr_ret_av_av:10548; GFX950:       ; %bb.0:10549; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10550; GFX950-NEXT:    v_mov_b32_e32 v2, 010551; GFX950-NEXT:    ;;#ASMSTART10552; GFX950-NEXT:    ; def v[0:1]10553; GFX950-NEXT:    ;;#ASMEND10554; GFX950-NEXT:    global_atomic_sub_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010555; GFX950-NEXT:    s_waitcnt vmcnt(0)10556; GFX950-NEXT:    ;;#ASMSTART10557; GFX950-NEXT:    ; use v[0:1]10558; GFX950-NEXT:    ;;#ASMEND10559; GFX950-NEXT:    s_setpc_b64 s[30:31]10560  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010561  %data = call i64 asm "; def $0", "=^VA"()10562  %result = atomicrmw sub ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010563  call void asm "; use $0", "^VA"(i64 %result)10564  ret void10565}10566 10567define void @global_atomic_and_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10568; GFX90A-LABEL: global_atomic_and_i64_saddr_ret_a_a:10569; GFX90A:       ; %bb.0:10570; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10571; GFX90A-NEXT:    ;;#ASMSTART10572; GFX90A-NEXT:    ; def a[0:1]10573; GFX90A-NEXT:    ;;#ASMEND10574; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a010575; GFX90A-NEXT:    v_mov_b32_e32 v2, 010576; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a110577; GFX90A-NEXT:    global_atomic_and_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10578; GFX90A-NEXT:    s_waitcnt vmcnt(0)10579; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010580; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110581; GFX90A-NEXT:    ;;#ASMSTART10582; GFX90A-NEXT:    ; use a[0:1]10583; GFX90A-NEXT:    ;;#ASMEND10584; GFX90A-NEXT:    s_setpc_b64 s[30:31]10585;10586; GFX950-LABEL: global_atomic_and_i64_saddr_ret_a_a:10587; GFX950:       ; %bb.0:10588; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10589; GFX950-NEXT:    ;;#ASMSTART10590; GFX950-NEXT:    ; def a[0:1]10591; GFX950-NEXT:    ;;#ASMEND10592; GFX950-NEXT:    v_mov_b32_e32 v2, 010593; GFX950-NEXT:    v_accvgpr_read_b32 v0, a010594; GFX950-NEXT:    v_accvgpr_read_b32 v1, a110595; GFX950-NEXT:    global_atomic_and_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010596; GFX950-NEXT:    s_waitcnt vmcnt(0)10597; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010598; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110599; GFX950-NEXT:    ;;#ASMSTART10600; GFX950-NEXT:    ; use a[0:1]10601; GFX950-NEXT:    ;;#ASMEND10602; GFX950-NEXT:    s_setpc_b64 s[30:31]10603  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010604  %data = call i64 asm "; def $0", "=a"()10605  %result = atomicrmw and ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010606  call void asm "; use $0", "a"(i64 %result)10607  ret void10608}10609 10610define void @global_atomic_and_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10611; GFX90A-LABEL: global_atomic_and_i64_saddr_ret_av_av:10612; GFX90A:       ; %bb.0:10613; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10614; GFX90A-NEXT:    v_mov_b32_e32 v2, 010615; GFX90A-NEXT:    ;;#ASMSTART10616; GFX90A-NEXT:    ; def v[0:1]10617; GFX90A-NEXT:    ;;#ASMEND10618; GFX90A-NEXT:    global_atomic_and_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10619; GFX90A-NEXT:    s_waitcnt vmcnt(0)10620; GFX90A-NEXT:    ;;#ASMSTART10621; GFX90A-NEXT:    ; use v[0:1]10622; GFX90A-NEXT:    ;;#ASMEND10623; GFX90A-NEXT:    s_setpc_b64 s[30:31]10624;10625; GFX950-LABEL: global_atomic_and_i64_saddr_ret_av_av:10626; GFX950:       ; %bb.0:10627; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10628; GFX950-NEXT:    v_mov_b32_e32 v2, 010629; GFX950-NEXT:    ;;#ASMSTART10630; GFX950-NEXT:    ; def v[0:1]10631; GFX950-NEXT:    ;;#ASMEND10632; GFX950-NEXT:    global_atomic_and_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010633; GFX950-NEXT:    s_waitcnt vmcnt(0)10634; GFX950-NEXT:    ;;#ASMSTART10635; GFX950-NEXT:    ; use v[0:1]10636; GFX950-NEXT:    ;;#ASMEND10637; GFX950-NEXT:    s_setpc_b64 s[30:31]10638  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010639  %data = call i64 asm "; def $0", "=^VA"()10640  %result = atomicrmw and ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010641  call void asm "; use $0", "^VA"(i64 %result)10642  ret void10643}10644 10645define void @global_atomic_nand_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10646; GFX90A-LABEL: global_atomic_nand_i64_saddr_ret_a_a:10647; GFX90A:       ; %bb.0:10648; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10649; GFX90A-NEXT:    v_mov_b32_e32 v6, 010650; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8010651; GFX90A-NEXT:    ;;#ASMSTART10652; GFX90A-NEXT:    ; def a[0:1]10653; GFX90A-NEXT:    ;;#ASMEND10654; GFX90A-NEXT:    v_accvgpr_read_b32 v5, a110655; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a010656; GFX90A-NEXT:    s_mov_b64 s[4:5], 010657; GFX90A-NEXT:  .LBB201_1: ; %atomicrmw.start10658; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=110659; GFX90A-NEXT:    s_waitcnt vmcnt(0)10660; GFX90A-NEXT:    v_and_b32_e32 v0, v3, v510661; GFX90A-NEXT:    v_and_b32_e32 v7, v2, v410662; GFX90A-NEXT:    v_not_b32_e32 v1, v010663; GFX90A-NEXT:    v_not_b32_e32 v0, v710664; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc10665; GFX90A-NEXT:    s_waitcnt vmcnt(0)10666; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]10667; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]10668; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]10669; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]10670; GFX90A-NEXT:    s_cbranch_execnz .LBB201_110671; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end10672; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]10673; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010674; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110675; GFX90A-NEXT:    ;;#ASMSTART10676; GFX90A-NEXT:    ; use a[0:1]10677; GFX90A-NEXT:    ;;#ASMEND10678; GFX90A-NEXT:    s_setpc_b64 s[30:31]10679;10680; GFX950-LABEL: global_atomic_nand_i64_saddr_ret_a_a:10681; GFX950:       ; %bb.0:10682; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10683; GFX950-NEXT:    v_mov_b32_e32 v6, 010684; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8010685; GFX950-NEXT:    ;;#ASMSTART10686; GFX950-NEXT:    ; def a[0:1]10687; GFX950-NEXT:    ;;#ASMEND10688; GFX950-NEXT:    s_mov_b64 s[2:3], 010689; GFX950-NEXT:    v_accvgpr_read_b32 v5, a110690; GFX950-NEXT:    v_accvgpr_read_b32 v4, a010691; GFX950-NEXT:  .LBB201_1: ; %atomicrmw.start10692; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=110693; GFX950-NEXT:    s_waitcnt vmcnt(0)10694; GFX950-NEXT:    v_and_b32_e32 v0, v3, v510695; GFX950-NEXT:    v_and_b32_e32 v7, v2, v410696; GFX950-NEXT:    v_not_b32_e32 v1, v010697; GFX950-NEXT:    v_not_b32_e32 v0, v710698; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc010699; GFX950-NEXT:    s_waitcnt vmcnt(0)10700; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]10701; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]10702; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]10703; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]10704; GFX950-NEXT:    s_cbranch_execnz .LBB201_110705; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end10706; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]10707; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010708; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110709; GFX950-NEXT:    ;;#ASMSTART10710; GFX950-NEXT:    ; use a[0:1]10711; GFX950-NEXT:    ;;#ASMEND10712; GFX950-NEXT:    s_setpc_b64 s[30:31]10713  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010714  %data = call i64 asm "; def $0", "=a"()10715  %result = atomicrmw nand ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010716  call void asm "; use $0", "a"(i64 %result)10717  ret void10718}10719 10720define void @global_atomic_nand_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10721; GFX90A-LABEL: global_atomic_nand_i64_saddr_ret_av_av:10722; GFX90A:       ; %bb.0:10723; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10724; GFX90A-NEXT:    v_mov_b32_e32 v6, 010725; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8010726; GFX90A-NEXT:    s_mov_b64 s[4:5], 010727; GFX90A-NEXT:    ;;#ASMSTART10728; GFX90A-NEXT:    ; def v[4:5]10729; GFX90A-NEXT:    ;;#ASMEND10730; GFX90A-NEXT:  .LBB202_1: ; %atomicrmw.start10731; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=110732; GFX90A-NEXT:    s_waitcnt vmcnt(0)10733; GFX90A-NEXT:    v_and_b32_e32 v0, v3, v510734; GFX90A-NEXT:    v_and_b32_e32 v7, v2, v410735; GFX90A-NEXT:    v_not_b32_e32 v1, v010736; GFX90A-NEXT:    v_not_b32_e32 v0, v710737; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc10738; GFX90A-NEXT:    s_waitcnt vmcnt(0)10739; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]10740; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]10741; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]10742; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]10743; GFX90A-NEXT:    s_cbranch_execnz .LBB202_110744; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end10745; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]10746; GFX90A-NEXT:    ;;#ASMSTART10747; GFX90A-NEXT:    ; use v[0:1]10748; GFX90A-NEXT:    ;;#ASMEND10749; GFX90A-NEXT:    s_setpc_b64 s[30:31]10750;10751; GFX950-LABEL: global_atomic_nand_i64_saddr_ret_av_av:10752; GFX950:       ; %bb.0:10753; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10754; GFX950-NEXT:    v_mov_b32_e32 v6, 010755; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8010756; GFX950-NEXT:    s_mov_b64 s[2:3], 010757; GFX950-NEXT:    ;;#ASMSTART10758; GFX950-NEXT:    ; def v[4:5]10759; GFX950-NEXT:    ;;#ASMEND10760; GFX950-NEXT:  .LBB202_1: ; %atomicrmw.start10761; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=110762; GFX950-NEXT:    s_waitcnt vmcnt(0)10763; GFX950-NEXT:    v_and_b32_e32 v0, v3, v510764; GFX950-NEXT:    v_and_b32_e32 v7, v2, v410765; GFX950-NEXT:    v_not_b32_e32 v1, v010766; GFX950-NEXT:    v_not_b32_e32 v0, v710767; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc010768; GFX950-NEXT:    s_waitcnt vmcnt(0)10769; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]10770; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]10771; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]10772; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]10773; GFX950-NEXT:    s_cbranch_execnz .LBB202_110774; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end10775; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]10776; GFX950-NEXT:    ;;#ASMSTART10777; GFX950-NEXT:    ; use v[0:1]10778; GFX950-NEXT:    ;;#ASMEND10779; GFX950-NEXT:    s_setpc_b64 s[30:31]10780  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010781  %data = call i64 asm "; def $0", "=^VA"()10782  %result = atomicrmw nand ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010783  call void asm "; use $0", "^VA"(i64 %result)10784  ret void10785}10786 10787define void @global_atomic_or_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10788; GFX90A-LABEL: global_atomic_or_i64_saddr_ret_a_a:10789; GFX90A:       ; %bb.0:10790; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10791; GFX90A-NEXT:    ;;#ASMSTART10792; GFX90A-NEXT:    ; def a[0:1]10793; GFX90A-NEXT:    ;;#ASMEND10794; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a010795; GFX90A-NEXT:    v_mov_b32_e32 v2, 010796; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a110797; GFX90A-NEXT:    global_atomic_or_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10798; GFX90A-NEXT:    s_waitcnt vmcnt(0)10799; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010800; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110801; GFX90A-NEXT:    ;;#ASMSTART10802; GFX90A-NEXT:    ; use a[0:1]10803; GFX90A-NEXT:    ;;#ASMEND10804; GFX90A-NEXT:    s_setpc_b64 s[30:31]10805;10806; GFX950-LABEL: global_atomic_or_i64_saddr_ret_a_a:10807; GFX950:       ; %bb.0:10808; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10809; GFX950-NEXT:    ;;#ASMSTART10810; GFX950-NEXT:    ; def a[0:1]10811; GFX950-NEXT:    ;;#ASMEND10812; GFX950-NEXT:    v_mov_b32_e32 v2, 010813; GFX950-NEXT:    v_accvgpr_read_b32 v0, a010814; GFX950-NEXT:    v_accvgpr_read_b32 v1, a110815; GFX950-NEXT:    global_atomic_or_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010816; GFX950-NEXT:    s_waitcnt vmcnt(0)10817; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010818; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110819; GFX950-NEXT:    ;;#ASMSTART10820; GFX950-NEXT:    ; use a[0:1]10821; GFX950-NEXT:    ;;#ASMEND10822; GFX950-NEXT:    s_setpc_b64 s[30:31]10823  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010824  %data = call i64 asm "; def $0", "=a"()10825  %result = atomicrmw or ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010826  call void asm "; use $0", "a"(i64 %result)10827  ret void10828}10829 10830define void @global_atomic_or_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10831; GFX90A-LABEL: global_atomic_or_i64_saddr_ret_av_av:10832; GFX90A:       ; %bb.0:10833; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10834; GFX90A-NEXT:    v_mov_b32_e32 v2, 010835; GFX90A-NEXT:    ;;#ASMSTART10836; GFX90A-NEXT:    ; def v[0:1]10837; GFX90A-NEXT:    ;;#ASMEND10838; GFX90A-NEXT:    global_atomic_or_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10839; GFX90A-NEXT:    s_waitcnt vmcnt(0)10840; GFX90A-NEXT:    ;;#ASMSTART10841; GFX90A-NEXT:    ; use v[0:1]10842; GFX90A-NEXT:    ;;#ASMEND10843; GFX90A-NEXT:    s_setpc_b64 s[30:31]10844;10845; GFX950-LABEL: global_atomic_or_i64_saddr_ret_av_av:10846; GFX950:       ; %bb.0:10847; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10848; GFX950-NEXT:    v_mov_b32_e32 v2, 010849; GFX950-NEXT:    ;;#ASMSTART10850; GFX950-NEXT:    ; def v[0:1]10851; GFX950-NEXT:    ;;#ASMEND10852; GFX950-NEXT:    global_atomic_or_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010853; GFX950-NEXT:    s_waitcnt vmcnt(0)10854; GFX950-NEXT:    ;;#ASMSTART10855; GFX950-NEXT:    ; use v[0:1]10856; GFX950-NEXT:    ;;#ASMEND10857; GFX950-NEXT:    s_setpc_b64 s[30:31]10858  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010859  %data = call i64 asm "; def $0", "=^VA"()10860  %result = atomicrmw or ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010861  call void asm "; use $0", "^VA"(i64 %result)10862  ret void10863}10864 10865define void @global_atomic_xor_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10866; GFX90A-LABEL: global_atomic_xor_i64_saddr_ret_a_a:10867; GFX90A:       ; %bb.0:10868; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10869; GFX90A-NEXT:    ;;#ASMSTART10870; GFX90A-NEXT:    ; def a[0:1]10871; GFX90A-NEXT:    ;;#ASMEND10872; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a010873; GFX90A-NEXT:    v_mov_b32_e32 v2, 010874; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a110875; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10876; GFX90A-NEXT:    s_waitcnt vmcnt(0)10877; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010878; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110879; GFX90A-NEXT:    ;;#ASMSTART10880; GFX90A-NEXT:    ; use a[0:1]10881; GFX90A-NEXT:    ;;#ASMEND10882; GFX90A-NEXT:    s_setpc_b64 s[30:31]10883;10884; GFX950-LABEL: global_atomic_xor_i64_saddr_ret_a_a:10885; GFX950:       ; %bb.0:10886; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10887; GFX950-NEXT:    ;;#ASMSTART10888; GFX950-NEXT:    ; def a[0:1]10889; GFX950-NEXT:    ;;#ASMEND10890; GFX950-NEXT:    v_mov_b32_e32 v2, 010891; GFX950-NEXT:    v_accvgpr_read_b32 v0, a010892; GFX950-NEXT:    v_accvgpr_read_b32 v1, a110893; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010894; GFX950-NEXT:    s_waitcnt vmcnt(0)10895; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010896; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110897; GFX950-NEXT:    ;;#ASMSTART10898; GFX950-NEXT:    ; use a[0:1]10899; GFX950-NEXT:    ;;#ASMEND10900; GFX950-NEXT:    s_setpc_b64 s[30:31]10901  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010902  %data = call i64 asm "; def $0", "=a"()10903  %result = atomicrmw xor ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010904  call void asm "; use $0", "a"(i64 %result)10905  ret void10906}10907 10908define void @global_atomic_xor_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10909; GFX90A-LABEL: global_atomic_xor_i64_saddr_ret_av_av:10910; GFX90A:       ; %bb.0:10911; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10912; GFX90A-NEXT:    v_mov_b32_e32 v2, 010913; GFX90A-NEXT:    ;;#ASMSTART10914; GFX90A-NEXT:    ; def v[0:1]10915; GFX90A-NEXT:    ;;#ASMEND10916; GFX90A-NEXT:    global_atomic_xor_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10917; GFX90A-NEXT:    s_waitcnt vmcnt(0)10918; GFX90A-NEXT:    ;;#ASMSTART10919; GFX90A-NEXT:    ; use v[0:1]10920; GFX90A-NEXT:    ;;#ASMEND10921; GFX90A-NEXT:    s_setpc_b64 s[30:31]10922;10923; GFX950-LABEL: global_atomic_xor_i64_saddr_ret_av_av:10924; GFX950:       ; %bb.0:10925; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10926; GFX950-NEXT:    v_mov_b32_e32 v2, 010927; GFX950-NEXT:    ;;#ASMSTART10928; GFX950-NEXT:    ; def v[0:1]10929; GFX950-NEXT:    ;;#ASMEND10930; GFX950-NEXT:    global_atomic_xor_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010931; GFX950-NEXT:    s_waitcnt vmcnt(0)10932; GFX950-NEXT:    ;;#ASMSTART10933; GFX950-NEXT:    ; use v[0:1]10934; GFX950-NEXT:    ;;#ASMEND10935; GFX950-NEXT:    s_setpc_b64 s[30:31]10936  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010937  %data = call i64 asm "; def $0", "=^VA"()10938  %result = atomicrmw xor ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010939  call void asm "; use $0", "^VA"(i64 %result)10940  ret void10941}10942 10943define void @global_atomic_max_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {10944; GFX90A-LABEL: global_atomic_max_i64_saddr_ret_a_a:10945; GFX90A:       ; %bb.0:10946; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10947; GFX90A-NEXT:    ;;#ASMSTART10948; GFX90A-NEXT:    ; def a[0:1]10949; GFX90A-NEXT:    ;;#ASMEND10950; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a010951; GFX90A-NEXT:    v_mov_b32_e32 v2, 010952; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a110953; GFX90A-NEXT:    global_atomic_smax_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10954; GFX90A-NEXT:    s_waitcnt vmcnt(0)10955; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v010956; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v110957; GFX90A-NEXT:    ;;#ASMSTART10958; GFX90A-NEXT:    ; use a[0:1]10959; GFX90A-NEXT:    ;;#ASMEND10960; GFX90A-NEXT:    s_setpc_b64 s[30:31]10961;10962; GFX950-LABEL: global_atomic_max_i64_saddr_ret_a_a:10963; GFX950:       ; %bb.0:10964; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10965; GFX950-NEXT:    ;;#ASMSTART10966; GFX950-NEXT:    ; def a[0:1]10967; GFX950-NEXT:    ;;#ASMEND10968; GFX950-NEXT:    v_mov_b32_e32 v2, 010969; GFX950-NEXT:    v_accvgpr_read_b32 v0, a010970; GFX950-NEXT:    v_accvgpr_read_b32 v1, a110971; GFX950-NEXT:    global_atomic_smax_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc010972; GFX950-NEXT:    s_waitcnt vmcnt(0)10973; GFX950-NEXT:    v_accvgpr_write_b32 a0, v010974; GFX950-NEXT:    v_accvgpr_write_b32 a1, v110975; GFX950-NEXT:    ;;#ASMSTART10976; GFX950-NEXT:    ; use a[0:1]10977; GFX950-NEXT:    ;;#ASMEND10978; GFX950-NEXT:    s_setpc_b64 s[30:31]10979  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1010980  %data = call i64 asm "; def $0", "=a"()10981  %result = atomicrmw max ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !010982  call void asm "; use $0", "a"(i64 %result)10983  ret void10984}10985 10986define void @global_atomic_max_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {10987; GFX90A-LABEL: global_atomic_max_i64_saddr_ret_av_av:10988; GFX90A:       ; %bb.0:10989; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10990; GFX90A-NEXT:    v_mov_b32_e32 v2, 010991; GFX90A-NEXT:    ;;#ASMSTART10992; GFX90A-NEXT:    ; def v[0:1]10993; GFX90A-NEXT:    ;;#ASMEND10994; GFX90A-NEXT:    global_atomic_smax_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc10995; GFX90A-NEXT:    s_waitcnt vmcnt(0)10996; GFX90A-NEXT:    ;;#ASMSTART10997; GFX90A-NEXT:    ; use v[0:1]10998; GFX90A-NEXT:    ;;#ASMEND10999; GFX90A-NEXT:    s_setpc_b64 s[30:31]11000;11001; GFX950-LABEL: global_atomic_max_i64_saddr_ret_av_av:11002; GFX950:       ; %bb.0:11003; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11004; GFX950-NEXT:    v_mov_b32_e32 v2, 011005; GFX950-NEXT:    ;;#ASMSTART11006; GFX950-NEXT:    ; def v[0:1]11007; GFX950-NEXT:    ;;#ASMEND11008; GFX950-NEXT:    global_atomic_smax_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011009; GFX950-NEXT:    s_waitcnt vmcnt(0)11010; GFX950-NEXT:    ;;#ASMSTART11011; GFX950-NEXT:    ; use v[0:1]11012; GFX950-NEXT:    ;;#ASMEND11013; GFX950-NEXT:    s_setpc_b64 s[30:31]11014  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011015  %data = call i64 asm "; def $0", "=^VA"()11016  %result = atomicrmw max ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011017  call void asm "; use $0", "^VA"(i64 %result)11018  ret void11019}11020 11021define void @global_atomic_min_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11022; GFX90A-LABEL: global_atomic_min_i64_saddr_ret_a_a:11023; GFX90A:       ; %bb.0:11024; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11025; GFX90A-NEXT:    ;;#ASMSTART11026; GFX90A-NEXT:    ; def a[0:1]11027; GFX90A-NEXT:    ;;#ASMEND11028; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a011029; GFX90A-NEXT:    v_mov_b32_e32 v2, 011030; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a111031; GFX90A-NEXT:    global_atomic_smin_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11032; GFX90A-NEXT:    s_waitcnt vmcnt(0)11033; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011034; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v111035; GFX90A-NEXT:    ;;#ASMSTART11036; GFX90A-NEXT:    ; use a[0:1]11037; GFX90A-NEXT:    ;;#ASMEND11038; GFX90A-NEXT:    s_setpc_b64 s[30:31]11039;11040; GFX950-LABEL: global_atomic_min_i64_saddr_ret_a_a:11041; GFX950:       ; %bb.0:11042; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11043; GFX950-NEXT:    ;;#ASMSTART11044; GFX950-NEXT:    ; def a[0:1]11045; GFX950-NEXT:    ;;#ASMEND11046; GFX950-NEXT:    v_mov_b32_e32 v2, 011047; GFX950-NEXT:    v_accvgpr_read_b32 v0, a011048; GFX950-NEXT:    v_accvgpr_read_b32 v1, a111049; GFX950-NEXT:    global_atomic_smin_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011050; GFX950-NEXT:    s_waitcnt vmcnt(0)11051; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011052; GFX950-NEXT:    v_accvgpr_write_b32 a1, v111053; GFX950-NEXT:    ;;#ASMSTART11054; GFX950-NEXT:    ; use a[0:1]11055; GFX950-NEXT:    ;;#ASMEND11056; GFX950-NEXT:    s_setpc_b64 s[30:31]11057  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011058  %data = call i64 asm "; def $0", "=a"()11059  %result = atomicrmw min ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011060  call void asm "; use $0", "a"(i64 %result)11061  ret void11062}11063 11064define void @global_atomic_min_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11065; GFX90A-LABEL: global_atomic_min_i64_saddr_ret_av_av:11066; GFX90A:       ; %bb.0:11067; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11068; GFX90A-NEXT:    v_mov_b32_e32 v2, 011069; GFX90A-NEXT:    ;;#ASMSTART11070; GFX90A-NEXT:    ; def v[0:1]11071; GFX90A-NEXT:    ;;#ASMEND11072; GFX90A-NEXT:    global_atomic_smin_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11073; GFX90A-NEXT:    s_waitcnt vmcnt(0)11074; GFX90A-NEXT:    ;;#ASMSTART11075; GFX90A-NEXT:    ; use v[0:1]11076; GFX90A-NEXT:    ;;#ASMEND11077; GFX90A-NEXT:    s_setpc_b64 s[30:31]11078;11079; GFX950-LABEL: global_atomic_min_i64_saddr_ret_av_av:11080; GFX950:       ; %bb.0:11081; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11082; GFX950-NEXT:    v_mov_b32_e32 v2, 011083; GFX950-NEXT:    ;;#ASMSTART11084; GFX950-NEXT:    ; def v[0:1]11085; GFX950-NEXT:    ;;#ASMEND11086; GFX950-NEXT:    global_atomic_smin_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011087; GFX950-NEXT:    s_waitcnt vmcnt(0)11088; GFX950-NEXT:    ;;#ASMSTART11089; GFX950-NEXT:    ; use v[0:1]11090; GFX950-NEXT:    ;;#ASMEND11091; GFX950-NEXT:    s_setpc_b64 s[30:31]11092  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011093  %data = call i64 asm "; def $0", "=^VA"()11094  %result = atomicrmw min ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011095  call void asm "; use $0", "^VA"(i64 %result)11096  ret void11097}11098 11099define void @global_atomic_umax_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11100; GFX90A-LABEL: global_atomic_umax_i64_saddr_ret_a_a:11101; GFX90A:       ; %bb.0:11102; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11103; GFX90A-NEXT:    ;;#ASMSTART11104; GFX90A-NEXT:    ; def a[0:1]11105; GFX90A-NEXT:    ;;#ASMEND11106; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a011107; GFX90A-NEXT:    v_mov_b32_e32 v2, 011108; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a111109; GFX90A-NEXT:    global_atomic_umax_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11110; GFX90A-NEXT:    s_waitcnt vmcnt(0)11111; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011112; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v111113; GFX90A-NEXT:    ;;#ASMSTART11114; GFX90A-NEXT:    ; use a[0:1]11115; GFX90A-NEXT:    ;;#ASMEND11116; GFX90A-NEXT:    s_setpc_b64 s[30:31]11117;11118; GFX950-LABEL: global_atomic_umax_i64_saddr_ret_a_a:11119; GFX950:       ; %bb.0:11120; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11121; GFX950-NEXT:    ;;#ASMSTART11122; GFX950-NEXT:    ; def a[0:1]11123; GFX950-NEXT:    ;;#ASMEND11124; GFX950-NEXT:    v_mov_b32_e32 v2, 011125; GFX950-NEXT:    v_accvgpr_read_b32 v0, a011126; GFX950-NEXT:    v_accvgpr_read_b32 v1, a111127; GFX950-NEXT:    global_atomic_umax_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011128; GFX950-NEXT:    s_waitcnt vmcnt(0)11129; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011130; GFX950-NEXT:    v_accvgpr_write_b32 a1, v111131; GFX950-NEXT:    ;;#ASMSTART11132; GFX950-NEXT:    ; use a[0:1]11133; GFX950-NEXT:    ;;#ASMEND11134; GFX950-NEXT:    s_setpc_b64 s[30:31]11135  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011136  %data = call i64 asm "; def $0", "=a"()11137  %result = atomicrmw umax ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011138  call void asm "; use $0", "a"(i64 %result)11139  ret void11140}11141 11142define void @global_atomic_umax_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11143; GFX90A-LABEL: global_atomic_umax_i64_saddr_ret_av_av:11144; GFX90A:       ; %bb.0:11145; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11146; GFX90A-NEXT:    v_mov_b32_e32 v2, 011147; GFX90A-NEXT:    ;;#ASMSTART11148; GFX90A-NEXT:    ; def v[0:1]11149; GFX90A-NEXT:    ;;#ASMEND11150; GFX90A-NEXT:    global_atomic_umax_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11151; GFX90A-NEXT:    s_waitcnt vmcnt(0)11152; GFX90A-NEXT:    ;;#ASMSTART11153; GFX90A-NEXT:    ; use v[0:1]11154; GFX90A-NEXT:    ;;#ASMEND11155; GFX90A-NEXT:    s_setpc_b64 s[30:31]11156;11157; GFX950-LABEL: global_atomic_umax_i64_saddr_ret_av_av:11158; GFX950:       ; %bb.0:11159; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11160; GFX950-NEXT:    v_mov_b32_e32 v2, 011161; GFX950-NEXT:    ;;#ASMSTART11162; GFX950-NEXT:    ; def v[0:1]11163; GFX950-NEXT:    ;;#ASMEND11164; GFX950-NEXT:    global_atomic_umax_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011165; GFX950-NEXT:    s_waitcnt vmcnt(0)11166; GFX950-NEXT:    ;;#ASMSTART11167; GFX950-NEXT:    ; use v[0:1]11168; GFX950-NEXT:    ;;#ASMEND11169; GFX950-NEXT:    s_setpc_b64 s[30:31]11170  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011171  %data = call i64 asm "; def $0", "=^VA"()11172  %result = atomicrmw umax ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011173  call void asm "; use $0", "^VA"(i64 %result)11174  ret void11175}11176 11177define void @global_atomic_umin_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11178; GFX90A-LABEL: global_atomic_umin_i64_saddr_ret_a_a:11179; GFX90A:       ; %bb.0:11180; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11181; GFX90A-NEXT:    ;;#ASMSTART11182; GFX90A-NEXT:    ; def a[0:1]11183; GFX90A-NEXT:    ;;#ASMEND11184; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a011185; GFX90A-NEXT:    v_mov_b32_e32 v2, 011186; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a111187; GFX90A-NEXT:    global_atomic_umin_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11188; GFX90A-NEXT:    s_waitcnt vmcnt(0)11189; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011190; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v111191; GFX90A-NEXT:    ;;#ASMSTART11192; GFX90A-NEXT:    ; use a[0:1]11193; GFX90A-NEXT:    ;;#ASMEND11194; GFX90A-NEXT:    s_setpc_b64 s[30:31]11195;11196; GFX950-LABEL: global_atomic_umin_i64_saddr_ret_a_a:11197; GFX950:       ; %bb.0:11198; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11199; GFX950-NEXT:    ;;#ASMSTART11200; GFX950-NEXT:    ; def a[0:1]11201; GFX950-NEXT:    ;;#ASMEND11202; GFX950-NEXT:    v_mov_b32_e32 v2, 011203; GFX950-NEXT:    v_accvgpr_read_b32 v0, a011204; GFX950-NEXT:    v_accvgpr_read_b32 v1, a111205; GFX950-NEXT:    global_atomic_umin_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011206; GFX950-NEXT:    s_waitcnt vmcnt(0)11207; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011208; GFX950-NEXT:    v_accvgpr_write_b32 a1, v111209; GFX950-NEXT:    ;;#ASMSTART11210; GFX950-NEXT:    ; use a[0:1]11211; GFX950-NEXT:    ;;#ASMEND11212; GFX950-NEXT:    s_setpc_b64 s[30:31]11213  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011214  %data = call i64 asm "; def $0", "=a"()11215  %result = atomicrmw umin ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011216  call void asm "; use $0", "a"(i64 %result)11217  ret void11218}11219 11220define void @global_atomic_umin_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11221; GFX90A-LABEL: global_atomic_umin_i64_saddr_ret_av_av:11222; GFX90A:       ; %bb.0:11223; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11224; GFX90A-NEXT:    v_mov_b32_e32 v2, 011225; GFX90A-NEXT:    ;;#ASMSTART11226; GFX90A-NEXT:    ; def v[0:1]11227; GFX90A-NEXT:    ;;#ASMEND11228; GFX90A-NEXT:    global_atomic_umin_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11229; GFX90A-NEXT:    s_waitcnt vmcnt(0)11230; GFX90A-NEXT:    ;;#ASMSTART11231; GFX90A-NEXT:    ; use v[0:1]11232; GFX90A-NEXT:    ;;#ASMEND11233; GFX90A-NEXT:    s_setpc_b64 s[30:31]11234;11235; GFX950-LABEL: global_atomic_umin_i64_saddr_ret_av_av:11236; GFX950:       ; %bb.0:11237; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11238; GFX950-NEXT:    v_mov_b32_e32 v2, 011239; GFX950-NEXT:    ;;#ASMSTART11240; GFX950-NEXT:    ; def v[0:1]11241; GFX950-NEXT:    ;;#ASMEND11242; GFX950-NEXT:    global_atomic_umin_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011243; GFX950-NEXT:    s_waitcnt vmcnt(0)11244; GFX950-NEXT:    ;;#ASMSTART11245; GFX950-NEXT:    ; use v[0:1]11246; GFX950-NEXT:    ;;#ASMEND11247; GFX950-NEXT:    s_setpc_b64 s[30:31]11248  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011249  %data = call i64 asm "; def $0", "=^VA"()11250  %result = atomicrmw umin ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011251  call void asm "; use $0", "^VA"(i64 %result)11252  ret void11253}11254 11255define void @global_atomic_uinc_wrap_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11256; GFX90A-LABEL: global_atomic_uinc_wrap_i64_saddr_ret_a_a:11257; GFX90A:       ; %bb.0:11258; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11259; GFX90A-NEXT:    ;;#ASMSTART11260; GFX90A-NEXT:    ; def a[0:1]11261; GFX90A-NEXT:    ;;#ASMEND11262; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a011263; GFX90A-NEXT:    v_mov_b32_e32 v2, 011264; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a111265; GFX90A-NEXT:    global_atomic_inc_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11266; GFX90A-NEXT:    s_waitcnt vmcnt(0)11267; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011268; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v111269; GFX90A-NEXT:    ;;#ASMSTART11270; GFX90A-NEXT:    ; use a[0:1]11271; GFX90A-NEXT:    ;;#ASMEND11272; GFX90A-NEXT:    s_setpc_b64 s[30:31]11273;11274; GFX950-LABEL: global_atomic_uinc_wrap_i64_saddr_ret_a_a:11275; GFX950:       ; %bb.0:11276; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11277; GFX950-NEXT:    ;;#ASMSTART11278; GFX950-NEXT:    ; def a[0:1]11279; GFX950-NEXT:    ;;#ASMEND11280; GFX950-NEXT:    v_mov_b32_e32 v2, 011281; GFX950-NEXT:    v_accvgpr_read_b32 v0, a011282; GFX950-NEXT:    v_accvgpr_read_b32 v1, a111283; GFX950-NEXT:    global_atomic_inc_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011284; GFX950-NEXT:    s_waitcnt vmcnt(0)11285; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011286; GFX950-NEXT:    v_accvgpr_write_b32 a1, v111287; GFX950-NEXT:    ;;#ASMSTART11288; GFX950-NEXT:    ; use a[0:1]11289; GFX950-NEXT:    ;;#ASMEND11290; GFX950-NEXT:    s_setpc_b64 s[30:31]11291  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011292  %data = call i64 asm "; def $0", "=a"()11293  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011294  call void asm "; use $0", "a"(i64 %result)11295  ret void11296}11297 11298define void @global_atomic_uinc_wrap_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11299; GFX90A-LABEL: global_atomic_uinc_wrap_i64_saddr_ret_av_av:11300; GFX90A:       ; %bb.0:11301; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11302; GFX90A-NEXT:    v_mov_b32_e32 v2, 011303; GFX90A-NEXT:    ;;#ASMSTART11304; GFX90A-NEXT:    ; def v[0:1]11305; GFX90A-NEXT:    ;;#ASMEND11306; GFX90A-NEXT:    global_atomic_inc_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11307; GFX90A-NEXT:    s_waitcnt vmcnt(0)11308; GFX90A-NEXT:    ;;#ASMSTART11309; GFX90A-NEXT:    ; use v[0:1]11310; GFX90A-NEXT:    ;;#ASMEND11311; GFX90A-NEXT:    s_setpc_b64 s[30:31]11312;11313; GFX950-LABEL: global_atomic_uinc_wrap_i64_saddr_ret_av_av:11314; GFX950:       ; %bb.0:11315; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11316; GFX950-NEXT:    v_mov_b32_e32 v2, 011317; GFX950-NEXT:    ;;#ASMSTART11318; GFX950-NEXT:    ; def v[0:1]11319; GFX950-NEXT:    ;;#ASMEND11320; GFX950-NEXT:    global_atomic_inc_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011321; GFX950-NEXT:    s_waitcnt vmcnt(0)11322; GFX950-NEXT:    ;;#ASMSTART11323; GFX950-NEXT:    ; use v[0:1]11324; GFX950-NEXT:    ;;#ASMEND11325; GFX950-NEXT:    s_setpc_b64 s[30:31]11326  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011327  %data = call i64 asm "; def $0", "=^VA"()11328  %result = atomicrmw uinc_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011329  call void asm "; use $0", "^VA"(i64 %result)11330  ret void11331}11332 11333define void @global_atomic_udec_wrap_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11334; GFX90A-LABEL: global_atomic_udec_wrap_i64_saddr_ret_a_a:11335; GFX90A:       ; %bb.0:11336; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11337; GFX90A-NEXT:    ;;#ASMSTART11338; GFX90A-NEXT:    ; def a[0:1]11339; GFX90A-NEXT:    ;;#ASMEND11340; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a011341; GFX90A-NEXT:    v_mov_b32_e32 v2, 011342; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a111343; GFX90A-NEXT:    global_atomic_dec_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11344; GFX90A-NEXT:    s_waitcnt vmcnt(0)11345; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011346; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v111347; GFX90A-NEXT:    ;;#ASMSTART11348; GFX90A-NEXT:    ; use a[0:1]11349; GFX90A-NEXT:    ;;#ASMEND11350; GFX90A-NEXT:    s_setpc_b64 s[30:31]11351;11352; GFX950-LABEL: global_atomic_udec_wrap_i64_saddr_ret_a_a:11353; GFX950:       ; %bb.0:11354; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11355; GFX950-NEXT:    ;;#ASMSTART11356; GFX950-NEXT:    ; def a[0:1]11357; GFX950-NEXT:    ;;#ASMEND11358; GFX950-NEXT:    v_mov_b32_e32 v2, 011359; GFX950-NEXT:    v_accvgpr_read_b32 v0, a011360; GFX950-NEXT:    v_accvgpr_read_b32 v1, a111361; GFX950-NEXT:    global_atomic_dec_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011362; GFX950-NEXT:    s_waitcnt vmcnt(0)11363; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011364; GFX950-NEXT:    v_accvgpr_write_b32 a1, v111365; GFX950-NEXT:    ;;#ASMSTART11366; GFX950-NEXT:    ; use a[0:1]11367; GFX950-NEXT:    ;;#ASMEND11368; GFX950-NEXT:    s_setpc_b64 s[30:31]11369  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011370  %data = call i64 asm "; def $0", "=a"()11371  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011372  call void asm "; use $0", "a"(i64 %result)11373  ret void11374}11375 11376define void @global_atomic_udec_wrap_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11377; GFX90A-LABEL: global_atomic_udec_wrap_i64_saddr_ret_av_av:11378; GFX90A:       ; %bb.0:11379; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11380; GFX90A-NEXT:    v_mov_b32_e32 v2, 011381; GFX90A-NEXT:    ;;#ASMSTART11382; GFX90A-NEXT:    ; def v[0:1]11383; GFX90A-NEXT:    ;;#ASMEND11384; GFX90A-NEXT:    global_atomic_dec_x2 v[0:1], v2, v[0:1], s[16:17] offset:80 glc11385; GFX90A-NEXT:    s_waitcnt vmcnt(0)11386; GFX90A-NEXT:    ;;#ASMSTART11387; GFX90A-NEXT:    ; use v[0:1]11388; GFX90A-NEXT:    ;;#ASMEND11389; GFX90A-NEXT:    s_setpc_b64 s[30:31]11390;11391; GFX950-LABEL: global_atomic_udec_wrap_i64_saddr_ret_av_av:11392; GFX950:       ; %bb.0:11393; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11394; GFX950-NEXT:    v_mov_b32_e32 v2, 011395; GFX950-NEXT:    ;;#ASMSTART11396; GFX950-NEXT:    ; def v[0:1]11397; GFX950-NEXT:    ;;#ASMEND11398; GFX950-NEXT:    global_atomic_dec_x2 v[0:1], v2, v[0:1], s[0:1] offset:80 sc011399; GFX950-NEXT:    s_waitcnt vmcnt(0)11400; GFX950-NEXT:    ;;#ASMSTART11401; GFX950-NEXT:    ; use v[0:1]11402; GFX950-NEXT:    ;;#ASMEND11403; GFX950-NEXT:    s_setpc_b64 s[30:31]11404  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011405  %data = call i64 asm "; def $0", "=^VA"()11406  %result = atomicrmw udec_wrap ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011407  call void asm "; use $0", "^VA"(i64 %result)11408  ret void11409}11410 11411define void @global_atomic_usub_cond_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11412; GFX90A-LABEL: global_atomic_usub_cond_i64_saddr_ret_a_a:11413; GFX90A:       ; %bb.0:11414; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11415; GFX90A-NEXT:    v_mov_b32_e32 v6, 011416; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8011417; GFX90A-NEXT:    ;;#ASMSTART11418; GFX90A-NEXT:    ; def a[0:1]11419; GFX90A-NEXT:    ;;#ASMEND11420; GFX90A-NEXT:    v_accvgpr_read_b32 v5, a111421; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a011422; GFX90A-NEXT:    s_mov_b64 s[4:5], 011423; GFX90A-NEXT:  .LBB219_1: ; %atomicrmw.start11424; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111425; GFX90A-NEXT:    s_waitcnt vmcnt(0)11426; GFX90A-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411427; GFX90A-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11428; GFX90A-NEXT:    v_cmp_ge_u64_e32 vcc, v[2:3], v[4:5]11429; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc11430; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc11431; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc11432; GFX90A-NEXT:    s_waitcnt vmcnt(0)11433; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11434; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]11435; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]11436; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]11437; GFX90A-NEXT:    s_cbranch_execnz .LBB219_111438; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end11439; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]11440; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011441; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v111442; GFX90A-NEXT:    ;;#ASMSTART11443; GFX90A-NEXT:    ; use a[0:1]11444; GFX90A-NEXT:    ;;#ASMEND11445; GFX90A-NEXT:    s_setpc_b64 s[30:31]11446;11447; GFX950-LABEL: global_atomic_usub_cond_i64_saddr_ret_a_a:11448; GFX950:       ; %bb.0:11449; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11450; GFX950-NEXT:    v_mov_b32_e32 v6, 011451; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8011452; GFX950-NEXT:    ;;#ASMSTART11453; GFX950-NEXT:    ; def a[0:1]11454; GFX950-NEXT:    ;;#ASMEND11455; GFX950-NEXT:    s_mov_b64 s[2:3], 011456; GFX950-NEXT:    v_accvgpr_read_b32 v5, a111457; GFX950-NEXT:    v_accvgpr_read_b32 v4, a011458; GFX950-NEXT:  .LBB219_1: ; %atomicrmw.start11459; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=111460; GFX950-NEXT:    s_waitcnt vmcnt(0)11461; GFX950-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411462; GFX950-NEXT:    s_nop 111463; GFX950-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11464; GFX950-NEXT:    v_cmp_ge_u64_e32 vcc, v[2:3], v[4:5]11465; GFX950-NEXT:    s_nop 111466; GFX950-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc11467; GFX950-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc11468; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc011469; GFX950-NEXT:    s_waitcnt vmcnt(0)11470; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11471; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]11472; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]11473; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]11474; GFX950-NEXT:    s_cbranch_execnz .LBB219_111475; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end11476; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]11477; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011478; GFX950-NEXT:    v_accvgpr_write_b32 a1, v111479; GFX950-NEXT:    ;;#ASMSTART11480; GFX950-NEXT:    ; use a[0:1]11481; GFX950-NEXT:    ;;#ASMEND11482; GFX950-NEXT:    s_setpc_b64 s[30:31]11483  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011484  %data = call i64 asm "; def $0", "=a"()11485  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011486  call void asm "; use $0", "a"(i64 %result)11487  ret void11488}11489 11490define void @global_atomic_usub_cond_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11491; GFX90A-LABEL: global_atomic_usub_cond_i64_saddr_ret_av_av:11492; GFX90A:       ; %bb.0:11493; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11494; GFX90A-NEXT:    v_mov_b32_e32 v6, 011495; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8011496; GFX90A-NEXT:    s_mov_b64 s[4:5], 011497; GFX90A-NEXT:    ;;#ASMSTART11498; GFX90A-NEXT:    ; def v[4:5]11499; GFX90A-NEXT:    ;;#ASMEND11500; GFX90A-NEXT:  .LBB220_1: ; %atomicrmw.start11501; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111502; GFX90A-NEXT:    s_waitcnt vmcnt(0)11503; GFX90A-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411504; GFX90A-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11505; GFX90A-NEXT:    v_cmp_ge_u64_e32 vcc, v[2:3], v[4:5]11506; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc11507; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc11508; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc11509; GFX90A-NEXT:    s_waitcnt vmcnt(0)11510; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11511; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]11512; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]11513; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]11514; GFX90A-NEXT:    s_cbranch_execnz .LBB220_111515; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end11516; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]11517; GFX90A-NEXT:    ;;#ASMSTART11518; GFX90A-NEXT:    ; use v[0:1]11519; GFX90A-NEXT:    ;;#ASMEND11520; GFX90A-NEXT:    s_setpc_b64 s[30:31]11521;11522; GFX950-LABEL: global_atomic_usub_cond_i64_saddr_ret_av_av:11523; GFX950:       ; %bb.0:11524; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11525; GFX950-NEXT:    v_mov_b32_e32 v6, 011526; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8011527; GFX950-NEXT:    s_mov_b64 s[2:3], 011528; GFX950-NEXT:    ;;#ASMSTART11529; GFX950-NEXT:    ; def v[4:5]11530; GFX950-NEXT:    ;;#ASMEND11531; GFX950-NEXT:  .LBB220_1: ; %atomicrmw.start11532; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=111533; GFX950-NEXT:    s_waitcnt vmcnt(0)11534; GFX950-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411535; GFX950-NEXT:    s_nop 111536; GFX950-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11537; GFX950-NEXT:    v_cmp_ge_u64_e32 vcc, v[2:3], v[4:5]11538; GFX950-NEXT:    s_nop 111539; GFX950-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc11540; GFX950-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc11541; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc011542; GFX950-NEXT:    s_waitcnt vmcnt(0)11543; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11544; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]11545; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]11546; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]11547; GFX950-NEXT:    s_cbranch_execnz .LBB220_111548; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end11549; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]11550; GFX950-NEXT:    ;;#ASMSTART11551; GFX950-NEXT:    ; use v[0:1]11552; GFX950-NEXT:    ;;#ASMEND11553; GFX950-NEXT:    s_setpc_b64 s[30:31]11554  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011555  %data = call i64 asm "; def $0", "=^VA"()11556  %result = atomicrmw usub_cond ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011557  call void asm "; use $0", "^VA"(i64 %result)11558  ret void11559}11560 11561define void @global_atomic_usub_sat_i64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11562; GFX90A-LABEL: global_atomic_usub_sat_i64_saddr_ret_a_a:11563; GFX90A:       ; %bb.0:11564; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11565; GFX90A-NEXT:    v_mov_b32_e32 v6, 011566; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8011567; GFX90A-NEXT:    ;;#ASMSTART11568; GFX90A-NEXT:    ; def a[0:1]11569; GFX90A-NEXT:    ;;#ASMEND11570; GFX90A-NEXT:    v_accvgpr_read_b32 v5, a111571; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a011572; GFX90A-NEXT:    s_mov_b64 s[4:5], 011573; GFX90A-NEXT:  .LBB221_1: ; %atomicrmw.start11574; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111575; GFX90A-NEXT:    s_waitcnt vmcnt(0)11576; GFX90A-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411577; GFX90A-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11578; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc11579; GFX90A-NEXT:    v_cndmask_b32_e64 v1, v1, 0, vcc11580; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc11581; GFX90A-NEXT:    s_waitcnt vmcnt(0)11582; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11583; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]11584; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]11585; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]11586; GFX90A-NEXT:    s_cbranch_execnz .LBB221_111587; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end11588; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]11589; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011590; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v111591; GFX90A-NEXT:    ;;#ASMSTART11592; GFX90A-NEXT:    ; use a[0:1]11593; GFX90A-NEXT:    ;;#ASMEND11594; GFX90A-NEXT:    s_setpc_b64 s[30:31]11595;11596; GFX950-LABEL: global_atomic_usub_sat_i64_saddr_ret_a_a:11597; GFX950:       ; %bb.0:11598; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11599; GFX950-NEXT:    v_mov_b32_e32 v6, 011600; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8011601; GFX950-NEXT:    ;;#ASMSTART11602; GFX950-NEXT:    ; def a[0:1]11603; GFX950-NEXT:    ;;#ASMEND11604; GFX950-NEXT:    s_mov_b64 s[2:3], 011605; GFX950-NEXT:    v_accvgpr_read_b32 v5, a111606; GFX950-NEXT:    v_accvgpr_read_b32 v4, a011607; GFX950-NEXT:  .LBB221_1: ; %atomicrmw.start11608; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=111609; GFX950-NEXT:    s_waitcnt vmcnt(0)11610; GFX950-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411611; GFX950-NEXT:    s_nop 111612; GFX950-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11613; GFX950-NEXT:    s_nop 111614; GFX950-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc11615; GFX950-NEXT:    v_cndmask_b32_e64 v1, v1, 0, vcc11616; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc011617; GFX950-NEXT:    s_waitcnt vmcnt(0)11618; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11619; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]11620; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]11621; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]11622; GFX950-NEXT:    s_cbranch_execnz .LBB221_111623; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end11624; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]11625; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011626; GFX950-NEXT:    v_accvgpr_write_b32 a1, v111627; GFX950-NEXT:    ;;#ASMSTART11628; GFX950-NEXT:    ; use a[0:1]11629; GFX950-NEXT:    ;;#ASMEND11630; GFX950-NEXT:    s_setpc_b64 s[30:31]11631  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011632  %data = call i64 asm "; def $0", "=a"()11633  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011634  call void asm "; use $0", "a"(i64 %result)11635  ret void11636}11637 11638define void @global_atomic_usub_sat_i64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11639; GFX90A-LABEL: global_atomic_usub_sat_i64_saddr_ret_av_av:11640; GFX90A:       ; %bb.0:11641; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11642; GFX90A-NEXT:    v_mov_b32_e32 v6, 011643; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8011644; GFX90A-NEXT:    s_mov_b64 s[4:5], 011645; GFX90A-NEXT:    ;;#ASMSTART11646; GFX90A-NEXT:    ; def v[4:5]11647; GFX90A-NEXT:    ;;#ASMEND11648; GFX90A-NEXT:  .LBB222_1: ; %atomicrmw.start11649; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111650; GFX90A-NEXT:    s_waitcnt vmcnt(0)11651; GFX90A-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411652; GFX90A-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11653; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc11654; GFX90A-NEXT:    v_cndmask_b32_e64 v1, v1, 0, vcc11655; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc11656; GFX90A-NEXT:    s_waitcnt vmcnt(0)11657; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11658; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]11659; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]11660; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]11661; GFX90A-NEXT:    s_cbranch_execnz .LBB222_111662; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end11663; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]11664; GFX90A-NEXT:    ;;#ASMSTART11665; GFX90A-NEXT:    ; use v[0:1]11666; GFX90A-NEXT:    ;;#ASMEND11667; GFX90A-NEXT:    s_setpc_b64 s[30:31]11668;11669; GFX950-LABEL: global_atomic_usub_sat_i64_saddr_ret_av_av:11670; GFX950:       ; %bb.0:11671; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11672; GFX950-NEXT:    v_mov_b32_e32 v6, 011673; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8011674; GFX950-NEXT:    s_mov_b64 s[2:3], 011675; GFX950-NEXT:    ;;#ASMSTART11676; GFX950-NEXT:    ; def v[4:5]11677; GFX950-NEXT:    ;;#ASMEND11678; GFX950-NEXT:  .LBB222_1: ; %atomicrmw.start11679; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=111680; GFX950-NEXT:    s_waitcnt vmcnt(0)11681; GFX950-NEXT:    v_sub_co_u32_e32 v0, vcc, v2, v411682; GFX950-NEXT:    s_nop 111683; GFX950-NEXT:    v_subb_co_u32_e32 v1, vcc, v3, v5, vcc11684; GFX950-NEXT:    s_nop 111685; GFX950-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc11686; GFX950-NEXT:    v_cndmask_b32_e64 v1, v1, 0, vcc11687; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc011688; GFX950-NEXT:    s_waitcnt vmcnt(0)11689; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]11690; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]11691; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]11692; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]11693; GFX950-NEXT:    s_cbranch_execnz .LBB222_111694; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end11695; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]11696; GFX950-NEXT:    ;;#ASMSTART11697; GFX950-NEXT:    ; use v[0:1]11698; GFX950-NEXT:    ;;#ASMEND11699; GFX950-NEXT:    s_setpc_b64 s[30:31]11700  %gep.0 = getelementptr inbounds [512 x i64], ptr addrspace(1) %ptr, i64 0, i64 1011701  %data = call i64 asm "; def $0", "=^VA"()11702  %result = atomicrmw usub_sat ptr addrspace(1) %gep.0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !011703  call void asm "; use $0", "^VA"(i64 %result)11704  ret void11705}11706 11707;---------------------------------------------------------------------11708; other atomics f32, with aa+av cases using saddr11709;---------------------------------------------------------------------11710 11711define void @global_atomic_fadd_f32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11712; GFX90A-LABEL: global_atomic_fadd_f32_saddr_ret_a_a:11713; GFX90A:       ; %bb.0:11714; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11715; GFX90A-NEXT:    v_mov_b32_e32 v0, 011716; GFX90A-NEXT:    ;;#ASMSTART11717; GFX90A-NEXT:    ; def a011718; GFX90A-NEXT:    ;;#ASMEND11719; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a011720; GFX90A-NEXT:    global_atomic_add_f32 v0, v0, v1, s[16:17] offset:40 glc11721; GFX90A-NEXT:    s_waitcnt vmcnt(0)11722; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011723; GFX90A-NEXT:    ;;#ASMSTART11724; GFX90A-NEXT:    ; use a011725; GFX90A-NEXT:    ;;#ASMEND11726; GFX90A-NEXT:    s_setpc_b64 s[30:31]11727;11728; GFX950-LABEL: global_atomic_fadd_f32_saddr_ret_a_a:11729; GFX950:       ; %bb.0:11730; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11731; GFX950-NEXT:    v_mov_b32_e32 v0, 011732; GFX950-NEXT:    ;;#ASMSTART11733; GFX950-NEXT:    ; def a011734; GFX950-NEXT:    ;;#ASMEND11735; GFX950-NEXT:    s_nop 011736; GFX950-NEXT:    v_accvgpr_read_b32 v1, a011737; GFX950-NEXT:    global_atomic_add_f32 v0, v0, v1, s[0:1] offset:40 sc011738; GFX950-NEXT:    s_waitcnt vmcnt(0)11739; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011740; GFX950-NEXT:    ;;#ASMSTART11741; GFX950-NEXT:    ; use a011742; GFX950-NEXT:    ;;#ASMEND11743; GFX950-NEXT:    s_setpc_b64 s[30:31]11744  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1011745  %data = call float asm "; def $0", "=a"()11746  %result = atomicrmw fadd ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !011747  call void asm "; use $0", "a"(float %result)11748  ret void11749}11750 11751define void @global_atomic_fadd_f32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11752; GFX90A-LABEL: global_atomic_fadd_f32_saddr_ret_av_av:11753; GFX90A:       ; %bb.0:11754; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11755; GFX90A-NEXT:    v_mov_b32_e32 v0, 011756; GFX90A-NEXT:    ;;#ASMSTART11757; GFX90A-NEXT:    ; def v111758; GFX90A-NEXT:    ;;#ASMEND11759; GFX90A-NEXT:    global_atomic_add_f32 v0, v0, v1, s[16:17] offset:40 glc11760; GFX90A-NEXT:    s_waitcnt vmcnt(0)11761; GFX90A-NEXT:    ;;#ASMSTART11762; GFX90A-NEXT:    ; use v011763; GFX90A-NEXT:    ;;#ASMEND11764; GFX90A-NEXT:    s_setpc_b64 s[30:31]11765;11766; GFX950-LABEL: global_atomic_fadd_f32_saddr_ret_av_av:11767; GFX950:       ; %bb.0:11768; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11769; GFX950-NEXT:    v_mov_b32_e32 v0, 011770; GFX950-NEXT:    ;;#ASMSTART11771; GFX950-NEXT:    ; def v111772; GFX950-NEXT:    ;;#ASMEND11773; GFX950-NEXT:    global_atomic_add_f32 v0, v0, v1, s[0:1] offset:40 sc011774; GFX950-NEXT:    s_waitcnt vmcnt(0)11775; GFX950-NEXT:    ;;#ASMSTART11776; GFX950-NEXT:    ; use v011777; GFX950-NEXT:    ;;#ASMEND11778; GFX950-NEXT:    s_setpc_b64 s[30:31]11779  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1011780  %data = call float asm "; def $0", "=^VA"()11781  %result = atomicrmw fadd ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !011782  call void asm "; use $0", "^VA"(float %result)11783  ret void11784}11785 11786define void @global_atomic_fsub_f32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11787; GFX90A-LABEL: global_atomic_fsub_f32_saddr_ret_a_a:11788; GFX90A:       ; %bb.0:11789; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11790; GFX90A-NEXT:    v_mov_b32_e32 v2, 011791; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4011792; GFX90A-NEXT:    ;;#ASMSTART11793; GFX90A-NEXT:    ; def a011794; GFX90A-NEXT:    ;;#ASMEND11795; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a011796; GFX90A-NEXT:    s_mov_b64 s[4:5], 011797; GFX90A-NEXT:  .LBB225_1: ; %atomicrmw.start11798; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111799; GFX90A-NEXT:    s_waitcnt vmcnt(0)11800; GFX90A-NEXT:    v_sub_f32_e32 v0, v1, v311801; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc11802; GFX90A-NEXT:    s_waitcnt vmcnt(0)11803; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v111804; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]11805; GFX90A-NEXT:    v_mov_b32_e32 v1, v011806; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]11807; GFX90A-NEXT:    s_cbranch_execnz .LBB225_111808; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end11809; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]11810; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011811; GFX90A-NEXT:    ;;#ASMSTART11812; GFX90A-NEXT:    ; use a011813; GFX90A-NEXT:    ;;#ASMEND11814; GFX90A-NEXT:    s_setpc_b64 s[30:31]11815;11816; GFX950-LABEL: global_atomic_fsub_f32_saddr_ret_a_a:11817; GFX950:       ; %bb.0:11818; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11819; GFX950-NEXT:    v_mov_b32_e32 v2, 011820; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4011821; GFX950-NEXT:    ;;#ASMSTART11822; GFX950-NEXT:    ; def a011823; GFX950-NEXT:    ;;#ASMEND11824; GFX950-NEXT:    s_mov_b64 s[2:3], 011825; GFX950-NEXT:    v_accvgpr_read_b32 v3, a011826; GFX950-NEXT:  .LBB225_1: ; %atomicrmw.start11827; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=111828; GFX950-NEXT:    s_waitcnt vmcnt(0)11829; GFX950-NEXT:    v_sub_f32_e32 v0, v1, v311830; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc011831; GFX950-NEXT:    s_waitcnt vmcnt(0)11832; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v111833; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]11834; GFX950-NEXT:    v_mov_b32_e32 v1, v011835; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]11836; GFX950-NEXT:    s_cbranch_execnz .LBB225_111837; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end11838; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]11839; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011840; GFX950-NEXT:    ;;#ASMSTART11841; GFX950-NEXT:    ; use a011842; GFX950-NEXT:    ;;#ASMEND11843; GFX950-NEXT:    s_setpc_b64 s[30:31]11844  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1011845  %data = call float asm "; def $0", "=a"()11846  %result = atomicrmw fsub ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !011847  call void asm "; use $0", "a"(float %result)11848  ret void11849}11850 11851define void @global_atomic_fsub_f32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11852; GFX90A-LABEL: global_atomic_fsub_f32_saddr_ret_av_av:11853; GFX90A:       ; %bb.0:11854; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11855; GFX90A-NEXT:    v_mov_b32_e32 v2, 011856; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4011857; GFX90A-NEXT:    s_mov_b64 s[4:5], 011858; GFX90A-NEXT:    ;;#ASMSTART11859; GFX90A-NEXT:    ; def v311860; GFX90A-NEXT:    ;;#ASMEND11861; GFX90A-NEXT:  .LBB226_1: ; %atomicrmw.start11862; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111863; GFX90A-NEXT:    s_waitcnt vmcnt(0)11864; GFX90A-NEXT:    v_sub_f32_e32 v0, v1, v311865; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc11866; GFX90A-NEXT:    s_waitcnt vmcnt(0)11867; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v111868; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]11869; GFX90A-NEXT:    v_mov_b32_e32 v1, v011870; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]11871; GFX90A-NEXT:    s_cbranch_execnz .LBB226_111872; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end11873; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]11874; GFX90A-NEXT:    ;;#ASMSTART11875; GFX90A-NEXT:    ; use v011876; GFX90A-NEXT:    ;;#ASMEND11877; GFX90A-NEXT:    s_setpc_b64 s[30:31]11878;11879; GFX950-LABEL: global_atomic_fsub_f32_saddr_ret_av_av:11880; GFX950:       ; %bb.0:11881; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11882; GFX950-NEXT:    v_mov_b32_e32 v2, 011883; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4011884; GFX950-NEXT:    s_mov_b64 s[2:3], 011885; GFX950-NEXT:    ;;#ASMSTART11886; GFX950-NEXT:    ; def v311887; GFX950-NEXT:    ;;#ASMEND11888; GFX950-NEXT:  .LBB226_1: ; %atomicrmw.start11889; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=111890; GFX950-NEXT:    s_waitcnt vmcnt(0)11891; GFX950-NEXT:    v_sub_f32_e32 v0, v1, v311892; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc011893; GFX950-NEXT:    s_waitcnt vmcnt(0)11894; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v111895; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]11896; GFX950-NEXT:    v_mov_b32_e32 v1, v011897; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]11898; GFX950-NEXT:    s_cbranch_execnz .LBB226_111899; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end11900; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]11901; GFX950-NEXT:    ;;#ASMSTART11902; GFX950-NEXT:    ; use v011903; GFX950-NEXT:    ;;#ASMEND11904; GFX950-NEXT:    s_setpc_b64 s[30:31]11905  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1011906  %data = call float asm "; def $0", "=^VA"()11907  %result = atomicrmw fsub ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !011908  call void asm "; use $0", "^VA"(float %result)11909  ret void11910}11911 11912define void @global_atomic_fmax_f32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {11913; GFX90A-LABEL: global_atomic_fmax_f32_saddr_ret_a_a:11914; GFX90A:       ; %bb.0:11915; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11916; GFX90A-NEXT:    v_mov_b32_e32 v2, 011917; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4011918; GFX90A-NEXT:    ;;#ASMSTART11919; GFX90A-NEXT:    ; def a011920; GFX90A-NEXT:    ;;#ASMEND11921; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a011922; GFX90A-NEXT:    s_mov_b64 s[4:5], 011923; GFX90A-NEXT:    v_max_f32_e32 v3, v0, v011924; GFX90A-NEXT:  .LBB227_1: ; %atomicrmw.start11925; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111926; GFX90A-NEXT:    s_waitcnt vmcnt(0)11927; GFX90A-NEXT:    v_max_f32_e32 v0, v1, v111928; GFX90A-NEXT:    v_max_f32_e32 v0, v0, v311929; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc11930; GFX90A-NEXT:    s_waitcnt vmcnt(0)11931; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v111932; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]11933; GFX90A-NEXT:    v_mov_b32_e32 v1, v011934; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]11935; GFX90A-NEXT:    s_cbranch_execnz .LBB227_111936; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end11937; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]11938; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v011939; GFX90A-NEXT:    ;;#ASMSTART11940; GFX90A-NEXT:    ; use a011941; GFX90A-NEXT:    ;;#ASMEND11942; GFX90A-NEXT:    s_setpc_b64 s[30:31]11943;11944; GFX950-LABEL: global_atomic_fmax_f32_saddr_ret_a_a:11945; GFX950:       ; %bb.0:11946; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11947; GFX950-NEXT:    v_mov_b32_e32 v2, 011948; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4011949; GFX950-NEXT:    ;;#ASMSTART11950; GFX950-NEXT:    ; def a011951; GFX950-NEXT:    ;;#ASMEND11952; GFX950-NEXT:    s_mov_b64 s[2:3], 011953; GFX950-NEXT:    v_accvgpr_read_b32 v0, a011954; GFX950-NEXT:    v_max_f32_e32 v3, v0, v011955; GFX950-NEXT:  .LBB227_1: ; %atomicrmw.start11956; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=111957; GFX950-NEXT:    s_waitcnt vmcnt(0)11958; GFX950-NEXT:    v_max_f32_e32 v0, v1, v111959; GFX950-NEXT:    v_max_f32_e32 v0, v0, v311960; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc011961; GFX950-NEXT:    s_waitcnt vmcnt(0)11962; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v111963; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]11964; GFX950-NEXT:    v_mov_b32_e32 v1, v011965; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]11966; GFX950-NEXT:    s_cbranch_execnz .LBB227_111967; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end11968; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]11969; GFX950-NEXT:    v_accvgpr_write_b32 a0, v011970; GFX950-NEXT:    ;;#ASMSTART11971; GFX950-NEXT:    ; use a011972; GFX950-NEXT:    ;;#ASMEND11973; GFX950-NEXT:    s_setpc_b64 s[30:31]11974  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1011975  %data = call float asm "; def $0", "=a"()11976  %result = atomicrmw fmax ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !011977  call void asm "; use $0", "a"(float %result)11978  ret void11979}11980 11981define void @global_atomic_fmax_f32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {11982; GFX90A-LABEL: global_atomic_fmax_f32_saddr_ret_av_av:11983; GFX90A:       ; %bb.0:11984; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11985; GFX90A-NEXT:    v_mov_b32_e32 v2, 011986; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4011987; GFX90A-NEXT:    ;;#ASMSTART11988; GFX90A-NEXT:    ; def v011989; GFX90A-NEXT:    ;;#ASMEND11990; GFX90A-NEXT:    s_mov_b64 s[4:5], 011991; GFX90A-NEXT:    v_max_f32_e32 v3, v0, v011992; GFX90A-NEXT:  .LBB228_1: ; %atomicrmw.start11993; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=111994; GFX90A-NEXT:    s_waitcnt vmcnt(0)11995; GFX90A-NEXT:    v_max_f32_e32 v0, v1, v111996; GFX90A-NEXT:    v_max_f32_e32 v0, v0, v311997; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc11998; GFX90A-NEXT:    s_waitcnt vmcnt(0)11999; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112000; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12001; GFX90A-NEXT:    v_mov_b32_e32 v1, v012002; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12003; GFX90A-NEXT:    s_cbranch_execnz .LBB228_112004; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12005; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12006; GFX90A-NEXT:    ;;#ASMSTART12007; GFX90A-NEXT:    ; use v012008; GFX90A-NEXT:    ;;#ASMEND12009; GFX90A-NEXT:    s_setpc_b64 s[30:31]12010;12011; GFX950-LABEL: global_atomic_fmax_f32_saddr_ret_av_av:12012; GFX950:       ; %bb.0:12013; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12014; GFX950-NEXT:    v_mov_b32_e32 v2, 012015; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4012016; GFX950-NEXT:    ;;#ASMSTART12017; GFX950-NEXT:    ; def v012018; GFX950-NEXT:    ;;#ASMEND12019; GFX950-NEXT:    s_mov_b64 s[2:3], 012020; GFX950-NEXT:    v_max_f32_e32 v3, v0, v012021; GFX950-NEXT:  .LBB228_1: ; %atomicrmw.start12022; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112023; GFX950-NEXT:    s_waitcnt vmcnt(0)12024; GFX950-NEXT:    v_max_f32_e32 v0, v1, v112025; GFX950-NEXT:    v_max_f32_e32 v0, v0, v312026; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc012027; GFX950-NEXT:    s_waitcnt vmcnt(0)12028; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112029; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12030; GFX950-NEXT:    v_mov_b32_e32 v1, v012031; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12032; GFX950-NEXT:    s_cbranch_execnz .LBB228_112033; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12034; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12035; GFX950-NEXT:    ;;#ASMSTART12036; GFX950-NEXT:    ; use v012037; GFX950-NEXT:    ;;#ASMEND12038; GFX950-NEXT:    s_setpc_b64 s[30:31]12039  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1012040  %data = call float asm "; def $0", "=^VA"()12041  %result = atomicrmw fmax ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !012042  call void asm "; use $0", "^VA"(float %result)12043  ret void12044}12045 12046define void @global_atomic_fmin_f32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12047; GFX90A-LABEL: global_atomic_fmin_f32_saddr_ret_a_a:12048; GFX90A:       ; %bb.0:12049; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12050; GFX90A-NEXT:    v_mov_b32_e32 v2, 012051; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4012052; GFX90A-NEXT:    ;;#ASMSTART12053; GFX90A-NEXT:    ; def a012054; GFX90A-NEXT:    ;;#ASMEND12055; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a012056; GFX90A-NEXT:    s_mov_b64 s[4:5], 012057; GFX90A-NEXT:    v_max_f32_e32 v3, v0, v012058; GFX90A-NEXT:  .LBB229_1: ; %atomicrmw.start12059; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112060; GFX90A-NEXT:    s_waitcnt vmcnt(0)12061; GFX90A-NEXT:    v_max_f32_e32 v0, v1, v112062; GFX90A-NEXT:    v_min_f32_e32 v0, v0, v312063; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc12064; GFX90A-NEXT:    s_waitcnt vmcnt(0)12065; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112066; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12067; GFX90A-NEXT:    v_mov_b32_e32 v1, v012068; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12069; GFX90A-NEXT:    s_cbranch_execnz .LBB229_112070; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12071; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12072; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012073; GFX90A-NEXT:    ;;#ASMSTART12074; GFX90A-NEXT:    ; use a012075; GFX90A-NEXT:    ;;#ASMEND12076; GFX90A-NEXT:    s_setpc_b64 s[30:31]12077;12078; GFX950-LABEL: global_atomic_fmin_f32_saddr_ret_a_a:12079; GFX950:       ; %bb.0:12080; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12081; GFX950-NEXT:    v_mov_b32_e32 v2, 012082; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4012083; GFX950-NEXT:    ;;#ASMSTART12084; GFX950-NEXT:    ; def a012085; GFX950-NEXT:    ;;#ASMEND12086; GFX950-NEXT:    s_mov_b64 s[2:3], 012087; GFX950-NEXT:    v_accvgpr_read_b32 v0, a012088; GFX950-NEXT:    v_max_f32_e32 v3, v0, v012089; GFX950-NEXT:  .LBB229_1: ; %atomicrmw.start12090; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112091; GFX950-NEXT:    s_waitcnt vmcnt(0)12092; GFX950-NEXT:    v_max_f32_e32 v0, v1, v112093; GFX950-NEXT:    v_min_f32_e32 v0, v0, v312094; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc012095; GFX950-NEXT:    s_waitcnt vmcnt(0)12096; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112097; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12098; GFX950-NEXT:    v_mov_b32_e32 v1, v012099; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12100; GFX950-NEXT:    s_cbranch_execnz .LBB229_112101; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12102; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12103; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012104; GFX950-NEXT:    ;;#ASMSTART12105; GFX950-NEXT:    ; use a012106; GFX950-NEXT:    ;;#ASMEND12107; GFX950-NEXT:    s_setpc_b64 s[30:31]12108  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1012109  %data = call float asm "; def $0", "=a"()12110  %result = atomicrmw fmin ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !012111  call void asm "; use $0", "a"(float %result)12112  ret void12113}12114 12115define void @global_atomic_fmin_f32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12116; GFX90A-LABEL: global_atomic_fmin_f32_saddr_ret_av_av:12117; GFX90A:       ; %bb.0:12118; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12119; GFX90A-NEXT:    v_mov_b32_e32 v2, 012120; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4012121; GFX90A-NEXT:    ;;#ASMSTART12122; GFX90A-NEXT:    ; def v012123; GFX90A-NEXT:    ;;#ASMEND12124; GFX90A-NEXT:    s_mov_b64 s[4:5], 012125; GFX90A-NEXT:    v_max_f32_e32 v3, v0, v012126; GFX90A-NEXT:  .LBB230_1: ; %atomicrmw.start12127; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112128; GFX90A-NEXT:    s_waitcnt vmcnt(0)12129; GFX90A-NEXT:    v_max_f32_e32 v0, v1, v112130; GFX90A-NEXT:    v_min_f32_e32 v0, v0, v312131; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc12132; GFX90A-NEXT:    s_waitcnt vmcnt(0)12133; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112134; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12135; GFX90A-NEXT:    v_mov_b32_e32 v1, v012136; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12137; GFX90A-NEXT:    s_cbranch_execnz .LBB230_112138; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12139; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12140; GFX90A-NEXT:    ;;#ASMSTART12141; GFX90A-NEXT:    ; use v012142; GFX90A-NEXT:    ;;#ASMEND12143; GFX90A-NEXT:    s_setpc_b64 s[30:31]12144;12145; GFX950-LABEL: global_atomic_fmin_f32_saddr_ret_av_av:12146; GFX950:       ; %bb.0:12147; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12148; GFX950-NEXT:    v_mov_b32_e32 v2, 012149; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4012150; GFX950-NEXT:    ;;#ASMSTART12151; GFX950-NEXT:    ; def v012152; GFX950-NEXT:    ;;#ASMEND12153; GFX950-NEXT:    s_mov_b64 s[2:3], 012154; GFX950-NEXT:    v_max_f32_e32 v3, v0, v012155; GFX950-NEXT:  .LBB230_1: ; %atomicrmw.start12156; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112157; GFX950-NEXT:    s_waitcnt vmcnt(0)12158; GFX950-NEXT:    v_max_f32_e32 v0, v1, v112159; GFX950-NEXT:    v_min_f32_e32 v0, v0, v312160; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc012161; GFX950-NEXT:    s_waitcnt vmcnt(0)12162; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112163; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12164; GFX950-NEXT:    v_mov_b32_e32 v1, v012165; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12166; GFX950-NEXT:    s_cbranch_execnz .LBB230_112167; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12168; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12169; GFX950-NEXT:    ;;#ASMSTART12170; GFX950-NEXT:    ; use v012171; GFX950-NEXT:    ;;#ASMEND12172; GFX950-NEXT:    s_setpc_b64 s[30:31]12173  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1012174  %data = call float asm "; def $0", "=^VA"()12175  %result = atomicrmw fmin ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !012176  call void asm "; use $0", "^VA"(float %result)12177  ret void12178}12179 12180define void @global_atomic_fmaximum_f32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12181; GFX90A-LABEL: global_atomic_fmaximum_f32_saddr_ret_a_a:12182; GFX90A:       ; %bb.0:12183; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12184; GFX90A-NEXT:    v_mov_b32_e32 v2, 012185; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4012186; GFX90A-NEXT:    ;;#ASMSTART12187; GFX90A-NEXT:    ; def a012188; GFX90A-NEXT:    ;;#ASMEND12189; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a012190; GFX90A-NEXT:    s_mov_b64 s[4:5], 012191; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000012192; GFX90A-NEXT:  .LBB231_1: ; %atomicrmw.start12193; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112194; GFX90A-NEXT:    s_waitcnt vmcnt(0)12195; GFX90A-NEXT:    v_max_f32_e32 v0, v1, v312196; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v1, v312197; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc12198; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc12199; GFX90A-NEXT:    s_waitcnt vmcnt(0)12200; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112201; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12202; GFX90A-NEXT:    v_mov_b32_e32 v1, v012203; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12204; GFX90A-NEXT:    s_cbranch_execnz .LBB231_112205; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12206; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12207; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012208; GFX90A-NEXT:    ;;#ASMSTART12209; GFX90A-NEXT:    ; use a012210; GFX90A-NEXT:    ;;#ASMEND12211; GFX90A-NEXT:    s_setpc_b64 s[30:31]12212;12213; GFX950-LABEL: global_atomic_fmaximum_f32_saddr_ret_a_a:12214; GFX950:       ; %bb.0:12215; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12216; GFX950-NEXT:    v_mov_b32_e32 v2, 012217; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4012218; GFX950-NEXT:    ;;#ASMSTART12219; GFX950-NEXT:    ; def a012220; GFX950-NEXT:    ;;#ASMEND12221; GFX950-NEXT:    s_mov_b64 s[2:3], 012222; GFX950-NEXT:    v_accvgpr_read_b32 v3, a012223; GFX950-NEXT:  .LBB231_1: ; %atomicrmw.start12224; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112225; GFX950-NEXT:    s_waitcnt vmcnt(0)12226; GFX950-NEXT:    v_maximum3_f32 v0, v1, v3, v312227; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc012228; GFX950-NEXT:    s_waitcnt vmcnt(0)12229; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112230; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12231; GFX950-NEXT:    v_mov_b32_e32 v1, v012232; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12233; GFX950-NEXT:    s_cbranch_execnz .LBB231_112234; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12235; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12236; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012237; GFX950-NEXT:    ;;#ASMSTART12238; GFX950-NEXT:    ; use a012239; GFX950-NEXT:    ;;#ASMEND12240; GFX950-NEXT:    s_setpc_b64 s[30:31]12241  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1012242  %data = call float asm "; def $0", "=a"()12243  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !012244  call void asm "; use $0", "a"(float %result)12245  ret void12246}12247 12248define void @global_atomic_fmaximum_f32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12249; GFX90A-LABEL: global_atomic_fmaximum_f32_saddr_ret_av_av:12250; GFX90A:       ; %bb.0:12251; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12252; GFX90A-NEXT:    v_mov_b32_e32 v2, 012253; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4012254; GFX90A-NEXT:    s_mov_b64 s[4:5], 012255; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000012256; GFX90A-NEXT:    ;;#ASMSTART12257; GFX90A-NEXT:    ; def v312258; GFX90A-NEXT:    ;;#ASMEND12259; GFX90A-NEXT:  .LBB232_1: ; %atomicrmw.start12260; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112261; GFX90A-NEXT:    s_waitcnt vmcnt(0)12262; GFX90A-NEXT:    v_max_f32_e32 v0, v1, v312263; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v1, v312264; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc12265; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc12266; GFX90A-NEXT:    s_waitcnt vmcnt(0)12267; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112268; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12269; GFX90A-NEXT:    v_mov_b32_e32 v1, v012270; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12271; GFX90A-NEXT:    s_cbranch_execnz .LBB232_112272; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12273; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12274; GFX90A-NEXT:    ;;#ASMSTART12275; GFX90A-NEXT:    ; use v012276; GFX90A-NEXT:    ;;#ASMEND12277; GFX90A-NEXT:    s_setpc_b64 s[30:31]12278;12279; GFX950-LABEL: global_atomic_fmaximum_f32_saddr_ret_av_av:12280; GFX950:       ; %bb.0:12281; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12282; GFX950-NEXT:    v_mov_b32_e32 v2, 012283; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4012284; GFX950-NEXT:    s_mov_b64 s[2:3], 012285; GFX950-NEXT:    ;;#ASMSTART12286; GFX950-NEXT:    ; def v312287; GFX950-NEXT:    ;;#ASMEND12288; GFX950-NEXT:  .LBB232_1: ; %atomicrmw.start12289; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112290; GFX950-NEXT:    s_waitcnt vmcnt(0)12291; GFX950-NEXT:    v_maximum3_f32 v0, v1, v3, v312292; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc012293; GFX950-NEXT:    s_waitcnt vmcnt(0)12294; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112295; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12296; GFX950-NEXT:    v_mov_b32_e32 v1, v012297; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12298; GFX950-NEXT:    s_cbranch_execnz .LBB232_112299; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12300; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12301; GFX950-NEXT:    ;;#ASMSTART12302; GFX950-NEXT:    ; use v012303; GFX950-NEXT:    ;;#ASMEND12304; GFX950-NEXT:    s_setpc_b64 s[30:31]12305  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1012306  %data = call float asm "; def $0", "=^VA"()12307  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !012308  call void asm "; use $0", "^VA"(float %result)12309  ret void12310}12311 12312define void @global_atomic_fminimum_f32_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12313; GFX90A-LABEL: global_atomic_fminimum_f32_saddr_ret_a_a:12314; GFX90A:       ; %bb.0:12315; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12316; GFX90A-NEXT:    v_mov_b32_e32 v2, 012317; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4012318; GFX90A-NEXT:    ;;#ASMSTART12319; GFX90A-NEXT:    ; def a012320; GFX90A-NEXT:    ;;#ASMEND12321; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a012322; GFX90A-NEXT:    s_mov_b64 s[4:5], 012323; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000012324; GFX90A-NEXT:  .LBB233_1: ; %atomicrmw.start12325; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112326; GFX90A-NEXT:    s_waitcnt vmcnt(0)12327; GFX90A-NEXT:    v_min_f32_e32 v0, v1, v312328; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v1, v312329; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc12330; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc12331; GFX90A-NEXT:    s_waitcnt vmcnt(0)12332; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112333; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12334; GFX90A-NEXT:    v_mov_b32_e32 v1, v012335; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12336; GFX90A-NEXT:    s_cbranch_execnz .LBB233_112337; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12338; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12339; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012340; GFX90A-NEXT:    ;;#ASMSTART12341; GFX90A-NEXT:    ; use a012342; GFX90A-NEXT:    ;;#ASMEND12343; GFX90A-NEXT:    s_setpc_b64 s[30:31]12344;12345; GFX950-LABEL: global_atomic_fminimum_f32_saddr_ret_a_a:12346; GFX950:       ; %bb.0:12347; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12348; GFX950-NEXT:    v_mov_b32_e32 v2, 012349; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4012350; GFX950-NEXT:    ;;#ASMSTART12351; GFX950-NEXT:    ; def a012352; GFX950-NEXT:    ;;#ASMEND12353; GFX950-NEXT:    s_mov_b64 s[2:3], 012354; GFX950-NEXT:    v_accvgpr_read_b32 v3, a012355; GFX950-NEXT:  .LBB233_1: ; %atomicrmw.start12356; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112357; GFX950-NEXT:    s_waitcnt vmcnt(0)12358; GFX950-NEXT:    v_minimum3_f32 v0, v1, v3, v312359; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc012360; GFX950-NEXT:    s_waitcnt vmcnt(0)12361; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112362; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12363; GFX950-NEXT:    v_mov_b32_e32 v1, v012364; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12365; GFX950-NEXT:    s_cbranch_execnz .LBB233_112366; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12367; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12368; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012369; GFX950-NEXT:    ;;#ASMSTART12370; GFX950-NEXT:    ; use a012371; GFX950-NEXT:    ;;#ASMEND12372; GFX950-NEXT:    s_setpc_b64 s[30:31]12373  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1012374  %data = call float asm "; def $0", "=a"()12375  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !012376  call void asm "; use $0", "a"(float %result)12377  ret void12378}12379 12380define void @global_atomic_fminimum_f32_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12381; GFX90A-LABEL: global_atomic_fminimum_f32_saddr_ret_av_av:12382; GFX90A:       ; %bb.0:12383; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12384; GFX90A-NEXT:    v_mov_b32_e32 v2, 012385; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4012386; GFX90A-NEXT:    s_mov_b64 s[4:5], 012387; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000012388; GFX90A-NEXT:    ;;#ASMSTART12389; GFX90A-NEXT:    ; def v312390; GFX90A-NEXT:    ;;#ASMEND12391; GFX90A-NEXT:  .LBB234_1: ; %atomicrmw.start12392; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112393; GFX90A-NEXT:    s_waitcnt vmcnt(0)12394; GFX90A-NEXT:    v_min_f32_e32 v0, v1, v312395; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v1, v312396; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc12397; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc12398; GFX90A-NEXT:    s_waitcnt vmcnt(0)12399; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112400; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12401; GFX90A-NEXT:    v_mov_b32_e32 v1, v012402; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12403; GFX90A-NEXT:    s_cbranch_execnz .LBB234_112404; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12405; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12406; GFX90A-NEXT:    ;;#ASMSTART12407; GFX90A-NEXT:    ; use v012408; GFX90A-NEXT:    ;;#ASMEND12409; GFX90A-NEXT:    s_setpc_b64 s[30:31]12410;12411; GFX950-LABEL: global_atomic_fminimum_f32_saddr_ret_av_av:12412; GFX950:       ; %bb.0:12413; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12414; GFX950-NEXT:    v_mov_b32_e32 v2, 012415; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4012416; GFX950-NEXT:    s_mov_b64 s[2:3], 012417; GFX950-NEXT:    ;;#ASMSTART12418; GFX950-NEXT:    ; def v312419; GFX950-NEXT:    ;;#ASMEND12420; GFX950-NEXT:  .LBB234_1: ; %atomicrmw.start12421; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112422; GFX950-NEXT:    s_waitcnt vmcnt(0)12423; GFX950-NEXT:    v_minimum3_f32 v0, v1, v3, v312424; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc012425; GFX950-NEXT:    s_waitcnt vmcnt(0)12426; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v112427; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12428; GFX950-NEXT:    v_mov_b32_e32 v1, v012429; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12430; GFX950-NEXT:    s_cbranch_execnz .LBB234_112431; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12432; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12433; GFX950-NEXT:    ;;#ASMSTART12434; GFX950-NEXT:    ; use v012435; GFX950-NEXT:    ;;#ASMEND12436; GFX950-NEXT:    s_setpc_b64 s[30:31]12437  %gep.0 = getelementptr inbounds [512 x float], ptr addrspace(1) %ptr, i64 0, i64 1012438  %data = call float asm "; def $0", "=^VA"()12439  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, float %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !012440  call void asm "; use $0", "^VA"(float %result)12441  ret void12442}12443 12444;---------------------------------------------------------------------12445; other atomics f64, with aa+av cases using saddr12446;---------------------------------------------------------------------12447 12448define void @global_atomic_fadd_f64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12449; GFX90A-LABEL: global_atomic_fadd_f64_saddr_ret_a_a:12450; GFX90A:       ; %bb.0:12451; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12452; GFX90A-NEXT:    ;;#ASMSTART12453; GFX90A-NEXT:    ; def a[0:1]12454; GFX90A-NEXT:    ;;#ASMEND12455; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a012456; GFX90A-NEXT:    v_mov_b32_e32 v2, 012457; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a112458; GFX90A-NEXT:    global_atomic_add_f64 v[0:1], v2, v[0:1], s[16:17] offset:80 glc12459; GFX90A-NEXT:    s_waitcnt vmcnt(0)12460; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012461; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v112462; GFX90A-NEXT:    ;;#ASMSTART12463; GFX90A-NEXT:    ; use a[0:1]12464; GFX90A-NEXT:    ;;#ASMEND12465; GFX90A-NEXT:    s_setpc_b64 s[30:31]12466;12467; GFX950-LABEL: global_atomic_fadd_f64_saddr_ret_a_a:12468; GFX950:       ; %bb.0:12469; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12470; GFX950-NEXT:    ;;#ASMSTART12471; GFX950-NEXT:    ; def a[0:1]12472; GFX950-NEXT:    ;;#ASMEND12473; GFX950-NEXT:    v_mov_b32_e32 v2, 012474; GFX950-NEXT:    v_accvgpr_read_b32 v0, a012475; GFX950-NEXT:    v_accvgpr_read_b32 v1, a112476; GFX950-NEXT:    global_atomic_add_f64 v[0:1], v2, v[0:1], s[0:1] offset:80 sc012477; GFX950-NEXT:    s_waitcnt vmcnt(0)12478; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012479; GFX950-NEXT:    v_accvgpr_write_b32 a1, v112480; GFX950-NEXT:    ;;#ASMSTART12481; GFX950-NEXT:    ; use a[0:1]12482; GFX950-NEXT:    ;;#ASMEND12483; GFX950-NEXT:    s_setpc_b64 s[30:31]12484  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012485  %data = call double asm "; def $0", "=a"()12486  %result = atomicrmw fadd ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012487  call void asm "; use $0", "a"(double %result)12488  ret void12489}12490 12491define void @global_atomic_fadd_f64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12492; GFX90A-LABEL: global_atomic_fadd_f64_saddr_ret_av_av:12493; GFX90A:       ; %bb.0:12494; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12495; GFX90A-NEXT:    v_mov_b32_e32 v2, 012496; GFX90A-NEXT:    ;;#ASMSTART12497; GFX90A-NEXT:    ; def v[0:1]12498; GFX90A-NEXT:    ;;#ASMEND12499; GFX90A-NEXT:    global_atomic_add_f64 v[0:1], v2, v[0:1], s[16:17] offset:80 glc12500; GFX90A-NEXT:    s_waitcnt vmcnt(0)12501; GFX90A-NEXT:    ;;#ASMSTART12502; GFX90A-NEXT:    ; use v[0:1]12503; GFX90A-NEXT:    ;;#ASMEND12504; GFX90A-NEXT:    s_setpc_b64 s[30:31]12505;12506; GFX950-LABEL: global_atomic_fadd_f64_saddr_ret_av_av:12507; GFX950:       ; %bb.0:12508; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12509; GFX950-NEXT:    v_mov_b32_e32 v2, 012510; GFX950-NEXT:    ;;#ASMSTART12511; GFX950-NEXT:    ; def v[0:1]12512; GFX950-NEXT:    ;;#ASMEND12513; GFX950-NEXT:    global_atomic_add_f64 v[0:1], v2, v[0:1], s[0:1] offset:80 sc012514; GFX950-NEXT:    s_waitcnt vmcnt(0)12515; GFX950-NEXT:    ;;#ASMSTART12516; GFX950-NEXT:    ; use v[0:1]12517; GFX950-NEXT:    ;;#ASMEND12518; GFX950-NEXT:    s_setpc_b64 s[30:31]12519  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012520  %data = call double asm "; def $0", "=^VA"()12521  %result = atomicrmw fadd ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012522  call void asm "; use $0", "^VA"(double %result)12523  ret void12524}12525 12526define void @global_atomic_fsub_f64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12527; GFX90A-LABEL: global_atomic_fsub_f64_saddr_ret_a_a:12528; GFX90A:       ; %bb.0:12529; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12530; GFX90A-NEXT:    v_mov_b32_e32 v6, 012531; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8012532; GFX90A-NEXT:    ;;#ASMSTART12533; GFX90A-NEXT:    ; def a[0:1]12534; GFX90A-NEXT:    ;;#ASMEND12535; GFX90A-NEXT:    v_accvgpr_read_b32 v5, a112536; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a012537; GFX90A-NEXT:    s_mov_b64 s[4:5], 012538; GFX90A-NEXT:  .LBB237_1: ; %atomicrmw.start12539; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112540; GFX90A-NEXT:    s_waitcnt vmcnt(0)12541; GFX90A-NEXT:    v_add_f64 v[0:1], v[2:3], -v[4:5]12542; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc12543; GFX90A-NEXT:    s_waitcnt vmcnt(0)12544; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12545; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12546; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]12547; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12548; GFX90A-NEXT:    s_cbranch_execnz .LBB237_112549; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12550; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12551; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012552; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v112553; GFX90A-NEXT:    ;;#ASMSTART12554; GFX90A-NEXT:    ; use a[0:1]12555; GFX90A-NEXT:    ;;#ASMEND12556; GFX90A-NEXT:    s_setpc_b64 s[30:31]12557;12558; GFX950-LABEL: global_atomic_fsub_f64_saddr_ret_a_a:12559; GFX950:       ; %bb.0:12560; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12561; GFX950-NEXT:    v_mov_b32_e32 v6, 012562; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8012563; GFX950-NEXT:    ;;#ASMSTART12564; GFX950-NEXT:    ; def a[0:1]12565; GFX950-NEXT:    ;;#ASMEND12566; GFX950-NEXT:    s_mov_b64 s[2:3], 012567; GFX950-NEXT:    v_accvgpr_read_b32 v5, a112568; GFX950-NEXT:    v_accvgpr_read_b32 v4, a012569; GFX950-NEXT:  .LBB237_1: ; %atomicrmw.start12570; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112571; GFX950-NEXT:    s_waitcnt vmcnt(0)12572; GFX950-NEXT:    v_add_f64 v[0:1], v[2:3], -v[4:5]12573; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc012574; GFX950-NEXT:    s_waitcnt vmcnt(0)12575; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12576; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12577; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]12578; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12579; GFX950-NEXT:    s_cbranch_execnz .LBB237_112580; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12581; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12582; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012583; GFX950-NEXT:    v_accvgpr_write_b32 a1, v112584; GFX950-NEXT:    ;;#ASMSTART12585; GFX950-NEXT:    ; use a[0:1]12586; GFX950-NEXT:    ;;#ASMEND12587; GFX950-NEXT:    s_setpc_b64 s[30:31]12588  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012589  %data = call double asm "; def $0", "=a"()12590  %result = atomicrmw fsub ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012591  call void asm "; use $0", "a"(double %result)12592  ret void12593}12594 12595define void @global_atomic_fsub_f64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12596; GFX90A-LABEL: global_atomic_fsub_f64_saddr_ret_av_av:12597; GFX90A:       ; %bb.0:12598; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12599; GFX90A-NEXT:    v_mov_b32_e32 v6, 012600; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8012601; GFX90A-NEXT:    s_mov_b64 s[4:5], 012602; GFX90A-NEXT:    ;;#ASMSTART12603; GFX90A-NEXT:    ; def v[4:5]12604; GFX90A-NEXT:    ;;#ASMEND12605; GFX90A-NEXT:  .LBB238_1: ; %atomicrmw.start12606; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112607; GFX90A-NEXT:    s_waitcnt vmcnt(0)12608; GFX90A-NEXT:    v_add_f64 v[0:1], v[2:3], -v[4:5]12609; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc12610; GFX90A-NEXT:    s_waitcnt vmcnt(0)12611; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12612; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12613; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]12614; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12615; GFX90A-NEXT:    s_cbranch_execnz .LBB238_112616; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12617; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12618; GFX90A-NEXT:    ;;#ASMSTART12619; GFX90A-NEXT:    ; use v[0:1]12620; GFX90A-NEXT:    ;;#ASMEND12621; GFX90A-NEXT:    s_setpc_b64 s[30:31]12622;12623; GFX950-LABEL: global_atomic_fsub_f64_saddr_ret_av_av:12624; GFX950:       ; %bb.0:12625; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12626; GFX950-NEXT:    v_mov_b32_e32 v6, 012627; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8012628; GFX950-NEXT:    s_mov_b64 s[2:3], 012629; GFX950-NEXT:    ;;#ASMSTART12630; GFX950-NEXT:    ; def v[4:5]12631; GFX950-NEXT:    ;;#ASMEND12632; GFX950-NEXT:  .LBB238_1: ; %atomicrmw.start12633; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112634; GFX950-NEXT:    s_waitcnt vmcnt(0)12635; GFX950-NEXT:    v_add_f64 v[0:1], v[2:3], -v[4:5]12636; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc012637; GFX950-NEXT:    s_waitcnt vmcnt(0)12638; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12639; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12640; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]12641; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12642; GFX950-NEXT:    s_cbranch_execnz .LBB238_112643; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12644; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12645; GFX950-NEXT:    ;;#ASMSTART12646; GFX950-NEXT:    ; use v[0:1]12647; GFX950-NEXT:    ;;#ASMEND12648; GFX950-NEXT:    s_setpc_b64 s[30:31]12649  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012650  %data = call double asm "; def $0", "=^VA"()12651  %result = atomicrmw fsub ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012652  call void asm "; use $0", "^VA"(double %result)12653  ret void12654}12655 12656define void @global_atomic_fmax_f64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12657; GFX90A-LABEL: global_atomic_fmax_f64_saddr_ret_a_a:12658; GFX90A:       ; %bb.0:12659; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12660; GFX90A-NEXT:    ;;#ASMSTART12661; GFX90A-NEXT:    ; def a[0:1]12662; GFX90A-NEXT:    ;;#ASMEND12663; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a012664; GFX90A-NEXT:    v_mov_b32_e32 v2, 012665; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a112666; GFX90A-NEXT:    global_atomic_max_f64 v[0:1], v2, v[0:1], s[16:17] offset:80 glc12667; GFX90A-NEXT:    s_waitcnt vmcnt(0)12668; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012669; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v112670; GFX90A-NEXT:    ;;#ASMSTART12671; GFX90A-NEXT:    ; use a[0:1]12672; GFX90A-NEXT:    ;;#ASMEND12673; GFX90A-NEXT:    s_setpc_b64 s[30:31]12674;12675; GFX950-LABEL: global_atomic_fmax_f64_saddr_ret_a_a:12676; GFX950:       ; %bb.0:12677; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12678; GFX950-NEXT:    ;;#ASMSTART12679; GFX950-NEXT:    ; def a[0:1]12680; GFX950-NEXT:    ;;#ASMEND12681; GFX950-NEXT:    v_mov_b32_e32 v2, 012682; GFX950-NEXT:    v_accvgpr_read_b32 v0, a012683; GFX950-NEXT:    v_accvgpr_read_b32 v1, a112684; GFX950-NEXT:    global_atomic_max_f64 v[0:1], v2, v[0:1], s[0:1] offset:80 sc012685; GFX950-NEXT:    s_waitcnt vmcnt(0)12686; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012687; GFX950-NEXT:    v_accvgpr_write_b32 a1, v112688; GFX950-NEXT:    ;;#ASMSTART12689; GFX950-NEXT:    ; use a[0:1]12690; GFX950-NEXT:    ;;#ASMEND12691; GFX950-NEXT:    s_setpc_b64 s[30:31]12692  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012693  %data = call double asm "; def $0", "=a"()12694  %result = atomicrmw fmax ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012695  call void asm "; use $0", "a"(double %result)12696  ret void12697}12698 12699define void @global_atomic_fmax_f64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12700; GFX90A-LABEL: global_atomic_fmax_f64_saddr_ret_av_av:12701; GFX90A:       ; %bb.0:12702; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12703; GFX90A-NEXT:    v_mov_b32_e32 v2, 012704; GFX90A-NEXT:    ;;#ASMSTART12705; GFX90A-NEXT:    ; def v[0:1]12706; GFX90A-NEXT:    ;;#ASMEND12707; GFX90A-NEXT:    global_atomic_max_f64 v[0:1], v2, v[0:1], s[16:17] offset:80 glc12708; GFX90A-NEXT:    s_waitcnt vmcnt(0)12709; GFX90A-NEXT:    ;;#ASMSTART12710; GFX90A-NEXT:    ; use v[0:1]12711; GFX90A-NEXT:    ;;#ASMEND12712; GFX90A-NEXT:    s_setpc_b64 s[30:31]12713;12714; GFX950-LABEL: global_atomic_fmax_f64_saddr_ret_av_av:12715; GFX950:       ; %bb.0:12716; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12717; GFX950-NEXT:    v_mov_b32_e32 v2, 012718; GFX950-NEXT:    ;;#ASMSTART12719; GFX950-NEXT:    ; def v[0:1]12720; GFX950-NEXT:    ;;#ASMEND12721; GFX950-NEXT:    global_atomic_max_f64 v[0:1], v2, v[0:1], s[0:1] offset:80 sc012722; GFX950-NEXT:    s_waitcnt vmcnt(0)12723; GFX950-NEXT:    ;;#ASMSTART12724; GFX950-NEXT:    ; use v[0:1]12725; GFX950-NEXT:    ;;#ASMEND12726; GFX950-NEXT:    s_setpc_b64 s[30:31]12727  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012728  %data = call double asm "; def $0", "=^VA"()12729  %result = atomicrmw fmax ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012730  call void asm "; use $0", "^VA"(double %result)12731  ret void12732}12733 12734define void @global_atomic_fmin_f64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12735; GFX90A-LABEL: global_atomic_fmin_f64_saddr_ret_a_a:12736; GFX90A:       ; %bb.0:12737; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12738; GFX90A-NEXT:    ;;#ASMSTART12739; GFX90A-NEXT:    ; def a[0:1]12740; GFX90A-NEXT:    ;;#ASMEND12741; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a012742; GFX90A-NEXT:    v_mov_b32_e32 v2, 012743; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a112744; GFX90A-NEXT:    global_atomic_min_f64 v[0:1], v2, v[0:1], s[16:17] offset:80 glc12745; GFX90A-NEXT:    s_waitcnt vmcnt(0)12746; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012747; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v112748; GFX90A-NEXT:    ;;#ASMSTART12749; GFX90A-NEXT:    ; use a[0:1]12750; GFX90A-NEXT:    ;;#ASMEND12751; GFX90A-NEXT:    s_setpc_b64 s[30:31]12752;12753; GFX950-LABEL: global_atomic_fmin_f64_saddr_ret_a_a:12754; GFX950:       ; %bb.0:12755; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12756; GFX950-NEXT:    ;;#ASMSTART12757; GFX950-NEXT:    ; def a[0:1]12758; GFX950-NEXT:    ;;#ASMEND12759; GFX950-NEXT:    v_mov_b32_e32 v2, 012760; GFX950-NEXT:    v_accvgpr_read_b32 v0, a012761; GFX950-NEXT:    v_accvgpr_read_b32 v1, a112762; GFX950-NEXT:    global_atomic_min_f64 v[0:1], v2, v[0:1], s[0:1] offset:80 sc012763; GFX950-NEXT:    s_waitcnt vmcnt(0)12764; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012765; GFX950-NEXT:    v_accvgpr_write_b32 a1, v112766; GFX950-NEXT:    ;;#ASMSTART12767; GFX950-NEXT:    ; use a[0:1]12768; GFX950-NEXT:    ;;#ASMEND12769; GFX950-NEXT:    s_setpc_b64 s[30:31]12770  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012771  %data = call double asm "; def $0", "=a"()12772  %result = atomicrmw fmin ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012773  call void asm "; use $0", "a"(double %result)12774  ret void12775}12776 12777define void @global_atomic_fmin_f64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12778; GFX90A-LABEL: global_atomic_fmin_f64_saddr_ret_av_av:12779; GFX90A:       ; %bb.0:12780; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12781; GFX90A-NEXT:    v_mov_b32_e32 v2, 012782; GFX90A-NEXT:    ;;#ASMSTART12783; GFX90A-NEXT:    ; def v[0:1]12784; GFX90A-NEXT:    ;;#ASMEND12785; GFX90A-NEXT:    global_atomic_min_f64 v[0:1], v2, v[0:1], s[16:17] offset:80 glc12786; GFX90A-NEXT:    s_waitcnt vmcnt(0)12787; GFX90A-NEXT:    ;;#ASMSTART12788; GFX90A-NEXT:    ; use v[0:1]12789; GFX90A-NEXT:    ;;#ASMEND12790; GFX90A-NEXT:    s_setpc_b64 s[30:31]12791;12792; GFX950-LABEL: global_atomic_fmin_f64_saddr_ret_av_av:12793; GFX950:       ; %bb.0:12794; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12795; GFX950-NEXT:    v_mov_b32_e32 v2, 012796; GFX950-NEXT:    ;;#ASMSTART12797; GFX950-NEXT:    ; def v[0:1]12798; GFX950-NEXT:    ;;#ASMEND12799; GFX950-NEXT:    global_atomic_min_f64 v[0:1], v2, v[0:1], s[0:1] offset:80 sc012800; GFX950-NEXT:    s_waitcnt vmcnt(0)12801; GFX950-NEXT:    ;;#ASMSTART12802; GFX950-NEXT:    ; use v[0:1]12803; GFX950-NEXT:    ;;#ASMEND12804; GFX950-NEXT:    s_setpc_b64 s[30:31]12805  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012806  %data = call double asm "; def $0", "=^VA"()12807  %result = atomicrmw fmin ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012808  call void asm "; use $0", "^VA"(double %result)12809  ret void12810}12811 12812define void @global_atomic_fmaximum_f64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12813; GFX90A-LABEL: global_atomic_fmaximum_f64_saddr_ret_a_a:12814; GFX90A:       ; %bb.0:12815; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12816; GFX90A-NEXT:    v_mov_b32_e32 v6, 012817; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8012818; GFX90A-NEXT:    ;;#ASMSTART12819; GFX90A-NEXT:    ; def a[0:1]12820; GFX90A-NEXT:    ;;#ASMEND12821; GFX90A-NEXT:    v_accvgpr_read_b32 v5, a112822; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a012823; GFX90A-NEXT:    s_mov_b64 s[4:5], 012824; GFX90A-NEXT:    v_mov_b32_e32 v7, 0x7ff8000012825; GFX90A-NEXT:  .LBB243_1: ; %atomicrmw.start12826; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112827; GFX90A-NEXT:    s_waitcnt vmcnt(0)12828; GFX90A-NEXT:    v_max_f64 v[0:1], v[2:3], v[4:5]12829; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]12830; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc12831; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc12832; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc12833; GFX90A-NEXT:    s_waitcnt vmcnt(0)12834; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12835; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12836; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]12837; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12838; GFX90A-NEXT:    s_cbranch_execnz .LBB243_112839; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12840; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12841; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012842; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v112843; GFX90A-NEXT:    ;;#ASMSTART12844; GFX90A-NEXT:    ; use a[0:1]12845; GFX90A-NEXT:    ;;#ASMEND12846; GFX90A-NEXT:    s_setpc_b64 s[30:31]12847;12848; GFX950-LABEL: global_atomic_fmaximum_f64_saddr_ret_a_a:12849; GFX950:       ; %bb.0:12850; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12851; GFX950-NEXT:    v_mov_b32_e32 v6, 012852; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8012853; GFX950-NEXT:    ;;#ASMSTART12854; GFX950-NEXT:    ; def a[0:1]12855; GFX950-NEXT:    ;;#ASMEND12856; GFX950-NEXT:    s_mov_b64 s[2:3], 012857; GFX950-NEXT:    v_accvgpr_read_b32 v5, a112858; GFX950-NEXT:    v_accvgpr_read_b32 v4, a012859; GFX950-NEXT:    v_mov_b32_e32 v7, 0x7ff8000012860; GFX950-NEXT:  .LBB243_1: ; %atomicrmw.start12861; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112862; GFX950-NEXT:    s_waitcnt vmcnt(0)12863; GFX950-NEXT:    v_max_f64 v[0:1], v[2:3], v[4:5]12864; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]12865; GFX950-NEXT:    s_nop 112866; GFX950-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc12867; GFX950-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc12868; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc012869; GFX950-NEXT:    s_waitcnt vmcnt(0)12870; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12871; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12872; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]12873; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12874; GFX950-NEXT:    s_cbranch_execnz .LBB243_112875; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12876; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12877; GFX950-NEXT:    v_accvgpr_write_b32 a0, v012878; GFX950-NEXT:    v_accvgpr_write_b32 a1, v112879; GFX950-NEXT:    ;;#ASMSTART12880; GFX950-NEXT:    ; use a[0:1]12881; GFX950-NEXT:    ;;#ASMEND12882; GFX950-NEXT:    s_setpc_b64 s[30:31]12883  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012884  %data = call double asm "; def $0", "=a"()12885  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012886  call void asm "; use $0", "a"(double %result)12887  ret void12888}12889 12890define void @global_atomic_fmaximum_f64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {12891; GFX90A-LABEL: global_atomic_fmaximum_f64_saddr_ret_av_av:12892; GFX90A:       ; %bb.0:12893; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12894; GFX90A-NEXT:    v_mov_b32_e32 v6, 012895; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8012896; GFX90A-NEXT:    s_mov_b64 s[4:5], 012897; GFX90A-NEXT:    v_mov_b32_e32 v7, 0x7ff8000012898; GFX90A-NEXT:    ;;#ASMSTART12899; GFX90A-NEXT:    ; def v[4:5]12900; GFX90A-NEXT:    ;;#ASMEND12901; GFX90A-NEXT:  .LBB244_1: ; %atomicrmw.start12902; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112903; GFX90A-NEXT:    s_waitcnt vmcnt(0)12904; GFX90A-NEXT:    v_max_f64 v[0:1], v[2:3], v[4:5]12905; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]12906; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc12907; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc12908; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc12909; GFX90A-NEXT:    s_waitcnt vmcnt(0)12910; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12911; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12912; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]12913; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12914; GFX90A-NEXT:    s_cbranch_execnz .LBB244_112915; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12916; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12917; GFX90A-NEXT:    ;;#ASMSTART12918; GFX90A-NEXT:    ; use v[0:1]12919; GFX90A-NEXT:    ;;#ASMEND12920; GFX90A-NEXT:    s_setpc_b64 s[30:31]12921;12922; GFX950-LABEL: global_atomic_fmaximum_f64_saddr_ret_av_av:12923; GFX950:       ; %bb.0:12924; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12925; GFX950-NEXT:    v_mov_b32_e32 v6, 012926; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8012927; GFX950-NEXT:    s_mov_b64 s[2:3], 012928; GFX950-NEXT:    v_mov_b32_e32 v7, 0x7ff8000012929; GFX950-NEXT:    ;;#ASMSTART12930; GFX950-NEXT:    ; def v[4:5]12931; GFX950-NEXT:    ;;#ASMEND12932; GFX950-NEXT:  .LBB244_1: ; %atomicrmw.start12933; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=112934; GFX950-NEXT:    s_waitcnt vmcnt(0)12935; GFX950-NEXT:    v_max_f64 v[0:1], v[2:3], v[4:5]12936; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]12937; GFX950-NEXT:    s_nop 112938; GFX950-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc12939; GFX950-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc12940; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc012941; GFX950-NEXT:    s_waitcnt vmcnt(0)12942; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12943; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]12944; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]12945; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]12946; GFX950-NEXT:    s_cbranch_execnz .LBB244_112947; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end12948; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]12949; GFX950-NEXT:    ;;#ASMSTART12950; GFX950-NEXT:    ; use v[0:1]12951; GFX950-NEXT:    ;;#ASMEND12952; GFX950-NEXT:    s_setpc_b64 s[30:31]12953  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1012954  %data = call double asm "; def $0", "=^VA"()12955  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !012956  call void asm "; use $0", "^VA"(double %result)12957  ret void12958}12959 12960define void @global_atomic_fminimum_f64_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {12961; GFX90A-LABEL: global_atomic_fminimum_f64_saddr_ret_a_a:12962; GFX90A:       ; %bb.0:12963; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12964; GFX90A-NEXT:    v_mov_b32_e32 v6, 012965; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8012966; GFX90A-NEXT:    ;;#ASMSTART12967; GFX90A-NEXT:    ; def a[0:1]12968; GFX90A-NEXT:    ;;#ASMEND12969; GFX90A-NEXT:    v_accvgpr_read_b32 v5, a112970; GFX90A-NEXT:    v_accvgpr_read_b32 v4, a012971; GFX90A-NEXT:    s_mov_b64 s[4:5], 012972; GFX90A-NEXT:    v_mov_b32_e32 v7, 0x7ff8000012973; GFX90A-NEXT:  .LBB245_1: ; %atomicrmw.start12974; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=112975; GFX90A-NEXT:    s_waitcnt vmcnt(0)12976; GFX90A-NEXT:    v_min_f64 v[0:1], v[2:3], v[4:5]12977; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]12978; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc12979; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc12980; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc12981; GFX90A-NEXT:    s_waitcnt vmcnt(0)12982; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]12983; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]12984; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]12985; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]12986; GFX90A-NEXT:    s_cbranch_execnz .LBB245_112987; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end12988; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]12989; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v012990; GFX90A-NEXT:    v_accvgpr_write_b32 a1, v112991; GFX90A-NEXT:    ;;#ASMSTART12992; GFX90A-NEXT:    ; use a[0:1]12993; GFX90A-NEXT:    ;;#ASMEND12994; GFX90A-NEXT:    s_setpc_b64 s[30:31]12995;12996; GFX950-LABEL: global_atomic_fminimum_f64_saddr_ret_a_a:12997; GFX950:       ; %bb.0:12998; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12999; GFX950-NEXT:    v_mov_b32_e32 v6, 013000; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8013001; GFX950-NEXT:    ;;#ASMSTART13002; GFX950-NEXT:    ; def a[0:1]13003; GFX950-NEXT:    ;;#ASMEND13004; GFX950-NEXT:    s_mov_b64 s[2:3], 013005; GFX950-NEXT:    v_accvgpr_read_b32 v5, a113006; GFX950-NEXT:    v_accvgpr_read_b32 v4, a013007; GFX950-NEXT:    v_mov_b32_e32 v7, 0x7ff8000013008; GFX950-NEXT:  .LBB245_1: ; %atomicrmw.start13009; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113010; GFX950-NEXT:    s_waitcnt vmcnt(0)13011; GFX950-NEXT:    v_min_f64 v[0:1], v[2:3], v[4:5]13012; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]13013; GFX950-NEXT:    s_nop 113014; GFX950-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc13015; GFX950-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc13016; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc013017; GFX950-NEXT:    s_waitcnt vmcnt(0)13018; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]13019; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13020; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]13021; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13022; GFX950-NEXT:    s_cbranch_execnz .LBB245_113023; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13024; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13025; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013026; GFX950-NEXT:    v_accvgpr_write_b32 a1, v113027; GFX950-NEXT:    ;;#ASMSTART13028; GFX950-NEXT:    ; use a[0:1]13029; GFX950-NEXT:    ;;#ASMEND13030; GFX950-NEXT:    s_setpc_b64 s[30:31]13031  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1013032  %data = call double asm "; def $0", "=a"()13033  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013034  call void asm "; use $0", "a"(double %result)13035  ret void13036}13037 13038define void @global_atomic_fminimum_f64_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13039; GFX90A-LABEL: global_atomic_fminimum_f64_saddr_ret_av_av:13040; GFX90A:       ; %bb.0:13041; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13042; GFX90A-NEXT:    v_mov_b32_e32 v6, 013043; GFX90A-NEXT:    global_load_dwordx2 v[2:3], v6, s[16:17] offset:8013044; GFX90A-NEXT:    s_mov_b64 s[4:5], 013045; GFX90A-NEXT:    v_mov_b32_e32 v7, 0x7ff8000013046; GFX90A-NEXT:    ;;#ASMSTART13047; GFX90A-NEXT:    ; def v[4:5]13048; GFX90A-NEXT:    ;;#ASMEND13049; GFX90A-NEXT:  .LBB246_1: ; %atomicrmw.start13050; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113051; GFX90A-NEXT:    s_waitcnt vmcnt(0)13052; GFX90A-NEXT:    v_min_f64 v[0:1], v[2:3], v[4:5]13053; GFX90A-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]13054; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc13055; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc13056; GFX90A-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[16:17] offset:80 glc13057; GFX90A-NEXT:    s_waitcnt vmcnt(0)13058; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]13059; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]13060; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]13061; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]13062; GFX90A-NEXT:    s_cbranch_execnz .LBB246_113063; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13064; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]13065; GFX90A-NEXT:    ;;#ASMSTART13066; GFX90A-NEXT:    ; use v[0:1]13067; GFX90A-NEXT:    ;;#ASMEND13068; GFX90A-NEXT:    s_setpc_b64 s[30:31]13069;13070; GFX950-LABEL: global_atomic_fminimum_f64_saddr_ret_av_av:13071; GFX950:       ; %bb.0:13072; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13073; GFX950-NEXT:    v_mov_b32_e32 v6, 013074; GFX950-NEXT:    global_load_dwordx2 v[2:3], v6, s[0:1] offset:8013075; GFX950-NEXT:    s_mov_b64 s[2:3], 013076; GFX950-NEXT:    v_mov_b32_e32 v7, 0x7ff8000013077; GFX950-NEXT:    ;;#ASMSTART13078; GFX950-NEXT:    ; def v[4:5]13079; GFX950-NEXT:    ;;#ASMEND13080; GFX950-NEXT:  .LBB246_1: ; %atomicrmw.start13081; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113082; GFX950-NEXT:    s_waitcnt vmcnt(0)13083; GFX950-NEXT:    v_min_f64 v[0:1], v[2:3], v[4:5]13084; GFX950-NEXT:    v_cmp_u_f64_e32 vcc, v[2:3], v[4:5]13085; GFX950-NEXT:    s_nop 113086; GFX950-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc13087; GFX950-NEXT:    v_cndmask_b32_e64 v0, v0, 0, vcc13088; GFX950-NEXT:    global_atomic_cmpswap_x2 v[0:1], v6, v[0:3], s[0:1] offset:80 sc013089; GFX950-NEXT:    s_waitcnt vmcnt(0)13090; GFX950-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[2:3]13091; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13092; GFX950-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]13093; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13094; GFX950-NEXT:    s_cbranch_execnz .LBB246_113095; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13096; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13097; GFX950-NEXT:    ;;#ASMSTART13098; GFX950-NEXT:    ; use v[0:1]13099; GFX950-NEXT:    ;;#ASMEND13100; GFX950-NEXT:    s_setpc_b64 s[30:31]13101  %gep.0 = getelementptr inbounds [512 x double], ptr addrspace(1) %ptr, i64 0, i64 1013102  %data = call double asm "; def $0", "=^VA"()13103  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, double %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013104  call void asm "; use $0", "^VA"(double %result)13105  ret void13106}13107 13108;---------------------------------------------------------------------13109; other atomics v2f16, with aa+av cases using saddr13110;---------------------------------------------------------------------13111 13112define void @global_atomic_fadd_v2f16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {13113; GFX90A-LABEL: global_atomic_fadd_v2f16_saddr_ret_a_a:13114; GFX90A:       ; %bb.0:13115; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13116; GFX90A-NEXT:    v_mov_b32_e32 v0, 013117; GFX90A-NEXT:    ;;#ASMSTART13118; GFX90A-NEXT:    ; def a013119; GFX90A-NEXT:    ;;#ASMEND13120; GFX90A-NEXT:    v_accvgpr_read_b32 v1, a013121; GFX90A-NEXT:    global_atomic_pk_add_f16 v0, v0, v1, s[16:17] offset:40 glc13122; GFX90A-NEXT:    s_waitcnt vmcnt(0)13123; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v013124; GFX90A-NEXT:    ;;#ASMSTART13125; GFX90A-NEXT:    ; use a013126; GFX90A-NEXT:    ;;#ASMEND13127; GFX90A-NEXT:    s_setpc_b64 s[30:31]13128;13129; GFX950-LABEL: global_atomic_fadd_v2f16_saddr_ret_a_a:13130; GFX950:       ; %bb.0:13131; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13132; GFX950-NEXT:    v_mov_b32_e32 v0, 013133; GFX950-NEXT:    ;;#ASMSTART13134; GFX950-NEXT:    ; def a013135; GFX950-NEXT:    ;;#ASMEND13136; GFX950-NEXT:    s_nop 013137; GFX950-NEXT:    v_accvgpr_read_b32 v1, a013138; GFX950-NEXT:    global_atomic_pk_add_f16 v0, v0, v1, s[0:1] offset:40 sc013139; GFX950-NEXT:    s_waitcnt vmcnt(0)13140; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013141; GFX950-NEXT:    ;;#ASMSTART13142; GFX950-NEXT:    ; use a013143; GFX950-NEXT:    ;;#ASMEND13144; GFX950-NEXT:    s_setpc_b64 s[30:31]13145  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013146  %data = call <2 x half> asm "; def $0", "=a"()13147  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013148  call void asm "; use $0", "a"(<2 x half> %result)13149  ret void13150}13151 13152define void @global_atomic_fadd_v2f16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13153; GFX90A-LABEL: global_atomic_fadd_v2f16_saddr_ret_av_av:13154; GFX90A:       ; %bb.0:13155; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13156; GFX90A-NEXT:    v_mov_b32_e32 v0, 013157; GFX90A-NEXT:    ;;#ASMSTART13158; GFX90A-NEXT:    ; def v113159; GFX90A-NEXT:    ;;#ASMEND13160; GFX90A-NEXT:    global_atomic_pk_add_f16 v0, v0, v1, s[16:17] offset:40 glc13161; GFX90A-NEXT:    s_waitcnt vmcnt(0)13162; GFX90A-NEXT:    ;;#ASMSTART13163; GFX90A-NEXT:    ; use v013164; GFX90A-NEXT:    ;;#ASMEND13165; GFX90A-NEXT:    s_setpc_b64 s[30:31]13166;13167; GFX950-LABEL: global_atomic_fadd_v2f16_saddr_ret_av_av:13168; GFX950:       ; %bb.0:13169; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13170; GFX950-NEXT:    v_mov_b32_e32 v0, 013171; GFX950-NEXT:    ;;#ASMSTART13172; GFX950-NEXT:    ; def v113173; GFX950-NEXT:    ;;#ASMEND13174; GFX950-NEXT:    global_atomic_pk_add_f16 v0, v0, v1, s[0:1] offset:40 sc013175; GFX950-NEXT:    s_waitcnt vmcnt(0)13176; GFX950-NEXT:    ;;#ASMSTART13177; GFX950-NEXT:    ; use v013178; GFX950-NEXT:    ;;#ASMEND13179; GFX950-NEXT:    s_setpc_b64 s[30:31]13180  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013181  %data = call <2 x half> asm "; def $0", "=^VA"()13182  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013183  call void asm "; use $0", "^VA"(<2 x half> %result)13184  ret void13185}13186 13187define void @global_atomic_fsub_v2f16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {13188; GFX90A-LABEL: global_atomic_fsub_v2f16_saddr_ret_a_a:13189; GFX90A:       ; %bb.0:13190; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13191; GFX90A-NEXT:    v_mov_b32_e32 v2, 013192; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013193; GFX90A-NEXT:    ;;#ASMSTART13194; GFX90A-NEXT:    ; def a013195; GFX90A-NEXT:    ;;#ASMEND13196; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a013197; GFX90A-NEXT:    s_mov_b64 s[4:5], 013198; GFX90A-NEXT:  .LBB249_1: ; %atomicrmw.start13199; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113200; GFX90A-NEXT:    s_waitcnt vmcnt(0)13201; GFX90A-NEXT:    v_pk_add_f16 v0, v1, v3 neg_lo:[0,1] neg_hi:[0,1]13202; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13203; GFX90A-NEXT:    s_waitcnt vmcnt(0)13204; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113205; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]13206; GFX90A-NEXT:    v_mov_b32_e32 v1, v013207; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]13208; GFX90A-NEXT:    s_cbranch_execnz .LBB249_113209; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13210; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]13211; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v013212; GFX90A-NEXT:    ;;#ASMSTART13213; GFX90A-NEXT:    ; use a013214; GFX90A-NEXT:    ;;#ASMEND13215; GFX90A-NEXT:    s_setpc_b64 s[30:31]13216;13217; GFX950-LABEL: global_atomic_fsub_v2f16_saddr_ret_a_a:13218; GFX950:       ; %bb.0:13219; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13220; GFX950-NEXT:    v_mov_b32_e32 v2, 013221; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013222; GFX950-NEXT:    ;;#ASMSTART13223; GFX950-NEXT:    ; def a013224; GFX950-NEXT:    ;;#ASMEND13225; GFX950-NEXT:    s_mov_b64 s[2:3], 013226; GFX950-NEXT:    v_accvgpr_read_b32 v3, a013227; GFX950-NEXT:  .LBB249_1: ; %atomicrmw.start13228; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113229; GFX950-NEXT:    s_waitcnt vmcnt(0)13230; GFX950-NEXT:    v_pk_add_f16 v0, v1, v3 neg_lo:[0,1] neg_hi:[0,1]13231; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013232; GFX950-NEXT:    s_waitcnt vmcnt(0)13233; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113234; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13235; GFX950-NEXT:    v_mov_b32_e32 v1, v013236; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13237; GFX950-NEXT:    s_cbranch_execnz .LBB249_113238; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13239; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13240; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013241; GFX950-NEXT:    ;;#ASMSTART13242; GFX950-NEXT:    ; use a013243; GFX950-NEXT:    ;;#ASMEND13244; GFX950-NEXT:    s_setpc_b64 s[30:31]13245  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013246  %data = call <2 x half> asm "; def $0", "=a"()13247  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013248  call void asm "; use $0", "a"(<2 x half> %result)13249  ret void13250}13251 13252define void @global_atomic_fsub_v2f16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13253; GFX90A-LABEL: global_atomic_fsub_v2f16_saddr_ret_av_av:13254; GFX90A:       ; %bb.0:13255; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13256; GFX90A-NEXT:    v_mov_b32_e32 v2, 013257; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013258; GFX90A-NEXT:    s_mov_b64 s[4:5], 013259; GFX90A-NEXT:    ;;#ASMSTART13260; GFX90A-NEXT:    ; def v313261; GFX90A-NEXT:    ;;#ASMEND13262; GFX90A-NEXT:  .LBB250_1: ; %atomicrmw.start13263; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113264; GFX90A-NEXT:    s_waitcnt vmcnt(0)13265; GFX90A-NEXT:    v_pk_add_f16 v0, v1, v3 neg_lo:[0,1] neg_hi:[0,1]13266; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13267; GFX90A-NEXT:    s_waitcnt vmcnt(0)13268; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113269; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]13270; GFX90A-NEXT:    v_mov_b32_e32 v1, v013271; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]13272; GFX90A-NEXT:    s_cbranch_execnz .LBB250_113273; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13274; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]13275; GFX90A-NEXT:    ;;#ASMSTART13276; GFX90A-NEXT:    ; use v013277; GFX90A-NEXT:    ;;#ASMEND13278; GFX90A-NEXT:    s_setpc_b64 s[30:31]13279;13280; GFX950-LABEL: global_atomic_fsub_v2f16_saddr_ret_av_av:13281; GFX950:       ; %bb.0:13282; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13283; GFX950-NEXT:    v_mov_b32_e32 v2, 013284; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013285; GFX950-NEXT:    s_mov_b64 s[2:3], 013286; GFX950-NEXT:    ;;#ASMSTART13287; GFX950-NEXT:    ; def v313288; GFX950-NEXT:    ;;#ASMEND13289; GFX950-NEXT:  .LBB250_1: ; %atomicrmw.start13290; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113291; GFX950-NEXT:    s_waitcnt vmcnt(0)13292; GFX950-NEXT:    v_pk_add_f16 v0, v1, v3 neg_lo:[0,1] neg_hi:[0,1]13293; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013294; GFX950-NEXT:    s_waitcnt vmcnt(0)13295; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113296; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13297; GFX950-NEXT:    v_mov_b32_e32 v1, v013298; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13299; GFX950-NEXT:    s_cbranch_execnz .LBB250_113300; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13301; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13302; GFX950-NEXT:    ;;#ASMSTART13303; GFX950-NEXT:    ; use v013304; GFX950-NEXT:    ;;#ASMEND13305; GFX950-NEXT:    s_setpc_b64 s[30:31]13306  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013307  %data = call <2 x half> asm "; def $0", "=^VA"()13308  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013309  call void asm "; use $0", "^VA"(<2 x half> %result)13310  ret void13311}13312 13313define void @global_atomic_fmax_v2f16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {13314; GFX90A-LABEL: global_atomic_fmax_v2f16_saddr_ret_a_a:13315; GFX90A:       ; %bb.0:13316; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13317; GFX90A-NEXT:    v_mov_b32_e32 v2, 013318; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013319; GFX90A-NEXT:    ;;#ASMSTART13320; GFX90A-NEXT:    ; def a013321; GFX90A-NEXT:    ;;#ASMEND13322; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a013323; GFX90A-NEXT:    s_mov_b64 s[4:5], 013324; GFX90A-NEXT:    v_pk_max_f16 v3, v0, v013325; GFX90A-NEXT:  .LBB251_1: ; %atomicrmw.start13326; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113327; GFX90A-NEXT:    s_waitcnt vmcnt(0)13328; GFX90A-NEXT:    v_pk_max_f16 v0, v1, v113329; GFX90A-NEXT:    v_pk_max_f16 v0, v0, v313330; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13331; GFX90A-NEXT:    s_waitcnt vmcnt(0)13332; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113333; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]13334; GFX90A-NEXT:    v_mov_b32_e32 v1, v013335; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]13336; GFX90A-NEXT:    s_cbranch_execnz .LBB251_113337; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13338; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]13339; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v013340; GFX90A-NEXT:    ;;#ASMSTART13341; GFX90A-NEXT:    ; use a013342; GFX90A-NEXT:    ;;#ASMEND13343; GFX90A-NEXT:    s_setpc_b64 s[30:31]13344;13345; GFX950-LABEL: global_atomic_fmax_v2f16_saddr_ret_a_a:13346; GFX950:       ; %bb.0:13347; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13348; GFX950-NEXT:    v_mov_b32_e32 v2, 013349; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013350; GFX950-NEXT:    ;;#ASMSTART13351; GFX950-NEXT:    ; def a013352; GFX950-NEXT:    ;;#ASMEND13353; GFX950-NEXT:    s_mov_b64 s[2:3], 013354; GFX950-NEXT:    v_accvgpr_read_b32 v0, a013355; GFX950-NEXT:    v_pk_max_f16 v3, v0, v013356; GFX950-NEXT:  .LBB251_1: ; %atomicrmw.start13357; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113358; GFX950-NEXT:    s_waitcnt vmcnt(0)13359; GFX950-NEXT:    v_pk_max_f16 v0, v1, v113360; GFX950-NEXT:    s_nop 013361; GFX950-NEXT:    v_pk_max_f16 v0, v0, v313362; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013363; GFX950-NEXT:    s_waitcnt vmcnt(0)13364; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113365; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13366; GFX950-NEXT:    v_mov_b32_e32 v1, v013367; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13368; GFX950-NEXT:    s_cbranch_execnz .LBB251_113369; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13370; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13371; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013372; GFX950-NEXT:    ;;#ASMSTART13373; GFX950-NEXT:    ; use a013374; GFX950-NEXT:    ;;#ASMEND13375; GFX950-NEXT:    s_setpc_b64 s[30:31]13376  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013377  %data = call <2 x half> asm "; def $0", "=a"()13378  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013379  call void asm "; use $0", "a"(<2 x half> %result)13380  ret void13381}13382 13383define void @global_atomic_fmax_v2f16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13384; GFX90A-LABEL: global_atomic_fmax_v2f16_saddr_ret_av_av:13385; GFX90A:       ; %bb.0:13386; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13387; GFX90A-NEXT:    v_mov_b32_e32 v2, 013388; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013389; GFX90A-NEXT:    ;;#ASMSTART13390; GFX90A-NEXT:    ; def v013391; GFX90A-NEXT:    ;;#ASMEND13392; GFX90A-NEXT:    s_mov_b64 s[4:5], 013393; GFX90A-NEXT:    v_pk_max_f16 v3, v0, v013394; GFX90A-NEXT:  .LBB252_1: ; %atomicrmw.start13395; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113396; GFX90A-NEXT:    s_waitcnt vmcnt(0)13397; GFX90A-NEXT:    v_pk_max_f16 v0, v1, v113398; GFX90A-NEXT:    v_pk_max_f16 v0, v0, v313399; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13400; GFX90A-NEXT:    s_waitcnt vmcnt(0)13401; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113402; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]13403; GFX90A-NEXT:    v_mov_b32_e32 v1, v013404; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]13405; GFX90A-NEXT:    s_cbranch_execnz .LBB252_113406; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13407; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]13408; GFX90A-NEXT:    ;;#ASMSTART13409; GFX90A-NEXT:    ; use v013410; GFX90A-NEXT:    ;;#ASMEND13411; GFX90A-NEXT:    s_setpc_b64 s[30:31]13412;13413; GFX950-LABEL: global_atomic_fmax_v2f16_saddr_ret_av_av:13414; GFX950:       ; %bb.0:13415; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13416; GFX950-NEXT:    v_mov_b32_e32 v2, 013417; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013418; GFX950-NEXT:    ;;#ASMSTART13419; GFX950-NEXT:    ; def v013420; GFX950-NEXT:    ;;#ASMEND13421; GFX950-NEXT:    s_mov_b64 s[2:3], 013422; GFX950-NEXT:    v_pk_max_f16 v3, v0, v013423; GFX950-NEXT:  .LBB252_1: ; %atomicrmw.start13424; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113425; GFX950-NEXT:    s_waitcnt vmcnt(0)13426; GFX950-NEXT:    v_pk_max_f16 v0, v1, v113427; GFX950-NEXT:    s_nop 013428; GFX950-NEXT:    v_pk_max_f16 v0, v0, v313429; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013430; GFX950-NEXT:    s_waitcnt vmcnt(0)13431; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113432; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13433; GFX950-NEXT:    v_mov_b32_e32 v1, v013434; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13435; GFX950-NEXT:    s_cbranch_execnz .LBB252_113436; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13437; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13438; GFX950-NEXT:    ;;#ASMSTART13439; GFX950-NEXT:    ; use v013440; GFX950-NEXT:    ;;#ASMEND13441; GFX950-NEXT:    s_setpc_b64 s[30:31]13442  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013443  %data = call <2 x half> asm "; def $0", "=^VA"()13444  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013445  call void asm "; use $0", "^VA"(<2 x half> %result)13446  ret void13447}13448 13449define void @global_atomic_fmin_v2f16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {13450; GFX90A-LABEL: global_atomic_fmin_v2f16_saddr_ret_a_a:13451; GFX90A:       ; %bb.0:13452; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13453; GFX90A-NEXT:    v_mov_b32_e32 v2, 013454; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013455; GFX90A-NEXT:    ;;#ASMSTART13456; GFX90A-NEXT:    ; def a013457; GFX90A-NEXT:    ;;#ASMEND13458; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a013459; GFX90A-NEXT:    s_mov_b64 s[4:5], 013460; GFX90A-NEXT:    v_pk_max_f16 v3, v0, v013461; GFX90A-NEXT:  .LBB253_1: ; %atomicrmw.start13462; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113463; GFX90A-NEXT:    s_waitcnt vmcnt(0)13464; GFX90A-NEXT:    v_pk_max_f16 v0, v1, v113465; GFX90A-NEXT:    v_pk_min_f16 v0, v0, v313466; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13467; GFX90A-NEXT:    s_waitcnt vmcnt(0)13468; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113469; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]13470; GFX90A-NEXT:    v_mov_b32_e32 v1, v013471; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]13472; GFX90A-NEXT:    s_cbranch_execnz .LBB253_113473; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13474; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]13475; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v013476; GFX90A-NEXT:    ;;#ASMSTART13477; GFX90A-NEXT:    ; use a013478; GFX90A-NEXT:    ;;#ASMEND13479; GFX90A-NEXT:    s_setpc_b64 s[30:31]13480;13481; GFX950-LABEL: global_atomic_fmin_v2f16_saddr_ret_a_a:13482; GFX950:       ; %bb.0:13483; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13484; GFX950-NEXT:    v_mov_b32_e32 v2, 013485; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013486; GFX950-NEXT:    ;;#ASMSTART13487; GFX950-NEXT:    ; def a013488; GFX950-NEXT:    ;;#ASMEND13489; GFX950-NEXT:    s_mov_b64 s[2:3], 013490; GFX950-NEXT:    v_accvgpr_read_b32 v0, a013491; GFX950-NEXT:    v_pk_max_f16 v3, v0, v013492; GFX950-NEXT:  .LBB253_1: ; %atomicrmw.start13493; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113494; GFX950-NEXT:    s_waitcnt vmcnt(0)13495; GFX950-NEXT:    v_pk_max_f16 v0, v1, v113496; GFX950-NEXT:    s_nop 013497; GFX950-NEXT:    v_pk_min_f16 v0, v0, v313498; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013499; GFX950-NEXT:    s_waitcnt vmcnt(0)13500; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113501; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13502; GFX950-NEXT:    v_mov_b32_e32 v1, v013503; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13504; GFX950-NEXT:    s_cbranch_execnz .LBB253_113505; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13506; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13507; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013508; GFX950-NEXT:    ;;#ASMSTART13509; GFX950-NEXT:    ; use a013510; GFX950-NEXT:    ;;#ASMEND13511; GFX950-NEXT:    s_setpc_b64 s[30:31]13512  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013513  %data = call <2 x half> asm "; def $0", "=a"()13514  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013515  call void asm "; use $0", "a"(<2 x half> %result)13516  ret void13517}13518 13519define void @global_atomic_fmin_v2f16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13520; GFX90A-LABEL: global_atomic_fmin_v2f16_saddr_ret_av_av:13521; GFX90A:       ; %bb.0:13522; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13523; GFX90A-NEXT:    v_mov_b32_e32 v2, 013524; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013525; GFX90A-NEXT:    ;;#ASMSTART13526; GFX90A-NEXT:    ; def v013527; GFX90A-NEXT:    ;;#ASMEND13528; GFX90A-NEXT:    s_mov_b64 s[4:5], 013529; GFX90A-NEXT:    v_pk_max_f16 v3, v0, v013530; GFX90A-NEXT:  .LBB254_1: ; %atomicrmw.start13531; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113532; GFX90A-NEXT:    s_waitcnt vmcnt(0)13533; GFX90A-NEXT:    v_pk_max_f16 v0, v1, v113534; GFX90A-NEXT:    v_pk_min_f16 v0, v0, v313535; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13536; GFX90A-NEXT:    s_waitcnt vmcnt(0)13537; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113538; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]13539; GFX90A-NEXT:    v_mov_b32_e32 v1, v013540; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]13541; GFX90A-NEXT:    s_cbranch_execnz .LBB254_113542; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13543; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]13544; GFX90A-NEXT:    ;;#ASMSTART13545; GFX90A-NEXT:    ; use v013546; GFX90A-NEXT:    ;;#ASMEND13547; GFX90A-NEXT:    s_setpc_b64 s[30:31]13548;13549; GFX950-LABEL: global_atomic_fmin_v2f16_saddr_ret_av_av:13550; GFX950:       ; %bb.0:13551; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13552; GFX950-NEXT:    v_mov_b32_e32 v2, 013553; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013554; GFX950-NEXT:    ;;#ASMSTART13555; GFX950-NEXT:    ; def v013556; GFX950-NEXT:    ;;#ASMEND13557; GFX950-NEXT:    s_mov_b64 s[2:3], 013558; GFX950-NEXT:    v_pk_max_f16 v3, v0, v013559; GFX950-NEXT:  .LBB254_1: ; %atomicrmw.start13560; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113561; GFX950-NEXT:    s_waitcnt vmcnt(0)13562; GFX950-NEXT:    v_pk_max_f16 v0, v1, v113563; GFX950-NEXT:    s_nop 013564; GFX950-NEXT:    v_pk_min_f16 v0, v0, v313565; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013566; GFX950-NEXT:    s_waitcnt vmcnt(0)13567; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113568; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13569; GFX950-NEXT:    v_mov_b32_e32 v1, v013570; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13571; GFX950-NEXT:    s_cbranch_execnz .LBB254_113572; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13573; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13574; GFX950-NEXT:    ;;#ASMSTART13575; GFX950-NEXT:    ; use v013576; GFX950-NEXT:    ;;#ASMEND13577; GFX950-NEXT:    s_setpc_b64 s[30:31]13578  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013579  %data = call <2 x half> asm "; def $0", "=^VA"()13580  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013581  call void asm "; use $0", "^VA"(<2 x half> %result)13582  ret void13583}13584 13585define void @global_atomic_fmaximum_v2f16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {13586; GFX90A-LABEL: global_atomic_fmaximum_v2f16_saddr_ret_a_a:13587; GFX90A:       ; %bb.0:13588; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13589; GFX90A-NEXT:    v_mov_b32_e32 v2, 013590; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013591; GFX90A-NEXT:    ;;#ASMSTART13592; GFX90A-NEXT:    ; def a013593; GFX90A-NEXT:    ;;#ASMEND13594; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a013595; GFX90A-NEXT:    s_mov_b64 s[6:7], 013596; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7e0013597; GFX90A-NEXT:    s_mov_b32 s8, 0x504010013598; GFX90A-NEXT:  .LBB255_1: ; %atomicrmw.start13599; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113600; GFX90A-NEXT:    s_waitcnt vmcnt(0)13601; GFX90A-NEXT:    v_pk_max_f16 v0, v1, v313602; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_113603; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v1, v313604; GFX90A-NEXT:    v_cndmask_b32_e64 v5, v4, v0, s[4:5]13605; GFX90A-NEXT:    v_cndmask_b32_sdwa v0, v4, v0, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_113606; GFX90A-NEXT:    v_perm_b32 v0, v0, v5, s813607; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13608; GFX90A-NEXT:    s_waitcnt vmcnt(0)13609; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113610; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]13611; GFX90A-NEXT:    v_mov_b32_e32 v1, v013612; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]13613; GFX90A-NEXT:    s_cbranch_execnz .LBB255_113614; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13615; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]13616; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v013617; GFX90A-NEXT:    ;;#ASMSTART13618; GFX90A-NEXT:    ; use a013619; GFX90A-NEXT:    ;;#ASMEND13620; GFX90A-NEXT:    s_setpc_b64 s[30:31]13621;13622; GFX950-LABEL: global_atomic_fmaximum_v2f16_saddr_ret_a_a:13623; GFX950:       ; %bb.0:13624; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13625; GFX950-NEXT:    v_mov_b32_e32 v2, 013626; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013627; GFX950-NEXT:    ;;#ASMSTART13628; GFX950-NEXT:    ; def a013629; GFX950-NEXT:    ;;#ASMEND13630; GFX950-NEXT:    s_mov_b64 s[2:3], 013631; GFX950-NEXT:    v_accvgpr_read_b32 v3, a013632; GFX950-NEXT:  .LBB255_1: ; %atomicrmw.start13633; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113634; GFX950-NEXT:    s_waitcnt vmcnt(0)13635; GFX950-NEXT:    v_pk_maximum3_f16 v0, v1, v3, v313636; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013637; GFX950-NEXT:    s_waitcnt vmcnt(0)13638; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113639; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13640; GFX950-NEXT:    v_mov_b32_e32 v1, v013641; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13642; GFX950-NEXT:    s_cbranch_execnz .LBB255_113643; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13644; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13645; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013646; GFX950-NEXT:    ;;#ASMSTART13647; GFX950-NEXT:    ; use a013648; GFX950-NEXT:    ;;#ASMEND13649; GFX950-NEXT:    s_setpc_b64 s[30:31]13650  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013651  %data = call <2 x half> asm "; def $0", "=a"()13652  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013653  call void asm "; use $0", "a"(<2 x half> %result)13654  ret void13655}13656 13657define void @global_atomic_fmaximum_v2f16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13658; GFX90A-LABEL: global_atomic_fmaximum_v2f16_saddr_ret_av_av:13659; GFX90A:       ; %bb.0:13660; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13661; GFX90A-NEXT:    v_mov_b32_e32 v2, 013662; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013663; GFX90A-NEXT:    s_mov_b64 s[6:7], 013664; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7e0013665; GFX90A-NEXT:    s_mov_b32 s8, 0x504010013666; GFX90A-NEXT:    ;;#ASMSTART13667; GFX90A-NEXT:    ; def v313668; GFX90A-NEXT:    ;;#ASMEND13669; GFX90A-NEXT:  .LBB256_1: ; %atomicrmw.start13670; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113671; GFX90A-NEXT:    s_waitcnt vmcnt(0)13672; GFX90A-NEXT:    v_pk_max_f16 v0, v1, v313673; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_113674; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v1, v313675; GFX90A-NEXT:    v_cndmask_b32_e64 v5, v4, v0, s[4:5]13676; GFX90A-NEXT:    v_cndmask_b32_sdwa v0, v4, v0, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_113677; GFX90A-NEXT:    v_perm_b32 v0, v0, v5, s813678; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13679; GFX90A-NEXT:    s_waitcnt vmcnt(0)13680; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113681; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]13682; GFX90A-NEXT:    v_mov_b32_e32 v1, v013683; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]13684; GFX90A-NEXT:    s_cbranch_execnz .LBB256_113685; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13686; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]13687; GFX90A-NEXT:    ;;#ASMSTART13688; GFX90A-NEXT:    ; use v013689; GFX90A-NEXT:    ;;#ASMEND13690; GFX90A-NEXT:    s_setpc_b64 s[30:31]13691;13692; GFX950-LABEL: global_atomic_fmaximum_v2f16_saddr_ret_av_av:13693; GFX950:       ; %bb.0:13694; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13695; GFX950-NEXT:    v_mov_b32_e32 v2, 013696; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013697; GFX950-NEXT:    s_mov_b64 s[2:3], 013698; GFX950-NEXT:    ;;#ASMSTART13699; GFX950-NEXT:    ; def v313700; GFX950-NEXT:    ;;#ASMEND13701; GFX950-NEXT:  .LBB256_1: ; %atomicrmw.start13702; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113703; GFX950-NEXT:    s_waitcnt vmcnt(0)13704; GFX950-NEXT:    v_pk_maximum3_f16 v0, v1, v3, v313705; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013706; GFX950-NEXT:    s_waitcnt vmcnt(0)13707; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113708; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13709; GFX950-NEXT:    v_mov_b32_e32 v1, v013710; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13711; GFX950-NEXT:    s_cbranch_execnz .LBB256_113712; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13713; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13714; GFX950-NEXT:    ;;#ASMSTART13715; GFX950-NEXT:    ; use v013716; GFX950-NEXT:    ;;#ASMEND13717; GFX950-NEXT:    s_setpc_b64 s[30:31]13718  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013719  %data = call <2 x half> asm "; def $0", "=^VA"()13720  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013721  call void asm "; use $0", "^VA"(<2 x half> %result)13722  ret void13723}13724 13725define void @global_atomic_fminimum_v2f16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {13726; GFX90A-LABEL: global_atomic_fminimum_v2f16_saddr_ret_a_a:13727; GFX90A:       ; %bb.0:13728; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13729; GFX90A-NEXT:    v_mov_b32_e32 v2, 013730; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013731; GFX90A-NEXT:    ;;#ASMSTART13732; GFX90A-NEXT:    ; def a013733; GFX90A-NEXT:    ;;#ASMEND13734; GFX90A-NEXT:    v_accvgpr_read_b32 v3, a013735; GFX90A-NEXT:    s_mov_b64 s[6:7], 013736; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7e0013737; GFX90A-NEXT:    s_mov_b32 s8, 0x504010013738; GFX90A-NEXT:  .LBB257_1: ; %atomicrmw.start13739; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113740; GFX90A-NEXT:    s_waitcnt vmcnt(0)13741; GFX90A-NEXT:    v_pk_min_f16 v0, v1, v313742; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_113743; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v1, v313744; GFX90A-NEXT:    v_cndmask_b32_e64 v5, v4, v0, s[4:5]13745; GFX90A-NEXT:    v_cndmask_b32_sdwa v0, v4, v0, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_113746; GFX90A-NEXT:    v_perm_b32 v0, v0, v5, s813747; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13748; GFX90A-NEXT:    s_waitcnt vmcnt(0)13749; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113750; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]13751; GFX90A-NEXT:    v_mov_b32_e32 v1, v013752; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]13753; GFX90A-NEXT:    s_cbranch_execnz .LBB257_113754; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13755; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]13756; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v013757; GFX90A-NEXT:    ;;#ASMSTART13758; GFX90A-NEXT:    ; use a013759; GFX90A-NEXT:    ;;#ASMEND13760; GFX90A-NEXT:    s_setpc_b64 s[30:31]13761;13762; GFX950-LABEL: global_atomic_fminimum_v2f16_saddr_ret_a_a:13763; GFX950:       ; %bb.0:13764; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13765; GFX950-NEXT:    v_mov_b32_e32 v2, 013766; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013767; GFX950-NEXT:    ;;#ASMSTART13768; GFX950-NEXT:    ; def a013769; GFX950-NEXT:    ;;#ASMEND13770; GFX950-NEXT:    s_mov_b64 s[2:3], 013771; GFX950-NEXT:    v_accvgpr_read_b32 v3, a013772; GFX950-NEXT:  .LBB257_1: ; %atomicrmw.start13773; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113774; GFX950-NEXT:    s_waitcnt vmcnt(0)13775; GFX950-NEXT:    v_pk_minimum3_f16 v0, v1, v3, v313776; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013777; GFX950-NEXT:    s_waitcnt vmcnt(0)13778; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113779; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13780; GFX950-NEXT:    v_mov_b32_e32 v1, v013781; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13782; GFX950-NEXT:    s_cbranch_execnz .LBB257_113783; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13784; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13785; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013786; GFX950-NEXT:    ;;#ASMSTART13787; GFX950-NEXT:    ; use a013788; GFX950-NEXT:    ;;#ASMEND13789; GFX950-NEXT:    s_setpc_b64 s[30:31]13790  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013791  %data = call <2 x half> asm "; def $0", "=a"()13792  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013793  call void asm "; use $0", "a"(<2 x half> %result)13794  ret void13795}13796 13797define void @global_atomic_fminimum_v2f16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13798; GFX90A-LABEL: global_atomic_fminimum_v2f16_saddr_ret_av_av:13799; GFX90A:       ; %bb.0:13800; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13801; GFX90A-NEXT:    v_mov_b32_e32 v2, 013802; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013803; GFX90A-NEXT:    s_mov_b64 s[6:7], 013804; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7e0013805; GFX90A-NEXT:    s_mov_b32 s8, 0x504010013806; GFX90A-NEXT:    ;;#ASMSTART13807; GFX90A-NEXT:    ; def v313808; GFX90A-NEXT:    ;;#ASMEND13809; GFX90A-NEXT:  .LBB258_1: ; %atomicrmw.start13810; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113811; GFX90A-NEXT:    s_waitcnt vmcnt(0)13812; GFX90A-NEXT:    v_pk_min_f16 v0, v1, v313813; GFX90A-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_113814; GFX90A-NEXT:    v_cmp_o_f16_e64 s[4:5], v1, v313815; GFX90A-NEXT:    v_cndmask_b32_e64 v5, v4, v0, s[4:5]13816; GFX90A-NEXT:    v_cndmask_b32_sdwa v0, v4, v0, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_113817; GFX90A-NEXT:    v_perm_b32 v0, v0, v5, s813818; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13819; GFX90A-NEXT:    s_waitcnt vmcnt(0)13820; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113821; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]13822; GFX90A-NEXT:    v_mov_b32_e32 v1, v013823; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]13824; GFX90A-NEXT:    s_cbranch_execnz .LBB258_113825; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13826; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]13827; GFX90A-NEXT:    ;;#ASMSTART13828; GFX90A-NEXT:    ; use v013829; GFX90A-NEXT:    ;;#ASMEND13830; GFX90A-NEXT:    s_setpc_b64 s[30:31]13831;13832; GFX950-LABEL: global_atomic_fminimum_v2f16_saddr_ret_av_av:13833; GFX950:       ; %bb.0:13834; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13835; GFX950-NEXT:    v_mov_b32_e32 v2, 013836; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4013837; GFX950-NEXT:    s_mov_b64 s[2:3], 013838; GFX950-NEXT:    ;;#ASMSTART13839; GFX950-NEXT:    ; def v313840; GFX950-NEXT:    ;;#ASMEND13841; GFX950-NEXT:  .LBB258_1: ; %atomicrmw.start13842; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=113843; GFX950-NEXT:    s_waitcnt vmcnt(0)13844; GFX950-NEXT:    v_pk_minimum3_f16 v0, v1, v3, v313845; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc013846; GFX950-NEXT:    s_waitcnt vmcnt(0)13847; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113848; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]13849; GFX950-NEXT:    v_mov_b32_e32 v1, v013850; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]13851; GFX950-NEXT:    s_cbranch_execnz .LBB258_113852; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end13853; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]13854; GFX950-NEXT:    ;;#ASMSTART13855; GFX950-NEXT:    ; use v013856; GFX950-NEXT:    ;;#ASMEND13857; GFX950-NEXT:    s_setpc_b64 s[30:31]13858  %gep.0 = getelementptr inbounds [512 x <2 x half>], ptr addrspace(1) %ptr, i64 0, i64 1013859  %data = call <2 x half> asm "; def $0", "=^VA"()13860  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x half> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013861  call void asm "; use $0", "^VA"(<2 x half> %result)13862  ret void13863}13864 13865;---------------------------------------------------------------------13866; other atomics v2bf16, with aa+av cases using saddr13867;---------------------------------------------------------------------13868 13869define void @global_atomic_fadd_v2bf16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {13870; GFX90A-LABEL: global_atomic_fadd_v2bf16_saddr_ret_a_a:13871; GFX90A:       ; %bb.0:13872; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13873; GFX90A-NEXT:    v_mov_b32_e32 v2, 013874; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013875; GFX90A-NEXT:    ;;#ASMSTART13876; GFX90A-NEXT:    ; def a013877; GFX90A-NEXT:    ;;#ASMEND13878; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a013879; GFX90A-NEXT:    s_mov_b64 s[6:7], 013880; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v013881; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff13882; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v013883; GFX90A-NEXT:    s_mov_b32 s9, 0x706030213884; GFX90A-NEXT:  .LBB259_1: ; %atomicrmw.start13885; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113886; GFX90A-NEXT:    s_waitcnt vmcnt(0)13887; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v113888; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v113889; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v313890; GFX90A-NEXT:    v_add_f32_e32 v5, v5, v413891; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 113892; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 113893; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v013894; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v513895; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s813896; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s813897; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v513898; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v013899; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]13900; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc13901; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s913902; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13903; GFX90A-NEXT:    s_waitcnt vmcnt(0)13904; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113905; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]13906; GFX90A-NEXT:    v_mov_b32_e32 v1, v013907; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]13908; GFX90A-NEXT:    s_cbranch_execnz .LBB259_113909; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13910; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]13911; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v013912; GFX90A-NEXT:    ;;#ASMSTART13913; GFX90A-NEXT:    ; use a013914; GFX90A-NEXT:    ;;#ASMEND13915; GFX90A-NEXT:    s_setpc_b64 s[30:31]13916;13917; GFX950-LABEL: global_atomic_fadd_v2bf16_saddr_ret_a_a:13918; GFX950:       ; %bb.0:13919; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13920; GFX950-NEXT:    v_mov_b32_e32 v0, 013921; GFX950-NEXT:    ;;#ASMSTART13922; GFX950-NEXT:    ; def a013923; GFX950-NEXT:    ;;#ASMEND13924; GFX950-NEXT:    s_nop 013925; GFX950-NEXT:    v_accvgpr_read_b32 v1, a013926; GFX950-NEXT:    global_atomic_pk_add_bf16 v0, v0, v1, s[0:1] offset:40 sc013927; GFX950-NEXT:    s_waitcnt vmcnt(0)13928; GFX950-NEXT:    v_accvgpr_write_b32 a0, v013929; GFX950-NEXT:    ;;#ASMSTART13930; GFX950-NEXT:    ; use a013931; GFX950-NEXT:    ;;#ASMEND13932; GFX950-NEXT:    s_setpc_b64 s[30:31]13933  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1013934  %data = call <2 x bfloat> asm "; def $0", "=a"()13935  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !013936  call void asm "; use $0", "a"(<2 x bfloat> %result)13937  ret void13938}13939 13940define void @global_atomic_fadd_v2bf16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {13941; GFX90A-LABEL: global_atomic_fadd_v2bf16_saddr_ret_av_av:13942; GFX90A:       ; %bb.0:13943; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13944; GFX90A-NEXT:    v_mov_b32_e32 v2, 013945; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4013946; GFX90A-NEXT:    ;;#ASMSTART13947; GFX90A-NEXT:    ; def v013948; GFX90A-NEXT:    ;;#ASMEND13949; GFX90A-NEXT:    s_mov_b64 s[6:7], 013950; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v013951; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff13952; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v013953; GFX90A-NEXT:    s_mov_b32 s9, 0x706030213954; GFX90A-NEXT:  .LBB260_1: ; %atomicrmw.start13955; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=113956; GFX90A-NEXT:    s_waitcnt vmcnt(0)13957; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v113958; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v113959; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v313960; GFX90A-NEXT:    v_add_f32_e32 v5, v5, v413961; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 113962; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 113963; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v013964; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v513965; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s813966; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s813967; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v513968; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v013969; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]13970; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc13971; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s913972; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc13973; GFX90A-NEXT:    s_waitcnt vmcnt(0)13974; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v113975; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]13976; GFX90A-NEXT:    v_mov_b32_e32 v1, v013977; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]13978; GFX90A-NEXT:    s_cbranch_execnz .LBB260_113979; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end13980; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]13981; GFX90A-NEXT:    ;;#ASMSTART13982; GFX90A-NEXT:    ; use v013983; GFX90A-NEXT:    ;;#ASMEND13984; GFX90A-NEXT:    s_setpc_b64 s[30:31]13985;13986; GFX950-LABEL: global_atomic_fadd_v2bf16_saddr_ret_av_av:13987; GFX950:       ; %bb.0:13988; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13989; GFX950-NEXT:    v_mov_b32_e32 v0, 013990; GFX950-NEXT:    ;;#ASMSTART13991; GFX950-NEXT:    ; def v113992; GFX950-NEXT:    ;;#ASMEND13993; GFX950-NEXT:    global_atomic_pk_add_bf16 v0, v0, v1, s[0:1] offset:40 sc013994; GFX950-NEXT:    s_waitcnt vmcnt(0)13995; GFX950-NEXT:    ;;#ASMSTART13996; GFX950-NEXT:    ; use v013997; GFX950-NEXT:    ;;#ASMEND13998; GFX950-NEXT:    s_setpc_b64 s[30:31]13999  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014000  %data = call <2 x bfloat> asm "; def $0", "=^VA"()14001  %result = atomicrmw fadd ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014002  call void asm "; use $0", "^VA"(<2 x bfloat> %result)14003  ret void14004}14005 14006define void @global_atomic_fsub_v2bf16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {14007; GFX90A-LABEL: global_atomic_fsub_v2bf16_saddr_ret_a_a:14008; GFX90A:       ; %bb.0:14009; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14010; GFX90A-NEXT:    v_mov_b32_e32 v2, 014011; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014012; GFX90A-NEXT:    ;;#ASMSTART14013; GFX90A-NEXT:    ; def a014014; GFX90A-NEXT:    ;;#ASMEND14015; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a014016; GFX90A-NEXT:    s_mov_b64 s[6:7], 014017; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014018; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14019; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v014020; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214021; GFX90A-NEXT:  .LBB261_1: ; %atomicrmw.start14022; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114023; GFX90A-NEXT:    s_waitcnt vmcnt(0)14024; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114025; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v114026; GFX90A-NEXT:    v_sub_f32_e32 v0, v0, v314027; GFX90A-NEXT:    v_sub_f32_e32 v5, v5, v414028; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 114029; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 114030; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v014031; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v514032; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s814033; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s814034; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v514035; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014036; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]14037; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc14038; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s914039; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14040; GFX90A-NEXT:    s_waitcnt vmcnt(0)14041; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114042; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14043; GFX90A-NEXT:    v_mov_b32_e32 v1, v014044; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14045; GFX90A-NEXT:    s_cbranch_execnz .LBB261_114046; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14047; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14048; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v014049; GFX90A-NEXT:    ;;#ASMSTART14050; GFX90A-NEXT:    ; use a014051; GFX90A-NEXT:    ;;#ASMEND14052; GFX90A-NEXT:    s_setpc_b64 s[30:31]14053;14054; GFX950-LABEL: global_atomic_fsub_v2bf16_saddr_ret_a_a:14055; GFX950:       ; %bb.0:14056; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14057; GFX950-NEXT:    v_mov_b32_e32 v2, 014058; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014059; GFX950-NEXT:    ;;#ASMSTART14060; GFX950-NEXT:    ; def a014061; GFX950-NEXT:    ;;#ASMEND14062; GFX950-NEXT:    s_mov_b64 s[2:3], 014063; GFX950-NEXT:    v_accvgpr_read_b32 v0, a014064; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014065; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014066; GFX950-NEXT:  .LBB261_1: ; %atomicrmw.start14067; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114068; GFX950-NEXT:    s_waitcnt vmcnt(0)14069; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114070; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114071; GFX950-NEXT:    v_sub_f32_e32 v0, v0, v314072; GFX950-NEXT:    v_sub_f32_e32 v5, v5, v414073; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014074; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014075; GFX950-NEXT:    s_waitcnt vmcnt(0)14076; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114077; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14078; GFX950-NEXT:    v_mov_b32_e32 v1, v014079; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14080; GFX950-NEXT:    s_cbranch_execnz .LBB261_114081; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14082; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14083; GFX950-NEXT:    v_accvgpr_write_b32 a0, v014084; GFX950-NEXT:    ;;#ASMSTART14085; GFX950-NEXT:    ; use a014086; GFX950-NEXT:    ;;#ASMEND14087; GFX950-NEXT:    s_setpc_b64 s[30:31]14088  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014089  %data = call <2 x bfloat> asm "; def $0", "=a"()14090  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014091  call void asm "; use $0", "a"(<2 x bfloat> %result)14092  ret void14093}14094 14095define void @global_atomic_fsub_v2bf16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {14096; GFX90A-LABEL: global_atomic_fsub_v2bf16_saddr_ret_av_av:14097; GFX90A:       ; %bb.0:14098; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14099; GFX90A-NEXT:    v_mov_b32_e32 v2, 014100; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014101; GFX90A-NEXT:    ;;#ASMSTART14102; GFX90A-NEXT:    ; def v014103; GFX90A-NEXT:    ;;#ASMEND14104; GFX90A-NEXT:    s_mov_b64 s[6:7], 014105; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014106; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14107; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v014108; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214109; GFX90A-NEXT:  .LBB262_1: ; %atomicrmw.start14110; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114111; GFX90A-NEXT:    s_waitcnt vmcnt(0)14112; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114113; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v114114; GFX90A-NEXT:    v_sub_f32_e32 v0, v0, v314115; GFX90A-NEXT:    v_sub_f32_e32 v5, v5, v414116; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 114117; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 114118; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v014119; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v514120; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s814121; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s814122; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v514123; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014124; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]14125; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc14126; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s914127; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14128; GFX90A-NEXT:    s_waitcnt vmcnt(0)14129; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114130; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14131; GFX90A-NEXT:    v_mov_b32_e32 v1, v014132; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14133; GFX90A-NEXT:    s_cbranch_execnz .LBB262_114134; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14135; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14136; GFX90A-NEXT:    ;;#ASMSTART14137; GFX90A-NEXT:    ; use v014138; GFX90A-NEXT:    ;;#ASMEND14139; GFX90A-NEXT:    s_setpc_b64 s[30:31]14140;14141; GFX950-LABEL: global_atomic_fsub_v2bf16_saddr_ret_av_av:14142; GFX950:       ; %bb.0:14143; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14144; GFX950-NEXT:    v_mov_b32_e32 v2, 014145; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014146; GFX950-NEXT:    ;;#ASMSTART14147; GFX950-NEXT:    ; def v014148; GFX950-NEXT:    ;;#ASMEND14149; GFX950-NEXT:    s_mov_b64 s[2:3], 014150; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014151; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014152; GFX950-NEXT:  .LBB262_1: ; %atomicrmw.start14153; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114154; GFX950-NEXT:    s_waitcnt vmcnt(0)14155; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114156; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114157; GFX950-NEXT:    v_sub_f32_e32 v0, v0, v314158; GFX950-NEXT:    v_sub_f32_e32 v5, v5, v414159; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014160; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014161; GFX950-NEXT:    s_waitcnt vmcnt(0)14162; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114163; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14164; GFX950-NEXT:    v_mov_b32_e32 v1, v014165; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14166; GFX950-NEXT:    s_cbranch_execnz .LBB262_114167; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14168; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14169; GFX950-NEXT:    ;;#ASMSTART14170; GFX950-NEXT:    ; use v014171; GFX950-NEXT:    ;;#ASMEND14172; GFX950-NEXT:    s_setpc_b64 s[30:31]14173  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014174  %data = call <2 x bfloat> asm "; def $0", "=^VA"()14175  %result = atomicrmw fsub ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014176  call void asm "; use $0", "^VA"(<2 x bfloat> %result)14177  ret void14178}14179 14180define void @global_atomic_fmax_v2bf16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {14181; GFX90A-LABEL: global_atomic_fmax_v2bf16_saddr_ret_a_a:14182; GFX90A:       ; %bb.0:14183; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14184; GFX90A-NEXT:    v_mov_b32_e32 v2, 014185; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014186; GFX90A-NEXT:    ;;#ASMSTART14187; GFX90A-NEXT:    ; def a014188; GFX90A-NEXT:    ;;#ASMEND14189; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a014190; GFX90A-NEXT:    s_mov_b64 s[6:7], 014191; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014192; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14193; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v014194; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214195; GFX90A-NEXT:  .LBB263_1: ; %atomicrmw.start14196; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114197; GFX90A-NEXT:    s_waitcnt vmcnt(0)14198; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114199; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v114200; GFX90A-NEXT:    v_max_f32_e32 v0, v0, v314201; GFX90A-NEXT:    v_max_f32_e32 v5, v5, v414202; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 114203; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 114204; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v014205; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v514206; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s814207; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s814208; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v514209; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014210; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]14211; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc14212; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s914213; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14214; GFX90A-NEXT:    s_waitcnt vmcnt(0)14215; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114216; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14217; GFX90A-NEXT:    v_mov_b32_e32 v1, v014218; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14219; GFX90A-NEXT:    s_cbranch_execnz .LBB263_114220; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14221; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14222; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v014223; GFX90A-NEXT:    ;;#ASMSTART14224; GFX90A-NEXT:    ; use a014225; GFX90A-NEXT:    ;;#ASMEND14226; GFX90A-NEXT:    s_setpc_b64 s[30:31]14227;14228; GFX950-LABEL: global_atomic_fmax_v2bf16_saddr_ret_a_a:14229; GFX950:       ; %bb.0:14230; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14231; GFX950-NEXT:    v_mov_b32_e32 v2, 014232; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014233; GFX950-NEXT:    ;;#ASMSTART14234; GFX950-NEXT:    ; def a014235; GFX950-NEXT:    ;;#ASMEND14236; GFX950-NEXT:    s_mov_b64 s[2:3], 014237; GFX950-NEXT:    v_accvgpr_read_b32 v0, a014238; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014239; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014240; GFX950-NEXT:  .LBB263_1: ; %atomicrmw.start14241; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114242; GFX950-NEXT:    s_waitcnt vmcnt(0)14243; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114244; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114245; GFX950-NEXT:    v_max_f32_e32 v0, v0, v314246; GFX950-NEXT:    v_max_f32_e32 v5, v5, v414247; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014248; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014249; GFX950-NEXT:    s_waitcnt vmcnt(0)14250; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114251; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14252; GFX950-NEXT:    v_mov_b32_e32 v1, v014253; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14254; GFX950-NEXT:    s_cbranch_execnz .LBB263_114255; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14256; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14257; GFX950-NEXT:    v_accvgpr_write_b32 a0, v014258; GFX950-NEXT:    ;;#ASMSTART14259; GFX950-NEXT:    ; use a014260; GFX950-NEXT:    ;;#ASMEND14261; GFX950-NEXT:    s_setpc_b64 s[30:31]14262  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014263  %data = call <2 x bfloat> asm "; def $0", "=a"()14264  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014265  call void asm "; use $0", "a"(<2 x bfloat> %result)14266  ret void14267}14268 14269define void @global_atomic_fmax_v2bf16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {14270; GFX90A-LABEL: global_atomic_fmax_v2bf16_saddr_ret_av_av:14271; GFX90A:       ; %bb.0:14272; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14273; GFX90A-NEXT:    v_mov_b32_e32 v2, 014274; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014275; GFX90A-NEXT:    ;;#ASMSTART14276; GFX90A-NEXT:    ; def v014277; GFX90A-NEXT:    ;;#ASMEND14278; GFX90A-NEXT:    s_mov_b64 s[6:7], 014279; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014280; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14281; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v014282; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214283; GFX90A-NEXT:  .LBB264_1: ; %atomicrmw.start14284; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114285; GFX90A-NEXT:    s_waitcnt vmcnt(0)14286; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114287; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v114288; GFX90A-NEXT:    v_max_f32_e32 v0, v0, v314289; GFX90A-NEXT:    v_max_f32_e32 v5, v5, v414290; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 114291; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 114292; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v014293; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v514294; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s814295; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s814296; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v514297; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014298; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]14299; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc14300; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s914301; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14302; GFX90A-NEXT:    s_waitcnt vmcnt(0)14303; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114304; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14305; GFX90A-NEXT:    v_mov_b32_e32 v1, v014306; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14307; GFX90A-NEXT:    s_cbranch_execnz .LBB264_114308; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14309; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14310; GFX90A-NEXT:    ;;#ASMSTART14311; GFX90A-NEXT:    ; use v014312; GFX90A-NEXT:    ;;#ASMEND14313; GFX90A-NEXT:    s_setpc_b64 s[30:31]14314;14315; GFX950-LABEL: global_atomic_fmax_v2bf16_saddr_ret_av_av:14316; GFX950:       ; %bb.0:14317; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14318; GFX950-NEXT:    v_mov_b32_e32 v2, 014319; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014320; GFX950-NEXT:    ;;#ASMSTART14321; GFX950-NEXT:    ; def v014322; GFX950-NEXT:    ;;#ASMEND14323; GFX950-NEXT:    s_mov_b64 s[2:3], 014324; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014325; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014326; GFX950-NEXT:  .LBB264_1: ; %atomicrmw.start14327; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114328; GFX950-NEXT:    s_waitcnt vmcnt(0)14329; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114330; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114331; GFX950-NEXT:    v_max_f32_e32 v0, v0, v314332; GFX950-NEXT:    v_max_f32_e32 v5, v5, v414333; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014334; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014335; GFX950-NEXT:    s_waitcnt vmcnt(0)14336; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114337; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14338; GFX950-NEXT:    v_mov_b32_e32 v1, v014339; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14340; GFX950-NEXT:    s_cbranch_execnz .LBB264_114341; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14342; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14343; GFX950-NEXT:    ;;#ASMSTART14344; GFX950-NEXT:    ; use v014345; GFX950-NEXT:    ;;#ASMEND14346; GFX950-NEXT:    s_setpc_b64 s[30:31]14347  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014348  %data = call <2 x bfloat> asm "; def $0", "=^VA"()14349  %result = atomicrmw fmax ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014350  call void asm "; use $0", "^VA"(<2 x bfloat> %result)14351  ret void14352}14353 14354define void @global_atomic_fmin_v2bf16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {14355; GFX90A-LABEL: global_atomic_fmin_v2bf16_saddr_ret_a_a:14356; GFX90A:       ; %bb.0:14357; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14358; GFX90A-NEXT:    v_mov_b32_e32 v2, 014359; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014360; GFX90A-NEXT:    ;;#ASMSTART14361; GFX90A-NEXT:    ; def a014362; GFX90A-NEXT:    ;;#ASMEND14363; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a014364; GFX90A-NEXT:    s_mov_b64 s[6:7], 014365; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014366; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14367; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v014368; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214369; GFX90A-NEXT:  .LBB265_1: ; %atomicrmw.start14370; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114371; GFX90A-NEXT:    s_waitcnt vmcnt(0)14372; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114373; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v114374; GFX90A-NEXT:    v_min_f32_e32 v0, v0, v314375; GFX90A-NEXT:    v_min_f32_e32 v5, v5, v414376; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 114377; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 114378; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v014379; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v514380; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s814381; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s814382; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v514383; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014384; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]14385; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc14386; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s914387; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14388; GFX90A-NEXT:    s_waitcnt vmcnt(0)14389; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114390; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14391; GFX90A-NEXT:    v_mov_b32_e32 v1, v014392; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14393; GFX90A-NEXT:    s_cbranch_execnz .LBB265_114394; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14395; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14396; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v014397; GFX90A-NEXT:    ;;#ASMSTART14398; GFX90A-NEXT:    ; use a014399; GFX90A-NEXT:    ;;#ASMEND14400; GFX90A-NEXT:    s_setpc_b64 s[30:31]14401;14402; GFX950-LABEL: global_atomic_fmin_v2bf16_saddr_ret_a_a:14403; GFX950:       ; %bb.0:14404; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14405; GFX950-NEXT:    v_mov_b32_e32 v2, 014406; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014407; GFX950-NEXT:    ;;#ASMSTART14408; GFX950-NEXT:    ; def a014409; GFX950-NEXT:    ;;#ASMEND14410; GFX950-NEXT:    s_mov_b64 s[2:3], 014411; GFX950-NEXT:    v_accvgpr_read_b32 v0, a014412; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014413; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014414; GFX950-NEXT:  .LBB265_1: ; %atomicrmw.start14415; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114416; GFX950-NEXT:    s_waitcnt vmcnt(0)14417; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114418; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114419; GFX950-NEXT:    v_min_f32_e32 v0, v0, v314420; GFX950-NEXT:    v_min_f32_e32 v5, v5, v414421; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014422; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014423; GFX950-NEXT:    s_waitcnt vmcnt(0)14424; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114425; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14426; GFX950-NEXT:    v_mov_b32_e32 v1, v014427; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14428; GFX950-NEXT:    s_cbranch_execnz .LBB265_114429; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14430; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14431; GFX950-NEXT:    v_accvgpr_write_b32 a0, v014432; GFX950-NEXT:    ;;#ASMSTART14433; GFX950-NEXT:    ; use a014434; GFX950-NEXT:    ;;#ASMEND14435; GFX950-NEXT:    s_setpc_b64 s[30:31]14436  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014437  %data = call <2 x bfloat> asm "; def $0", "=a"()14438  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014439  call void asm "; use $0", "a"(<2 x bfloat> %result)14440  ret void14441}14442 14443define void @global_atomic_fmin_v2bf16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {14444; GFX90A-LABEL: global_atomic_fmin_v2bf16_saddr_ret_av_av:14445; GFX90A:       ; %bb.0:14446; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14447; GFX90A-NEXT:    v_mov_b32_e32 v2, 014448; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014449; GFX90A-NEXT:    ;;#ASMSTART14450; GFX90A-NEXT:    ; def v014451; GFX90A-NEXT:    ;;#ASMEND14452; GFX90A-NEXT:    s_mov_b64 s[6:7], 014453; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014454; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14455; GFX90A-NEXT:    v_and_b32_e32 v4, 0xffff0000, v014456; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214457; GFX90A-NEXT:  .LBB266_1: ; %atomicrmw.start14458; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114459; GFX90A-NEXT:    s_waitcnt vmcnt(0)14460; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114461; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v114462; GFX90A-NEXT:    v_min_f32_e32 v0, v0, v314463; GFX90A-NEXT:    v_min_f32_e32 v5, v5, v414464; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 114465; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 114466; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v014467; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v514468; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s814469; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s814470; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v514471; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014472; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]14473; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc14474; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s914475; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14476; GFX90A-NEXT:    s_waitcnt vmcnt(0)14477; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114478; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14479; GFX90A-NEXT:    v_mov_b32_e32 v1, v014480; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14481; GFX90A-NEXT:    s_cbranch_execnz .LBB266_114482; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14483; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14484; GFX90A-NEXT:    ;;#ASMSTART14485; GFX90A-NEXT:    ; use v014486; GFX90A-NEXT:    ;;#ASMEND14487; GFX90A-NEXT:    s_setpc_b64 s[30:31]14488;14489; GFX950-LABEL: global_atomic_fmin_v2bf16_saddr_ret_av_av:14490; GFX950:       ; %bb.0:14491; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14492; GFX950-NEXT:    v_mov_b32_e32 v2, 014493; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014494; GFX950-NEXT:    ;;#ASMSTART14495; GFX950-NEXT:    ; def v014496; GFX950-NEXT:    ;;#ASMEND14497; GFX950-NEXT:    s_mov_b64 s[2:3], 014498; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014499; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014500; GFX950-NEXT:  .LBB266_1: ; %atomicrmw.start14501; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114502; GFX950-NEXT:    s_waitcnt vmcnt(0)14503; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114504; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114505; GFX950-NEXT:    v_min_f32_e32 v0, v0, v314506; GFX950-NEXT:    v_min_f32_e32 v5, v5, v414507; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014508; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014509; GFX950-NEXT:    s_waitcnt vmcnt(0)14510; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114511; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14512; GFX950-NEXT:    v_mov_b32_e32 v1, v014513; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14514; GFX950-NEXT:    s_cbranch_execnz .LBB266_114515; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14516; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14517; GFX950-NEXT:    ;;#ASMSTART14518; GFX950-NEXT:    ; use v014519; GFX950-NEXT:    ;;#ASMEND14520; GFX950-NEXT:    s_setpc_b64 s[30:31]14521  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014522  %data = call <2 x bfloat> asm "; def $0", "=^VA"()14523  %result = atomicrmw fmin ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014524  call void asm "; use $0", "^VA"(<2 x bfloat> %result)14525  ret void14526}14527 14528define void @global_atomic_fmaximum_v2bf16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {14529; GFX90A-LABEL: global_atomic_fmaximum_v2bf16_saddr_ret_a_a:14530; GFX90A:       ; %bb.0:14531; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14532; GFX90A-NEXT:    v_mov_b32_e32 v2, 014533; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014534; GFX90A-NEXT:    ;;#ASMSTART14535; GFX90A-NEXT:    ; def a014536; GFX90A-NEXT:    ;;#ASMEND14537; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a014538; GFX90A-NEXT:    s_mov_b64 s[6:7], 014539; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014540; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000014541; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14542; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v014543; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214544; GFX90A-NEXT:  .LBB267_1: ; %atomicrmw.start14545; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114546; GFX90A-NEXT:    s_waitcnt vmcnt(0)14547; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114548; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v114549; GFX90A-NEXT:    v_max_f32_e32 v7, v0, v314550; GFX90A-NEXT:    v_max_f32_e32 v8, v6, v514551; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v6, v514552; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v0, v314553; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v4, v7, s[4:5]14554; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v4, v8, vcc14555; GFX90A-NEXT:    v_bfe_u32 v7, v0, 16, 114556; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 114557; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v014558; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v614559; GFX90A-NEXT:    v_add3_u32 v7, v7, v0, s814560; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s814561; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v614562; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014563; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v7, v8, s[4:5]14564; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc14565; GFX90A-NEXT:    v_perm_b32 v0, v6, v0, s914566; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14567; GFX90A-NEXT:    s_waitcnt vmcnt(0)14568; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114569; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14570; GFX90A-NEXT:    v_mov_b32_e32 v1, v014571; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14572; GFX90A-NEXT:    s_cbranch_execnz .LBB267_114573; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14574; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14575; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v014576; GFX90A-NEXT:    ;;#ASMSTART14577; GFX90A-NEXT:    ; use a014578; GFX90A-NEXT:    ;;#ASMEND14579; GFX90A-NEXT:    s_setpc_b64 s[30:31]14580;14581; GFX950-LABEL: global_atomic_fmaximum_v2bf16_saddr_ret_a_a:14582; GFX950:       ; %bb.0:14583; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14584; GFX950-NEXT:    v_mov_b32_e32 v2, 014585; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014586; GFX950-NEXT:    ;;#ASMSTART14587; GFX950-NEXT:    ; def a014588; GFX950-NEXT:    ;;#ASMEND14589; GFX950-NEXT:    s_mov_b64 s[2:3], 014590; GFX950-NEXT:    v_accvgpr_read_b32 v0, a014591; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014592; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014593; GFX950-NEXT:  .LBB267_1: ; %atomicrmw.start14594; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114595; GFX950-NEXT:    s_waitcnt vmcnt(0)14596; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114597; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114598; GFX950-NEXT:    v_maximum3_f32 v0, v0, v3, v314599; GFX950-NEXT:    v_maximum3_f32 v5, v5, v4, v414600; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014601; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014602; GFX950-NEXT:    s_waitcnt vmcnt(0)14603; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114604; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14605; GFX950-NEXT:    v_mov_b32_e32 v1, v014606; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14607; GFX950-NEXT:    s_cbranch_execnz .LBB267_114608; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14609; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14610; GFX950-NEXT:    v_accvgpr_write_b32 a0, v014611; GFX950-NEXT:    ;;#ASMSTART14612; GFX950-NEXT:    ; use a014613; GFX950-NEXT:    ;;#ASMEND14614; GFX950-NEXT:    s_setpc_b64 s[30:31]14615  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014616  %data = call <2 x bfloat> asm "; def $0", "=a"()14617  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014618  call void asm "; use $0", "a"(<2 x bfloat> %result)14619  ret void14620}14621 14622define void @global_atomic_fmaximum_v2bf16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {14623; GFX90A-LABEL: global_atomic_fmaximum_v2bf16_saddr_ret_av_av:14624; GFX90A:       ; %bb.0:14625; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14626; GFX90A-NEXT:    v_mov_b32_e32 v2, 014627; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014628; GFX90A-NEXT:    ;;#ASMSTART14629; GFX90A-NEXT:    ; def v014630; GFX90A-NEXT:    ;;#ASMEND14631; GFX90A-NEXT:    s_mov_b64 s[6:7], 014632; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014633; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000014634; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14635; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v014636; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214637; GFX90A-NEXT:  .LBB268_1: ; %atomicrmw.start14638; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114639; GFX90A-NEXT:    s_waitcnt vmcnt(0)14640; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114641; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v114642; GFX90A-NEXT:    v_max_f32_e32 v7, v0, v314643; GFX90A-NEXT:    v_max_f32_e32 v8, v6, v514644; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v6, v514645; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v0, v314646; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v4, v7, s[4:5]14647; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v4, v8, vcc14648; GFX90A-NEXT:    v_bfe_u32 v7, v0, 16, 114649; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 114650; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v014651; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v614652; GFX90A-NEXT:    v_add3_u32 v7, v7, v0, s814653; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s814654; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v614655; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014656; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v7, v8, s[4:5]14657; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc14658; GFX90A-NEXT:    v_perm_b32 v0, v6, v0, s914659; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14660; GFX90A-NEXT:    s_waitcnt vmcnt(0)14661; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114662; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14663; GFX90A-NEXT:    v_mov_b32_e32 v1, v014664; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14665; GFX90A-NEXT:    s_cbranch_execnz .LBB268_114666; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14667; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14668; GFX90A-NEXT:    ;;#ASMSTART14669; GFX90A-NEXT:    ; use v014670; GFX90A-NEXT:    ;;#ASMEND14671; GFX90A-NEXT:    s_setpc_b64 s[30:31]14672;14673; GFX950-LABEL: global_atomic_fmaximum_v2bf16_saddr_ret_av_av:14674; GFX950:       ; %bb.0:14675; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14676; GFX950-NEXT:    v_mov_b32_e32 v2, 014677; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014678; GFX950-NEXT:    ;;#ASMSTART14679; GFX950-NEXT:    ; def v014680; GFX950-NEXT:    ;;#ASMEND14681; GFX950-NEXT:    s_mov_b64 s[2:3], 014682; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014683; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014684; GFX950-NEXT:  .LBB268_1: ; %atomicrmw.start14685; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114686; GFX950-NEXT:    s_waitcnt vmcnt(0)14687; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114688; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114689; GFX950-NEXT:    v_maximum3_f32 v0, v0, v3, v314690; GFX950-NEXT:    v_maximum3_f32 v5, v5, v4, v414691; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014692; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014693; GFX950-NEXT:    s_waitcnt vmcnt(0)14694; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114695; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14696; GFX950-NEXT:    v_mov_b32_e32 v1, v014697; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14698; GFX950-NEXT:    s_cbranch_execnz .LBB268_114699; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14700; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14701; GFX950-NEXT:    ;;#ASMSTART14702; GFX950-NEXT:    ; use v014703; GFX950-NEXT:    ;;#ASMEND14704; GFX950-NEXT:    s_setpc_b64 s[30:31]14705  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014706  %data = call <2 x bfloat> asm "; def $0", "=^VA"()14707  %result = atomicrmw fmaximum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014708  call void asm "; use $0", "^VA"(<2 x bfloat> %result)14709  ret void14710}14711 14712define void @global_atomic_fminimum_v2bf16_saddr_ret_a_a(ptr addrspace(1) inreg %ptr) #0 {14713; GFX90A-LABEL: global_atomic_fminimum_v2bf16_saddr_ret_a_a:14714; GFX90A:       ; %bb.0:14715; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14716; GFX90A-NEXT:    v_mov_b32_e32 v2, 014717; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014718; GFX90A-NEXT:    ;;#ASMSTART14719; GFX90A-NEXT:    ; def a014720; GFX90A-NEXT:    ;;#ASMEND14721; GFX90A-NEXT:    v_accvgpr_read_b32 v0, a014722; GFX90A-NEXT:    s_mov_b64 s[6:7], 014723; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014724; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000014725; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14726; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v014727; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214728; GFX90A-NEXT:  .LBB269_1: ; %atomicrmw.start14729; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114730; GFX90A-NEXT:    s_waitcnt vmcnt(0)14731; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114732; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v114733; GFX90A-NEXT:    v_min_f32_e32 v7, v0, v314734; GFX90A-NEXT:    v_min_f32_e32 v8, v6, v514735; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v6, v514736; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v0, v314737; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v4, v7, s[4:5]14738; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v4, v8, vcc14739; GFX90A-NEXT:    v_bfe_u32 v7, v0, 16, 114740; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 114741; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v014742; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v614743; GFX90A-NEXT:    v_add3_u32 v7, v7, v0, s814744; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s814745; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v614746; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014747; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v7, v8, s[4:5]14748; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc14749; GFX90A-NEXT:    v_perm_b32 v0, v6, v0, s914750; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14751; GFX90A-NEXT:    s_waitcnt vmcnt(0)14752; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114753; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14754; GFX90A-NEXT:    v_mov_b32_e32 v1, v014755; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14756; GFX90A-NEXT:    s_cbranch_execnz .LBB269_114757; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14758; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14759; GFX90A-NEXT:    v_accvgpr_write_b32 a0, v014760; GFX90A-NEXT:    ;;#ASMSTART14761; GFX90A-NEXT:    ; use a014762; GFX90A-NEXT:    ;;#ASMEND14763; GFX90A-NEXT:    s_setpc_b64 s[30:31]14764;14765; GFX950-LABEL: global_atomic_fminimum_v2bf16_saddr_ret_a_a:14766; GFX950:       ; %bb.0:14767; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14768; GFX950-NEXT:    v_mov_b32_e32 v2, 014769; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014770; GFX950-NEXT:    ;;#ASMSTART14771; GFX950-NEXT:    ; def a014772; GFX950-NEXT:    ;;#ASMEND14773; GFX950-NEXT:    s_mov_b64 s[2:3], 014774; GFX950-NEXT:    v_accvgpr_read_b32 v0, a014775; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014776; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014777; GFX950-NEXT:  .LBB269_1: ; %atomicrmw.start14778; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114779; GFX950-NEXT:    s_waitcnt vmcnt(0)14780; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114781; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114782; GFX950-NEXT:    v_minimum3_f32 v0, v0, v3, v314783; GFX950-NEXT:    v_minimum3_f32 v5, v5, v4, v414784; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014785; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014786; GFX950-NEXT:    s_waitcnt vmcnt(0)14787; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114788; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14789; GFX950-NEXT:    v_mov_b32_e32 v1, v014790; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14791; GFX950-NEXT:    s_cbranch_execnz .LBB269_114792; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14793; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14794; GFX950-NEXT:    v_accvgpr_write_b32 a0, v014795; GFX950-NEXT:    ;;#ASMSTART14796; GFX950-NEXT:    ; use a014797; GFX950-NEXT:    ;;#ASMEND14798; GFX950-NEXT:    s_setpc_b64 s[30:31]14799  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014800  %data = call <2 x bfloat> asm "; def $0", "=a"()14801  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014802  call void asm "; use $0", "a"(<2 x bfloat> %result)14803  ret void14804}14805 14806define void @global_atomic_fminimum_v2bf16_saddr_ret_av_av(ptr addrspace(1) inreg %ptr) #0 {14807; GFX90A-LABEL: global_atomic_fminimum_v2bf16_saddr_ret_av_av:14808; GFX90A:       ; %bb.0:14809; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14810; GFX90A-NEXT:    v_mov_b32_e32 v2, 014811; GFX90A-NEXT:    global_load_dword v1, v2, s[16:17] offset:4014812; GFX90A-NEXT:    ;;#ASMSTART14813; GFX90A-NEXT:    ; def v014814; GFX90A-NEXT:    ;;#ASMEND14815; GFX90A-NEXT:    s_mov_b64 s[6:7], 014816; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v014817; GFX90A-NEXT:    v_mov_b32_e32 v4, 0x7fc0000014818; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff14819; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v014820; GFX90A-NEXT:    s_mov_b32 s9, 0x706030214821; GFX90A-NEXT:  .LBB270_1: ; %atomicrmw.start14822; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=114823; GFX90A-NEXT:    s_waitcnt vmcnt(0)14824; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v114825; GFX90A-NEXT:    v_and_b32_e32 v6, 0xffff0000, v114826; GFX90A-NEXT:    v_min_f32_e32 v7, v0, v314827; GFX90A-NEXT:    v_min_f32_e32 v8, v6, v514828; GFX90A-NEXT:    v_cmp_o_f32_e32 vcc, v6, v514829; GFX90A-NEXT:    v_cmp_o_f32_e64 s[4:5], v0, v314830; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v4, v7, s[4:5]14831; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v4, v8, vcc14832; GFX90A-NEXT:    v_bfe_u32 v7, v0, 16, 114833; GFX90A-NEXT:    v_bfe_u32 v9, v6, 16, 114834; GFX90A-NEXT:    v_or_b32_e32 v8, 0x400000, v014835; GFX90A-NEXT:    v_or_b32_e32 v10, 0x400000, v614836; GFX90A-NEXT:    v_add3_u32 v7, v7, v0, s814837; GFX90A-NEXT:    v_add3_u32 v9, v9, v6, s814838; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v6, v614839; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v014840; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v7, v8, s[4:5]14841; GFX90A-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc14842; GFX90A-NEXT:    v_perm_b32 v0, v6, v0, s914843; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[16:17] offset:40 glc14844; GFX90A-NEXT:    s_waitcnt vmcnt(0)14845; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114846; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]14847; GFX90A-NEXT:    v_mov_b32_e32 v1, v014848; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]14849; GFX90A-NEXT:    s_cbranch_execnz .LBB270_114850; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end14851; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]14852; GFX90A-NEXT:    ;;#ASMSTART14853; GFX90A-NEXT:    ; use v014854; GFX90A-NEXT:    ;;#ASMEND14855; GFX90A-NEXT:    s_setpc_b64 s[30:31]14856;14857; GFX950-LABEL: global_atomic_fminimum_v2bf16_saddr_ret_av_av:14858; GFX950:       ; %bb.0:14859; GFX950-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14860; GFX950-NEXT:    v_mov_b32_e32 v2, 014861; GFX950-NEXT:    global_load_dword v1, v2, s[0:1] offset:4014862; GFX950-NEXT:    ;;#ASMSTART14863; GFX950-NEXT:    ; def v014864; GFX950-NEXT:    ;;#ASMEND14865; GFX950-NEXT:    s_mov_b64 s[2:3], 014866; GFX950-NEXT:    v_and_b32_e32 v3, 0xffff0000, v014867; GFX950-NEXT:    v_lshlrev_b32_e32 v4, 16, v014868; GFX950-NEXT:  .LBB270_1: ; %atomicrmw.start14869; GFX950-NEXT:    ; =>This Inner Loop Header: Depth=114870; GFX950-NEXT:    s_waitcnt vmcnt(0)14871; GFX950-NEXT:    v_and_b32_e32 v0, 0xffff0000, v114872; GFX950-NEXT:    v_lshlrev_b32_e32 v5, 16, v114873; GFX950-NEXT:    v_minimum3_f32 v0, v0, v3, v314874; GFX950-NEXT:    v_minimum3_f32 v5, v5, v4, v414875; GFX950-NEXT:    v_cvt_pk_bf16_f32 v0, v5, v014876; GFX950-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] offset:40 sc014877; GFX950-NEXT:    s_waitcnt vmcnt(0)14878; GFX950-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v114879; GFX950-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]14880; GFX950-NEXT:    v_mov_b32_e32 v1, v014881; GFX950-NEXT:    s_andn2_b64 exec, exec, s[2:3]14882; GFX950-NEXT:    s_cbranch_execnz .LBB270_114883; GFX950-NEXT:  ; %bb.2: ; %atomicrmw.end14884; GFX950-NEXT:    s_or_b64 exec, exec, s[2:3]14885; GFX950-NEXT:    ;;#ASMSTART14886; GFX950-NEXT:    ; use v014887; GFX950-NEXT:    ;;#ASMEND14888; GFX950-NEXT:    s_setpc_b64 s[30:31]14889  %gep.0 = getelementptr inbounds [512 x <2 x bfloat>], ptr addrspace(1) %ptr, i64 0, i64 1014890  %data = call <2 x bfloat> asm "; def $0", "=^VA"()14891  %result = atomicrmw fminimum ptr addrspace(1) %gep.0, <2 x bfloat> %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !014892  call void asm "; use $0", "^VA"(<2 x bfloat> %result)14893  ret void14894}14895 14896attributes #0 = { nounwind "amdgpu-waves-per-eu"="10,10" }14897 14898!0 = !{}14899 14900;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:14901; CHECK: {{.*}}14902