brintos

brintos / llvm-project-archived public Read only

0
0
Text · 161.8 KiB · d297955 Raw
4031 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s3; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GCN,GFX10 %s4; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX11 %s5; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX12 %s6 7; Test using saddr addressing mode of global_* flat atomic instructions.8 9define amdgpu_ps void @global_xchg_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {10; GFX9-LABEL: global_xchg_saddr_i32_nortn:11; GFX9:       ; %bb.0:12; GFX9-NEXT:    global_atomic_swap v0, v1, s[2:3]13; GFX9-NEXT:    s_waitcnt vmcnt(0)14; GFX9-NEXT:    buffer_wbinvl115; GFX9-NEXT:    s_endpgm16;17; GFX10-LABEL: global_xchg_saddr_i32_nortn:18; GFX10:       ; %bb.0:19; GFX10-NEXT:    global_atomic_swap v0, v1, s[2:3]20; GFX10-NEXT:    s_waitcnt_vscnt null, 0x021; GFX10-NEXT:    buffer_gl1_inv22; GFX10-NEXT:    buffer_gl0_inv23; GFX10-NEXT:    s_endpgm24;25; GFX11-LABEL: global_xchg_saddr_i32_nortn:26; GFX11:       ; %bb.0:27; GFX11-NEXT:    global_atomic_swap_b32 v0, v1, s[2:3]28; GFX11-NEXT:    s_waitcnt_vscnt null, 0x029; GFX11-NEXT:    buffer_gl1_inv30; GFX11-NEXT:    buffer_gl0_inv31; GFX11-NEXT:    s_endpgm32;33; GFX12-LABEL: global_xchg_saddr_i32_nortn:34; GFX12:       ; %bb.0:35; GFX12-NEXT:    global_atomic_swap_b32 v0, v1, s[2:3] scope:SCOPE_DEV36; GFX12-NEXT:    s_wait_storecnt 0x037; GFX12-NEXT:    global_inv scope:SCOPE_DEV38; GFX12-NEXT:    s_endpgm39  %zext.offset = zext i32 %voffset to i6440  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset41  %unused = atomicrmw xchg ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst42  ret void43}44 45; Maximum positive offset on gfx1046define amdgpu_ps void @global_xchg_saddr_i32_nortn_offset_2047(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {47; GFX9-LABEL: global_xchg_saddr_i32_nortn_offset_2047:48; GFX9:       ; %bb.0:49; GFX9-NEXT:    global_atomic_swap v0, v1, s[2:3] offset:204750; GFX9-NEXT:    s_waitcnt vmcnt(0)51; GFX9-NEXT:    buffer_wbinvl152; GFX9-NEXT:    s_endpgm53;54; GFX10-LABEL: global_xchg_saddr_i32_nortn_offset_2047:55; GFX10:       ; %bb.0:56; GFX10-NEXT:    global_atomic_swap v0, v1, s[2:3] offset:204757; GFX10-NEXT:    s_waitcnt_vscnt null, 0x058; GFX10-NEXT:    buffer_gl1_inv59; GFX10-NEXT:    buffer_gl0_inv60; GFX10-NEXT:    s_endpgm61;62; GFX11-LABEL: global_xchg_saddr_i32_nortn_offset_2047:63; GFX11:       ; %bb.0:64; GFX11-NEXT:    global_atomic_swap_b32 v0, v1, s[2:3] offset:204765; GFX11-NEXT:    s_waitcnt_vscnt null, 0x066; GFX11-NEXT:    buffer_gl1_inv67; GFX11-NEXT:    buffer_gl0_inv68; GFX11-NEXT:    s_endpgm69;70; GFX12-LABEL: global_xchg_saddr_i32_nortn_offset_2047:71; GFX12:       ; %bb.0:72; GFX12-NEXT:    global_atomic_swap_b32 v0, v1, s[2:3] offset:2047 scope:SCOPE_DEV73; GFX12-NEXT:    s_wait_storecnt 0x074; GFX12-NEXT:    global_inv scope:SCOPE_DEV75; GFX12-NEXT:    s_endpgm76  %zext.offset = zext i32 %voffset to i6477  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset78  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 204779  %unused = atomicrmw xchg ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst80  ret void81}82 83; Maximum negative offset on gfx1084define amdgpu_ps void @global_xchg_saddr_i32_nortn_offset_neg2048(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {85; GFX9-LABEL: global_xchg_saddr_i32_nortn_offset_neg2048:86; GFX9:       ; %bb.0:87; GFX9-NEXT:    global_atomic_swap v0, v1, s[2:3] offset:-204888; GFX9-NEXT:    s_waitcnt vmcnt(0)89; GFX9-NEXT:    buffer_wbinvl190; GFX9-NEXT:    s_endpgm91;92; GFX10-LABEL: global_xchg_saddr_i32_nortn_offset_neg2048:93; GFX10:       ; %bb.0:94; GFX10-NEXT:    global_atomic_swap v0, v1, s[2:3] offset:-204895; GFX10-NEXT:    s_waitcnt_vscnt null, 0x096; GFX10-NEXT:    buffer_gl1_inv97; GFX10-NEXT:    buffer_gl0_inv98; GFX10-NEXT:    s_endpgm99;100; GFX11-LABEL: global_xchg_saddr_i32_nortn_offset_neg2048:101; GFX11:       ; %bb.0:102; GFX11-NEXT:    global_atomic_swap_b32 v0, v1, s[2:3] offset:-2048103; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0104; GFX11-NEXT:    buffer_gl1_inv105; GFX11-NEXT:    buffer_gl0_inv106; GFX11-NEXT:    s_endpgm107;108; GFX12-LABEL: global_xchg_saddr_i32_nortn_offset_neg2048:109; GFX12:       ; %bb.0:110; GFX12-NEXT:    global_atomic_swap_b32 v0, v1, s[2:3] offset:-2048 scope:SCOPE_DEV111; GFX12-NEXT:    s_wait_storecnt 0x0112; GFX12-NEXT:    global_inv scope:SCOPE_DEV113; GFX12-NEXT:    s_endpgm114  %zext.offset = zext i32 %voffset to i64115  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset116  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -2048117  %unused = atomicrmw xchg ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst118  ret void119}120 121define amdgpu_ps float @global_xchg_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {122; GFX9-LABEL: global_xchg_saddr_i32_rtn:123; GFX9:       ; %bb.0:124; GFX9-NEXT:    global_atomic_swap v0, v0, v1, s[2:3] glc125; GFX9-NEXT:    s_waitcnt vmcnt(0)126; GFX9-NEXT:    buffer_wbinvl1127; GFX9-NEXT:    ; return to shader part epilog128;129; GFX10-LABEL: global_xchg_saddr_i32_rtn:130; GFX10:       ; %bb.0:131; GFX10-NEXT:    global_atomic_swap v0, v0, v1, s[2:3] glc132; GFX10-NEXT:    s_waitcnt vmcnt(0)133; GFX10-NEXT:    buffer_gl1_inv134; GFX10-NEXT:    buffer_gl0_inv135; GFX10-NEXT:    ; return to shader part epilog136;137; GFX11-LABEL: global_xchg_saddr_i32_rtn:138; GFX11:       ; %bb.0:139; GFX11-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[2:3] glc140; GFX11-NEXT:    s_waitcnt vmcnt(0)141; GFX11-NEXT:    buffer_gl1_inv142; GFX11-NEXT:    buffer_gl0_inv143; GFX11-NEXT:    ; return to shader part epilog144;145; GFX12-LABEL: global_xchg_saddr_i32_rtn:146; GFX12:       ; %bb.0:147; GFX12-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV148; GFX12-NEXT:    s_wait_loadcnt 0x0149; GFX12-NEXT:    global_inv scope:SCOPE_DEV150; GFX12-NEXT:    s_wait_loadcnt 0x0151; GFX12-NEXT:    ; return to shader part epilog152  %zext.offset = zext i32 %voffset to i64153  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset154  %rtn = atomicrmw xchg ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst155  %cast.rtn = bitcast i32 %rtn to float156  ret float %cast.rtn157}158 159define amdgpu_ps float @global_xchg_saddr_i32_rtn_2048(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {160; GFX9-LABEL: global_xchg_saddr_i32_rtn_2048:161; GFX9:       ; %bb.0:162; GFX9-NEXT:    global_atomic_swap v0, v0, v1, s[2:3] offset:2048 glc163; GFX9-NEXT:    s_waitcnt vmcnt(0)164; GFX9-NEXT:    buffer_wbinvl1165; GFX9-NEXT:    ; return to shader part epilog166;167; GFX10-LABEL: global_xchg_saddr_i32_rtn_2048:168; GFX10:       ; %bb.0:169; GFX10-NEXT:    v_add_co_u32 v0, s[0:1], s2, v0170; GFX10-NEXT:    v_add_co_ci_u32_e64 v3, s[0:1], s3, 0, s[0:1]171; GFX10-NEXT:    v_add_co_u32 v2, vcc, 0x800, v0172; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc, 0, v3, vcc173; GFX10-NEXT:    global_atomic_swap v0, v[2:3], v1, off glc174; GFX10-NEXT:    s_waitcnt vmcnt(0)175; GFX10-NEXT:    buffer_gl1_inv176; GFX10-NEXT:    buffer_gl0_inv177; GFX10-NEXT:    ; return to shader part epilog178;179; GFX11-LABEL: global_xchg_saddr_i32_rtn_2048:180; GFX11:       ; %bb.0:181; GFX11-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[2:3] offset:2048 glc182; GFX11-NEXT:    s_waitcnt vmcnt(0)183; GFX11-NEXT:    buffer_gl1_inv184; GFX11-NEXT:    buffer_gl0_inv185; GFX11-NEXT:    ; return to shader part epilog186;187; GFX12-LABEL: global_xchg_saddr_i32_rtn_2048:188; GFX12:       ; %bb.0:189; GFX12-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[2:3] offset:2048 th:TH_ATOMIC_RETURN scope:SCOPE_DEV190; GFX12-NEXT:    s_wait_loadcnt 0x0191; GFX12-NEXT:    global_inv scope:SCOPE_DEV192; GFX12-NEXT:    s_wait_loadcnt 0x0193; GFX12-NEXT:    ; return to shader part epilog194  %zext.offset = zext i32 %voffset to i64195  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset196  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 2048197  %rtn = atomicrmw xchg ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst198  %cast.rtn = bitcast i32 %rtn to float199  ret float %cast.rtn200}201 202define amdgpu_ps float @global_xchg_saddr_i32_rtn_neg2048(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {203; GFX9-LABEL: global_xchg_saddr_i32_rtn_neg2048:204; GFX9:       ; %bb.0:205; GFX9-NEXT:    global_atomic_swap v0, v0, v1, s[2:3] offset:-2048 glc206; GFX9-NEXT:    s_waitcnt vmcnt(0)207; GFX9-NEXT:    buffer_wbinvl1208; GFX9-NEXT:    ; return to shader part epilog209;210; GFX10-LABEL: global_xchg_saddr_i32_rtn_neg2048:211; GFX10:       ; %bb.0:212; GFX10-NEXT:    global_atomic_swap v0, v0, v1, s[2:3] offset:-2048 glc213; GFX10-NEXT:    s_waitcnt vmcnt(0)214; GFX10-NEXT:    buffer_gl1_inv215; GFX10-NEXT:    buffer_gl0_inv216; GFX10-NEXT:    ; return to shader part epilog217;218; GFX11-LABEL: global_xchg_saddr_i32_rtn_neg2048:219; GFX11:       ; %bb.0:220; GFX11-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[2:3] offset:-2048 glc221; GFX11-NEXT:    s_waitcnt vmcnt(0)222; GFX11-NEXT:    buffer_gl1_inv223; GFX11-NEXT:    buffer_gl0_inv224; GFX11-NEXT:    ; return to shader part epilog225;226; GFX12-LABEL: global_xchg_saddr_i32_rtn_neg2048:227; GFX12:       ; %bb.0:228; GFX12-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[2:3] offset:-2048 th:TH_ATOMIC_RETURN scope:SCOPE_DEV229; GFX12-NEXT:    s_wait_loadcnt 0x0230; GFX12-NEXT:    global_inv scope:SCOPE_DEV231; GFX12-NEXT:    s_wait_loadcnt 0x0232; GFX12-NEXT:    ; return to shader part epilog233  %zext.offset = zext i32 %voffset to i64234  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset235  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -2048236  %rtn = atomicrmw xchg ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst237  %cast.rtn = bitcast i32 %rtn to float238  ret float %cast.rtn239}240 241; --------------------------------------------------------------------------------242; Uniformity edge cases243; --------------------------------------------------------------------------------244 245@ptr.in.lds = internal addrspace(3) global ptr addrspace(1) poison246 247; Base pointer is uniform, but also in VGPRs248define amdgpu_ps float @global_xchg_saddr_uniform_ptr_in_vgprs_rtn(i32 %voffset, i32 %data) {249; GFX9-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn:250; GFX9:       ; %bb.0:251; GFX9-NEXT:    v_mov_b32_e32 v2, 0252; GFX9-NEXT:    ds_read_b64 v[2:3], v2253; GFX9-NEXT:    s_waitcnt lgkmcnt(0)254; GFX9-NEXT:    v_readfirstlane_b32 s0, v2255; GFX9-NEXT:    v_readfirstlane_b32 s1, v3256; GFX9-NEXT:    s_nop 4257; GFX9-NEXT:    global_atomic_swap v0, v0, v1, s[0:1] glc258; GFX9-NEXT:    s_waitcnt vmcnt(0)259; GFX9-NEXT:    buffer_wbinvl1260; GFX9-NEXT:    ; return to shader part epilog261;262; GFX10-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn:263; GFX10:       ; %bb.0:264; GFX10-NEXT:    v_mov_b32_e32 v2, 0265; GFX10-NEXT:    ds_read_b64 v[2:3], v2266; GFX10-NEXT:    s_waitcnt lgkmcnt(0)267; GFX10-NEXT:    v_readfirstlane_b32 s0, v2268; GFX10-NEXT:    v_readfirstlane_b32 s1, v3269; GFX10-NEXT:    global_atomic_swap v0, v0, v1, s[0:1] glc270; GFX10-NEXT:    s_waitcnt vmcnt(0)271; GFX10-NEXT:    buffer_gl1_inv272; GFX10-NEXT:    buffer_gl0_inv273; GFX10-NEXT:    ; return to shader part epilog274;275; GFX11-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn:276; GFX11:       ; %bb.0:277; GFX11-NEXT:    v_mov_b32_e32 v2, 0278; GFX11-NEXT:    ds_load_b64 v[2:3], v2279; GFX11-NEXT:    s_waitcnt lgkmcnt(0)280; GFX11-NEXT:    v_readfirstlane_b32 s0, v2281; GFX11-NEXT:    v_readfirstlane_b32 s1, v3282; GFX11-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[0:1] glc283; GFX11-NEXT:    s_waitcnt vmcnt(0)284; GFX11-NEXT:    buffer_gl1_inv285; GFX11-NEXT:    buffer_gl0_inv286; GFX11-NEXT:    ; return to shader part epilog287;288; GFX12-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn:289; GFX12:       ; %bb.0:290; GFX12-NEXT:    v_mov_b32_e32 v2, 0291; GFX12-NEXT:    ds_load_b64 v[2:3], v2292; GFX12-NEXT:    s_wait_dscnt 0x0293; GFX12-NEXT:    v_readfirstlane_b32 s0, v2294; GFX12-NEXT:    v_readfirstlane_b32 s1, v3295; GFX12-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[0:1] th:TH_ATOMIC_RETURN scope:SCOPE_DEV296; GFX12-NEXT:    s_wait_loadcnt 0x0297; GFX12-NEXT:    global_inv scope:SCOPE_DEV298; GFX12-NEXT:    s_wait_loadcnt 0x0299; GFX12-NEXT:    ; return to shader part epilog300  %sbase = load ptr addrspace(1), ptr addrspace(3) @ptr.in.lds301  %zext.offset = zext i32 %voffset to i64302  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset303  %rtn = atomicrmw xchg ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst304  %cast.rtn = bitcast i32 %rtn to float305  ret float %cast.rtn306}307 308; Base pointer is uniform, but also in VGPRs, with imm offset309define amdgpu_ps float @global_xchg_saddr_uniform_ptr_in_vgprs_rtn_immoffset(i32 %voffset, i32 %data) {310; GFX9-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn_immoffset:311; GFX9:       ; %bb.0:312; GFX9-NEXT:    v_mov_b32_e32 v2, 0313; GFX9-NEXT:    ds_read_b64 v[2:3], v2314; GFX9-NEXT:    s_waitcnt lgkmcnt(0)315; GFX9-NEXT:    v_readfirstlane_b32 s0, v2316; GFX9-NEXT:    v_readfirstlane_b32 s1, v3317; GFX9-NEXT:    s_nop 4318; GFX9-NEXT:    global_atomic_swap v0, v0, v1, s[0:1] offset:42 glc319; GFX9-NEXT:    s_waitcnt vmcnt(0)320; GFX9-NEXT:    buffer_wbinvl1321; GFX9-NEXT:    ; return to shader part epilog322;323; GFX10-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn_immoffset:324; GFX10:       ; %bb.0:325; GFX10-NEXT:    v_mov_b32_e32 v2, 0326; GFX10-NEXT:    ds_read_b64 v[2:3], v2327; GFX10-NEXT:    s_waitcnt lgkmcnt(0)328; GFX10-NEXT:    v_readfirstlane_b32 s0, v2329; GFX10-NEXT:    v_readfirstlane_b32 s1, v3330; GFX10-NEXT:    global_atomic_swap v0, v0, v1, s[0:1] offset:42 glc331; GFX10-NEXT:    s_waitcnt vmcnt(0)332; GFX10-NEXT:    buffer_gl1_inv333; GFX10-NEXT:    buffer_gl0_inv334; GFX10-NEXT:    ; return to shader part epilog335;336; GFX11-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn_immoffset:337; GFX11:       ; %bb.0:338; GFX11-NEXT:    v_mov_b32_e32 v2, 0339; GFX11-NEXT:    ds_load_b64 v[2:3], v2340; GFX11-NEXT:    s_waitcnt lgkmcnt(0)341; GFX11-NEXT:    v_readfirstlane_b32 s0, v2342; GFX11-NEXT:    v_readfirstlane_b32 s1, v3343; GFX11-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[0:1] offset:42 glc344; GFX11-NEXT:    s_waitcnt vmcnt(0)345; GFX11-NEXT:    buffer_gl1_inv346; GFX11-NEXT:    buffer_gl0_inv347; GFX11-NEXT:    ; return to shader part epilog348;349; GFX12-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_rtn_immoffset:350; GFX12:       ; %bb.0:351; GFX12-NEXT:    v_mov_b32_e32 v2, 0352; GFX12-NEXT:    ds_load_b64 v[2:3], v2353; GFX12-NEXT:    s_wait_dscnt 0x0354; GFX12-NEXT:    v_readfirstlane_b32 s0, v2355; GFX12-NEXT:    v_readfirstlane_b32 s1, v3356; GFX12-NEXT:    global_atomic_swap_b32 v0, v0, v1, s[0:1] offset:42 th:TH_ATOMIC_RETURN scope:SCOPE_DEV357; GFX12-NEXT:    s_wait_loadcnt 0x0358; GFX12-NEXT:    global_inv scope:SCOPE_DEV359; GFX12-NEXT:    s_wait_loadcnt 0x0360; GFX12-NEXT:    ; return to shader part epilog361  %sbase = load ptr addrspace(1), ptr addrspace(3) @ptr.in.lds362  %zext.offset = zext i32 %voffset to i64363  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset364  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 42365  %rtn = atomicrmw xchg ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst366  %cast.rtn = bitcast i32 %rtn to float367  ret float %cast.rtn368}369 370; Base pointer is uniform, but also in VGPRs371define amdgpu_ps void @global_xchg_saddr_uniform_ptr_in_vgprs_nortn(i32 %voffset, i32 %data) {372; GFX9-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn:373; GFX9:       ; %bb.0:374; GFX9-NEXT:    v_mov_b32_e32 v2, 0375; GFX9-NEXT:    ds_read_b64 v[2:3], v2376; GFX9-NEXT:    s_waitcnt lgkmcnt(0)377; GFX9-NEXT:    v_readfirstlane_b32 s0, v2378; GFX9-NEXT:    v_readfirstlane_b32 s1, v3379; GFX9-NEXT:    s_nop 4380; GFX9-NEXT:    global_atomic_swap v0, v1, s[0:1]381; GFX9-NEXT:    s_waitcnt vmcnt(0)382; GFX9-NEXT:    buffer_wbinvl1383; GFX9-NEXT:    s_endpgm384;385; GFX10-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn:386; GFX10:       ; %bb.0:387; GFX10-NEXT:    v_mov_b32_e32 v2, 0388; GFX10-NEXT:    ds_read_b64 v[2:3], v2389; GFX10-NEXT:    s_waitcnt lgkmcnt(0)390; GFX10-NEXT:    v_readfirstlane_b32 s0, v2391; GFX10-NEXT:    v_readfirstlane_b32 s1, v3392; GFX10-NEXT:    global_atomic_swap v0, v1, s[0:1]393; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0394; GFX10-NEXT:    buffer_gl1_inv395; GFX10-NEXT:    buffer_gl0_inv396; GFX10-NEXT:    s_endpgm397;398; GFX11-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn:399; GFX11:       ; %bb.0:400; GFX11-NEXT:    v_mov_b32_e32 v2, 0401; GFX11-NEXT:    ds_load_b64 v[2:3], v2402; GFX11-NEXT:    s_waitcnt lgkmcnt(0)403; GFX11-NEXT:    v_readfirstlane_b32 s0, v2404; GFX11-NEXT:    v_readfirstlane_b32 s1, v3405; GFX11-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1]406; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0407; GFX11-NEXT:    buffer_gl1_inv408; GFX11-NEXT:    buffer_gl0_inv409; GFX11-NEXT:    s_endpgm410;411; GFX12-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn:412; GFX12:       ; %bb.0:413; GFX12-NEXT:    v_mov_b32_e32 v2, 0414; GFX12-NEXT:    ds_load_b64 v[2:3], v2415; GFX12-NEXT:    s_wait_dscnt 0x0416; GFX12-NEXT:    v_readfirstlane_b32 s0, v2417; GFX12-NEXT:    v_readfirstlane_b32 s1, v3418; GFX12-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1] scope:SCOPE_DEV419; GFX12-NEXT:    s_wait_storecnt 0x0420; GFX12-NEXT:    global_inv scope:SCOPE_DEV421; GFX12-NEXT:    s_endpgm422  %sbase = load ptr addrspace(1), ptr addrspace(3) @ptr.in.lds423  %zext.offset = zext i32 %voffset to i64424  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset425  %unused = atomicrmw xchg ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst426  ret void427}428 429; Base pointer is uniform, but also in VGPRs, with imm offset430define amdgpu_ps void @global_xchg_saddr_uniform_ptr_in_vgprs_nortn_immoffset(i32 %voffset, i32 %data) {431; GFX9-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn_immoffset:432; GFX9:       ; %bb.0:433; GFX9-NEXT:    v_mov_b32_e32 v2, 0434; GFX9-NEXT:    ds_read_b64 v[2:3], v2435; GFX9-NEXT:    s_waitcnt lgkmcnt(0)436; GFX9-NEXT:    v_readfirstlane_b32 s0, v2437; GFX9-NEXT:    v_readfirstlane_b32 s1, v3438; GFX9-NEXT:    s_nop 4439; GFX9-NEXT:    global_atomic_swap v0, v1, s[0:1] offset:42440; GFX9-NEXT:    s_waitcnt vmcnt(0)441; GFX9-NEXT:    buffer_wbinvl1442; GFX9-NEXT:    s_endpgm443;444; GFX10-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn_immoffset:445; GFX10:       ; %bb.0:446; GFX10-NEXT:    v_mov_b32_e32 v2, 0447; GFX10-NEXT:    ds_read_b64 v[2:3], v2448; GFX10-NEXT:    s_waitcnt lgkmcnt(0)449; GFX10-NEXT:    v_readfirstlane_b32 s0, v2450; GFX10-NEXT:    v_readfirstlane_b32 s1, v3451; GFX10-NEXT:    global_atomic_swap v0, v1, s[0:1] offset:42452; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0453; GFX10-NEXT:    buffer_gl1_inv454; GFX10-NEXT:    buffer_gl0_inv455; GFX10-NEXT:    s_endpgm456;457; GFX11-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn_immoffset:458; GFX11:       ; %bb.0:459; GFX11-NEXT:    v_mov_b32_e32 v2, 0460; GFX11-NEXT:    ds_load_b64 v[2:3], v2461; GFX11-NEXT:    s_waitcnt lgkmcnt(0)462; GFX11-NEXT:    v_readfirstlane_b32 s0, v2463; GFX11-NEXT:    v_readfirstlane_b32 s1, v3464; GFX11-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1] offset:42465; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0466; GFX11-NEXT:    buffer_gl1_inv467; GFX11-NEXT:    buffer_gl0_inv468; GFX11-NEXT:    s_endpgm469;470; GFX12-LABEL: global_xchg_saddr_uniform_ptr_in_vgprs_nortn_immoffset:471; GFX12:       ; %bb.0:472; GFX12-NEXT:    v_mov_b32_e32 v2, 0473; GFX12-NEXT:    ds_load_b64 v[2:3], v2474; GFX12-NEXT:    s_wait_dscnt 0x0475; GFX12-NEXT:    v_readfirstlane_b32 s0, v2476; GFX12-NEXT:    v_readfirstlane_b32 s1, v3477; GFX12-NEXT:    global_atomic_swap_b32 v0, v1, s[0:1] offset:42 scope:SCOPE_DEV478; GFX12-NEXT:    s_wait_storecnt 0x0479; GFX12-NEXT:    global_inv scope:SCOPE_DEV480; GFX12-NEXT:    s_endpgm481  %sbase = load ptr addrspace(1), ptr addrspace(3) @ptr.in.lds482  %zext.offset = zext i32 %voffset to i64483  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset484  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 42485  %unused = atomicrmw xchg ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst486  ret void487}488 489; --------------------------------------------------------------------------------490; All atomicrmw ops491; --------------------------------------------------------------------------------492 493; --------------------------------------------------------------------------------494; atomicrmw xchg495; --------------------------------------------------------------------------------496 497define amdgpu_ps <2 x float> @global_xchg_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {498; GFX9-LABEL: global_xchg_saddr_i64_rtn:499; GFX9:       ; %bb.0:500; GFX9-NEXT:    global_atomic_swap_x2 v[0:1], v0, v[1:2], s[2:3] glc501; GFX9-NEXT:    s_waitcnt vmcnt(0)502; GFX9-NEXT:    buffer_wbinvl1503; GFX9-NEXT:    ; return to shader part epilog504;505; GFX10-LABEL: global_xchg_saddr_i64_rtn:506; GFX10:       ; %bb.0:507; GFX10-NEXT:    global_atomic_swap_x2 v[0:1], v0, v[1:2], s[2:3] glc508; GFX10-NEXT:    s_waitcnt vmcnt(0)509; GFX10-NEXT:    buffer_gl1_inv510; GFX10-NEXT:    buffer_gl0_inv511; GFX10-NEXT:    ; return to shader part epilog512;513; GFX11-LABEL: global_xchg_saddr_i64_rtn:514; GFX11:       ; %bb.0:515; GFX11-NEXT:    global_atomic_swap_b64 v[0:1], v0, v[1:2], s[2:3] glc516; GFX11-NEXT:    s_waitcnt vmcnt(0)517; GFX11-NEXT:    buffer_gl1_inv518; GFX11-NEXT:    buffer_gl0_inv519; GFX11-NEXT:    ; return to shader part epilog520;521; GFX12-LABEL: global_xchg_saddr_i64_rtn:522; GFX12:       ; %bb.0:523; GFX12-NEXT:    global_atomic_swap_b64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV524; GFX12-NEXT:    s_wait_loadcnt 0x0525; GFX12-NEXT:    global_inv scope:SCOPE_DEV526; GFX12-NEXT:    s_wait_loadcnt 0x0527; GFX12-NEXT:    ; return to shader part epilog528  %zext.offset = zext i32 %voffset to i64529  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset530  %rtn = atomicrmw xchg ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst531  %cast.rtn = bitcast i64 %rtn to <2 x float>532  ret <2 x float> %cast.rtn533}534 535define amdgpu_ps <2 x float> @global_xchg_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {536; GFX9-LABEL: global_xchg_saddr_i64_rtn_neg128:537; GFX9:       ; %bb.0:538; GFX9-NEXT:    global_atomic_swap_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc539; GFX9-NEXT:    s_waitcnt vmcnt(0)540; GFX9-NEXT:    buffer_wbinvl1541; GFX9-NEXT:    ; return to shader part epilog542;543; GFX10-LABEL: global_xchg_saddr_i64_rtn_neg128:544; GFX10:       ; %bb.0:545; GFX10-NEXT:    global_atomic_swap_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc546; GFX10-NEXT:    s_waitcnt vmcnt(0)547; GFX10-NEXT:    buffer_gl1_inv548; GFX10-NEXT:    buffer_gl0_inv549; GFX10-NEXT:    ; return to shader part epilog550;551; GFX11-LABEL: global_xchg_saddr_i64_rtn_neg128:552; GFX11:       ; %bb.0:553; GFX11-NEXT:    global_atomic_swap_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc554; GFX11-NEXT:    s_waitcnt vmcnt(0)555; GFX11-NEXT:    buffer_gl1_inv556; GFX11-NEXT:    buffer_gl0_inv557; GFX11-NEXT:    ; return to shader part epilog558;559; GFX12-LABEL: global_xchg_saddr_i64_rtn_neg128:560; GFX12:       ; %bb.0:561; GFX12-NEXT:    global_atomic_swap_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV562; GFX12-NEXT:    s_wait_loadcnt 0x0563; GFX12-NEXT:    global_inv scope:SCOPE_DEV564; GFX12-NEXT:    s_wait_loadcnt 0x0565; GFX12-NEXT:    ; return to shader part epilog566  %zext.offset = zext i32 %voffset to i64567  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset568  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128569  %rtn = atomicrmw xchg ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst570  %cast.rtn = bitcast i64 %rtn to <2 x float>571  ret <2 x float> %cast.rtn572}573 574define amdgpu_ps void @global_xchg_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {575; GFX9-LABEL: global_xchg_saddr_i64_nortn:576; GFX9:       ; %bb.0:577; GFX9-NEXT:    global_atomic_swap_x2 v0, v[1:2], s[2:3]578; GFX9-NEXT:    s_waitcnt vmcnt(0)579; GFX9-NEXT:    buffer_wbinvl1580; GFX9-NEXT:    s_endpgm581;582; GFX10-LABEL: global_xchg_saddr_i64_nortn:583; GFX10:       ; %bb.0:584; GFX10-NEXT:    global_atomic_swap_x2 v0, v[1:2], s[2:3]585; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0586; GFX10-NEXT:    buffer_gl1_inv587; GFX10-NEXT:    buffer_gl0_inv588; GFX10-NEXT:    s_endpgm589;590; GFX11-LABEL: global_xchg_saddr_i64_nortn:591; GFX11:       ; %bb.0:592; GFX11-NEXT:    global_atomic_swap_b64 v0, v[1:2], s[2:3]593; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0594; GFX11-NEXT:    buffer_gl1_inv595; GFX11-NEXT:    buffer_gl0_inv596; GFX11-NEXT:    s_endpgm597;598; GFX12-LABEL: global_xchg_saddr_i64_nortn:599; GFX12:       ; %bb.0:600; GFX12-NEXT:    global_atomic_swap_b64 v0, v[1:2], s[2:3] scope:SCOPE_DEV601; GFX12-NEXT:    s_wait_storecnt 0x0602; GFX12-NEXT:    global_inv scope:SCOPE_DEV603; GFX12-NEXT:    s_endpgm604  %zext.offset = zext i32 %voffset to i64605  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset606  %unused = atomicrmw xchg ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst607  ret void608}609 610define amdgpu_ps void @global_xchg_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {611; GFX9-LABEL: global_xchg_saddr_i64_nortn_neg128:612; GFX9:       ; %bb.0:613; GFX9-NEXT:    global_atomic_swap_x2 v0, v[1:2], s[2:3] offset:-128614; GFX9-NEXT:    s_waitcnt vmcnt(0)615; GFX9-NEXT:    buffer_wbinvl1616; GFX9-NEXT:    s_endpgm617;618; GFX10-LABEL: global_xchg_saddr_i64_nortn_neg128:619; GFX10:       ; %bb.0:620; GFX10-NEXT:    global_atomic_swap_x2 v0, v[1:2], s[2:3] offset:-128621; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0622; GFX10-NEXT:    buffer_gl1_inv623; GFX10-NEXT:    buffer_gl0_inv624; GFX10-NEXT:    s_endpgm625;626; GFX11-LABEL: global_xchg_saddr_i64_nortn_neg128:627; GFX11:       ; %bb.0:628; GFX11-NEXT:    global_atomic_swap_b64 v0, v[1:2], s[2:3] offset:-128629; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0630; GFX11-NEXT:    buffer_gl1_inv631; GFX11-NEXT:    buffer_gl0_inv632; GFX11-NEXT:    s_endpgm633;634; GFX12-LABEL: global_xchg_saddr_i64_nortn_neg128:635; GFX12:       ; %bb.0:636; GFX12-NEXT:    global_atomic_swap_b64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV637; GFX12-NEXT:    s_wait_storecnt 0x0638; GFX12-NEXT:    global_inv scope:SCOPE_DEV639; GFX12-NEXT:    s_endpgm640  %zext.offset = zext i32 %voffset to i64641  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset642  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128643  %unused = atomicrmw xchg ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst644  ret void645}646 647; --------------------------------------------------------------------------------648; atomicrmw add649; --------------------------------------------------------------------------------650 651define amdgpu_ps float @global_add_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {652; GFX9-LABEL: global_add_saddr_i32_rtn:653; GFX9:       ; %bb.0:654; GFX9-NEXT:    global_atomic_add v0, v0, v1, s[2:3] glc655; GFX9-NEXT:    s_waitcnt vmcnt(0)656; GFX9-NEXT:    buffer_wbinvl1657; GFX9-NEXT:    ; return to shader part epilog658;659; GFX10-LABEL: global_add_saddr_i32_rtn:660; GFX10:       ; %bb.0:661; GFX10-NEXT:    global_atomic_add v0, v0, v1, s[2:3] glc662; GFX10-NEXT:    s_waitcnt vmcnt(0)663; GFX10-NEXT:    buffer_gl1_inv664; GFX10-NEXT:    buffer_gl0_inv665; GFX10-NEXT:    ; return to shader part epilog666;667; GFX11-LABEL: global_add_saddr_i32_rtn:668; GFX11:       ; %bb.0:669; GFX11-NEXT:    global_atomic_add_u32 v0, v0, v1, s[2:3] glc670; GFX11-NEXT:    s_waitcnt vmcnt(0)671; GFX11-NEXT:    buffer_gl1_inv672; GFX11-NEXT:    buffer_gl0_inv673; GFX11-NEXT:    ; return to shader part epilog674;675; GFX12-LABEL: global_add_saddr_i32_rtn:676; GFX12:       ; %bb.0:677; GFX12-NEXT:    global_atomic_add_u32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV678; GFX12-NEXT:    s_wait_loadcnt 0x0679; GFX12-NEXT:    global_inv scope:SCOPE_DEV680; GFX12-NEXT:    s_wait_loadcnt 0x0681; GFX12-NEXT:    ; return to shader part epilog682  %zext.offset = zext i32 %voffset to i64683  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset684  %rtn = atomicrmw add ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst685  %cast.rtn = bitcast i32 %rtn to float686  ret float %cast.rtn687}688 689define amdgpu_ps float @global_add_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {690; GFX9-LABEL: global_add_saddr_i32_rtn_neg128:691; GFX9:       ; %bb.0:692; GFX9-NEXT:    global_atomic_add v0, v0, v1, s[2:3] offset:-128 glc693; GFX9-NEXT:    s_waitcnt vmcnt(0)694; GFX9-NEXT:    buffer_wbinvl1695; GFX9-NEXT:    ; return to shader part epilog696;697; GFX10-LABEL: global_add_saddr_i32_rtn_neg128:698; GFX10:       ; %bb.0:699; GFX10-NEXT:    global_atomic_add v0, v0, v1, s[2:3] offset:-128 glc700; GFX10-NEXT:    s_waitcnt vmcnt(0)701; GFX10-NEXT:    buffer_gl1_inv702; GFX10-NEXT:    buffer_gl0_inv703; GFX10-NEXT:    ; return to shader part epilog704;705; GFX11-LABEL: global_add_saddr_i32_rtn_neg128:706; GFX11:       ; %bb.0:707; GFX11-NEXT:    global_atomic_add_u32 v0, v0, v1, s[2:3] offset:-128 glc708; GFX11-NEXT:    s_waitcnt vmcnt(0)709; GFX11-NEXT:    buffer_gl1_inv710; GFX11-NEXT:    buffer_gl0_inv711; GFX11-NEXT:    ; return to shader part epilog712;713; GFX12-LABEL: global_add_saddr_i32_rtn_neg128:714; GFX12:       ; %bb.0:715; GFX12-NEXT:    global_atomic_add_u32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV716; GFX12-NEXT:    s_wait_loadcnt 0x0717; GFX12-NEXT:    global_inv scope:SCOPE_DEV718; GFX12-NEXT:    s_wait_loadcnt 0x0719; GFX12-NEXT:    ; return to shader part epilog720  %zext.offset = zext i32 %voffset to i64721  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset722  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128723  %rtn = atomicrmw add ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst724  %cast.rtn = bitcast i32 %rtn to float725  ret float %cast.rtn726}727 728define amdgpu_ps void @global_add_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {729; GFX9-LABEL: global_add_saddr_i32_nortn:730; GFX9:       ; %bb.0:731; GFX9-NEXT:    global_atomic_add v0, v1, s[2:3]732; GFX9-NEXT:    s_waitcnt vmcnt(0)733; GFX9-NEXT:    buffer_wbinvl1734; GFX9-NEXT:    s_endpgm735;736; GFX10-LABEL: global_add_saddr_i32_nortn:737; GFX10:       ; %bb.0:738; GFX10-NEXT:    global_atomic_add v0, v1, s[2:3]739; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0740; GFX10-NEXT:    buffer_gl1_inv741; GFX10-NEXT:    buffer_gl0_inv742; GFX10-NEXT:    s_endpgm743;744; GFX11-LABEL: global_add_saddr_i32_nortn:745; GFX11:       ; %bb.0:746; GFX11-NEXT:    global_atomic_add_u32 v0, v1, s[2:3]747; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0748; GFX11-NEXT:    buffer_gl1_inv749; GFX11-NEXT:    buffer_gl0_inv750; GFX11-NEXT:    s_endpgm751;752; GFX12-LABEL: global_add_saddr_i32_nortn:753; GFX12:       ; %bb.0:754; GFX12-NEXT:    global_atomic_add_u32 v0, v1, s[2:3] scope:SCOPE_DEV755; GFX12-NEXT:    s_wait_storecnt 0x0756; GFX12-NEXT:    global_inv scope:SCOPE_DEV757; GFX12-NEXT:    s_endpgm758  %zext.offset = zext i32 %voffset to i64759  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset760  %unused = atomicrmw add ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst761  ret void762}763 764define amdgpu_ps void @global_add_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {765; GFX9-LABEL: global_add_saddr_i32_nortn_neg128:766; GFX9:       ; %bb.0:767; GFX9-NEXT:    global_atomic_add v0, v1, s[2:3] offset:-128768; GFX9-NEXT:    s_waitcnt vmcnt(0)769; GFX9-NEXT:    buffer_wbinvl1770; GFX9-NEXT:    s_endpgm771;772; GFX10-LABEL: global_add_saddr_i32_nortn_neg128:773; GFX10:       ; %bb.0:774; GFX10-NEXT:    global_atomic_add v0, v1, s[2:3] offset:-128775; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0776; GFX10-NEXT:    buffer_gl1_inv777; GFX10-NEXT:    buffer_gl0_inv778; GFX10-NEXT:    s_endpgm779;780; GFX11-LABEL: global_add_saddr_i32_nortn_neg128:781; GFX11:       ; %bb.0:782; GFX11-NEXT:    global_atomic_add_u32 v0, v1, s[2:3] offset:-128783; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0784; GFX11-NEXT:    buffer_gl1_inv785; GFX11-NEXT:    buffer_gl0_inv786; GFX11-NEXT:    s_endpgm787;788; GFX12-LABEL: global_add_saddr_i32_nortn_neg128:789; GFX12:       ; %bb.0:790; GFX12-NEXT:    global_atomic_add_u32 v0, v1, s[2:3] offset:-128 scope:SCOPE_DEV791; GFX12-NEXT:    s_wait_storecnt 0x0792; GFX12-NEXT:    global_inv scope:SCOPE_DEV793; GFX12-NEXT:    s_endpgm794  %zext.offset = zext i32 %voffset to i64795  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset796  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128797  %unused = atomicrmw add ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst798  ret void799}800 801define amdgpu_ps <2 x float> @global_add_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {802; GFX9-LABEL: global_add_saddr_i64_rtn:803; GFX9:       ; %bb.0:804; GFX9-NEXT:    global_atomic_add_x2 v[0:1], v0, v[1:2], s[2:3] glc805; GFX9-NEXT:    s_waitcnt vmcnt(0)806; GFX9-NEXT:    buffer_wbinvl1807; GFX9-NEXT:    ; return to shader part epilog808;809; GFX10-LABEL: global_add_saddr_i64_rtn:810; GFX10:       ; %bb.0:811; GFX10-NEXT:    global_atomic_add_x2 v[0:1], v0, v[1:2], s[2:3] glc812; GFX10-NEXT:    s_waitcnt vmcnt(0)813; GFX10-NEXT:    buffer_gl1_inv814; GFX10-NEXT:    buffer_gl0_inv815; GFX10-NEXT:    ; return to shader part epilog816;817; GFX11-LABEL: global_add_saddr_i64_rtn:818; GFX11:       ; %bb.0:819; GFX11-NEXT:    global_atomic_add_u64 v[0:1], v0, v[1:2], s[2:3] glc820; GFX11-NEXT:    s_waitcnt vmcnt(0)821; GFX11-NEXT:    buffer_gl1_inv822; GFX11-NEXT:    buffer_gl0_inv823; GFX11-NEXT:    ; return to shader part epilog824;825; GFX12-LABEL: global_add_saddr_i64_rtn:826; GFX12:       ; %bb.0:827; GFX12-NEXT:    global_atomic_add_u64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV828; GFX12-NEXT:    s_wait_loadcnt 0x0829; GFX12-NEXT:    global_inv scope:SCOPE_DEV830; GFX12-NEXT:    s_wait_loadcnt 0x0831; GFX12-NEXT:    ; return to shader part epilog832  %zext.offset = zext i32 %voffset to i64833  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset834  %rtn = atomicrmw add ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst835  %cast.rtn = bitcast i64 %rtn to <2 x float>836  ret <2 x float> %cast.rtn837}838 839define amdgpu_ps <2 x float> @global_add_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {840; GFX9-LABEL: global_add_saddr_i64_rtn_neg128:841; GFX9:       ; %bb.0:842; GFX9-NEXT:    global_atomic_add_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc843; GFX9-NEXT:    s_waitcnt vmcnt(0)844; GFX9-NEXT:    buffer_wbinvl1845; GFX9-NEXT:    ; return to shader part epilog846;847; GFX10-LABEL: global_add_saddr_i64_rtn_neg128:848; GFX10:       ; %bb.0:849; GFX10-NEXT:    global_atomic_add_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc850; GFX10-NEXT:    s_waitcnt vmcnt(0)851; GFX10-NEXT:    buffer_gl1_inv852; GFX10-NEXT:    buffer_gl0_inv853; GFX10-NEXT:    ; return to shader part epilog854;855; GFX11-LABEL: global_add_saddr_i64_rtn_neg128:856; GFX11:       ; %bb.0:857; GFX11-NEXT:    global_atomic_add_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc858; GFX11-NEXT:    s_waitcnt vmcnt(0)859; GFX11-NEXT:    buffer_gl1_inv860; GFX11-NEXT:    buffer_gl0_inv861; GFX11-NEXT:    ; return to shader part epilog862;863; GFX12-LABEL: global_add_saddr_i64_rtn_neg128:864; GFX12:       ; %bb.0:865; GFX12-NEXT:    global_atomic_add_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV866; GFX12-NEXT:    s_wait_loadcnt 0x0867; GFX12-NEXT:    global_inv scope:SCOPE_DEV868; GFX12-NEXT:    s_wait_loadcnt 0x0869; GFX12-NEXT:    ; return to shader part epilog870  %zext.offset = zext i32 %voffset to i64871  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset872  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128873  %rtn = atomicrmw add ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst874  %cast.rtn = bitcast i64 %rtn to <2 x float>875  ret <2 x float> %cast.rtn876}877 878define amdgpu_ps void @global_add_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {879; GFX9-LABEL: global_add_saddr_i64_nortn:880; GFX9:       ; %bb.0:881; GFX9-NEXT:    global_atomic_add_x2 v0, v[1:2], s[2:3]882; GFX9-NEXT:    s_waitcnt vmcnt(0)883; GFX9-NEXT:    buffer_wbinvl1884; GFX9-NEXT:    s_endpgm885;886; GFX10-LABEL: global_add_saddr_i64_nortn:887; GFX10:       ; %bb.0:888; GFX10-NEXT:    global_atomic_add_x2 v0, v[1:2], s[2:3]889; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0890; GFX10-NEXT:    buffer_gl1_inv891; GFX10-NEXT:    buffer_gl0_inv892; GFX10-NEXT:    s_endpgm893;894; GFX11-LABEL: global_add_saddr_i64_nortn:895; GFX11:       ; %bb.0:896; GFX11-NEXT:    global_atomic_add_u64 v0, v[1:2], s[2:3]897; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0898; GFX11-NEXT:    buffer_gl1_inv899; GFX11-NEXT:    buffer_gl0_inv900; GFX11-NEXT:    s_endpgm901;902; GFX12-LABEL: global_add_saddr_i64_nortn:903; GFX12:       ; %bb.0:904; GFX12-NEXT:    global_atomic_add_u64 v0, v[1:2], s[2:3] scope:SCOPE_DEV905; GFX12-NEXT:    s_wait_storecnt 0x0906; GFX12-NEXT:    global_inv scope:SCOPE_DEV907; GFX12-NEXT:    s_endpgm908  %zext.offset = zext i32 %voffset to i64909  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset910  %unused = atomicrmw add ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst911  ret void912}913 914define amdgpu_ps void @global_add_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {915; GFX9-LABEL: global_add_saddr_i64_nortn_neg128:916; GFX9:       ; %bb.0:917; GFX9-NEXT:    global_atomic_add_x2 v0, v[1:2], s[2:3] offset:-128918; GFX9-NEXT:    s_waitcnt vmcnt(0)919; GFX9-NEXT:    buffer_wbinvl1920; GFX9-NEXT:    s_endpgm921;922; GFX10-LABEL: global_add_saddr_i64_nortn_neg128:923; GFX10:       ; %bb.0:924; GFX10-NEXT:    global_atomic_add_x2 v0, v[1:2], s[2:3] offset:-128925; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0926; GFX10-NEXT:    buffer_gl1_inv927; GFX10-NEXT:    buffer_gl0_inv928; GFX10-NEXT:    s_endpgm929;930; GFX11-LABEL: global_add_saddr_i64_nortn_neg128:931; GFX11:       ; %bb.0:932; GFX11-NEXT:    global_atomic_add_u64 v0, v[1:2], s[2:3] offset:-128933; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0934; GFX11-NEXT:    buffer_gl1_inv935; GFX11-NEXT:    buffer_gl0_inv936; GFX11-NEXT:    s_endpgm937;938; GFX12-LABEL: global_add_saddr_i64_nortn_neg128:939; GFX12:       ; %bb.0:940; GFX12-NEXT:    global_atomic_add_u64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV941; GFX12-NEXT:    s_wait_storecnt 0x0942; GFX12-NEXT:    global_inv scope:SCOPE_DEV943; GFX12-NEXT:    s_endpgm944  %zext.offset = zext i32 %voffset to i64945  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset946  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128947  %unused = atomicrmw add ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst948  ret void949}950 951; --------------------------------------------------------------------------------952; atomicrmw sub953; --------------------------------------------------------------------------------954 955define amdgpu_ps float @global_sub_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {956; GFX9-LABEL: global_sub_saddr_i32_rtn:957; GFX9:       ; %bb.0:958; GFX9-NEXT:    global_atomic_sub v0, v0, v1, s[2:3] glc959; GFX9-NEXT:    s_waitcnt vmcnt(0)960; GFX9-NEXT:    buffer_wbinvl1961; GFX9-NEXT:    ; return to shader part epilog962;963; GFX10-LABEL: global_sub_saddr_i32_rtn:964; GFX10:       ; %bb.0:965; GFX10-NEXT:    global_atomic_sub v0, v0, v1, s[2:3] glc966; GFX10-NEXT:    s_waitcnt vmcnt(0)967; GFX10-NEXT:    buffer_gl1_inv968; GFX10-NEXT:    buffer_gl0_inv969; GFX10-NEXT:    ; return to shader part epilog970;971; GFX11-LABEL: global_sub_saddr_i32_rtn:972; GFX11:       ; %bb.0:973; GFX11-NEXT:    global_atomic_sub_u32 v0, v0, v1, s[2:3] glc974; GFX11-NEXT:    s_waitcnt vmcnt(0)975; GFX11-NEXT:    buffer_gl1_inv976; GFX11-NEXT:    buffer_gl0_inv977; GFX11-NEXT:    ; return to shader part epilog978;979; GFX12-LABEL: global_sub_saddr_i32_rtn:980; GFX12:       ; %bb.0:981; GFX12-NEXT:    global_atomic_sub_u32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV982; GFX12-NEXT:    s_wait_loadcnt 0x0983; GFX12-NEXT:    global_inv scope:SCOPE_DEV984; GFX12-NEXT:    s_wait_loadcnt 0x0985; GFX12-NEXT:    ; return to shader part epilog986  %zext.offset = zext i32 %voffset to i64987  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset988  %rtn = atomicrmw sub ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0989  %cast.rtn = bitcast i32 %rtn to float990  ret float %cast.rtn991}992 993define amdgpu_ps float @global_sub_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {994; GFX9-LABEL: global_sub_saddr_i32_rtn_neg128:995; GFX9:       ; %bb.0:996; GFX9-NEXT:    global_atomic_sub v0, v0, v1, s[2:3] offset:-128 glc997; GFX9-NEXT:    s_waitcnt vmcnt(0)998; GFX9-NEXT:    buffer_wbinvl1999; GFX9-NEXT:    ; return to shader part epilog1000;1001; GFX10-LABEL: global_sub_saddr_i32_rtn_neg128:1002; GFX10:       ; %bb.0:1003; GFX10-NEXT:    global_atomic_sub v0, v0, v1, s[2:3] offset:-128 glc1004; GFX10-NEXT:    s_waitcnt vmcnt(0)1005; GFX10-NEXT:    buffer_gl1_inv1006; GFX10-NEXT:    buffer_gl0_inv1007; GFX10-NEXT:    ; return to shader part epilog1008;1009; GFX11-LABEL: global_sub_saddr_i32_rtn_neg128:1010; GFX11:       ; %bb.0:1011; GFX11-NEXT:    global_atomic_sub_u32 v0, v0, v1, s[2:3] offset:-128 glc1012; GFX11-NEXT:    s_waitcnt vmcnt(0)1013; GFX11-NEXT:    buffer_gl1_inv1014; GFX11-NEXT:    buffer_gl0_inv1015; GFX11-NEXT:    ; return to shader part epilog1016;1017; GFX12-LABEL: global_sub_saddr_i32_rtn_neg128:1018; GFX12:       ; %bb.0:1019; GFX12-NEXT:    global_atomic_sub_u32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1020; GFX12-NEXT:    s_wait_loadcnt 0x01021; GFX12-NEXT:    global_inv scope:SCOPE_DEV1022; GFX12-NEXT:    s_wait_loadcnt 0x01023; GFX12-NEXT:    ; return to shader part epilog1024  %zext.offset = zext i32 %voffset to i641025  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1026  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281027  %rtn = atomicrmw sub ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01028  %cast.rtn = bitcast i32 %rtn to float1029  ret float %cast.rtn1030}1031 1032define amdgpu_ps void @global_sub_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1033; GFX9-LABEL: global_sub_saddr_i32_nortn:1034; GFX9:       ; %bb.0:1035; GFX9-NEXT:    global_atomic_sub v0, v1, s[2:3]1036; GFX9-NEXT:    s_waitcnt vmcnt(0)1037; GFX9-NEXT:    buffer_wbinvl11038; GFX9-NEXT:    s_endpgm1039;1040; GFX10-LABEL: global_sub_saddr_i32_nortn:1041; GFX10:       ; %bb.0:1042; GFX10-NEXT:    global_atomic_sub v0, v1, s[2:3]1043; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01044; GFX10-NEXT:    buffer_gl1_inv1045; GFX10-NEXT:    buffer_gl0_inv1046; GFX10-NEXT:    s_endpgm1047;1048; GFX11-LABEL: global_sub_saddr_i32_nortn:1049; GFX11:       ; %bb.0:1050; GFX11-NEXT:    global_atomic_sub_u32 v0, v1, s[2:3]1051; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01052; GFX11-NEXT:    buffer_gl1_inv1053; GFX11-NEXT:    buffer_gl0_inv1054; GFX11-NEXT:    s_endpgm1055;1056; GFX12-LABEL: global_sub_saddr_i32_nortn:1057; GFX12:       ; %bb.0:1058; GFX12-NEXT:    global_atomic_sub_u32 v0, v1, s[2:3] scope:SCOPE_DEV1059; GFX12-NEXT:    s_wait_storecnt 0x01060; GFX12-NEXT:    global_inv scope:SCOPE_DEV1061; GFX12-NEXT:    s_endpgm1062  %zext.offset = zext i32 %voffset to i641063  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1064  %unused = atomicrmw sub ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01065  ret void1066}1067 1068define amdgpu_ps void @global_sub_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1069; GFX9-LABEL: global_sub_saddr_i32_nortn_neg128:1070; GFX9:       ; %bb.0:1071; GFX9-NEXT:    global_atomic_sub v0, v1, s[2:3] offset:-1281072; GFX9-NEXT:    s_waitcnt vmcnt(0)1073; GFX9-NEXT:    buffer_wbinvl11074; GFX9-NEXT:    s_endpgm1075;1076; GFX10-LABEL: global_sub_saddr_i32_nortn_neg128:1077; GFX10:       ; %bb.0:1078; GFX10-NEXT:    global_atomic_sub v0, v1, s[2:3] offset:-1281079; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01080; GFX10-NEXT:    buffer_gl1_inv1081; GFX10-NEXT:    buffer_gl0_inv1082; GFX10-NEXT:    s_endpgm1083;1084; GFX11-LABEL: global_sub_saddr_i32_nortn_neg128:1085; GFX11:       ; %bb.0:1086; GFX11-NEXT:    global_atomic_sub_u32 v0, v1, s[2:3] offset:-1281087; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01088; GFX11-NEXT:    buffer_gl1_inv1089; GFX11-NEXT:    buffer_gl0_inv1090; GFX11-NEXT:    s_endpgm1091;1092; GFX12-LABEL: global_sub_saddr_i32_nortn_neg128:1093; GFX12:       ; %bb.0:1094; GFX12-NEXT:    global_atomic_sub_u32 v0, v1, s[2:3] offset:-128 scope:SCOPE_DEV1095; GFX12-NEXT:    s_wait_storecnt 0x01096; GFX12-NEXT:    global_inv scope:SCOPE_DEV1097; GFX12-NEXT:    s_endpgm1098  %zext.offset = zext i32 %voffset to i641099  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1100  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281101  %unused = atomicrmw sub ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01102  ret void1103}1104 1105define amdgpu_ps <2 x float> @global_sub_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1106; GFX9-LABEL: global_sub_saddr_i64_rtn:1107; GFX9:       ; %bb.0:1108; GFX9-NEXT:    global_atomic_sub_x2 v[0:1], v0, v[1:2], s[2:3] glc1109; GFX9-NEXT:    s_waitcnt vmcnt(0)1110; GFX9-NEXT:    buffer_wbinvl11111; GFX9-NEXT:    ; return to shader part epilog1112;1113; GFX10-LABEL: global_sub_saddr_i64_rtn:1114; GFX10:       ; %bb.0:1115; GFX10-NEXT:    global_atomic_sub_x2 v[0:1], v0, v[1:2], s[2:3] glc1116; GFX10-NEXT:    s_waitcnt vmcnt(0)1117; GFX10-NEXT:    buffer_gl1_inv1118; GFX10-NEXT:    buffer_gl0_inv1119; GFX10-NEXT:    ; return to shader part epilog1120;1121; GFX11-LABEL: global_sub_saddr_i64_rtn:1122; GFX11:       ; %bb.0:1123; GFX11-NEXT:    global_atomic_sub_u64 v[0:1], v0, v[1:2], s[2:3] glc1124; GFX11-NEXT:    s_waitcnt vmcnt(0)1125; GFX11-NEXT:    buffer_gl1_inv1126; GFX11-NEXT:    buffer_gl0_inv1127; GFX11-NEXT:    ; return to shader part epilog1128;1129; GFX12-LABEL: global_sub_saddr_i64_rtn:1130; GFX12:       ; %bb.0:1131; GFX12-NEXT:    global_atomic_sub_u64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1132; GFX12-NEXT:    s_wait_loadcnt 0x01133; GFX12-NEXT:    global_inv scope:SCOPE_DEV1134; GFX12-NEXT:    s_wait_loadcnt 0x01135; GFX12-NEXT:    ; return to shader part epilog1136  %zext.offset = zext i32 %voffset to i641137  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1138  %rtn = atomicrmw sub ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01139  %cast.rtn = bitcast i64 %rtn to <2 x float>1140  ret <2 x float> %cast.rtn1141}1142 1143define amdgpu_ps <2 x float> @global_sub_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1144; GFX9-LABEL: global_sub_saddr_i64_rtn_neg128:1145; GFX9:       ; %bb.0:1146; GFX9-NEXT:    global_atomic_sub_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1147; GFX9-NEXT:    s_waitcnt vmcnt(0)1148; GFX9-NEXT:    buffer_wbinvl11149; GFX9-NEXT:    ; return to shader part epilog1150;1151; GFX10-LABEL: global_sub_saddr_i64_rtn_neg128:1152; GFX10:       ; %bb.0:1153; GFX10-NEXT:    global_atomic_sub_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1154; GFX10-NEXT:    s_waitcnt vmcnt(0)1155; GFX10-NEXT:    buffer_gl1_inv1156; GFX10-NEXT:    buffer_gl0_inv1157; GFX10-NEXT:    ; return to shader part epilog1158;1159; GFX11-LABEL: global_sub_saddr_i64_rtn_neg128:1160; GFX11:       ; %bb.0:1161; GFX11-NEXT:    global_atomic_sub_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1162; GFX11-NEXT:    s_waitcnt vmcnt(0)1163; GFX11-NEXT:    buffer_gl1_inv1164; GFX11-NEXT:    buffer_gl0_inv1165; GFX11-NEXT:    ; return to shader part epilog1166;1167; GFX12-LABEL: global_sub_saddr_i64_rtn_neg128:1168; GFX12:       ; %bb.0:1169; GFX12-NEXT:    global_atomic_sub_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1170; GFX12-NEXT:    s_wait_loadcnt 0x01171; GFX12-NEXT:    global_inv scope:SCOPE_DEV1172; GFX12-NEXT:    s_wait_loadcnt 0x01173; GFX12-NEXT:    ; return to shader part epilog1174  %zext.offset = zext i32 %voffset to i641175  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1176  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281177  %rtn = atomicrmw sub ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01178  %cast.rtn = bitcast i64 %rtn to <2 x float>1179  ret <2 x float> %cast.rtn1180}1181 1182define amdgpu_ps void @global_sub_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1183; GFX9-LABEL: global_sub_saddr_i64_nortn:1184; GFX9:       ; %bb.0:1185; GFX9-NEXT:    global_atomic_sub_x2 v0, v[1:2], s[2:3]1186; GFX9-NEXT:    s_waitcnt vmcnt(0)1187; GFX9-NEXT:    buffer_wbinvl11188; GFX9-NEXT:    s_endpgm1189;1190; GFX10-LABEL: global_sub_saddr_i64_nortn:1191; GFX10:       ; %bb.0:1192; GFX10-NEXT:    global_atomic_sub_x2 v0, v[1:2], s[2:3]1193; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01194; GFX10-NEXT:    buffer_gl1_inv1195; GFX10-NEXT:    buffer_gl0_inv1196; GFX10-NEXT:    s_endpgm1197;1198; GFX11-LABEL: global_sub_saddr_i64_nortn:1199; GFX11:       ; %bb.0:1200; GFX11-NEXT:    global_atomic_sub_u64 v0, v[1:2], s[2:3]1201; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01202; GFX11-NEXT:    buffer_gl1_inv1203; GFX11-NEXT:    buffer_gl0_inv1204; GFX11-NEXT:    s_endpgm1205;1206; GFX12-LABEL: global_sub_saddr_i64_nortn:1207; GFX12:       ; %bb.0:1208; GFX12-NEXT:    global_atomic_sub_u64 v0, v[1:2], s[2:3] scope:SCOPE_DEV1209; GFX12-NEXT:    s_wait_storecnt 0x01210; GFX12-NEXT:    global_inv scope:SCOPE_DEV1211; GFX12-NEXT:    s_endpgm1212  %zext.offset = zext i32 %voffset to i641213  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1214  %unused = atomicrmw sub ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01215  ret void1216}1217 1218define amdgpu_ps void @global_sub_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1219; GFX9-LABEL: global_sub_saddr_i64_nortn_neg128:1220; GFX9:       ; %bb.0:1221; GFX9-NEXT:    global_atomic_sub_x2 v0, v[1:2], s[2:3] offset:-1281222; GFX9-NEXT:    s_waitcnt vmcnt(0)1223; GFX9-NEXT:    buffer_wbinvl11224; GFX9-NEXT:    s_endpgm1225;1226; GFX10-LABEL: global_sub_saddr_i64_nortn_neg128:1227; GFX10:       ; %bb.0:1228; GFX10-NEXT:    global_atomic_sub_x2 v0, v[1:2], s[2:3] offset:-1281229; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01230; GFX10-NEXT:    buffer_gl1_inv1231; GFX10-NEXT:    buffer_gl0_inv1232; GFX10-NEXT:    s_endpgm1233;1234; GFX11-LABEL: global_sub_saddr_i64_nortn_neg128:1235; GFX11:       ; %bb.0:1236; GFX11-NEXT:    global_atomic_sub_u64 v0, v[1:2], s[2:3] offset:-1281237; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01238; GFX11-NEXT:    buffer_gl1_inv1239; GFX11-NEXT:    buffer_gl0_inv1240; GFX11-NEXT:    s_endpgm1241;1242; GFX12-LABEL: global_sub_saddr_i64_nortn_neg128:1243; GFX12:       ; %bb.0:1244; GFX12-NEXT:    global_atomic_sub_u64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV1245; GFX12-NEXT:    s_wait_storecnt 0x01246; GFX12-NEXT:    global_inv scope:SCOPE_DEV1247; GFX12-NEXT:    s_endpgm1248  %zext.offset = zext i32 %voffset to i641249  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1250  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281251  %unused = atomicrmw sub ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01252  ret void1253}1254 1255; --------------------------------------------------------------------------------1256; atomicrmw and1257; --------------------------------------------------------------------------------1258 1259define amdgpu_ps float @global_and_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1260; GFX9-LABEL: global_and_saddr_i32_rtn:1261; GFX9:       ; %bb.0:1262; GFX9-NEXT:    global_atomic_and v0, v0, v1, s[2:3] glc1263; GFX9-NEXT:    s_waitcnt vmcnt(0)1264; GFX9-NEXT:    buffer_wbinvl11265; GFX9-NEXT:    ; return to shader part epilog1266;1267; GFX10-LABEL: global_and_saddr_i32_rtn:1268; GFX10:       ; %bb.0:1269; GFX10-NEXT:    global_atomic_and v0, v0, v1, s[2:3] glc1270; GFX10-NEXT:    s_waitcnt vmcnt(0)1271; GFX10-NEXT:    buffer_gl1_inv1272; GFX10-NEXT:    buffer_gl0_inv1273; GFX10-NEXT:    ; return to shader part epilog1274;1275; GFX11-LABEL: global_and_saddr_i32_rtn:1276; GFX11:       ; %bb.0:1277; GFX11-NEXT:    global_atomic_and_b32 v0, v0, v1, s[2:3] glc1278; GFX11-NEXT:    s_waitcnt vmcnt(0)1279; GFX11-NEXT:    buffer_gl1_inv1280; GFX11-NEXT:    buffer_gl0_inv1281; GFX11-NEXT:    ; return to shader part epilog1282;1283; GFX12-LABEL: global_and_saddr_i32_rtn:1284; GFX12:       ; %bb.0:1285; GFX12-NEXT:    global_atomic_and_b32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1286; GFX12-NEXT:    s_wait_loadcnt 0x01287; GFX12-NEXT:    global_inv scope:SCOPE_DEV1288; GFX12-NEXT:    s_wait_loadcnt 0x01289; GFX12-NEXT:    ; return to shader part epilog1290  %zext.offset = zext i32 %voffset to i641291  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1292  %rtn = atomicrmw and ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01293  %cast.rtn = bitcast i32 %rtn to float1294  ret float %cast.rtn1295}1296 1297define amdgpu_ps float @global_and_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1298; GFX9-LABEL: global_and_saddr_i32_rtn_neg128:1299; GFX9:       ; %bb.0:1300; GFX9-NEXT:    global_atomic_and v0, v0, v1, s[2:3] offset:-128 glc1301; GFX9-NEXT:    s_waitcnt vmcnt(0)1302; GFX9-NEXT:    buffer_wbinvl11303; GFX9-NEXT:    ; return to shader part epilog1304;1305; GFX10-LABEL: global_and_saddr_i32_rtn_neg128:1306; GFX10:       ; %bb.0:1307; GFX10-NEXT:    global_atomic_and v0, v0, v1, s[2:3] offset:-128 glc1308; GFX10-NEXT:    s_waitcnt vmcnt(0)1309; GFX10-NEXT:    buffer_gl1_inv1310; GFX10-NEXT:    buffer_gl0_inv1311; GFX10-NEXT:    ; return to shader part epilog1312;1313; GFX11-LABEL: global_and_saddr_i32_rtn_neg128:1314; GFX11:       ; %bb.0:1315; GFX11-NEXT:    global_atomic_and_b32 v0, v0, v1, s[2:3] offset:-128 glc1316; GFX11-NEXT:    s_waitcnt vmcnt(0)1317; GFX11-NEXT:    buffer_gl1_inv1318; GFX11-NEXT:    buffer_gl0_inv1319; GFX11-NEXT:    ; return to shader part epilog1320;1321; GFX12-LABEL: global_and_saddr_i32_rtn_neg128:1322; GFX12:       ; %bb.0:1323; GFX12-NEXT:    global_atomic_and_b32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1324; GFX12-NEXT:    s_wait_loadcnt 0x01325; GFX12-NEXT:    global_inv scope:SCOPE_DEV1326; GFX12-NEXT:    s_wait_loadcnt 0x01327; GFX12-NEXT:    ; return to shader part epilog1328  %zext.offset = zext i32 %voffset to i641329  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1330  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281331  %rtn = atomicrmw and ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01332  %cast.rtn = bitcast i32 %rtn to float1333  ret float %cast.rtn1334}1335 1336define amdgpu_ps void @global_and_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1337; GFX9-LABEL: global_and_saddr_i32_nortn:1338; GFX9:       ; %bb.0:1339; GFX9-NEXT:    global_atomic_and v0, v1, s[2:3]1340; GFX9-NEXT:    s_waitcnt vmcnt(0)1341; GFX9-NEXT:    buffer_wbinvl11342; GFX9-NEXT:    s_endpgm1343;1344; GFX10-LABEL: global_and_saddr_i32_nortn:1345; GFX10:       ; %bb.0:1346; GFX10-NEXT:    global_atomic_and v0, v1, s[2:3]1347; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01348; GFX10-NEXT:    buffer_gl1_inv1349; GFX10-NEXT:    buffer_gl0_inv1350; GFX10-NEXT:    s_endpgm1351;1352; GFX11-LABEL: global_and_saddr_i32_nortn:1353; GFX11:       ; %bb.0:1354; GFX11-NEXT:    global_atomic_and_b32 v0, v1, s[2:3]1355; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01356; GFX11-NEXT:    buffer_gl1_inv1357; GFX11-NEXT:    buffer_gl0_inv1358; GFX11-NEXT:    s_endpgm1359;1360; GFX12-LABEL: global_and_saddr_i32_nortn:1361; GFX12:       ; %bb.0:1362; GFX12-NEXT:    global_atomic_and_b32 v0, v1, s[2:3] scope:SCOPE_DEV1363; GFX12-NEXT:    s_wait_storecnt 0x01364; GFX12-NEXT:    global_inv scope:SCOPE_DEV1365; GFX12-NEXT:    s_endpgm1366  %zext.offset = zext i32 %voffset to i641367  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1368  %unused = atomicrmw and ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01369  ret void1370}1371 1372define amdgpu_ps void @global_and_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1373; GFX9-LABEL: global_and_saddr_i32_nortn_neg128:1374; GFX9:       ; %bb.0:1375; GFX9-NEXT:    global_atomic_and v0, v1, s[2:3] offset:-1281376; GFX9-NEXT:    s_waitcnt vmcnt(0)1377; GFX9-NEXT:    buffer_wbinvl11378; GFX9-NEXT:    s_endpgm1379;1380; GFX10-LABEL: global_and_saddr_i32_nortn_neg128:1381; GFX10:       ; %bb.0:1382; GFX10-NEXT:    global_atomic_and v0, v1, s[2:3] offset:-1281383; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01384; GFX10-NEXT:    buffer_gl1_inv1385; GFX10-NEXT:    buffer_gl0_inv1386; GFX10-NEXT:    s_endpgm1387;1388; GFX11-LABEL: global_and_saddr_i32_nortn_neg128:1389; GFX11:       ; %bb.0:1390; GFX11-NEXT:    global_atomic_and_b32 v0, v1, s[2:3] offset:-1281391; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01392; GFX11-NEXT:    buffer_gl1_inv1393; GFX11-NEXT:    buffer_gl0_inv1394; GFX11-NEXT:    s_endpgm1395;1396; GFX12-LABEL: global_and_saddr_i32_nortn_neg128:1397; GFX12:       ; %bb.0:1398; GFX12-NEXT:    global_atomic_and_b32 v0, v1, s[2:3] offset:-128 scope:SCOPE_DEV1399; GFX12-NEXT:    s_wait_storecnt 0x01400; GFX12-NEXT:    global_inv scope:SCOPE_DEV1401; GFX12-NEXT:    s_endpgm1402  %zext.offset = zext i32 %voffset to i641403  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1404  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281405  %unused = atomicrmw and ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01406  ret void1407}1408 1409define amdgpu_ps <2 x float> @global_and_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1410; GFX9-LABEL: global_and_saddr_i64_rtn:1411; GFX9:       ; %bb.0:1412; GFX9-NEXT:    global_atomic_and_x2 v[0:1], v0, v[1:2], s[2:3] glc1413; GFX9-NEXT:    s_waitcnt vmcnt(0)1414; GFX9-NEXT:    buffer_wbinvl11415; GFX9-NEXT:    ; return to shader part epilog1416;1417; GFX10-LABEL: global_and_saddr_i64_rtn:1418; GFX10:       ; %bb.0:1419; GFX10-NEXT:    global_atomic_and_x2 v[0:1], v0, v[1:2], s[2:3] glc1420; GFX10-NEXT:    s_waitcnt vmcnt(0)1421; GFX10-NEXT:    buffer_gl1_inv1422; GFX10-NEXT:    buffer_gl0_inv1423; GFX10-NEXT:    ; return to shader part epilog1424;1425; GFX11-LABEL: global_and_saddr_i64_rtn:1426; GFX11:       ; %bb.0:1427; GFX11-NEXT:    global_atomic_and_b64 v[0:1], v0, v[1:2], s[2:3] glc1428; GFX11-NEXT:    s_waitcnt vmcnt(0)1429; GFX11-NEXT:    buffer_gl1_inv1430; GFX11-NEXT:    buffer_gl0_inv1431; GFX11-NEXT:    ; return to shader part epilog1432;1433; GFX12-LABEL: global_and_saddr_i64_rtn:1434; GFX12:       ; %bb.0:1435; GFX12-NEXT:    global_atomic_and_b64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1436; GFX12-NEXT:    s_wait_loadcnt 0x01437; GFX12-NEXT:    global_inv scope:SCOPE_DEV1438; GFX12-NEXT:    s_wait_loadcnt 0x01439; GFX12-NEXT:    ; return to shader part epilog1440  %zext.offset = zext i32 %voffset to i641441  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1442  %rtn = atomicrmw and ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01443  %cast.rtn = bitcast i64 %rtn to <2 x float>1444  ret <2 x float> %cast.rtn1445}1446 1447define amdgpu_ps <2 x float> @global_and_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1448; GFX9-LABEL: global_and_saddr_i64_rtn_neg128:1449; GFX9:       ; %bb.0:1450; GFX9-NEXT:    global_atomic_and_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1451; GFX9-NEXT:    s_waitcnt vmcnt(0)1452; GFX9-NEXT:    buffer_wbinvl11453; GFX9-NEXT:    ; return to shader part epilog1454;1455; GFX10-LABEL: global_and_saddr_i64_rtn_neg128:1456; GFX10:       ; %bb.0:1457; GFX10-NEXT:    global_atomic_and_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1458; GFX10-NEXT:    s_waitcnt vmcnt(0)1459; GFX10-NEXT:    buffer_gl1_inv1460; GFX10-NEXT:    buffer_gl0_inv1461; GFX10-NEXT:    ; return to shader part epilog1462;1463; GFX11-LABEL: global_and_saddr_i64_rtn_neg128:1464; GFX11:       ; %bb.0:1465; GFX11-NEXT:    global_atomic_and_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1466; GFX11-NEXT:    s_waitcnt vmcnt(0)1467; GFX11-NEXT:    buffer_gl1_inv1468; GFX11-NEXT:    buffer_gl0_inv1469; GFX11-NEXT:    ; return to shader part epilog1470;1471; GFX12-LABEL: global_and_saddr_i64_rtn_neg128:1472; GFX12:       ; %bb.0:1473; GFX12-NEXT:    global_atomic_and_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1474; GFX12-NEXT:    s_wait_loadcnt 0x01475; GFX12-NEXT:    global_inv scope:SCOPE_DEV1476; GFX12-NEXT:    s_wait_loadcnt 0x01477; GFX12-NEXT:    ; return to shader part epilog1478  %zext.offset = zext i32 %voffset to i641479  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1480  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281481  %rtn = atomicrmw and ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01482  %cast.rtn = bitcast i64 %rtn to <2 x float>1483  ret <2 x float> %cast.rtn1484}1485 1486define amdgpu_ps void @global_and_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1487; GFX9-LABEL: global_and_saddr_i64_nortn:1488; GFX9:       ; %bb.0:1489; GFX9-NEXT:    global_atomic_and_x2 v0, v[1:2], s[2:3]1490; GFX9-NEXT:    s_waitcnt vmcnt(0)1491; GFX9-NEXT:    buffer_wbinvl11492; GFX9-NEXT:    s_endpgm1493;1494; GFX10-LABEL: global_and_saddr_i64_nortn:1495; GFX10:       ; %bb.0:1496; GFX10-NEXT:    global_atomic_and_x2 v0, v[1:2], s[2:3]1497; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01498; GFX10-NEXT:    buffer_gl1_inv1499; GFX10-NEXT:    buffer_gl0_inv1500; GFX10-NEXT:    s_endpgm1501;1502; GFX11-LABEL: global_and_saddr_i64_nortn:1503; GFX11:       ; %bb.0:1504; GFX11-NEXT:    global_atomic_and_b64 v0, v[1:2], s[2:3]1505; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01506; GFX11-NEXT:    buffer_gl1_inv1507; GFX11-NEXT:    buffer_gl0_inv1508; GFX11-NEXT:    s_endpgm1509;1510; GFX12-LABEL: global_and_saddr_i64_nortn:1511; GFX12:       ; %bb.0:1512; GFX12-NEXT:    global_atomic_and_b64 v0, v[1:2], s[2:3] scope:SCOPE_DEV1513; GFX12-NEXT:    s_wait_storecnt 0x01514; GFX12-NEXT:    global_inv scope:SCOPE_DEV1515; GFX12-NEXT:    s_endpgm1516  %zext.offset = zext i32 %voffset to i641517  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1518  %unused = atomicrmw and ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01519  ret void1520}1521 1522define amdgpu_ps void @global_and_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1523; GFX9-LABEL: global_and_saddr_i64_nortn_neg128:1524; GFX9:       ; %bb.0:1525; GFX9-NEXT:    global_atomic_and_x2 v0, v[1:2], s[2:3] offset:-1281526; GFX9-NEXT:    s_waitcnt vmcnt(0)1527; GFX9-NEXT:    buffer_wbinvl11528; GFX9-NEXT:    s_endpgm1529;1530; GFX10-LABEL: global_and_saddr_i64_nortn_neg128:1531; GFX10:       ; %bb.0:1532; GFX10-NEXT:    global_atomic_and_x2 v0, v[1:2], s[2:3] offset:-1281533; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01534; GFX10-NEXT:    buffer_gl1_inv1535; GFX10-NEXT:    buffer_gl0_inv1536; GFX10-NEXT:    s_endpgm1537;1538; GFX11-LABEL: global_and_saddr_i64_nortn_neg128:1539; GFX11:       ; %bb.0:1540; GFX11-NEXT:    global_atomic_and_b64 v0, v[1:2], s[2:3] offset:-1281541; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01542; GFX11-NEXT:    buffer_gl1_inv1543; GFX11-NEXT:    buffer_gl0_inv1544; GFX11-NEXT:    s_endpgm1545;1546; GFX12-LABEL: global_and_saddr_i64_nortn_neg128:1547; GFX12:       ; %bb.0:1548; GFX12-NEXT:    global_atomic_and_b64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV1549; GFX12-NEXT:    s_wait_storecnt 0x01550; GFX12-NEXT:    global_inv scope:SCOPE_DEV1551; GFX12-NEXT:    s_endpgm1552  %zext.offset = zext i32 %voffset to i641553  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1554  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281555  %unused = atomicrmw and ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01556  ret void1557}1558 1559; --------------------------------------------------------------------------------1560; atomicrmw or1561; --------------------------------------------------------------------------------1562 1563define amdgpu_ps float @global_or_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1564; GFX9-LABEL: global_or_saddr_i32_rtn:1565; GFX9:       ; %bb.0:1566; GFX9-NEXT:    global_atomic_or v0, v0, v1, s[2:3] glc1567; GFX9-NEXT:    s_waitcnt vmcnt(0)1568; GFX9-NEXT:    buffer_wbinvl11569; GFX9-NEXT:    ; return to shader part epilog1570;1571; GFX10-LABEL: global_or_saddr_i32_rtn:1572; GFX10:       ; %bb.0:1573; GFX10-NEXT:    global_atomic_or v0, v0, v1, s[2:3] glc1574; GFX10-NEXT:    s_waitcnt vmcnt(0)1575; GFX10-NEXT:    buffer_gl1_inv1576; GFX10-NEXT:    buffer_gl0_inv1577; GFX10-NEXT:    ; return to shader part epilog1578;1579; GFX11-LABEL: global_or_saddr_i32_rtn:1580; GFX11:       ; %bb.0:1581; GFX11-NEXT:    global_atomic_or_b32 v0, v0, v1, s[2:3] glc1582; GFX11-NEXT:    s_waitcnt vmcnt(0)1583; GFX11-NEXT:    buffer_gl1_inv1584; GFX11-NEXT:    buffer_gl0_inv1585; GFX11-NEXT:    ; return to shader part epilog1586;1587; GFX12-LABEL: global_or_saddr_i32_rtn:1588; GFX12:       ; %bb.0:1589; GFX12-NEXT:    global_atomic_or_b32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1590; GFX12-NEXT:    s_wait_loadcnt 0x01591; GFX12-NEXT:    global_inv scope:SCOPE_DEV1592; GFX12-NEXT:    s_wait_loadcnt 0x01593; GFX12-NEXT:    ; return to shader part epilog1594  %zext.offset = zext i32 %voffset to i641595  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1596  %rtn = atomicrmw or ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01597  %cast.rtn = bitcast i32 %rtn to float1598  ret float %cast.rtn1599}1600 1601define amdgpu_ps float @global_or_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1602; GFX9-LABEL: global_or_saddr_i32_rtn_neg128:1603; GFX9:       ; %bb.0:1604; GFX9-NEXT:    global_atomic_or v0, v0, v1, s[2:3] offset:-128 glc1605; GFX9-NEXT:    s_waitcnt vmcnt(0)1606; GFX9-NEXT:    buffer_wbinvl11607; GFX9-NEXT:    ; return to shader part epilog1608;1609; GFX10-LABEL: global_or_saddr_i32_rtn_neg128:1610; GFX10:       ; %bb.0:1611; GFX10-NEXT:    global_atomic_or v0, v0, v1, s[2:3] offset:-128 glc1612; GFX10-NEXT:    s_waitcnt vmcnt(0)1613; GFX10-NEXT:    buffer_gl1_inv1614; GFX10-NEXT:    buffer_gl0_inv1615; GFX10-NEXT:    ; return to shader part epilog1616;1617; GFX11-LABEL: global_or_saddr_i32_rtn_neg128:1618; GFX11:       ; %bb.0:1619; GFX11-NEXT:    global_atomic_or_b32 v0, v0, v1, s[2:3] offset:-128 glc1620; GFX11-NEXT:    s_waitcnt vmcnt(0)1621; GFX11-NEXT:    buffer_gl1_inv1622; GFX11-NEXT:    buffer_gl0_inv1623; GFX11-NEXT:    ; return to shader part epilog1624;1625; GFX12-LABEL: global_or_saddr_i32_rtn_neg128:1626; GFX12:       ; %bb.0:1627; GFX12-NEXT:    global_atomic_or_b32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1628; GFX12-NEXT:    s_wait_loadcnt 0x01629; GFX12-NEXT:    global_inv scope:SCOPE_DEV1630; GFX12-NEXT:    s_wait_loadcnt 0x01631; GFX12-NEXT:    ; return to shader part epilog1632  %zext.offset = zext i32 %voffset to i641633  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1634  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281635  %rtn = atomicrmw or ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01636  %cast.rtn = bitcast i32 %rtn to float1637  ret float %cast.rtn1638}1639 1640define amdgpu_ps void @global_or_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1641; GFX9-LABEL: global_or_saddr_i32_nortn:1642; GFX9:       ; %bb.0:1643; GFX9-NEXT:    global_atomic_or v0, v1, s[2:3]1644; GFX9-NEXT:    s_waitcnt vmcnt(0)1645; GFX9-NEXT:    buffer_wbinvl11646; GFX9-NEXT:    s_endpgm1647;1648; GFX10-LABEL: global_or_saddr_i32_nortn:1649; GFX10:       ; %bb.0:1650; GFX10-NEXT:    global_atomic_or v0, v1, s[2:3]1651; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01652; GFX10-NEXT:    buffer_gl1_inv1653; GFX10-NEXT:    buffer_gl0_inv1654; GFX10-NEXT:    s_endpgm1655;1656; GFX11-LABEL: global_or_saddr_i32_nortn:1657; GFX11:       ; %bb.0:1658; GFX11-NEXT:    global_atomic_or_b32 v0, v1, s[2:3]1659; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01660; GFX11-NEXT:    buffer_gl1_inv1661; GFX11-NEXT:    buffer_gl0_inv1662; GFX11-NEXT:    s_endpgm1663;1664; GFX12-LABEL: global_or_saddr_i32_nortn:1665; GFX12:       ; %bb.0:1666; GFX12-NEXT:    global_atomic_or_b32 v0, v1, s[2:3] scope:SCOPE_DEV1667; GFX12-NEXT:    s_wait_storecnt 0x01668; GFX12-NEXT:    global_inv scope:SCOPE_DEV1669; GFX12-NEXT:    s_endpgm1670  %zext.offset = zext i32 %voffset to i641671  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1672  %unused = atomicrmw or ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01673  ret void1674}1675 1676define amdgpu_ps void @global_or_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1677; GFX9-LABEL: global_or_saddr_i32_nortn_neg128:1678; GFX9:       ; %bb.0:1679; GFX9-NEXT:    global_atomic_or v0, v1, s[2:3] offset:-1281680; GFX9-NEXT:    s_waitcnt vmcnt(0)1681; GFX9-NEXT:    buffer_wbinvl11682; GFX9-NEXT:    s_endpgm1683;1684; GFX10-LABEL: global_or_saddr_i32_nortn_neg128:1685; GFX10:       ; %bb.0:1686; GFX10-NEXT:    global_atomic_or v0, v1, s[2:3] offset:-1281687; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01688; GFX10-NEXT:    buffer_gl1_inv1689; GFX10-NEXT:    buffer_gl0_inv1690; GFX10-NEXT:    s_endpgm1691;1692; GFX11-LABEL: global_or_saddr_i32_nortn_neg128:1693; GFX11:       ; %bb.0:1694; GFX11-NEXT:    global_atomic_or_b32 v0, v1, s[2:3] offset:-1281695; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01696; GFX11-NEXT:    buffer_gl1_inv1697; GFX11-NEXT:    buffer_gl0_inv1698; GFX11-NEXT:    s_endpgm1699;1700; GFX12-LABEL: global_or_saddr_i32_nortn_neg128:1701; GFX12:       ; %bb.0:1702; GFX12-NEXT:    global_atomic_or_b32 v0, v1, s[2:3] offset:-128 scope:SCOPE_DEV1703; GFX12-NEXT:    s_wait_storecnt 0x01704; GFX12-NEXT:    global_inv scope:SCOPE_DEV1705; GFX12-NEXT:    s_endpgm1706  %zext.offset = zext i32 %voffset to i641707  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1708  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281709  %unused = atomicrmw or ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01710  ret void1711}1712 1713define amdgpu_ps <2 x float> @global_or_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1714; GFX9-LABEL: global_or_saddr_i64_rtn:1715; GFX9:       ; %bb.0:1716; GFX9-NEXT:    global_atomic_or_x2 v[0:1], v0, v[1:2], s[2:3] glc1717; GFX9-NEXT:    s_waitcnt vmcnt(0)1718; GFX9-NEXT:    buffer_wbinvl11719; GFX9-NEXT:    ; return to shader part epilog1720;1721; GFX10-LABEL: global_or_saddr_i64_rtn:1722; GFX10:       ; %bb.0:1723; GFX10-NEXT:    global_atomic_or_x2 v[0:1], v0, v[1:2], s[2:3] glc1724; GFX10-NEXT:    s_waitcnt vmcnt(0)1725; GFX10-NEXT:    buffer_gl1_inv1726; GFX10-NEXT:    buffer_gl0_inv1727; GFX10-NEXT:    ; return to shader part epilog1728;1729; GFX11-LABEL: global_or_saddr_i64_rtn:1730; GFX11:       ; %bb.0:1731; GFX11-NEXT:    global_atomic_or_b64 v[0:1], v0, v[1:2], s[2:3] glc1732; GFX11-NEXT:    s_waitcnt vmcnt(0)1733; GFX11-NEXT:    buffer_gl1_inv1734; GFX11-NEXT:    buffer_gl0_inv1735; GFX11-NEXT:    ; return to shader part epilog1736;1737; GFX12-LABEL: global_or_saddr_i64_rtn:1738; GFX12:       ; %bb.0:1739; GFX12-NEXT:    global_atomic_or_b64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1740; GFX12-NEXT:    s_wait_loadcnt 0x01741; GFX12-NEXT:    global_inv scope:SCOPE_DEV1742; GFX12-NEXT:    s_wait_loadcnt 0x01743; GFX12-NEXT:    ; return to shader part epilog1744  %zext.offset = zext i32 %voffset to i641745  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1746  %rtn = atomicrmw or ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01747  %cast.rtn = bitcast i64 %rtn to <2 x float>1748  ret <2 x float> %cast.rtn1749}1750 1751define amdgpu_ps <2 x float> @global_or_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1752; GFX9-LABEL: global_or_saddr_i64_rtn_neg128:1753; GFX9:       ; %bb.0:1754; GFX9-NEXT:    global_atomic_or_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1755; GFX9-NEXT:    s_waitcnt vmcnt(0)1756; GFX9-NEXT:    buffer_wbinvl11757; GFX9-NEXT:    ; return to shader part epilog1758;1759; GFX10-LABEL: global_or_saddr_i64_rtn_neg128:1760; GFX10:       ; %bb.0:1761; GFX10-NEXT:    global_atomic_or_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1762; GFX10-NEXT:    s_waitcnt vmcnt(0)1763; GFX10-NEXT:    buffer_gl1_inv1764; GFX10-NEXT:    buffer_gl0_inv1765; GFX10-NEXT:    ; return to shader part epilog1766;1767; GFX11-LABEL: global_or_saddr_i64_rtn_neg128:1768; GFX11:       ; %bb.0:1769; GFX11-NEXT:    global_atomic_or_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc1770; GFX11-NEXT:    s_waitcnt vmcnt(0)1771; GFX11-NEXT:    buffer_gl1_inv1772; GFX11-NEXT:    buffer_gl0_inv1773; GFX11-NEXT:    ; return to shader part epilog1774;1775; GFX12-LABEL: global_or_saddr_i64_rtn_neg128:1776; GFX12:       ; %bb.0:1777; GFX12-NEXT:    global_atomic_or_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1778; GFX12-NEXT:    s_wait_loadcnt 0x01779; GFX12-NEXT:    global_inv scope:SCOPE_DEV1780; GFX12-NEXT:    s_wait_loadcnt 0x01781; GFX12-NEXT:    ; return to shader part epilog1782  %zext.offset = zext i32 %voffset to i641783  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1784  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281785  %rtn = atomicrmw or ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01786  %cast.rtn = bitcast i64 %rtn to <2 x float>1787  ret <2 x float> %cast.rtn1788}1789 1790define amdgpu_ps void @global_or_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1791; GFX9-LABEL: global_or_saddr_i64_nortn:1792; GFX9:       ; %bb.0:1793; GFX9-NEXT:    global_atomic_or_x2 v0, v[1:2], s[2:3]1794; GFX9-NEXT:    s_waitcnt vmcnt(0)1795; GFX9-NEXT:    buffer_wbinvl11796; GFX9-NEXT:    s_endpgm1797;1798; GFX10-LABEL: global_or_saddr_i64_nortn:1799; GFX10:       ; %bb.0:1800; GFX10-NEXT:    global_atomic_or_x2 v0, v[1:2], s[2:3]1801; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01802; GFX10-NEXT:    buffer_gl1_inv1803; GFX10-NEXT:    buffer_gl0_inv1804; GFX10-NEXT:    s_endpgm1805;1806; GFX11-LABEL: global_or_saddr_i64_nortn:1807; GFX11:       ; %bb.0:1808; GFX11-NEXT:    global_atomic_or_b64 v0, v[1:2], s[2:3]1809; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01810; GFX11-NEXT:    buffer_gl1_inv1811; GFX11-NEXT:    buffer_gl0_inv1812; GFX11-NEXT:    s_endpgm1813;1814; GFX12-LABEL: global_or_saddr_i64_nortn:1815; GFX12:       ; %bb.0:1816; GFX12-NEXT:    global_atomic_or_b64 v0, v[1:2], s[2:3] scope:SCOPE_DEV1817; GFX12-NEXT:    s_wait_storecnt 0x01818; GFX12-NEXT:    global_inv scope:SCOPE_DEV1819; GFX12-NEXT:    s_endpgm1820  %zext.offset = zext i32 %voffset to i641821  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1822  %unused = atomicrmw or ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01823  ret void1824}1825 1826define amdgpu_ps void @global_or_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {1827; GFX9-LABEL: global_or_saddr_i64_nortn_neg128:1828; GFX9:       ; %bb.0:1829; GFX9-NEXT:    global_atomic_or_x2 v0, v[1:2], s[2:3] offset:-1281830; GFX9-NEXT:    s_waitcnt vmcnt(0)1831; GFX9-NEXT:    buffer_wbinvl11832; GFX9-NEXT:    s_endpgm1833;1834; GFX10-LABEL: global_or_saddr_i64_nortn_neg128:1835; GFX10:       ; %bb.0:1836; GFX10-NEXT:    global_atomic_or_x2 v0, v[1:2], s[2:3] offset:-1281837; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01838; GFX10-NEXT:    buffer_gl1_inv1839; GFX10-NEXT:    buffer_gl0_inv1840; GFX10-NEXT:    s_endpgm1841;1842; GFX11-LABEL: global_or_saddr_i64_nortn_neg128:1843; GFX11:       ; %bb.0:1844; GFX11-NEXT:    global_atomic_or_b64 v0, v[1:2], s[2:3] offset:-1281845; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01846; GFX11-NEXT:    buffer_gl1_inv1847; GFX11-NEXT:    buffer_gl0_inv1848; GFX11-NEXT:    s_endpgm1849;1850; GFX12-LABEL: global_or_saddr_i64_nortn_neg128:1851; GFX12:       ; %bb.0:1852; GFX12-NEXT:    global_atomic_or_b64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV1853; GFX12-NEXT:    s_wait_storecnt 0x01854; GFX12-NEXT:    global_inv scope:SCOPE_DEV1855; GFX12-NEXT:    s_endpgm1856  %zext.offset = zext i32 %voffset to i641857  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1858  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281859  %unused = atomicrmw or ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01860  ret void1861}1862 1863; --------------------------------------------------------------------------------1864; atomicrmw xor1865; --------------------------------------------------------------------------------1866 1867define amdgpu_ps float @global_xor_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1868; GFX9-LABEL: global_xor_saddr_i32_rtn:1869; GFX9:       ; %bb.0:1870; GFX9-NEXT:    global_atomic_xor v0, v0, v1, s[2:3] glc1871; GFX9-NEXT:    s_waitcnt vmcnt(0)1872; GFX9-NEXT:    buffer_wbinvl11873; GFX9-NEXT:    ; return to shader part epilog1874;1875; GFX10-LABEL: global_xor_saddr_i32_rtn:1876; GFX10:       ; %bb.0:1877; GFX10-NEXT:    global_atomic_xor v0, v0, v1, s[2:3] glc1878; GFX10-NEXT:    s_waitcnt vmcnt(0)1879; GFX10-NEXT:    buffer_gl1_inv1880; GFX10-NEXT:    buffer_gl0_inv1881; GFX10-NEXT:    ; return to shader part epilog1882;1883; GFX11-LABEL: global_xor_saddr_i32_rtn:1884; GFX11:       ; %bb.0:1885; GFX11-NEXT:    global_atomic_xor_b32 v0, v0, v1, s[2:3] glc1886; GFX11-NEXT:    s_waitcnt vmcnt(0)1887; GFX11-NEXT:    buffer_gl1_inv1888; GFX11-NEXT:    buffer_gl0_inv1889; GFX11-NEXT:    ; return to shader part epilog1890;1891; GFX12-LABEL: global_xor_saddr_i32_rtn:1892; GFX12:       ; %bb.0:1893; GFX12-NEXT:    global_atomic_xor_b32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV1894; GFX12-NEXT:    s_wait_loadcnt 0x01895; GFX12-NEXT:    global_inv scope:SCOPE_DEV1896; GFX12-NEXT:    s_wait_loadcnt 0x01897; GFX12-NEXT:    ; return to shader part epilog1898  %zext.offset = zext i32 %voffset to i641899  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1900  %rtn = atomicrmw xor ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01901  %cast.rtn = bitcast i32 %rtn to float1902  ret float %cast.rtn1903}1904 1905define amdgpu_ps float @global_xor_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1906; GFX9-LABEL: global_xor_saddr_i32_rtn_neg128:1907; GFX9:       ; %bb.0:1908; GFX9-NEXT:    global_atomic_xor v0, v0, v1, s[2:3] offset:-128 glc1909; GFX9-NEXT:    s_waitcnt vmcnt(0)1910; GFX9-NEXT:    buffer_wbinvl11911; GFX9-NEXT:    ; return to shader part epilog1912;1913; GFX10-LABEL: global_xor_saddr_i32_rtn_neg128:1914; GFX10:       ; %bb.0:1915; GFX10-NEXT:    global_atomic_xor v0, v0, v1, s[2:3] offset:-128 glc1916; GFX10-NEXT:    s_waitcnt vmcnt(0)1917; GFX10-NEXT:    buffer_gl1_inv1918; GFX10-NEXT:    buffer_gl0_inv1919; GFX10-NEXT:    ; return to shader part epilog1920;1921; GFX11-LABEL: global_xor_saddr_i32_rtn_neg128:1922; GFX11:       ; %bb.0:1923; GFX11-NEXT:    global_atomic_xor_b32 v0, v0, v1, s[2:3] offset:-128 glc1924; GFX11-NEXT:    s_waitcnt vmcnt(0)1925; GFX11-NEXT:    buffer_gl1_inv1926; GFX11-NEXT:    buffer_gl0_inv1927; GFX11-NEXT:    ; return to shader part epilog1928;1929; GFX12-LABEL: global_xor_saddr_i32_rtn_neg128:1930; GFX12:       ; %bb.0:1931; GFX12-NEXT:    global_atomic_xor_b32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV1932; GFX12-NEXT:    s_wait_loadcnt 0x01933; GFX12-NEXT:    global_inv scope:SCOPE_DEV1934; GFX12-NEXT:    s_wait_loadcnt 0x01935; GFX12-NEXT:    ; return to shader part epilog1936  %zext.offset = zext i32 %voffset to i641937  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1938  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1281939  %rtn = atomicrmw xor ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01940  %cast.rtn = bitcast i32 %rtn to float1941  ret float %cast.rtn1942}1943 1944define amdgpu_ps void @global_xor_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1945; GFX9-LABEL: global_xor_saddr_i32_nortn:1946; GFX9:       ; %bb.0:1947; GFX9-NEXT:    global_atomic_xor v0, v1, s[2:3]1948; GFX9-NEXT:    s_waitcnt vmcnt(0)1949; GFX9-NEXT:    buffer_wbinvl11950; GFX9-NEXT:    s_endpgm1951;1952; GFX10-LABEL: global_xor_saddr_i32_nortn:1953; GFX10:       ; %bb.0:1954; GFX10-NEXT:    global_atomic_xor v0, v1, s[2:3]1955; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01956; GFX10-NEXT:    buffer_gl1_inv1957; GFX10-NEXT:    buffer_gl0_inv1958; GFX10-NEXT:    s_endpgm1959;1960; GFX11-LABEL: global_xor_saddr_i32_nortn:1961; GFX11:       ; %bb.0:1962; GFX11-NEXT:    global_atomic_xor_b32 v0, v1, s[2:3]1963; GFX11-NEXT:    s_waitcnt_vscnt null, 0x01964; GFX11-NEXT:    buffer_gl1_inv1965; GFX11-NEXT:    buffer_gl0_inv1966; GFX11-NEXT:    s_endpgm1967;1968; GFX12-LABEL: global_xor_saddr_i32_nortn:1969; GFX12:       ; %bb.0:1970; GFX12-NEXT:    global_atomic_xor_b32 v0, v1, s[2:3] scope:SCOPE_DEV1971; GFX12-NEXT:    s_wait_storecnt 0x01972; GFX12-NEXT:    global_inv scope:SCOPE_DEV1973; GFX12-NEXT:    s_endpgm1974  %zext.offset = zext i32 %voffset to i641975  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset1976  %unused = atomicrmw xor ptr addrspace(1) %gep0, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !01977  ret void1978}1979 1980define amdgpu_ps void @global_xor_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {1981; GFX9-LABEL: global_xor_saddr_i32_nortn_neg128:1982; GFX9:       ; %bb.0:1983; GFX9-NEXT:    global_atomic_xor v0, v1, s[2:3] offset:-1281984; GFX9-NEXT:    s_waitcnt vmcnt(0)1985; GFX9-NEXT:    buffer_wbinvl11986; GFX9-NEXT:    s_endpgm1987;1988; GFX10-LABEL: global_xor_saddr_i32_nortn_neg128:1989; GFX10:       ; %bb.0:1990; GFX10-NEXT:    global_atomic_xor v0, v1, s[2:3] offset:-1281991; GFX10-NEXT:    s_waitcnt_vscnt null, 0x01992; GFX10-NEXT:    buffer_gl1_inv1993; GFX10-NEXT:    buffer_gl0_inv1994; GFX10-NEXT:    s_endpgm1995;1996; GFX11-LABEL: global_xor_saddr_i32_nortn_neg128:1997; GFX11:       ; %bb.0:1998; GFX11-NEXT:    global_atomic_xor_b32 v0, v1, s[2:3] offset:-1281999; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02000; GFX11-NEXT:    buffer_gl1_inv2001; GFX11-NEXT:    buffer_gl0_inv2002; GFX11-NEXT:    s_endpgm2003;2004; GFX12-LABEL: global_xor_saddr_i32_nortn_neg128:2005; GFX12:       ; %bb.0:2006; GFX12-NEXT:    global_atomic_xor_b32 v0, v1, s[2:3] offset:-128 scope:SCOPE_DEV2007; GFX12-NEXT:    s_wait_storecnt 0x02008; GFX12-NEXT:    global_inv scope:SCOPE_DEV2009; GFX12-NEXT:    s_endpgm2010  %zext.offset = zext i32 %voffset to i642011  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2012  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282013  %unused = atomicrmw xor ptr addrspace(1) %gep1, i32 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02014  ret void2015}2016 2017define amdgpu_ps <2 x float> @global_xor_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2018; GFX9-LABEL: global_xor_saddr_i64_rtn:2019; GFX9:       ; %bb.0:2020; GFX9-NEXT:    global_atomic_xor_x2 v[0:1], v0, v[1:2], s[2:3] glc2021; GFX9-NEXT:    s_waitcnt vmcnt(0)2022; GFX9-NEXT:    buffer_wbinvl12023; GFX9-NEXT:    ; return to shader part epilog2024;2025; GFX10-LABEL: global_xor_saddr_i64_rtn:2026; GFX10:       ; %bb.0:2027; GFX10-NEXT:    global_atomic_xor_x2 v[0:1], v0, v[1:2], s[2:3] glc2028; GFX10-NEXT:    s_waitcnt vmcnt(0)2029; GFX10-NEXT:    buffer_gl1_inv2030; GFX10-NEXT:    buffer_gl0_inv2031; GFX10-NEXT:    ; return to shader part epilog2032;2033; GFX11-LABEL: global_xor_saddr_i64_rtn:2034; GFX11:       ; %bb.0:2035; GFX11-NEXT:    global_atomic_xor_b64 v[0:1], v0, v[1:2], s[2:3] glc2036; GFX11-NEXT:    s_waitcnt vmcnt(0)2037; GFX11-NEXT:    buffer_gl1_inv2038; GFX11-NEXT:    buffer_gl0_inv2039; GFX11-NEXT:    ; return to shader part epilog2040;2041; GFX12-LABEL: global_xor_saddr_i64_rtn:2042; GFX12:       ; %bb.0:2043; GFX12-NEXT:    global_atomic_xor_b64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV2044; GFX12-NEXT:    s_wait_loadcnt 0x02045; GFX12-NEXT:    global_inv scope:SCOPE_DEV2046; GFX12-NEXT:    s_wait_loadcnt 0x02047; GFX12-NEXT:    ; return to shader part epilog2048  %zext.offset = zext i32 %voffset to i642049  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2050  %rtn = atomicrmw xor ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02051  %cast.rtn = bitcast i64 %rtn to <2 x float>2052  ret <2 x float> %cast.rtn2053}2054 2055define amdgpu_ps <2 x float> @global_xor_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2056; GFX9-LABEL: global_xor_saddr_i64_rtn_neg128:2057; GFX9:       ; %bb.0:2058; GFX9-NEXT:    global_atomic_xor_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2059; GFX9-NEXT:    s_waitcnt vmcnt(0)2060; GFX9-NEXT:    buffer_wbinvl12061; GFX9-NEXT:    ; return to shader part epilog2062;2063; GFX10-LABEL: global_xor_saddr_i64_rtn_neg128:2064; GFX10:       ; %bb.0:2065; GFX10-NEXT:    global_atomic_xor_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2066; GFX10-NEXT:    s_waitcnt vmcnt(0)2067; GFX10-NEXT:    buffer_gl1_inv2068; GFX10-NEXT:    buffer_gl0_inv2069; GFX10-NEXT:    ; return to shader part epilog2070;2071; GFX11-LABEL: global_xor_saddr_i64_rtn_neg128:2072; GFX11:       ; %bb.0:2073; GFX11-NEXT:    global_atomic_xor_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2074; GFX11-NEXT:    s_waitcnt vmcnt(0)2075; GFX11-NEXT:    buffer_gl1_inv2076; GFX11-NEXT:    buffer_gl0_inv2077; GFX11-NEXT:    ; return to shader part epilog2078;2079; GFX12-LABEL: global_xor_saddr_i64_rtn_neg128:2080; GFX12:       ; %bb.0:2081; GFX12-NEXT:    global_atomic_xor_b64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV2082; GFX12-NEXT:    s_wait_loadcnt 0x02083; GFX12-NEXT:    global_inv scope:SCOPE_DEV2084; GFX12-NEXT:    s_wait_loadcnt 0x02085; GFX12-NEXT:    ; return to shader part epilog2086  %zext.offset = zext i32 %voffset to i642087  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2088  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282089  %rtn = atomicrmw xor ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02090  %cast.rtn = bitcast i64 %rtn to <2 x float>2091  ret <2 x float> %cast.rtn2092}2093 2094define amdgpu_ps void @global_xor_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2095; GFX9-LABEL: global_xor_saddr_i64_nortn:2096; GFX9:       ; %bb.0:2097; GFX9-NEXT:    global_atomic_xor_x2 v0, v[1:2], s[2:3]2098; GFX9-NEXT:    s_waitcnt vmcnt(0)2099; GFX9-NEXT:    buffer_wbinvl12100; GFX9-NEXT:    s_endpgm2101;2102; GFX10-LABEL: global_xor_saddr_i64_nortn:2103; GFX10:       ; %bb.0:2104; GFX10-NEXT:    global_atomic_xor_x2 v0, v[1:2], s[2:3]2105; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02106; GFX10-NEXT:    buffer_gl1_inv2107; GFX10-NEXT:    buffer_gl0_inv2108; GFX10-NEXT:    s_endpgm2109;2110; GFX11-LABEL: global_xor_saddr_i64_nortn:2111; GFX11:       ; %bb.0:2112; GFX11-NEXT:    global_atomic_xor_b64 v0, v[1:2], s[2:3]2113; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02114; GFX11-NEXT:    buffer_gl1_inv2115; GFX11-NEXT:    buffer_gl0_inv2116; GFX11-NEXT:    s_endpgm2117;2118; GFX12-LABEL: global_xor_saddr_i64_nortn:2119; GFX12:       ; %bb.0:2120; GFX12-NEXT:    global_atomic_xor_b64 v0, v[1:2], s[2:3] scope:SCOPE_DEV2121; GFX12-NEXT:    s_wait_storecnt 0x02122; GFX12-NEXT:    global_inv scope:SCOPE_DEV2123; GFX12-NEXT:    s_endpgm2124  %zext.offset = zext i32 %voffset to i642125  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2126  %unused = atomicrmw xor ptr addrspace(1) %gep0, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02127  ret void2128}2129 2130define amdgpu_ps void @global_xor_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2131; GFX9-LABEL: global_xor_saddr_i64_nortn_neg128:2132; GFX9:       ; %bb.0:2133; GFX9-NEXT:    global_atomic_xor_x2 v0, v[1:2], s[2:3] offset:-1282134; GFX9-NEXT:    s_waitcnt vmcnt(0)2135; GFX9-NEXT:    buffer_wbinvl12136; GFX9-NEXT:    s_endpgm2137;2138; GFX10-LABEL: global_xor_saddr_i64_nortn_neg128:2139; GFX10:       ; %bb.0:2140; GFX10-NEXT:    global_atomic_xor_x2 v0, v[1:2], s[2:3] offset:-1282141; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02142; GFX10-NEXT:    buffer_gl1_inv2143; GFX10-NEXT:    buffer_gl0_inv2144; GFX10-NEXT:    s_endpgm2145;2146; GFX11-LABEL: global_xor_saddr_i64_nortn_neg128:2147; GFX11:       ; %bb.0:2148; GFX11-NEXT:    global_atomic_xor_b64 v0, v[1:2], s[2:3] offset:-1282149; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02150; GFX11-NEXT:    buffer_gl1_inv2151; GFX11-NEXT:    buffer_gl0_inv2152; GFX11-NEXT:    s_endpgm2153;2154; GFX12-LABEL: global_xor_saddr_i64_nortn_neg128:2155; GFX12:       ; %bb.0:2156; GFX12-NEXT:    global_atomic_xor_b64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV2157; GFX12-NEXT:    s_wait_storecnt 0x02158; GFX12-NEXT:    global_inv scope:SCOPE_DEV2159; GFX12-NEXT:    s_endpgm2160  %zext.offset = zext i32 %voffset to i642161  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2162  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282163  %unused = atomicrmw xor ptr addrspace(1) %gep1, i64 %data syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !02164  ret void2165}2166 2167; --------------------------------------------------------------------------------2168; atomicrmw max2169; --------------------------------------------------------------------------------2170 2171define amdgpu_ps float @global_max_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2172; GFX9-LABEL: global_max_saddr_i32_rtn:2173; GFX9:       ; %bb.0:2174; GFX9-NEXT:    global_atomic_smax v0, v0, v1, s[2:3] glc2175; GFX9-NEXT:    s_waitcnt vmcnt(0)2176; GFX9-NEXT:    ; return to shader part epilog2177;2178; GFX10-LABEL: global_max_saddr_i32_rtn:2179; GFX10:       ; %bb.0:2180; GFX10-NEXT:    global_atomic_smax v0, v0, v1, s[2:3] glc2181; GFX10-NEXT:    s_waitcnt vmcnt(0)2182; GFX10-NEXT:    buffer_gl0_inv2183; GFX10-NEXT:    ; return to shader part epilog2184;2185; GFX11-LABEL: global_max_saddr_i32_rtn:2186; GFX11:       ; %bb.0:2187; GFX11-NEXT:    global_atomic_max_i32 v0, v0, v1, s[2:3] glc2188; GFX11-NEXT:    s_waitcnt vmcnt(0)2189; GFX11-NEXT:    buffer_gl0_inv2190; GFX11-NEXT:    ; return to shader part epilog2191;2192; GFX12-LABEL: global_max_saddr_i32_rtn:2193; GFX12:       ; %bb.0:2194; GFX12-NEXT:    global_atomic_max_i32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE2195; GFX12-NEXT:    s_wait_loadcnt 0x02196; GFX12-NEXT:    global_inv scope:SCOPE_SE2197; GFX12-NEXT:    s_wait_loadcnt 0x02198; GFX12-NEXT:    ; return to shader part epilog2199  %zext.offset = zext i32 %voffset to i642200  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2201  %rtn = atomicrmw max ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02202  %cast.rtn = bitcast i32 %rtn to float2203  ret float %cast.rtn2204}2205 2206define amdgpu_ps float @global_max_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2207; GFX9-LABEL: global_max_saddr_i32_rtn_neg128:2208; GFX9:       ; %bb.0:2209; GFX9-NEXT:    global_atomic_smax v0, v0, v1, s[2:3] offset:-128 glc2210; GFX9-NEXT:    s_waitcnt vmcnt(0)2211; GFX9-NEXT:    ; return to shader part epilog2212;2213; GFX10-LABEL: global_max_saddr_i32_rtn_neg128:2214; GFX10:       ; %bb.0:2215; GFX10-NEXT:    global_atomic_smax v0, v0, v1, s[2:3] offset:-128 glc2216; GFX10-NEXT:    s_waitcnt vmcnt(0)2217; GFX10-NEXT:    buffer_gl0_inv2218; GFX10-NEXT:    ; return to shader part epilog2219;2220; GFX11-LABEL: global_max_saddr_i32_rtn_neg128:2221; GFX11:       ; %bb.0:2222; GFX11-NEXT:    global_atomic_max_i32 v0, v0, v1, s[2:3] offset:-128 glc2223; GFX11-NEXT:    s_waitcnt vmcnt(0)2224; GFX11-NEXT:    buffer_gl0_inv2225; GFX11-NEXT:    ; return to shader part epilog2226;2227; GFX12-LABEL: global_max_saddr_i32_rtn_neg128:2228; GFX12:       ; %bb.0:2229; GFX12-NEXT:    global_atomic_max_i32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE2230; GFX12-NEXT:    s_wait_loadcnt 0x02231; GFX12-NEXT:    global_inv scope:SCOPE_SE2232; GFX12-NEXT:    s_wait_loadcnt 0x02233; GFX12-NEXT:    ; return to shader part epilog2234  %zext.offset = zext i32 %voffset to i642235  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2236  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282237  %rtn = atomicrmw max ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02238  %cast.rtn = bitcast i32 %rtn to float2239  ret float %cast.rtn2240}2241 2242define amdgpu_ps void @global_max_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2243; GFX9-LABEL: global_max_saddr_i32_nortn:2244; GFX9:       ; %bb.0:2245; GFX9-NEXT:    global_atomic_smax v0, v1, s[2:3]2246; GFX9-NEXT:    s_endpgm2247;2248; GFX10-LABEL: global_max_saddr_i32_nortn:2249; GFX10:       ; %bb.0:2250; GFX10-NEXT:    global_atomic_smax v0, v1, s[2:3]2251; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02252; GFX10-NEXT:    buffer_gl0_inv2253; GFX10-NEXT:    s_endpgm2254;2255; GFX11-LABEL: global_max_saddr_i32_nortn:2256; GFX11:       ; %bb.0:2257; GFX11-NEXT:    global_atomic_max_i32 v0, v1, s[2:3]2258; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02259; GFX11-NEXT:    buffer_gl0_inv2260; GFX11-NEXT:    s_endpgm2261;2262; GFX12-LABEL: global_max_saddr_i32_nortn:2263; GFX12:       ; %bb.0:2264; GFX12-NEXT:    global_atomic_max_i32 v0, v1, s[2:3] scope:SCOPE_SE2265; GFX12-NEXT:    s_wait_storecnt 0x02266; GFX12-NEXT:    global_inv scope:SCOPE_SE2267; GFX12-NEXT:    s_endpgm2268  %zext.offset = zext i32 %voffset to i642269  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2270  %unused = atomicrmw max ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02271  ret void2272}2273 2274define amdgpu_ps void @global_max_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2275; GFX9-LABEL: global_max_saddr_i32_nortn_neg128:2276; GFX9:       ; %bb.0:2277; GFX9-NEXT:    global_atomic_smax v0, v1, s[2:3] offset:-1282278; GFX9-NEXT:    s_endpgm2279;2280; GFX10-LABEL: global_max_saddr_i32_nortn_neg128:2281; GFX10:       ; %bb.0:2282; GFX10-NEXT:    global_atomic_smax v0, v1, s[2:3] offset:-1282283; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02284; GFX10-NEXT:    buffer_gl0_inv2285; GFX10-NEXT:    s_endpgm2286;2287; GFX11-LABEL: global_max_saddr_i32_nortn_neg128:2288; GFX11:       ; %bb.0:2289; GFX11-NEXT:    global_atomic_max_i32 v0, v1, s[2:3] offset:-1282290; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02291; GFX11-NEXT:    buffer_gl0_inv2292; GFX11-NEXT:    s_endpgm2293;2294; GFX12-LABEL: global_max_saddr_i32_nortn_neg128:2295; GFX12:       ; %bb.0:2296; GFX12-NEXT:    global_atomic_max_i32 v0, v1, s[2:3] offset:-128 scope:SCOPE_SE2297; GFX12-NEXT:    s_wait_storecnt 0x02298; GFX12-NEXT:    global_inv scope:SCOPE_SE2299; GFX12-NEXT:    s_endpgm2300  %zext.offset = zext i32 %voffset to i642301  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2302  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282303  %unused = atomicrmw max ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02304  ret void2305}2306 2307define amdgpu_ps <2 x float> @global_max_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2308; GFX9-LABEL: global_max_saddr_i64_rtn:2309; GFX9:       ; %bb.0:2310; GFX9-NEXT:    global_atomic_smax_x2 v[0:1], v0, v[1:2], s[2:3] glc2311; GFX9-NEXT:    s_waitcnt vmcnt(0)2312; GFX9-NEXT:    ; return to shader part epilog2313;2314; GFX10-LABEL: global_max_saddr_i64_rtn:2315; GFX10:       ; %bb.0:2316; GFX10-NEXT:    global_atomic_smax_x2 v[0:1], v0, v[1:2], s[2:3] glc2317; GFX10-NEXT:    s_waitcnt vmcnt(0)2318; GFX10-NEXT:    buffer_gl0_inv2319; GFX10-NEXT:    ; return to shader part epilog2320;2321; GFX11-LABEL: global_max_saddr_i64_rtn:2322; GFX11:       ; %bb.0:2323; GFX11-NEXT:    global_atomic_max_i64 v[0:1], v0, v[1:2], s[2:3] glc2324; GFX11-NEXT:    s_waitcnt vmcnt(0)2325; GFX11-NEXT:    buffer_gl0_inv2326; GFX11-NEXT:    ; return to shader part epilog2327;2328; GFX12-LABEL: global_max_saddr_i64_rtn:2329; GFX12:       ; %bb.0:2330; GFX12-NEXT:    global_atomic_max_i64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE2331; GFX12-NEXT:    s_wait_loadcnt 0x02332; GFX12-NEXT:    global_inv scope:SCOPE_SE2333; GFX12-NEXT:    s_wait_loadcnt 0x02334; GFX12-NEXT:    ; return to shader part epilog2335  %zext.offset = zext i32 %voffset to i642336  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2337  %rtn = atomicrmw max ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02338  %cast.rtn = bitcast i64 %rtn to <2 x float>2339  ret <2 x float> %cast.rtn2340}2341 2342define amdgpu_ps <2 x float> @global_max_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2343; GFX9-LABEL: global_max_saddr_i64_rtn_neg128:2344; GFX9:       ; %bb.0:2345; GFX9-NEXT:    global_atomic_smax_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2346; GFX9-NEXT:    s_waitcnt vmcnt(0)2347; GFX9-NEXT:    ; return to shader part epilog2348;2349; GFX10-LABEL: global_max_saddr_i64_rtn_neg128:2350; GFX10:       ; %bb.0:2351; GFX10-NEXT:    global_atomic_smax_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2352; GFX10-NEXT:    s_waitcnt vmcnt(0)2353; GFX10-NEXT:    buffer_gl0_inv2354; GFX10-NEXT:    ; return to shader part epilog2355;2356; GFX11-LABEL: global_max_saddr_i64_rtn_neg128:2357; GFX11:       ; %bb.0:2358; GFX11-NEXT:    global_atomic_max_i64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2359; GFX11-NEXT:    s_waitcnt vmcnt(0)2360; GFX11-NEXT:    buffer_gl0_inv2361; GFX11-NEXT:    ; return to shader part epilog2362;2363; GFX12-LABEL: global_max_saddr_i64_rtn_neg128:2364; GFX12:       ; %bb.0:2365; GFX12-NEXT:    global_atomic_max_i64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE2366; GFX12-NEXT:    s_wait_loadcnt 0x02367; GFX12-NEXT:    global_inv scope:SCOPE_SE2368; GFX12-NEXT:    s_wait_loadcnt 0x02369; GFX12-NEXT:    ; return to shader part epilog2370  %zext.offset = zext i32 %voffset to i642371  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2372  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282373  %rtn = atomicrmw max ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02374  %cast.rtn = bitcast i64 %rtn to <2 x float>2375  ret <2 x float> %cast.rtn2376}2377 2378define amdgpu_ps void @global_max_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2379; GFX9-LABEL: global_max_saddr_i64_nortn:2380; GFX9:       ; %bb.0:2381; GFX9-NEXT:    global_atomic_smax_x2 v0, v[1:2], s[2:3]2382; GFX9-NEXT:    s_endpgm2383;2384; GFX10-LABEL: global_max_saddr_i64_nortn:2385; GFX10:       ; %bb.0:2386; GFX10-NEXT:    global_atomic_smax_x2 v0, v[1:2], s[2:3]2387; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02388; GFX10-NEXT:    buffer_gl0_inv2389; GFX10-NEXT:    s_endpgm2390;2391; GFX11-LABEL: global_max_saddr_i64_nortn:2392; GFX11:       ; %bb.0:2393; GFX11-NEXT:    global_atomic_max_i64 v0, v[1:2], s[2:3]2394; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02395; GFX11-NEXT:    buffer_gl0_inv2396; GFX11-NEXT:    s_endpgm2397;2398; GFX12-LABEL: global_max_saddr_i64_nortn:2399; GFX12:       ; %bb.0:2400; GFX12-NEXT:    global_atomic_max_i64 v0, v[1:2], s[2:3] scope:SCOPE_SE2401; GFX12-NEXT:    s_wait_storecnt 0x02402; GFX12-NEXT:    global_inv scope:SCOPE_SE2403; GFX12-NEXT:    s_endpgm2404  %zext.offset = zext i32 %voffset to i642405  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2406  %unused = atomicrmw max ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02407  ret void2408}2409 2410define amdgpu_ps void @global_max_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2411; GFX9-LABEL: global_max_saddr_i64_nortn_neg128:2412; GFX9:       ; %bb.0:2413; GFX9-NEXT:    global_atomic_smax_x2 v0, v[1:2], s[2:3] offset:-1282414; GFX9-NEXT:    s_endpgm2415;2416; GFX10-LABEL: global_max_saddr_i64_nortn_neg128:2417; GFX10:       ; %bb.0:2418; GFX10-NEXT:    global_atomic_smax_x2 v0, v[1:2], s[2:3] offset:-1282419; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02420; GFX10-NEXT:    buffer_gl0_inv2421; GFX10-NEXT:    s_endpgm2422;2423; GFX11-LABEL: global_max_saddr_i64_nortn_neg128:2424; GFX11:       ; %bb.0:2425; GFX11-NEXT:    global_atomic_max_i64 v0, v[1:2], s[2:3] offset:-1282426; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02427; GFX11-NEXT:    buffer_gl0_inv2428; GFX11-NEXT:    s_endpgm2429;2430; GFX12-LABEL: global_max_saddr_i64_nortn_neg128:2431; GFX12:       ; %bb.0:2432; GFX12-NEXT:    global_atomic_max_i64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_SE2433; GFX12-NEXT:    s_wait_storecnt 0x02434; GFX12-NEXT:    global_inv scope:SCOPE_SE2435; GFX12-NEXT:    s_endpgm2436  %zext.offset = zext i32 %voffset to i642437  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2438  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282439  %unused = atomicrmw max ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02440  ret void2441}2442 2443; --------------------------------------------------------------------------------2444; atomicrmw min2445; --------------------------------------------------------------------------------2446 2447define amdgpu_ps float @global_min_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2448; GFX9-LABEL: global_min_saddr_i32_rtn:2449; GFX9:       ; %bb.0:2450; GFX9-NEXT:    global_atomic_smin v0, v0, v1, s[2:3] glc2451; GFX9-NEXT:    s_waitcnt vmcnt(0)2452; GFX9-NEXT:    ; return to shader part epilog2453;2454; GFX10-LABEL: global_min_saddr_i32_rtn:2455; GFX10:       ; %bb.0:2456; GFX10-NEXT:    global_atomic_smin v0, v0, v1, s[2:3] glc2457; GFX10-NEXT:    s_waitcnt vmcnt(0)2458; GFX10-NEXT:    buffer_gl0_inv2459; GFX10-NEXT:    ; return to shader part epilog2460;2461; GFX11-LABEL: global_min_saddr_i32_rtn:2462; GFX11:       ; %bb.0:2463; GFX11-NEXT:    global_atomic_min_i32 v0, v0, v1, s[2:3] glc2464; GFX11-NEXT:    s_waitcnt vmcnt(0)2465; GFX11-NEXT:    buffer_gl0_inv2466; GFX11-NEXT:    ; return to shader part epilog2467;2468; GFX12-LABEL: global_min_saddr_i32_rtn:2469; GFX12:       ; %bb.0:2470; GFX12-NEXT:    global_atomic_min_i32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE2471; GFX12-NEXT:    s_wait_loadcnt 0x02472; GFX12-NEXT:    global_inv scope:SCOPE_SE2473; GFX12-NEXT:    s_wait_loadcnt 0x02474; GFX12-NEXT:    ; return to shader part epilog2475  %zext.offset = zext i32 %voffset to i642476  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2477  %rtn = atomicrmw min ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02478  %cast.rtn = bitcast i32 %rtn to float2479  ret float %cast.rtn2480}2481 2482define amdgpu_ps float @global_min_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2483; GFX9-LABEL: global_min_saddr_i32_rtn_neg128:2484; GFX9:       ; %bb.0:2485; GFX9-NEXT:    global_atomic_smin v0, v0, v1, s[2:3] offset:-128 glc2486; GFX9-NEXT:    s_waitcnt vmcnt(0)2487; GFX9-NEXT:    ; return to shader part epilog2488;2489; GFX10-LABEL: global_min_saddr_i32_rtn_neg128:2490; GFX10:       ; %bb.0:2491; GFX10-NEXT:    global_atomic_smin v0, v0, v1, s[2:3] offset:-128 glc2492; GFX10-NEXT:    s_waitcnt vmcnt(0)2493; GFX10-NEXT:    buffer_gl0_inv2494; GFX10-NEXT:    ; return to shader part epilog2495;2496; GFX11-LABEL: global_min_saddr_i32_rtn_neg128:2497; GFX11:       ; %bb.0:2498; GFX11-NEXT:    global_atomic_min_i32 v0, v0, v1, s[2:3] offset:-128 glc2499; GFX11-NEXT:    s_waitcnt vmcnt(0)2500; GFX11-NEXT:    buffer_gl0_inv2501; GFX11-NEXT:    ; return to shader part epilog2502;2503; GFX12-LABEL: global_min_saddr_i32_rtn_neg128:2504; GFX12:       ; %bb.0:2505; GFX12-NEXT:    global_atomic_min_i32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE2506; GFX12-NEXT:    s_wait_loadcnt 0x02507; GFX12-NEXT:    global_inv scope:SCOPE_SE2508; GFX12-NEXT:    s_wait_loadcnt 0x02509; GFX12-NEXT:    ; return to shader part epilog2510  %zext.offset = zext i32 %voffset to i642511  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2512  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282513  %rtn = atomicrmw min ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02514  %cast.rtn = bitcast i32 %rtn to float2515  ret float %cast.rtn2516}2517 2518define amdgpu_ps void @global_min_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2519; GFX9-LABEL: global_min_saddr_i32_nortn:2520; GFX9:       ; %bb.0:2521; GFX9-NEXT:    global_atomic_smin v0, v1, s[2:3]2522; GFX9-NEXT:    s_endpgm2523;2524; GFX10-LABEL: global_min_saddr_i32_nortn:2525; GFX10:       ; %bb.0:2526; GFX10-NEXT:    global_atomic_smin v0, v1, s[2:3]2527; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02528; GFX10-NEXT:    buffer_gl0_inv2529; GFX10-NEXT:    s_endpgm2530;2531; GFX11-LABEL: global_min_saddr_i32_nortn:2532; GFX11:       ; %bb.0:2533; GFX11-NEXT:    global_atomic_min_i32 v0, v1, s[2:3]2534; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02535; GFX11-NEXT:    buffer_gl0_inv2536; GFX11-NEXT:    s_endpgm2537;2538; GFX12-LABEL: global_min_saddr_i32_nortn:2539; GFX12:       ; %bb.0:2540; GFX12-NEXT:    global_atomic_min_i32 v0, v1, s[2:3] scope:SCOPE_SE2541; GFX12-NEXT:    s_wait_storecnt 0x02542; GFX12-NEXT:    global_inv scope:SCOPE_SE2543; GFX12-NEXT:    s_endpgm2544  %zext.offset = zext i32 %voffset to i642545  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2546  %unused = atomicrmw min ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02547  ret void2548}2549 2550define amdgpu_ps void @global_min_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2551; GFX9-LABEL: global_min_saddr_i32_nortn_neg128:2552; GFX9:       ; %bb.0:2553; GFX9-NEXT:    global_atomic_smin v0, v1, s[2:3] offset:-1282554; GFX9-NEXT:    s_endpgm2555;2556; GFX10-LABEL: global_min_saddr_i32_nortn_neg128:2557; GFX10:       ; %bb.0:2558; GFX10-NEXT:    global_atomic_smin v0, v1, s[2:3] offset:-1282559; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02560; GFX10-NEXT:    buffer_gl0_inv2561; GFX10-NEXT:    s_endpgm2562;2563; GFX11-LABEL: global_min_saddr_i32_nortn_neg128:2564; GFX11:       ; %bb.0:2565; GFX11-NEXT:    global_atomic_min_i32 v0, v1, s[2:3] offset:-1282566; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02567; GFX11-NEXT:    buffer_gl0_inv2568; GFX11-NEXT:    s_endpgm2569;2570; GFX12-LABEL: global_min_saddr_i32_nortn_neg128:2571; GFX12:       ; %bb.0:2572; GFX12-NEXT:    global_atomic_min_i32 v0, v1, s[2:3] offset:-128 scope:SCOPE_SE2573; GFX12-NEXT:    s_wait_storecnt 0x02574; GFX12-NEXT:    global_inv scope:SCOPE_SE2575; GFX12-NEXT:    s_endpgm2576  %zext.offset = zext i32 %voffset to i642577  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2578  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282579  %unused = atomicrmw min ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02580  ret void2581}2582 2583define amdgpu_ps <2 x float> @global_min_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2584; GFX9-LABEL: global_min_saddr_i64_rtn:2585; GFX9:       ; %bb.0:2586; GFX9-NEXT:    global_atomic_smin_x2 v[0:1], v0, v[1:2], s[2:3] glc2587; GFX9-NEXT:    s_waitcnt vmcnt(0)2588; GFX9-NEXT:    ; return to shader part epilog2589;2590; GFX10-LABEL: global_min_saddr_i64_rtn:2591; GFX10:       ; %bb.0:2592; GFX10-NEXT:    global_atomic_smin_x2 v[0:1], v0, v[1:2], s[2:3] glc2593; GFX10-NEXT:    s_waitcnt vmcnt(0)2594; GFX10-NEXT:    buffer_gl0_inv2595; GFX10-NEXT:    ; return to shader part epilog2596;2597; GFX11-LABEL: global_min_saddr_i64_rtn:2598; GFX11:       ; %bb.0:2599; GFX11-NEXT:    global_atomic_min_i64 v[0:1], v0, v[1:2], s[2:3] glc2600; GFX11-NEXT:    s_waitcnt vmcnt(0)2601; GFX11-NEXT:    buffer_gl0_inv2602; GFX11-NEXT:    ; return to shader part epilog2603;2604; GFX12-LABEL: global_min_saddr_i64_rtn:2605; GFX12:       ; %bb.0:2606; GFX12-NEXT:    global_atomic_min_i64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE2607; GFX12-NEXT:    s_wait_loadcnt 0x02608; GFX12-NEXT:    global_inv scope:SCOPE_SE2609; GFX12-NEXT:    s_wait_loadcnt 0x02610; GFX12-NEXT:    ; return to shader part epilog2611  %zext.offset = zext i32 %voffset to i642612  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2613  %rtn = atomicrmw min ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02614  %cast.rtn = bitcast i64 %rtn to <2 x float>2615  ret <2 x float> %cast.rtn2616}2617 2618define amdgpu_ps <2 x float> @global_min_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2619; GFX9-LABEL: global_min_saddr_i64_rtn_neg128:2620; GFX9:       ; %bb.0:2621; GFX9-NEXT:    global_atomic_smin_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2622; GFX9-NEXT:    s_waitcnt vmcnt(0)2623; GFX9-NEXT:    ; return to shader part epilog2624;2625; GFX10-LABEL: global_min_saddr_i64_rtn_neg128:2626; GFX10:       ; %bb.0:2627; GFX10-NEXT:    global_atomic_smin_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2628; GFX10-NEXT:    s_waitcnt vmcnt(0)2629; GFX10-NEXT:    buffer_gl0_inv2630; GFX10-NEXT:    ; return to shader part epilog2631;2632; GFX11-LABEL: global_min_saddr_i64_rtn_neg128:2633; GFX11:       ; %bb.0:2634; GFX11-NEXT:    global_atomic_min_i64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2635; GFX11-NEXT:    s_waitcnt vmcnt(0)2636; GFX11-NEXT:    buffer_gl0_inv2637; GFX11-NEXT:    ; return to shader part epilog2638;2639; GFX12-LABEL: global_min_saddr_i64_rtn_neg128:2640; GFX12:       ; %bb.0:2641; GFX12-NEXT:    global_atomic_min_i64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE2642; GFX12-NEXT:    s_wait_loadcnt 0x02643; GFX12-NEXT:    global_inv scope:SCOPE_SE2644; GFX12-NEXT:    s_wait_loadcnt 0x02645; GFX12-NEXT:    ; return to shader part epilog2646  %zext.offset = zext i32 %voffset to i642647  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2648  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282649  %rtn = atomicrmw min ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02650  %cast.rtn = bitcast i64 %rtn to <2 x float>2651  ret <2 x float> %cast.rtn2652}2653 2654define amdgpu_ps void @global_min_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2655; GFX9-LABEL: global_min_saddr_i64_nortn:2656; GFX9:       ; %bb.0:2657; GFX9-NEXT:    global_atomic_smin_x2 v0, v[1:2], s[2:3]2658; GFX9-NEXT:    s_endpgm2659;2660; GFX10-LABEL: global_min_saddr_i64_nortn:2661; GFX10:       ; %bb.0:2662; GFX10-NEXT:    global_atomic_smin_x2 v0, v[1:2], s[2:3]2663; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02664; GFX10-NEXT:    buffer_gl0_inv2665; GFX10-NEXT:    s_endpgm2666;2667; GFX11-LABEL: global_min_saddr_i64_nortn:2668; GFX11:       ; %bb.0:2669; GFX11-NEXT:    global_atomic_min_i64 v0, v[1:2], s[2:3]2670; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02671; GFX11-NEXT:    buffer_gl0_inv2672; GFX11-NEXT:    s_endpgm2673;2674; GFX12-LABEL: global_min_saddr_i64_nortn:2675; GFX12:       ; %bb.0:2676; GFX12-NEXT:    global_atomic_min_i64 v0, v[1:2], s[2:3] scope:SCOPE_SE2677; GFX12-NEXT:    s_wait_storecnt 0x02678; GFX12-NEXT:    global_inv scope:SCOPE_SE2679; GFX12-NEXT:    s_endpgm2680  %zext.offset = zext i32 %voffset to i642681  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2682  %unused = atomicrmw min ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02683  ret void2684}2685 2686define amdgpu_ps void @global_min_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2687; GFX9-LABEL: global_min_saddr_i64_nortn_neg128:2688; GFX9:       ; %bb.0:2689; GFX9-NEXT:    global_atomic_smin_x2 v0, v[1:2], s[2:3] offset:-1282690; GFX9-NEXT:    s_endpgm2691;2692; GFX10-LABEL: global_min_saddr_i64_nortn_neg128:2693; GFX10:       ; %bb.0:2694; GFX10-NEXT:    global_atomic_smin_x2 v0, v[1:2], s[2:3] offset:-1282695; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02696; GFX10-NEXT:    buffer_gl0_inv2697; GFX10-NEXT:    s_endpgm2698;2699; GFX11-LABEL: global_min_saddr_i64_nortn_neg128:2700; GFX11:       ; %bb.0:2701; GFX11-NEXT:    global_atomic_min_i64 v0, v[1:2], s[2:3] offset:-1282702; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02703; GFX11-NEXT:    buffer_gl0_inv2704; GFX11-NEXT:    s_endpgm2705;2706; GFX12-LABEL: global_min_saddr_i64_nortn_neg128:2707; GFX12:       ; %bb.0:2708; GFX12-NEXT:    global_atomic_min_i64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_SE2709; GFX12-NEXT:    s_wait_storecnt 0x02710; GFX12-NEXT:    global_inv scope:SCOPE_SE2711; GFX12-NEXT:    s_endpgm2712  %zext.offset = zext i32 %voffset to i642713  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2714  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282715  %unused = atomicrmw min ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02716  ret void2717}2718 2719; --------------------------------------------------------------------------------2720; atomicrmw umax2721; --------------------------------------------------------------------------------2722 2723define amdgpu_ps float @global_umax_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2724; GFX9-LABEL: global_umax_saddr_i32_rtn:2725; GFX9:       ; %bb.0:2726; GFX9-NEXT:    global_atomic_umax v0, v0, v1, s[2:3] glc2727; GFX9-NEXT:    s_waitcnt vmcnt(0)2728; GFX9-NEXT:    ; return to shader part epilog2729;2730; GFX10-LABEL: global_umax_saddr_i32_rtn:2731; GFX10:       ; %bb.0:2732; GFX10-NEXT:    global_atomic_umax v0, v0, v1, s[2:3] glc2733; GFX10-NEXT:    s_waitcnt vmcnt(0)2734; GFX10-NEXT:    buffer_gl0_inv2735; GFX10-NEXT:    ; return to shader part epilog2736;2737; GFX11-LABEL: global_umax_saddr_i32_rtn:2738; GFX11:       ; %bb.0:2739; GFX11-NEXT:    global_atomic_max_u32 v0, v0, v1, s[2:3] glc2740; GFX11-NEXT:    s_waitcnt vmcnt(0)2741; GFX11-NEXT:    buffer_gl0_inv2742; GFX11-NEXT:    ; return to shader part epilog2743;2744; GFX12-LABEL: global_umax_saddr_i32_rtn:2745; GFX12:       ; %bb.0:2746; GFX12-NEXT:    global_atomic_max_u32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE2747; GFX12-NEXT:    s_wait_loadcnt 0x02748; GFX12-NEXT:    global_inv scope:SCOPE_SE2749; GFX12-NEXT:    s_wait_loadcnt 0x02750; GFX12-NEXT:    ; return to shader part epilog2751  %zext.offset = zext i32 %voffset to i642752  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2753  %rtn = atomicrmw umax ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02754  %cast.rtn = bitcast i32 %rtn to float2755  ret float %cast.rtn2756}2757 2758define amdgpu_ps float @global_umax_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2759; GFX9-LABEL: global_umax_saddr_i32_rtn_neg128:2760; GFX9:       ; %bb.0:2761; GFX9-NEXT:    global_atomic_umax v0, v0, v1, s[2:3] offset:-128 glc2762; GFX9-NEXT:    s_waitcnt vmcnt(0)2763; GFX9-NEXT:    ; return to shader part epilog2764;2765; GFX10-LABEL: global_umax_saddr_i32_rtn_neg128:2766; GFX10:       ; %bb.0:2767; GFX10-NEXT:    global_atomic_umax v0, v0, v1, s[2:3] offset:-128 glc2768; GFX10-NEXT:    s_waitcnt vmcnt(0)2769; GFX10-NEXT:    buffer_gl0_inv2770; GFX10-NEXT:    ; return to shader part epilog2771;2772; GFX11-LABEL: global_umax_saddr_i32_rtn_neg128:2773; GFX11:       ; %bb.0:2774; GFX11-NEXT:    global_atomic_max_u32 v0, v0, v1, s[2:3] offset:-128 glc2775; GFX11-NEXT:    s_waitcnt vmcnt(0)2776; GFX11-NEXT:    buffer_gl0_inv2777; GFX11-NEXT:    ; return to shader part epilog2778;2779; GFX12-LABEL: global_umax_saddr_i32_rtn_neg128:2780; GFX12:       ; %bb.0:2781; GFX12-NEXT:    global_atomic_max_u32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE2782; GFX12-NEXT:    s_wait_loadcnt 0x02783; GFX12-NEXT:    global_inv scope:SCOPE_SE2784; GFX12-NEXT:    s_wait_loadcnt 0x02785; GFX12-NEXT:    ; return to shader part epilog2786  %zext.offset = zext i32 %voffset to i642787  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2788  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282789  %rtn = atomicrmw umax ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02790  %cast.rtn = bitcast i32 %rtn to float2791  ret float %cast.rtn2792}2793 2794define amdgpu_ps void @global_umax_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2795; GFX9-LABEL: global_umax_saddr_i32_nortn:2796; GFX9:       ; %bb.0:2797; GFX9-NEXT:    global_atomic_umax v0, v1, s[2:3]2798; GFX9-NEXT:    s_endpgm2799;2800; GFX10-LABEL: global_umax_saddr_i32_nortn:2801; GFX10:       ; %bb.0:2802; GFX10-NEXT:    global_atomic_umax v0, v1, s[2:3]2803; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02804; GFX10-NEXT:    buffer_gl0_inv2805; GFX10-NEXT:    s_endpgm2806;2807; GFX11-LABEL: global_umax_saddr_i32_nortn:2808; GFX11:       ; %bb.0:2809; GFX11-NEXT:    global_atomic_max_u32 v0, v1, s[2:3]2810; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02811; GFX11-NEXT:    buffer_gl0_inv2812; GFX11-NEXT:    s_endpgm2813;2814; GFX12-LABEL: global_umax_saddr_i32_nortn:2815; GFX12:       ; %bb.0:2816; GFX12-NEXT:    global_atomic_max_u32 v0, v1, s[2:3] scope:SCOPE_SE2817; GFX12-NEXT:    s_wait_storecnt 0x02818; GFX12-NEXT:    global_inv scope:SCOPE_SE2819; GFX12-NEXT:    s_endpgm2820  %zext.offset = zext i32 %voffset to i642821  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2822  %unused = atomicrmw umax ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02823  ret void2824}2825 2826define amdgpu_ps void @global_umax_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {2827; GFX9-LABEL: global_umax_saddr_i32_nortn_neg128:2828; GFX9:       ; %bb.0:2829; GFX9-NEXT:    global_atomic_umax v0, v1, s[2:3] offset:-1282830; GFX9-NEXT:    s_endpgm2831;2832; GFX10-LABEL: global_umax_saddr_i32_nortn_neg128:2833; GFX10:       ; %bb.0:2834; GFX10-NEXT:    global_atomic_umax v0, v1, s[2:3] offset:-1282835; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02836; GFX10-NEXT:    buffer_gl0_inv2837; GFX10-NEXT:    s_endpgm2838;2839; GFX11-LABEL: global_umax_saddr_i32_nortn_neg128:2840; GFX11:       ; %bb.0:2841; GFX11-NEXT:    global_atomic_max_u32 v0, v1, s[2:3] offset:-1282842; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02843; GFX11-NEXT:    buffer_gl0_inv2844; GFX11-NEXT:    s_endpgm2845;2846; GFX12-LABEL: global_umax_saddr_i32_nortn_neg128:2847; GFX12:       ; %bb.0:2848; GFX12-NEXT:    global_atomic_max_u32 v0, v1, s[2:3] offset:-128 scope:SCOPE_SE2849; GFX12-NEXT:    s_wait_storecnt 0x02850; GFX12-NEXT:    global_inv scope:SCOPE_SE2851; GFX12-NEXT:    s_endpgm2852  %zext.offset = zext i32 %voffset to i642853  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2854  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282855  %unused = atomicrmw umax ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02856  ret void2857}2858 2859define amdgpu_ps <2 x float> @global_umax_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2860; GFX9-LABEL: global_umax_saddr_i64_rtn:2861; GFX9:       ; %bb.0:2862; GFX9-NEXT:    global_atomic_umax_x2 v[0:1], v0, v[1:2], s[2:3] glc2863; GFX9-NEXT:    s_waitcnt vmcnt(0)2864; GFX9-NEXT:    ; return to shader part epilog2865;2866; GFX10-LABEL: global_umax_saddr_i64_rtn:2867; GFX10:       ; %bb.0:2868; GFX10-NEXT:    global_atomic_umax_x2 v[0:1], v0, v[1:2], s[2:3] glc2869; GFX10-NEXT:    s_waitcnt vmcnt(0)2870; GFX10-NEXT:    buffer_gl0_inv2871; GFX10-NEXT:    ; return to shader part epilog2872;2873; GFX11-LABEL: global_umax_saddr_i64_rtn:2874; GFX11:       ; %bb.0:2875; GFX11-NEXT:    global_atomic_max_u64 v[0:1], v0, v[1:2], s[2:3] glc2876; GFX11-NEXT:    s_waitcnt vmcnt(0)2877; GFX11-NEXT:    buffer_gl0_inv2878; GFX11-NEXT:    ; return to shader part epilog2879;2880; GFX12-LABEL: global_umax_saddr_i64_rtn:2881; GFX12:       ; %bb.0:2882; GFX12-NEXT:    global_atomic_max_u64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE2883; GFX12-NEXT:    s_wait_loadcnt 0x02884; GFX12-NEXT:    global_inv scope:SCOPE_SE2885; GFX12-NEXT:    s_wait_loadcnt 0x02886; GFX12-NEXT:    ; return to shader part epilog2887  %zext.offset = zext i32 %voffset to i642888  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2889  %rtn = atomicrmw umax ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02890  %cast.rtn = bitcast i64 %rtn to <2 x float>2891  ret <2 x float> %cast.rtn2892}2893 2894define amdgpu_ps <2 x float> @global_umax_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2895; GFX9-LABEL: global_umax_saddr_i64_rtn_neg128:2896; GFX9:       ; %bb.0:2897; GFX9-NEXT:    global_atomic_umax_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2898; GFX9-NEXT:    s_waitcnt vmcnt(0)2899; GFX9-NEXT:    ; return to shader part epilog2900;2901; GFX10-LABEL: global_umax_saddr_i64_rtn_neg128:2902; GFX10:       ; %bb.0:2903; GFX10-NEXT:    global_atomic_umax_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2904; GFX10-NEXT:    s_waitcnt vmcnt(0)2905; GFX10-NEXT:    buffer_gl0_inv2906; GFX10-NEXT:    ; return to shader part epilog2907;2908; GFX11-LABEL: global_umax_saddr_i64_rtn_neg128:2909; GFX11:       ; %bb.0:2910; GFX11-NEXT:    global_atomic_max_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc2911; GFX11-NEXT:    s_waitcnt vmcnt(0)2912; GFX11-NEXT:    buffer_gl0_inv2913; GFX11-NEXT:    ; return to shader part epilog2914;2915; GFX12-LABEL: global_umax_saddr_i64_rtn_neg128:2916; GFX12:       ; %bb.0:2917; GFX12-NEXT:    global_atomic_max_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE2918; GFX12-NEXT:    s_wait_loadcnt 0x02919; GFX12-NEXT:    global_inv scope:SCOPE_SE2920; GFX12-NEXT:    s_wait_loadcnt 0x02921; GFX12-NEXT:    ; return to shader part epilog2922  %zext.offset = zext i32 %voffset to i642923  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2924  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282925  %rtn = atomicrmw umax ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02926  %cast.rtn = bitcast i64 %rtn to <2 x float>2927  ret <2 x float> %cast.rtn2928}2929 2930define amdgpu_ps void @global_umax_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2931; GFX9-LABEL: global_umax_saddr_i64_nortn:2932; GFX9:       ; %bb.0:2933; GFX9-NEXT:    global_atomic_umax_x2 v0, v[1:2], s[2:3]2934; GFX9-NEXT:    s_endpgm2935;2936; GFX10-LABEL: global_umax_saddr_i64_nortn:2937; GFX10:       ; %bb.0:2938; GFX10-NEXT:    global_atomic_umax_x2 v0, v[1:2], s[2:3]2939; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02940; GFX10-NEXT:    buffer_gl0_inv2941; GFX10-NEXT:    s_endpgm2942;2943; GFX11-LABEL: global_umax_saddr_i64_nortn:2944; GFX11:       ; %bb.0:2945; GFX11-NEXT:    global_atomic_max_u64 v0, v[1:2], s[2:3]2946; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02947; GFX11-NEXT:    buffer_gl0_inv2948; GFX11-NEXT:    s_endpgm2949;2950; GFX12-LABEL: global_umax_saddr_i64_nortn:2951; GFX12:       ; %bb.0:2952; GFX12-NEXT:    global_atomic_max_u64 v0, v[1:2], s[2:3] scope:SCOPE_SE2953; GFX12-NEXT:    s_wait_storecnt 0x02954; GFX12-NEXT:    global_inv scope:SCOPE_SE2955; GFX12-NEXT:    s_endpgm2956  %zext.offset = zext i32 %voffset to i642957  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2958  %unused = atomicrmw umax ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02959  ret void2960}2961 2962define amdgpu_ps void @global_umax_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {2963; GFX9-LABEL: global_umax_saddr_i64_nortn_neg128:2964; GFX9:       ; %bb.0:2965; GFX9-NEXT:    global_atomic_umax_x2 v0, v[1:2], s[2:3] offset:-1282966; GFX9-NEXT:    s_endpgm2967;2968; GFX10-LABEL: global_umax_saddr_i64_nortn_neg128:2969; GFX10:       ; %bb.0:2970; GFX10-NEXT:    global_atomic_umax_x2 v0, v[1:2], s[2:3] offset:-1282971; GFX10-NEXT:    s_waitcnt_vscnt null, 0x02972; GFX10-NEXT:    buffer_gl0_inv2973; GFX10-NEXT:    s_endpgm2974;2975; GFX11-LABEL: global_umax_saddr_i64_nortn_neg128:2976; GFX11:       ; %bb.0:2977; GFX11-NEXT:    global_atomic_max_u64 v0, v[1:2], s[2:3] offset:-1282978; GFX11-NEXT:    s_waitcnt_vscnt null, 0x02979; GFX11-NEXT:    buffer_gl0_inv2980; GFX11-NEXT:    s_endpgm2981;2982; GFX12-LABEL: global_umax_saddr_i64_nortn_neg128:2983; GFX12:       ; %bb.0:2984; GFX12-NEXT:    global_atomic_max_u64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_SE2985; GFX12-NEXT:    s_wait_storecnt 0x02986; GFX12-NEXT:    global_inv scope:SCOPE_SE2987; GFX12-NEXT:    s_endpgm2988  %zext.offset = zext i32 %voffset to i642989  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset2990  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1282991  %unused = atomicrmw umax ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !02992  ret void2993}2994 2995; --------------------------------------------------------------------------------2996; atomicrmw umin2997; --------------------------------------------------------------------------------2998 2999define amdgpu_ps float @global_umin_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3000; GFX9-LABEL: global_umin_saddr_i32_rtn:3001; GFX9:       ; %bb.0:3002; GFX9-NEXT:    global_atomic_umin v0, v0, v1, s[2:3] glc3003; GFX9-NEXT:    s_waitcnt vmcnt(0)3004; GFX9-NEXT:    ; return to shader part epilog3005;3006; GFX10-LABEL: global_umin_saddr_i32_rtn:3007; GFX10:       ; %bb.0:3008; GFX10-NEXT:    global_atomic_umin v0, v0, v1, s[2:3] glc3009; GFX10-NEXT:    s_waitcnt vmcnt(0)3010; GFX10-NEXT:    buffer_gl0_inv3011; GFX10-NEXT:    ; return to shader part epilog3012;3013; GFX11-LABEL: global_umin_saddr_i32_rtn:3014; GFX11:       ; %bb.0:3015; GFX11-NEXT:    global_atomic_min_u32 v0, v0, v1, s[2:3] glc3016; GFX11-NEXT:    s_waitcnt vmcnt(0)3017; GFX11-NEXT:    buffer_gl0_inv3018; GFX11-NEXT:    ; return to shader part epilog3019;3020; GFX12-LABEL: global_umin_saddr_i32_rtn:3021; GFX12:       ; %bb.0:3022; GFX12-NEXT:    global_atomic_min_u32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE3023; GFX12-NEXT:    s_wait_loadcnt 0x03024; GFX12-NEXT:    global_inv scope:SCOPE_SE3025; GFX12-NEXT:    s_wait_loadcnt 0x03026; GFX12-NEXT:    ; return to shader part epilog3027  %zext.offset = zext i32 %voffset to i643028  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3029  %rtn = atomicrmw umin ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03030  %cast.rtn = bitcast i32 %rtn to float3031  ret float %cast.rtn3032}3033 3034define amdgpu_ps float @global_umin_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3035; GFX9-LABEL: global_umin_saddr_i32_rtn_neg128:3036; GFX9:       ; %bb.0:3037; GFX9-NEXT:    global_atomic_umin v0, v0, v1, s[2:3] offset:-128 glc3038; GFX9-NEXT:    s_waitcnt vmcnt(0)3039; GFX9-NEXT:    ; return to shader part epilog3040;3041; GFX10-LABEL: global_umin_saddr_i32_rtn_neg128:3042; GFX10:       ; %bb.0:3043; GFX10-NEXT:    global_atomic_umin v0, v0, v1, s[2:3] offset:-128 glc3044; GFX10-NEXT:    s_waitcnt vmcnt(0)3045; GFX10-NEXT:    buffer_gl0_inv3046; GFX10-NEXT:    ; return to shader part epilog3047;3048; GFX11-LABEL: global_umin_saddr_i32_rtn_neg128:3049; GFX11:       ; %bb.0:3050; GFX11-NEXT:    global_atomic_min_u32 v0, v0, v1, s[2:3] offset:-128 glc3051; GFX11-NEXT:    s_waitcnt vmcnt(0)3052; GFX11-NEXT:    buffer_gl0_inv3053; GFX11-NEXT:    ; return to shader part epilog3054;3055; GFX12-LABEL: global_umin_saddr_i32_rtn_neg128:3056; GFX12:       ; %bb.0:3057; GFX12-NEXT:    global_atomic_min_u32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE3058; GFX12-NEXT:    s_wait_loadcnt 0x03059; GFX12-NEXT:    global_inv scope:SCOPE_SE3060; GFX12-NEXT:    s_wait_loadcnt 0x03061; GFX12-NEXT:    ; return to shader part epilog3062  %zext.offset = zext i32 %voffset to i643063  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3064  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283065  %rtn = atomicrmw umin ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03066  %cast.rtn = bitcast i32 %rtn to float3067  ret float %cast.rtn3068}3069 3070define amdgpu_ps void @global_umin_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3071; GFX9-LABEL: global_umin_saddr_i32_nortn:3072; GFX9:       ; %bb.0:3073; GFX9-NEXT:    global_atomic_umin v0, v1, s[2:3]3074; GFX9-NEXT:    s_endpgm3075;3076; GFX10-LABEL: global_umin_saddr_i32_nortn:3077; GFX10:       ; %bb.0:3078; GFX10-NEXT:    global_atomic_umin v0, v1, s[2:3]3079; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03080; GFX10-NEXT:    buffer_gl0_inv3081; GFX10-NEXT:    s_endpgm3082;3083; GFX11-LABEL: global_umin_saddr_i32_nortn:3084; GFX11:       ; %bb.0:3085; GFX11-NEXT:    global_atomic_min_u32 v0, v1, s[2:3]3086; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03087; GFX11-NEXT:    buffer_gl0_inv3088; GFX11-NEXT:    s_endpgm3089;3090; GFX12-LABEL: global_umin_saddr_i32_nortn:3091; GFX12:       ; %bb.0:3092; GFX12-NEXT:    global_atomic_min_u32 v0, v1, s[2:3] scope:SCOPE_SE3093; GFX12-NEXT:    s_wait_storecnt 0x03094; GFX12-NEXT:    global_inv scope:SCOPE_SE3095; GFX12-NEXT:    s_endpgm3096  %zext.offset = zext i32 %voffset to i643097  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3098  %unused = atomicrmw umin ptr addrspace(1) %gep0, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03099  ret void3100}3101 3102define amdgpu_ps void @global_umin_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3103; GFX9-LABEL: global_umin_saddr_i32_nortn_neg128:3104; GFX9:       ; %bb.0:3105; GFX9-NEXT:    global_atomic_umin v0, v1, s[2:3] offset:-1283106; GFX9-NEXT:    s_endpgm3107;3108; GFX10-LABEL: global_umin_saddr_i32_nortn_neg128:3109; GFX10:       ; %bb.0:3110; GFX10-NEXT:    global_atomic_umin v0, v1, s[2:3] offset:-1283111; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03112; GFX10-NEXT:    buffer_gl0_inv3113; GFX10-NEXT:    s_endpgm3114;3115; GFX11-LABEL: global_umin_saddr_i32_nortn_neg128:3116; GFX11:       ; %bb.0:3117; GFX11-NEXT:    global_atomic_min_u32 v0, v1, s[2:3] offset:-1283118; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03119; GFX11-NEXT:    buffer_gl0_inv3120; GFX11-NEXT:    s_endpgm3121;3122; GFX12-LABEL: global_umin_saddr_i32_nortn_neg128:3123; GFX12:       ; %bb.0:3124; GFX12-NEXT:    global_atomic_min_u32 v0, v1, s[2:3] offset:-128 scope:SCOPE_SE3125; GFX12-NEXT:    s_wait_storecnt 0x03126; GFX12-NEXT:    global_inv scope:SCOPE_SE3127; GFX12-NEXT:    s_endpgm3128  %zext.offset = zext i32 %voffset to i643129  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3130  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283131  %unused = atomicrmw umin ptr addrspace(1) %gep1, i32 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03132  ret void3133}3134 3135define amdgpu_ps <2 x float> @global_umin_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3136; GFX9-LABEL: global_umin_saddr_i64_rtn:3137; GFX9:       ; %bb.0:3138; GFX9-NEXT:    global_atomic_umin_x2 v[0:1], v0, v[1:2], s[2:3] glc3139; GFX9-NEXT:    s_waitcnt vmcnt(0)3140; GFX9-NEXT:    ; return to shader part epilog3141;3142; GFX10-LABEL: global_umin_saddr_i64_rtn:3143; GFX10:       ; %bb.0:3144; GFX10-NEXT:    global_atomic_umin_x2 v[0:1], v0, v[1:2], s[2:3] glc3145; GFX10-NEXT:    s_waitcnt vmcnt(0)3146; GFX10-NEXT:    buffer_gl0_inv3147; GFX10-NEXT:    ; return to shader part epilog3148;3149; GFX11-LABEL: global_umin_saddr_i64_rtn:3150; GFX11:       ; %bb.0:3151; GFX11-NEXT:    global_atomic_min_u64 v[0:1], v0, v[1:2], s[2:3] glc3152; GFX11-NEXT:    s_waitcnt vmcnt(0)3153; GFX11-NEXT:    buffer_gl0_inv3154; GFX11-NEXT:    ; return to shader part epilog3155;3156; GFX12-LABEL: global_umin_saddr_i64_rtn:3157; GFX12:       ; %bb.0:3158; GFX12-NEXT:    global_atomic_min_u64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SE3159; GFX12-NEXT:    s_wait_loadcnt 0x03160; GFX12-NEXT:    global_inv scope:SCOPE_SE3161; GFX12-NEXT:    s_wait_loadcnt 0x03162; GFX12-NEXT:    ; return to shader part epilog3163  %zext.offset = zext i32 %voffset to i643164  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3165  %rtn = atomicrmw umin ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03166  %cast.rtn = bitcast i64 %rtn to <2 x float>3167  ret <2 x float> %cast.rtn3168}3169 3170define amdgpu_ps <2 x float> @global_umin_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3171; GFX9-LABEL: global_umin_saddr_i64_rtn_neg128:3172; GFX9:       ; %bb.0:3173; GFX9-NEXT:    global_atomic_umin_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc3174; GFX9-NEXT:    s_waitcnt vmcnt(0)3175; GFX9-NEXT:    ; return to shader part epilog3176;3177; GFX10-LABEL: global_umin_saddr_i64_rtn_neg128:3178; GFX10:       ; %bb.0:3179; GFX10-NEXT:    global_atomic_umin_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc3180; GFX10-NEXT:    s_waitcnt vmcnt(0)3181; GFX10-NEXT:    buffer_gl0_inv3182; GFX10-NEXT:    ; return to shader part epilog3183;3184; GFX11-LABEL: global_umin_saddr_i64_rtn_neg128:3185; GFX11:       ; %bb.0:3186; GFX11-NEXT:    global_atomic_min_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc3187; GFX11-NEXT:    s_waitcnt vmcnt(0)3188; GFX11-NEXT:    buffer_gl0_inv3189; GFX11-NEXT:    ; return to shader part epilog3190;3191; GFX12-LABEL: global_umin_saddr_i64_rtn_neg128:3192; GFX12:       ; %bb.0:3193; GFX12-NEXT:    global_atomic_min_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SE3194; GFX12-NEXT:    s_wait_loadcnt 0x03195; GFX12-NEXT:    global_inv scope:SCOPE_SE3196; GFX12-NEXT:    s_wait_loadcnt 0x03197; GFX12-NEXT:    ; return to shader part epilog3198  %zext.offset = zext i32 %voffset to i643199  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3200  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283201  %rtn = atomicrmw umin ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03202  %cast.rtn = bitcast i64 %rtn to <2 x float>3203  ret <2 x float> %cast.rtn3204}3205 3206define amdgpu_ps void @global_umin_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3207; GFX9-LABEL: global_umin_saddr_i64_nortn:3208; GFX9:       ; %bb.0:3209; GFX9-NEXT:    global_atomic_umin_x2 v0, v[1:2], s[2:3]3210; GFX9-NEXT:    s_endpgm3211;3212; GFX10-LABEL: global_umin_saddr_i64_nortn:3213; GFX10:       ; %bb.0:3214; GFX10-NEXT:    global_atomic_umin_x2 v0, v[1:2], s[2:3]3215; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03216; GFX10-NEXT:    buffer_gl0_inv3217; GFX10-NEXT:    s_endpgm3218;3219; GFX11-LABEL: global_umin_saddr_i64_nortn:3220; GFX11:       ; %bb.0:3221; GFX11-NEXT:    global_atomic_min_u64 v0, v[1:2], s[2:3]3222; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03223; GFX11-NEXT:    buffer_gl0_inv3224; GFX11-NEXT:    s_endpgm3225;3226; GFX12-LABEL: global_umin_saddr_i64_nortn:3227; GFX12:       ; %bb.0:3228; GFX12-NEXT:    global_atomic_min_u64 v0, v[1:2], s[2:3] scope:SCOPE_SE3229; GFX12-NEXT:    s_wait_storecnt 0x03230; GFX12-NEXT:    global_inv scope:SCOPE_SE3231; GFX12-NEXT:    s_endpgm3232  %zext.offset = zext i32 %voffset to i643233  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3234  %unused = atomicrmw umin ptr addrspace(1) %gep0, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03235  ret void3236}3237 3238define amdgpu_ps void @global_umin_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3239; GFX9-LABEL: global_umin_saddr_i64_nortn_neg128:3240; GFX9:       ; %bb.0:3241; GFX9-NEXT:    global_atomic_umin_x2 v0, v[1:2], s[2:3] offset:-1283242; GFX9-NEXT:    s_endpgm3243;3244; GFX10-LABEL: global_umin_saddr_i64_nortn_neg128:3245; GFX10:       ; %bb.0:3246; GFX10-NEXT:    global_atomic_umin_x2 v0, v[1:2], s[2:3] offset:-1283247; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03248; GFX10-NEXT:    buffer_gl0_inv3249; GFX10-NEXT:    s_endpgm3250;3251; GFX11-LABEL: global_umin_saddr_i64_nortn_neg128:3252; GFX11:       ; %bb.0:3253; GFX11-NEXT:    global_atomic_min_u64 v0, v[1:2], s[2:3] offset:-1283254; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03255; GFX11-NEXT:    buffer_gl0_inv3256; GFX11-NEXT:    s_endpgm3257;3258; GFX12-LABEL: global_umin_saddr_i64_nortn_neg128:3259; GFX12:       ; %bb.0:3260; GFX12-NEXT:    global_atomic_min_u64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_SE3261; GFX12-NEXT:    s_wait_storecnt 0x03262; GFX12-NEXT:    global_inv scope:SCOPE_SE3263; GFX12-NEXT:    s_endpgm3264  %zext.offset = zext i32 %voffset to i643265  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3266  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283267  %unused = atomicrmw umin ptr addrspace(1) %gep1, i64 %data syncscope("workgroup") seq_cst, !amdgpu.no.fine.grained.memory !03268  ret void3269}3270 3271; --------------------------------------------------------------------------------3272; cmpxchg3273; --------------------------------------------------------------------------------3274 3275define amdgpu_ps float @global_cmpxchg_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %cmp, i32 %data) {3276; GFX9-LABEL: global_cmpxchg_saddr_i32_rtn:3277; GFX9:       ; %bb.0:3278; GFX9-NEXT:    v_mov_b32_e32 v3, v13279; GFX9-NEXT:    global_atomic_cmpswap v0, v0, v[2:3], s[2:3] glc3280; GFX9-NEXT:    s_waitcnt vmcnt(0)3281; GFX9-NEXT:    buffer_wbinvl13282; GFX9-NEXT:    ; return to shader part epilog3283;3284; GFX10-LABEL: global_cmpxchg_saddr_i32_rtn:3285; GFX10:       ; %bb.0:3286; GFX10-NEXT:    v_mov_b32_e32 v3, v13287; GFX10-NEXT:    global_atomic_cmpswap v0, v0, v[2:3], s[2:3] glc3288; GFX10-NEXT:    s_waitcnt vmcnt(0)3289; GFX10-NEXT:    buffer_gl1_inv3290; GFX10-NEXT:    buffer_gl0_inv3291; GFX10-NEXT:    ; return to shader part epilog3292;3293; GFX11-LABEL: global_cmpxchg_saddr_i32_rtn:3294; GFX11:       ; %bb.0:3295; GFX11-NEXT:    v_mov_b32_e32 v3, v13296; GFX11-NEXT:    global_atomic_cmpswap_b32 v0, v0, v[2:3], s[2:3] glc3297; GFX11-NEXT:    s_waitcnt vmcnt(0)3298; GFX11-NEXT:    buffer_gl1_inv3299; GFX11-NEXT:    buffer_gl0_inv3300; GFX11-NEXT:    ; return to shader part epilog3301;3302; GFX12-LABEL: global_cmpxchg_saddr_i32_rtn:3303; GFX12:       ; %bb.0:3304; GFX12-NEXT:    v_mov_b32_e32 v3, v13305; GFX12-NEXT:    global_wb scope:SCOPE_SYS3306; GFX12-NEXT:    s_wait_storecnt 0x03307; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v0, v[2:3], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS3308; GFX12-NEXT:    s_wait_loadcnt 0x03309; GFX12-NEXT:    global_inv scope:SCOPE_SYS3310; GFX12-NEXT:    s_wait_loadcnt 0x03311; GFX12-NEXT:    ; return to shader part epilog3312  %zext.offset = zext i32 %voffset to i643313  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3314  %cmpxchg = cmpxchg ptr addrspace(1) %gep0, i32 %cmp, i32 %data seq_cst seq_cst3315  %rtn = extractvalue { i32, i1 } %cmpxchg, 03316  %cast.rtn = bitcast i32 %rtn to float3317  ret float %cast.rtn3318}3319 3320define amdgpu_ps float @global_cmpxchg_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %cmp, i32 %data) {3321; GFX9-LABEL: global_cmpxchg_saddr_i32_rtn_neg128:3322; GFX9:       ; %bb.0:3323; GFX9-NEXT:    v_mov_b32_e32 v3, v13324; GFX9-NEXT:    global_atomic_cmpswap v0, v0, v[2:3], s[2:3] offset:-128 glc3325; GFX9-NEXT:    s_waitcnt vmcnt(0)3326; GFX9-NEXT:    buffer_wbinvl13327; GFX9-NEXT:    ; return to shader part epilog3328;3329; GFX10-LABEL: global_cmpxchg_saddr_i32_rtn_neg128:3330; GFX10:       ; %bb.0:3331; GFX10-NEXT:    v_mov_b32_e32 v3, v13332; GFX10-NEXT:    global_atomic_cmpswap v0, v0, v[2:3], s[2:3] offset:-128 glc3333; GFX10-NEXT:    s_waitcnt vmcnt(0)3334; GFX10-NEXT:    buffer_gl1_inv3335; GFX10-NEXT:    buffer_gl0_inv3336; GFX10-NEXT:    ; return to shader part epilog3337;3338; GFX11-LABEL: global_cmpxchg_saddr_i32_rtn_neg128:3339; GFX11:       ; %bb.0:3340; GFX11-NEXT:    v_mov_b32_e32 v3, v13341; GFX11-NEXT:    global_atomic_cmpswap_b32 v0, v0, v[2:3], s[2:3] offset:-128 glc3342; GFX11-NEXT:    s_waitcnt vmcnt(0)3343; GFX11-NEXT:    buffer_gl1_inv3344; GFX11-NEXT:    buffer_gl0_inv3345; GFX11-NEXT:    ; return to shader part epilog3346;3347; GFX12-LABEL: global_cmpxchg_saddr_i32_rtn_neg128:3348; GFX12:       ; %bb.0:3349; GFX12-NEXT:    v_mov_b32_e32 v3, v13350; GFX12-NEXT:    global_wb scope:SCOPE_SYS3351; GFX12-NEXT:    s_wait_storecnt 0x03352; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v0, v[2:3], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS3353; GFX12-NEXT:    s_wait_loadcnt 0x03354; GFX12-NEXT:    global_inv scope:SCOPE_SYS3355; GFX12-NEXT:    s_wait_loadcnt 0x03356; GFX12-NEXT:    ; return to shader part epilog3357  %zext.offset = zext i32 %voffset to i643358  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3359  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283360  %cmpxchg = cmpxchg ptr addrspace(1) %gep1, i32 %cmp, i32 %data seq_cst seq_cst3361  %rtn = extractvalue { i32, i1 } %cmpxchg, 03362  %cast.rtn = bitcast i32 %rtn to float3363  ret float %cast.rtn3364}3365 3366define amdgpu_ps void @global_cmpxchg_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %cmp, i32 %data) {3367; GFX9-LABEL: global_cmpxchg_saddr_i32_nortn:3368; GFX9:       ; %bb.0:3369; GFX9-NEXT:    v_mov_b32_e32 v3, v13370; GFX9-NEXT:    global_atomic_cmpswap v0, v[2:3], s[2:3]3371; GFX9-NEXT:    s_waitcnt vmcnt(0)3372; GFX9-NEXT:    buffer_wbinvl13373; GFX9-NEXT:    s_endpgm3374;3375; GFX10-LABEL: global_cmpxchg_saddr_i32_nortn:3376; GFX10:       ; %bb.0:3377; GFX10-NEXT:    v_mov_b32_e32 v3, v13378; GFX10-NEXT:    global_atomic_cmpswap v0, v[2:3], s[2:3]3379; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03380; GFX10-NEXT:    buffer_gl1_inv3381; GFX10-NEXT:    buffer_gl0_inv3382; GFX10-NEXT:    s_endpgm3383;3384; GFX11-LABEL: global_cmpxchg_saddr_i32_nortn:3385; GFX11:       ; %bb.0:3386; GFX11-NEXT:    v_mov_b32_e32 v3, v13387; GFX11-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[2:3]3388; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03389; GFX11-NEXT:    buffer_gl1_inv3390; GFX11-NEXT:    buffer_gl0_inv3391; GFX11-NEXT:    s_endpgm3392;3393; GFX12-LABEL: global_cmpxchg_saddr_i32_nortn:3394; GFX12:       ; %bb.0:3395; GFX12-NEXT:    v_mov_b32_e32 v3, v13396; GFX12-NEXT:    global_wb scope:SCOPE_SYS3397; GFX12-NEXT:    s_wait_storecnt 0x03398; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[2:3] scope:SCOPE_SYS3399; GFX12-NEXT:    s_wait_storecnt 0x03400; GFX12-NEXT:    global_inv scope:SCOPE_SYS3401; GFX12-NEXT:    s_endpgm3402  %zext.offset = zext i32 %voffset to i643403  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3404  %unused = cmpxchg ptr addrspace(1) %gep0, i32 %cmp, i32 %data seq_cst seq_cst3405  ret void3406}3407 3408define amdgpu_ps void @global_cmpxchg_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %cmp, i32 %data) {3409; GFX9-LABEL: global_cmpxchg_saddr_i32_nortn_neg128:3410; GFX9:       ; %bb.0:3411; GFX9-NEXT:    v_mov_b32_e32 v3, v13412; GFX9-NEXT:    global_atomic_cmpswap v0, v[2:3], s[2:3] offset:-1283413; GFX9-NEXT:    s_waitcnt vmcnt(0)3414; GFX9-NEXT:    buffer_wbinvl13415; GFX9-NEXT:    s_endpgm3416;3417; GFX10-LABEL: global_cmpxchg_saddr_i32_nortn_neg128:3418; GFX10:       ; %bb.0:3419; GFX10-NEXT:    v_mov_b32_e32 v3, v13420; GFX10-NEXT:    global_atomic_cmpswap v0, v[2:3], s[2:3] offset:-1283421; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03422; GFX10-NEXT:    buffer_gl1_inv3423; GFX10-NEXT:    buffer_gl0_inv3424; GFX10-NEXT:    s_endpgm3425;3426; GFX11-LABEL: global_cmpxchg_saddr_i32_nortn_neg128:3427; GFX11:       ; %bb.0:3428; GFX11-NEXT:    v_mov_b32_e32 v3, v13429; GFX11-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[2:3] offset:-1283430; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03431; GFX11-NEXT:    buffer_gl1_inv3432; GFX11-NEXT:    buffer_gl0_inv3433; GFX11-NEXT:    s_endpgm3434;3435; GFX12-LABEL: global_cmpxchg_saddr_i32_nortn_neg128:3436; GFX12:       ; %bb.0:3437; GFX12-NEXT:    v_mov_b32_e32 v3, v13438; GFX12-NEXT:    global_wb scope:SCOPE_SYS3439; GFX12-NEXT:    s_wait_storecnt 0x03440; GFX12-NEXT:    global_atomic_cmpswap_b32 v0, v[2:3], s[2:3] offset:-128 scope:SCOPE_SYS3441; GFX12-NEXT:    s_wait_storecnt 0x03442; GFX12-NEXT:    global_inv scope:SCOPE_SYS3443; GFX12-NEXT:    s_endpgm3444  %zext.offset = zext i32 %voffset to i643445  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3446  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283447  %unused = cmpxchg ptr addrspace(1) %gep1, i32 %cmp, i32 %data seq_cst seq_cst3448  ret void3449}3450 3451define amdgpu_ps <2 x float> @global_cmpxchg_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %cmp, i64 %data) {3452; GFX9-LABEL: global_cmpxchg_saddr_i64_rtn:3453; GFX9:       ; %bb.0:3454; GFX9-NEXT:    v_mov_b32_e32 v6, v23455; GFX9-NEXT:    v_mov_b32_e32 v5, v13456; GFX9-NEXT:    global_atomic_cmpswap_x2 v[0:1], v0, v[3:6], s[2:3] glc3457; GFX9-NEXT:    s_waitcnt vmcnt(0)3458; GFX9-NEXT:    buffer_wbinvl13459; GFX9-NEXT:    ; return to shader part epilog3460;3461; GFX10-LABEL: global_cmpxchg_saddr_i64_rtn:3462; GFX10:       ; %bb.0:3463; GFX10-NEXT:    v_mov_b32_e32 v6, v23464; GFX10-NEXT:    v_mov_b32_e32 v5, v13465; GFX10-NEXT:    global_atomic_cmpswap_x2 v[0:1], v0, v[3:6], s[2:3] glc3466; GFX10-NEXT:    s_waitcnt vmcnt(0)3467; GFX10-NEXT:    buffer_gl1_inv3468; GFX10-NEXT:    buffer_gl0_inv3469; GFX10-NEXT:    ; return to shader part epilog3470;3471; GFX11-LABEL: global_cmpxchg_saddr_i64_rtn:3472; GFX11:       ; %bb.0:3473; GFX11-NEXT:    v_mov_b32_e32 v6, v23474; GFX11-NEXT:    v_mov_b32_e32 v5, v13475; GFX11-NEXT:    global_atomic_cmpswap_b64 v[0:1], v0, v[3:6], s[2:3] glc3476; GFX11-NEXT:    s_waitcnt vmcnt(0)3477; GFX11-NEXT:    buffer_gl1_inv3478; GFX11-NEXT:    buffer_gl0_inv3479; GFX11-NEXT:    ; return to shader part epilog3480;3481; GFX12-LABEL: global_cmpxchg_saddr_i64_rtn:3482; GFX12:       ; %bb.0:3483; GFX12-NEXT:    v_mov_b32_e32 v6, v23484; GFX12-NEXT:    v_mov_b32_e32 v5, v13485; GFX12-NEXT:    global_wb scope:SCOPE_SYS3486; GFX12-NEXT:    s_wait_storecnt 0x03487; GFX12-NEXT:    global_atomic_cmpswap_b64 v[0:1], v0, v[3:6], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS3488; GFX12-NEXT:    s_wait_loadcnt 0x03489; GFX12-NEXT:    global_inv scope:SCOPE_SYS3490; GFX12-NEXT:    s_wait_loadcnt 0x03491; GFX12-NEXT:    ; return to shader part epilog3492  %zext.offset = zext i32 %voffset to i643493  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3494  %cmpxchg = cmpxchg ptr addrspace(1) %gep0, i64 %cmp, i64 %data seq_cst seq_cst3495  %rtn = extractvalue { i64, i1 } %cmpxchg, 03496  %cast.rtn = bitcast i64 %rtn to <2 x float>3497  ret <2 x float> %cast.rtn3498}3499 3500define amdgpu_ps <2 x float> @global_cmpxchg_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %cmp, i64 %data) {3501; GFX9-LABEL: global_cmpxchg_saddr_i64_rtn_neg128:3502; GFX9:       ; %bb.0:3503; GFX9-NEXT:    v_mov_b32_e32 v6, v23504; GFX9-NEXT:    v_mov_b32_e32 v5, v13505; GFX9-NEXT:    global_atomic_cmpswap_x2 v[0:1], v0, v[3:6], s[2:3] offset:-128 glc3506; GFX9-NEXT:    s_waitcnt vmcnt(0)3507; GFX9-NEXT:    buffer_wbinvl13508; GFX9-NEXT:    ; return to shader part epilog3509;3510; GFX10-LABEL: global_cmpxchg_saddr_i64_rtn_neg128:3511; GFX10:       ; %bb.0:3512; GFX10-NEXT:    v_mov_b32_e32 v6, v23513; GFX10-NEXT:    v_mov_b32_e32 v5, v13514; GFX10-NEXT:    global_atomic_cmpswap_x2 v[0:1], v0, v[3:6], s[2:3] offset:-128 glc3515; GFX10-NEXT:    s_waitcnt vmcnt(0)3516; GFX10-NEXT:    buffer_gl1_inv3517; GFX10-NEXT:    buffer_gl0_inv3518; GFX10-NEXT:    ; return to shader part epilog3519;3520; GFX11-LABEL: global_cmpxchg_saddr_i64_rtn_neg128:3521; GFX11:       ; %bb.0:3522; GFX11-NEXT:    v_mov_b32_e32 v6, v23523; GFX11-NEXT:    v_mov_b32_e32 v5, v13524; GFX11-NEXT:    global_atomic_cmpswap_b64 v[0:1], v0, v[3:6], s[2:3] offset:-128 glc3525; GFX11-NEXT:    s_waitcnt vmcnt(0)3526; GFX11-NEXT:    buffer_gl1_inv3527; GFX11-NEXT:    buffer_gl0_inv3528; GFX11-NEXT:    ; return to shader part epilog3529;3530; GFX12-LABEL: global_cmpxchg_saddr_i64_rtn_neg128:3531; GFX12:       ; %bb.0:3532; GFX12-NEXT:    v_mov_b32_e32 v6, v23533; GFX12-NEXT:    v_mov_b32_e32 v5, v13534; GFX12-NEXT:    global_wb scope:SCOPE_SYS3535; GFX12-NEXT:    s_wait_storecnt 0x03536; GFX12-NEXT:    global_atomic_cmpswap_b64 v[0:1], v0, v[3:6], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_SYS3537; GFX12-NEXT:    s_wait_loadcnt 0x03538; GFX12-NEXT:    global_inv scope:SCOPE_SYS3539; GFX12-NEXT:    s_wait_loadcnt 0x03540; GFX12-NEXT:    ; return to shader part epilog3541  %zext.offset = zext i32 %voffset to i643542  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3543  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283544  %cmpxchg = cmpxchg ptr addrspace(1) %gep1, i64 %cmp, i64 %data seq_cst seq_cst3545  %rtn = extractvalue { i64, i1 } %cmpxchg, 03546  %cast.rtn = bitcast i64 %rtn to <2 x float>3547  ret <2 x float> %cast.rtn3548}3549 3550define amdgpu_ps void @global_cmpxchg_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %cmp, i64 %data) {3551; GFX9-LABEL: global_cmpxchg_saddr_i64_nortn:3552; GFX9:       ; %bb.0:3553; GFX9-NEXT:    v_mov_b32_e32 v6, v23554; GFX9-NEXT:    v_mov_b32_e32 v5, v13555; GFX9-NEXT:    global_atomic_cmpswap_x2 v0, v[3:6], s[2:3]3556; GFX9-NEXT:    s_waitcnt vmcnt(0)3557; GFX9-NEXT:    buffer_wbinvl13558; GFX9-NEXT:    s_endpgm3559;3560; GFX10-LABEL: global_cmpxchg_saddr_i64_nortn:3561; GFX10:       ; %bb.0:3562; GFX10-NEXT:    v_mov_b32_e32 v6, v23563; GFX10-NEXT:    v_mov_b32_e32 v5, v13564; GFX10-NEXT:    global_atomic_cmpswap_x2 v0, v[3:6], s[2:3]3565; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03566; GFX10-NEXT:    buffer_gl1_inv3567; GFX10-NEXT:    buffer_gl0_inv3568; GFX10-NEXT:    s_endpgm3569;3570; GFX11-LABEL: global_cmpxchg_saddr_i64_nortn:3571; GFX11:       ; %bb.0:3572; GFX11-NEXT:    v_mov_b32_e32 v6, v23573; GFX11-NEXT:    v_mov_b32_e32 v5, v13574; GFX11-NEXT:    global_atomic_cmpswap_b64 v0, v[3:6], s[2:3]3575; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03576; GFX11-NEXT:    buffer_gl1_inv3577; GFX11-NEXT:    buffer_gl0_inv3578; GFX11-NEXT:    s_endpgm3579;3580; GFX12-LABEL: global_cmpxchg_saddr_i64_nortn:3581; GFX12:       ; %bb.0:3582; GFX12-NEXT:    v_mov_b32_e32 v6, v23583; GFX12-NEXT:    v_mov_b32_e32 v5, v13584; GFX12-NEXT:    global_wb scope:SCOPE_SYS3585; GFX12-NEXT:    s_wait_storecnt 0x03586; GFX12-NEXT:    global_atomic_cmpswap_b64 v0, v[3:6], s[2:3] scope:SCOPE_SYS3587; GFX12-NEXT:    s_wait_storecnt 0x03588; GFX12-NEXT:    global_inv scope:SCOPE_SYS3589; GFX12-NEXT:    s_endpgm3590  %zext.offset = zext i32 %voffset to i643591  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3592  %unused = cmpxchg ptr addrspace(1) %gep0, i64 %cmp, i64 %data seq_cst seq_cst3593  ret void3594}3595 3596define amdgpu_ps void @global_cmpxchg_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %cmp, i64 %data) {3597; GFX9-LABEL: global_cmpxchg_saddr_i64_nortn_neg128:3598; GFX9:       ; %bb.0:3599; GFX9-NEXT:    v_mov_b32_e32 v6, v23600; GFX9-NEXT:    v_mov_b32_e32 v5, v13601; GFX9-NEXT:    global_atomic_cmpswap_x2 v0, v[3:6], s[2:3] offset:-1283602; GFX9-NEXT:    s_waitcnt vmcnt(0)3603; GFX9-NEXT:    buffer_wbinvl13604; GFX9-NEXT:    s_endpgm3605;3606; GFX10-LABEL: global_cmpxchg_saddr_i64_nortn_neg128:3607; GFX10:       ; %bb.0:3608; GFX10-NEXT:    v_mov_b32_e32 v6, v23609; GFX10-NEXT:    v_mov_b32_e32 v5, v13610; GFX10-NEXT:    global_atomic_cmpswap_x2 v0, v[3:6], s[2:3] offset:-1283611; GFX10-NEXT:    s_waitcnt_vscnt null, 0x03612; GFX10-NEXT:    buffer_gl1_inv3613; GFX10-NEXT:    buffer_gl0_inv3614; GFX10-NEXT:    s_endpgm3615;3616; GFX11-LABEL: global_cmpxchg_saddr_i64_nortn_neg128:3617; GFX11:       ; %bb.0:3618; GFX11-NEXT:    v_mov_b32_e32 v6, v23619; GFX11-NEXT:    v_mov_b32_e32 v5, v13620; GFX11-NEXT:    global_atomic_cmpswap_b64 v0, v[3:6], s[2:3] offset:-1283621; GFX11-NEXT:    s_waitcnt_vscnt null, 0x03622; GFX11-NEXT:    buffer_gl1_inv3623; GFX11-NEXT:    buffer_gl0_inv3624; GFX11-NEXT:    s_endpgm3625;3626; GFX12-LABEL: global_cmpxchg_saddr_i64_nortn_neg128:3627; GFX12:       ; %bb.0:3628; GFX12-NEXT:    v_mov_b32_e32 v6, v23629; GFX12-NEXT:    v_mov_b32_e32 v5, v13630; GFX12-NEXT:    global_wb scope:SCOPE_SYS3631; GFX12-NEXT:    s_wait_storecnt 0x03632; GFX12-NEXT:    global_atomic_cmpswap_b64 v0, v[3:6], s[2:3] offset:-128 scope:SCOPE_SYS3633; GFX12-NEXT:    s_wait_storecnt 0x03634; GFX12-NEXT:    global_inv scope:SCOPE_SYS3635; GFX12-NEXT:    s_endpgm3636  %zext.offset = zext i32 %voffset to i643637  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3638  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283639  %unused = cmpxchg ptr addrspace(1) %gep1, i64 %cmp, i64 %data seq_cst seq_cst3640  ret void3641}3642 3643; --------------------------------------------------------------------------------3644; amdgcn atomic inc3645; --------------------------------------------------------------------------------3646 3647define amdgpu_ps float @global_inc_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3648; GCN-LABEL: global_inc_saddr_i32_rtn:3649; GCN:       ; %bb.0:3650; GCN-NEXT:    global_atomic_inc v0, v0, v1, s[2:3] glc3651; GCN-NEXT:    s_waitcnt vmcnt(0)3652; GCN-NEXT:    ; return to shader part epilog3653;3654; GFX11-LABEL: global_inc_saddr_i32_rtn:3655; GFX11:       ; %bb.0:3656; GFX11-NEXT:    global_atomic_inc_u32 v0, v0, v1, s[2:3] glc3657; GFX11-NEXT:    s_waitcnt vmcnt(0)3658; GFX11-NEXT:    ; return to shader part epilog3659;3660; GFX12-LABEL: global_inc_saddr_i32_rtn:3661; GFX12:       ; %bb.0:3662; GFX12-NEXT:    global_atomic_inc_u32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV3663; GFX12-NEXT:    s_wait_loadcnt 0x03664; GFX12-NEXT:    ; return to shader part epilog3665  %zext.offset = zext i32 %voffset to i643666  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3667  %rtn = atomicrmw uinc_wrap ptr addrspace(1) %gep0, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03668  %cast.rtn = bitcast i32 %rtn to float3669  ret float %cast.rtn3670}3671 3672define amdgpu_ps float @global_inc_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3673; GCN-LABEL: global_inc_saddr_i32_rtn_neg128:3674; GCN:       ; %bb.0:3675; GCN-NEXT:    global_atomic_inc v0, v0, v1, s[2:3] offset:-128 glc3676; GCN-NEXT:    s_waitcnt vmcnt(0)3677; GCN-NEXT:    ; return to shader part epilog3678;3679; GFX11-LABEL: global_inc_saddr_i32_rtn_neg128:3680; GFX11:       ; %bb.0:3681; GFX11-NEXT:    global_atomic_inc_u32 v0, v0, v1, s[2:3] offset:-128 glc3682; GFX11-NEXT:    s_waitcnt vmcnt(0)3683; GFX11-NEXT:    ; return to shader part epilog3684;3685; GFX12-LABEL: global_inc_saddr_i32_rtn_neg128:3686; GFX12:       ; %bb.0:3687; GFX12-NEXT:    global_atomic_inc_u32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV3688; GFX12-NEXT:    s_wait_loadcnt 0x03689; GFX12-NEXT:    ; return to shader part epilog3690  %zext.offset = zext i32 %voffset to i643691  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3692  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283693  %rtn = atomicrmw uinc_wrap ptr addrspace(1) %gep1, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03694  %cast.rtn = bitcast i32 %rtn to float3695  ret float %cast.rtn3696}3697 3698define amdgpu_ps void @global_inc_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3699; GCN-LABEL: global_inc_saddr_i32_nortn:3700; GCN:       ; %bb.0:3701; GCN-NEXT:    global_atomic_inc v0, v1, s[2:3]3702; GCN-NEXT:    s_endpgm3703;3704; GFX11-LABEL: global_inc_saddr_i32_nortn:3705; GFX11:       ; %bb.0:3706; GFX11-NEXT:    global_atomic_inc_u32 v0, v1, s[2:3]3707; GFX11-NEXT:    s_endpgm3708;3709; GFX12-LABEL: global_inc_saddr_i32_nortn:3710; GFX12:       ; %bb.0:3711; GFX12-NEXT:    global_atomic_inc_u32 v0, v1, s[2:3] scope:SCOPE_DEV3712; GFX12-NEXT:    s_endpgm3713  %zext.offset = zext i32 %voffset to i643714  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3715  %unused = atomicrmw uinc_wrap ptr addrspace(1) %gep0, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03716  ret void3717}3718 3719define amdgpu_ps void @global_inc_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3720; GCN-LABEL: global_inc_saddr_i32_nortn_neg128:3721; GCN:       ; %bb.0:3722; GCN-NEXT:    global_atomic_inc v0, v1, s[2:3] offset:-1283723; GCN-NEXT:    s_endpgm3724;3725; GFX11-LABEL: global_inc_saddr_i32_nortn_neg128:3726; GFX11:       ; %bb.0:3727; GFX11-NEXT:    global_atomic_inc_u32 v0, v1, s[2:3] offset:-1283728; GFX11-NEXT:    s_endpgm3729;3730; GFX12-LABEL: global_inc_saddr_i32_nortn_neg128:3731; GFX12:       ; %bb.0:3732; GFX12-NEXT:    global_atomic_inc_u32 v0, v1, s[2:3] offset:-128 scope:SCOPE_DEV3733; GFX12-NEXT:    s_endpgm3734  %zext.offset = zext i32 %voffset to i643735  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3736  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283737  %unused = atomicrmw uinc_wrap ptr addrspace(1) %gep1, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03738  ret void3739}3740 3741define amdgpu_ps <2 x float> @global_inc_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3742; GCN-LABEL: global_inc_saddr_i64_rtn:3743; GCN:       ; %bb.0:3744; GCN-NEXT:    global_atomic_inc_x2 v[0:1], v0, v[1:2], s[2:3] glc3745; GCN-NEXT:    s_waitcnt vmcnt(0)3746; GCN-NEXT:    ; return to shader part epilog3747;3748; GFX11-LABEL: global_inc_saddr_i64_rtn:3749; GFX11:       ; %bb.0:3750; GFX11-NEXT:    global_atomic_inc_u64 v[0:1], v0, v[1:2], s[2:3] glc3751; GFX11-NEXT:    s_waitcnt vmcnt(0)3752; GFX11-NEXT:    ; return to shader part epilog3753;3754; GFX12-LABEL: global_inc_saddr_i64_rtn:3755; GFX12:       ; %bb.0:3756; GFX12-NEXT:    global_atomic_inc_u64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV3757; GFX12-NEXT:    s_wait_loadcnt 0x03758; GFX12-NEXT:    ; return to shader part epilog3759  %zext.offset = zext i32 %voffset to i643760  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3761  %rtn = atomicrmw uinc_wrap ptr addrspace(1) %gep0, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03762  %cast.rtn = bitcast i64 %rtn to <2 x float>3763  ret <2 x float> %cast.rtn3764}3765 3766define amdgpu_ps <2 x float> @global_inc_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3767; GCN-LABEL: global_inc_saddr_i64_rtn_neg128:3768; GCN:       ; %bb.0:3769; GCN-NEXT:    global_atomic_inc_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc3770; GCN-NEXT:    s_waitcnt vmcnt(0)3771; GCN-NEXT:    ; return to shader part epilog3772;3773; GFX11-LABEL: global_inc_saddr_i64_rtn_neg128:3774; GFX11:       ; %bb.0:3775; GFX11-NEXT:    global_atomic_inc_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc3776; GFX11-NEXT:    s_waitcnt vmcnt(0)3777; GFX11-NEXT:    ; return to shader part epilog3778;3779; GFX12-LABEL: global_inc_saddr_i64_rtn_neg128:3780; GFX12:       ; %bb.0:3781; GFX12-NEXT:    global_atomic_inc_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV3782; GFX12-NEXT:    s_wait_loadcnt 0x03783; GFX12-NEXT:    ; return to shader part epilog3784  %zext.offset = zext i32 %voffset to i643785  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3786  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283787  %rtn = atomicrmw uinc_wrap ptr addrspace(1) %gep1, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03788  %cast.rtn = bitcast i64 %rtn to <2 x float>3789  ret <2 x float> %cast.rtn3790}3791 3792define amdgpu_ps void @global_inc_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3793; GCN-LABEL: global_inc_saddr_i64_nortn:3794; GCN:       ; %bb.0:3795; GCN-NEXT:    global_atomic_inc_x2 v0, v[1:2], s[2:3]3796; GCN-NEXT:    s_endpgm3797;3798; GFX11-LABEL: global_inc_saddr_i64_nortn:3799; GFX11:       ; %bb.0:3800; GFX11-NEXT:    global_atomic_inc_u64 v0, v[1:2], s[2:3]3801; GFX11-NEXT:    s_endpgm3802;3803; GFX12-LABEL: global_inc_saddr_i64_nortn:3804; GFX12:       ; %bb.0:3805; GFX12-NEXT:    global_atomic_inc_u64 v0, v[1:2], s[2:3] scope:SCOPE_DEV3806; GFX12-NEXT:    s_endpgm3807  %zext.offset = zext i32 %voffset to i643808  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3809  %unused = atomicrmw uinc_wrap ptr addrspace(1) %gep0, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03810  ret void3811}3812 3813define amdgpu_ps void @global_inc_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3814; GCN-LABEL: global_inc_saddr_i64_nortn_neg128:3815; GCN:       ; %bb.0:3816; GCN-NEXT:    global_atomic_inc_x2 v0, v[1:2], s[2:3] offset:-1283817; GCN-NEXT:    s_endpgm3818;3819; GFX11-LABEL: global_inc_saddr_i64_nortn_neg128:3820; GFX11:       ; %bb.0:3821; GFX11-NEXT:    global_atomic_inc_u64 v0, v[1:2], s[2:3] offset:-1283822; GFX11-NEXT:    s_endpgm3823;3824; GFX12-LABEL: global_inc_saddr_i64_nortn_neg128:3825; GFX12:       ; %bb.0:3826; GFX12-NEXT:    global_atomic_inc_u64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV3827; GFX12-NEXT:    s_endpgm3828  %zext.offset = zext i32 %voffset to i643829  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3830  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283831  %unused = atomicrmw uinc_wrap ptr addrspace(1) %gep1, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03832  ret void3833}3834 3835; --------------------------------------------------------------------------------3836; amdgcn atomic dec3837; --------------------------------------------------------------------------------3838 3839 3840define amdgpu_ps float @global_dec_saddr_i32_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3841; GCN-LABEL: global_dec_saddr_i32_rtn:3842; GCN:       ; %bb.0:3843; GCN-NEXT:    global_atomic_dec v0, v0, v1, s[2:3] glc3844; GCN-NEXT:    s_waitcnt vmcnt(0)3845; GCN-NEXT:    ; return to shader part epilog3846;3847; GFX11-LABEL: global_dec_saddr_i32_rtn:3848; GFX11:       ; %bb.0:3849; GFX11-NEXT:    global_atomic_dec_u32 v0, v0, v1, s[2:3] glc3850; GFX11-NEXT:    s_waitcnt vmcnt(0)3851; GFX11-NEXT:    ; return to shader part epilog3852;3853; GFX12-LABEL: global_dec_saddr_i32_rtn:3854; GFX12:       ; %bb.0:3855; GFX12-NEXT:    global_atomic_dec_u32 v0, v0, v1, s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV3856; GFX12-NEXT:    s_wait_loadcnt 0x03857; GFX12-NEXT:    ; return to shader part epilog3858  %zext.offset = zext i32 %voffset to i643859  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3860  %rtn = atomicrmw udec_wrap ptr addrspace(1) %gep0, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03861  %cast.rtn = bitcast i32 %rtn to float3862  ret float %cast.rtn3863}3864 3865define amdgpu_ps float @global_dec_saddr_i32_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3866; GCN-LABEL: global_dec_saddr_i32_rtn_neg128:3867; GCN:       ; %bb.0:3868; GCN-NEXT:    global_atomic_dec v0, v0, v1, s[2:3] offset:-128 glc3869; GCN-NEXT:    s_waitcnt vmcnt(0)3870; GCN-NEXT:    ; return to shader part epilog3871;3872; GFX11-LABEL: global_dec_saddr_i32_rtn_neg128:3873; GFX11:       ; %bb.0:3874; GFX11-NEXT:    global_atomic_dec_u32 v0, v0, v1, s[2:3] offset:-128 glc3875; GFX11-NEXT:    s_waitcnt vmcnt(0)3876; GFX11-NEXT:    ; return to shader part epilog3877;3878; GFX12-LABEL: global_dec_saddr_i32_rtn_neg128:3879; GFX12:       ; %bb.0:3880; GFX12-NEXT:    global_atomic_dec_u32 v0, v0, v1, s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV3881; GFX12-NEXT:    s_wait_loadcnt 0x03882; GFX12-NEXT:    ; return to shader part epilog3883  %zext.offset = zext i32 %voffset to i643884  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3885  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283886  %rtn = atomicrmw udec_wrap ptr addrspace(1) %gep1, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03887  %cast.rtn = bitcast i32 %rtn to float3888  ret float %cast.rtn3889}3890 3891define amdgpu_ps void @global_dec_saddr_i32_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3892; GCN-LABEL: global_dec_saddr_i32_nortn:3893; GCN:       ; %bb.0:3894; GCN-NEXT:    global_atomic_dec v0, v1, s[2:3]3895; GCN-NEXT:    s_endpgm3896;3897; GFX11-LABEL: global_dec_saddr_i32_nortn:3898; GFX11:       ; %bb.0:3899; GFX11-NEXT:    global_atomic_dec_u32 v0, v1, s[2:3]3900; GFX11-NEXT:    s_endpgm3901;3902; GFX12-LABEL: global_dec_saddr_i32_nortn:3903; GFX12:       ; %bb.0:3904; GFX12-NEXT:    global_atomic_dec_u32 v0, v1, s[2:3] scope:SCOPE_DEV3905; GFX12-NEXT:    s_endpgm3906  %zext.offset = zext i32 %voffset to i643907  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3908  %unused = atomicrmw udec_wrap ptr addrspace(1) %gep0, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03909  ret void3910}3911 3912define amdgpu_ps void @global_dec_saddr_i32_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {3913; GCN-LABEL: global_dec_saddr_i32_nortn_neg128:3914; GCN:       ; %bb.0:3915; GCN-NEXT:    global_atomic_dec v0, v1, s[2:3] offset:-1283916; GCN-NEXT:    s_endpgm3917;3918; GFX11-LABEL: global_dec_saddr_i32_nortn_neg128:3919; GFX11:       ; %bb.0:3920; GFX11-NEXT:    global_atomic_dec_u32 v0, v1, s[2:3] offset:-1283921; GFX11-NEXT:    s_endpgm3922;3923; GFX12-LABEL: global_dec_saddr_i32_nortn_neg128:3924; GFX12:       ; %bb.0:3925; GFX12-NEXT:    global_atomic_dec_u32 v0, v1, s[2:3] offset:-128 scope:SCOPE_DEV3926; GFX12-NEXT:    s_endpgm3927  %zext.offset = zext i32 %voffset to i643928  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3929  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283930  %unused = atomicrmw udec_wrap ptr addrspace(1) %gep1, i32 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03931  ret void3932}3933 3934define amdgpu_ps <2 x float> @global_dec_saddr_i64_rtn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3935; GCN-LABEL: global_dec_saddr_i64_rtn:3936; GCN:       ; %bb.0:3937; GCN-NEXT:    global_atomic_dec_x2 v[0:1], v0, v[1:2], s[2:3] glc3938; GCN-NEXT:    s_waitcnt vmcnt(0)3939; GCN-NEXT:    ; return to shader part epilog3940;3941; GFX11-LABEL: global_dec_saddr_i64_rtn:3942; GFX11:       ; %bb.0:3943; GFX11-NEXT:    global_atomic_dec_u64 v[0:1], v0, v[1:2], s[2:3] glc3944; GFX11-NEXT:    s_waitcnt vmcnt(0)3945; GFX11-NEXT:    ; return to shader part epilog3946;3947; GFX12-LABEL: global_dec_saddr_i64_rtn:3948; GFX12:       ; %bb.0:3949; GFX12-NEXT:    global_atomic_dec_u64 v[0:1], v0, v[1:2], s[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_DEV3950; GFX12-NEXT:    s_wait_loadcnt 0x03951; GFX12-NEXT:    ; return to shader part epilog3952  %zext.offset = zext i32 %voffset to i643953  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3954  %rtn = atomicrmw udec_wrap ptr addrspace(1) %gep0, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03955  %cast.rtn = bitcast i64 %rtn to <2 x float>3956  ret <2 x float> %cast.rtn3957}3958 3959define amdgpu_ps <2 x float> @global_dec_saddr_i64_rtn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3960; GCN-LABEL: global_dec_saddr_i64_rtn_neg128:3961; GCN:       ; %bb.0:3962; GCN-NEXT:    global_atomic_dec_x2 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc3963; GCN-NEXT:    s_waitcnt vmcnt(0)3964; GCN-NEXT:    ; return to shader part epilog3965;3966; GFX11-LABEL: global_dec_saddr_i64_rtn_neg128:3967; GFX11:       ; %bb.0:3968; GFX11-NEXT:    global_atomic_dec_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 glc3969; GFX11-NEXT:    s_waitcnt vmcnt(0)3970; GFX11-NEXT:    ; return to shader part epilog3971;3972; GFX12-LABEL: global_dec_saddr_i64_rtn_neg128:3973; GFX12:       ; %bb.0:3974; GFX12-NEXT:    global_atomic_dec_u64 v[0:1], v0, v[1:2], s[2:3] offset:-128 th:TH_ATOMIC_RETURN scope:SCOPE_DEV3975; GFX12-NEXT:    s_wait_loadcnt 0x03976; GFX12-NEXT:    ; return to shader part epilog3977  %zext.offset = zext i32 %voffset to i643978  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset3979  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1283980  %rtn = atomicrmw udec_wrap ptr addrspace(1) %gep1, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !03981  %cast.rtn = bitcast i64 %rtn to <2 x float>3982  ret <2 x float> %cast.rtn3983}3984 3985define amdgpu_ps void @global_dec_saddr_i64_nortn(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {3986; GCN-LABEL: global_dec_saddr_i64_nortn:3987; GCN:       ; %bb.0:3988; GCN-NEXT:    global_atomic_dec_x2 v0, v[1:2], s[2:3]3989; GCN-NEXT:    s_endpgm3990;3991; GFX11-LABEL: global_dec_saddr_i64_nortn:3992; GFX11:       ; %bb.0:3993; GFX11-NEXT:    global_atomic_dec_u64 v0, v[1:2], s[2:3]3994; GFX11-NEXT:    s_endpgm3995;3996; GFX12-LABEL: global_dec_saddr_i64_nortn:3997; GFX12:       ; %bb.0:3998; GFX12-NEXT:    global_atomic_dec_u64 v0, v[1:2], s[2:3] scope:SCOPE_DEV3999; GFX12-NEXT:    s_endpgm4000  %zext.offset = zext i32 %voffset to i644001  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset4002  %unused = atomicrmw udec_wrap ptr addrspace(1) %gep0, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !04003  ret void4004}4005 4006define amdgpu_ps void @global_dec_saddr_i64_nortn_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {4007; GCN-LABEL: global_dec_saddr_i64_nortn_neg128:4008; GCN:       ; %bb.0:4009; GCN-NEXT:    global_atomic_dec_x2 v0, v[1:2], s[2:3] offset:-1284010; GCN-NEXT:    s_endpgm4011;4012; GFX11-LABEL: global_dec_saddr_i64_nortn_neg128:4013; GFX11:       ; %bb.0:4014; GFX11-NEXT:    global_atomic_dec_u64 v0, v[1:2], s[2:3] offset:-1284015; GFX11-NEXT:    s_endpgm4016;4017; GFX12-LABEL: global_dec_saddr_i64_nortn_neg128:4018; GFX12:       ; %bb.0:4019; GFX12-NEXT:    global_atomic_dec_u64 v0, v[1:2], s[2:3] offset:-128 scope:SCOPE_DEV4020; GFX12-NEXT:    s_endpgm4021  %zext.offset = zext i32 %voffset to i644022  %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset4023  %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -1284024  %unused = atomicrmw udec_wrap ptr addrspace(1) %gep1, i64 %data syncscope("agent") monotonic, !amdgpu.no.fine.grained.memory !04025  ret void4026}4027 4028attributes #0 = { argmemonly nounwind willreturn }4029 4030!0 = !{}4031